Socket
Socket
Sign inDemoInstall

@swc/jest

Package Overview
Dependencies
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@swc/jest - npm Package Compare versions

Comparing version 0.2.3 to 0.2.4

70

index.js

@@ -34,20 +34,41 @@ "use strict";

var path = __importStar(require("path"));
var vm = __importStar(require("vm"));
var core_1 = require("@swc/core");
var transformOpts;
function getJestTransformConfig(jestConfig) {
var packagePath = path.join(process.cwd(), 'package.json');
var packageConfig = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
var isEsmProject = packageConfig.type === 'module';
// Jest use the `vm` [Module API](https://nodejs.org/api/vm.html#vm_class_vm_module) for ESM.
// see https://github.com/facebook/jest/issues/9430
var isSupportEsm = 'Module' in vm;
var swcTransformOpts;
function buildSwcTransformOpts(jestOptions) {
var swcOptions = getSwcTransformConfig(jestOptions);
if (!swcOptions) {
var swcrc = path.join(process.cwd(), '.swcrc');
swcOptions = fs.existsSync(swcrc) ? JSON.parse(fs.readFileSync(swcrc, 'utf-8')) : {};
}
if (!isSupportEsm) {
set(swcOptions, 'module.type', 'commonjs');
}
set(swcOptions, 'jsc.transform.hidden.jest', true);
return swcOptions;
}
function getSwcTransformConfig(jestConfig) {
var _a;
if ("transformerConfig" in jestConfig) {
return ((_a = getJestConfig(jestConfig).transform.find(function (_a) {
var transformerPath = _a[1];
return transformerPath === __filename;
})) === null || _a === void 0 ? void 0 : _a[2]);
}
function getJestConfig(jestConfig) {
return 'config' in jestConfig
// jest 27
return jestConfig.transformerConfig;
}
if ("transform" in jestConfig) {
? jestConfig.config
// jest 26
return ((_a = jestConfig.transform.find(function (_a) {
var transformerPath = _a[1];
return transformerPath === __filename;
})) === null || _a === void 0 ? void 0 : _a[2]);
}
: jestConfig;
}
function isEmptyTransformOptions(options) {
return !(options && Object.keys(options).length);
function isEsm(filename, jestOptions) {
var _a;
return (/\.jsx?$/.test(filename) && isEsmProject) ||
((_a = getJestConfig(jestOptions).extensionsToTreatAsEsm) === null || _a === void 0 ? void 0 : _a.find(function (ext) { return filename.endsWith(ext); }));
}

@@ -67,17 +88,14 @@ function set(obj, path, value) {

module.exports = {
process: function (src, filename, jestConfig) {
if (/\.(t|j)sx?$/.test(filename)) {
if (isEmptyTransformOptions(transformOpts)) {
var swcOptions = getJestTransformConfig(jestConfig);
if (!swcOptions) {
var swcrc = path.join(process.cwd(), '.swcrc');
swcOptions = fs.existsSync(swcrc) ? JSON.parse(fs.readFileSync(swcrc, 'utf-8')) : {};
}
set(swcOptions, 'jsc.transform.hidden.jest', true);
transformOpts = swcOptions;
}
return core_1.transformSync(src, __assign(__assign({}, transformOpts), { filename: filename }));
process: function (src, filename, jestOptions) {
if (!/\.[jt]sx?$/.test(filename)) {
return src;
}
return src;
if (!swcTransformOpts) {
swcTransformOpts = buildSwcTransformOpts(jestOptions);
}
if (isSupportEsm) {
set(swcTransformOpts, 'module.type', isEsm(filename, jestOptions) ? 'es6' : 'commonjs');
}
return core_1.transformSync(src, __assign(__assign({}, swcTransformOpts), { filename: filename }));
},
};
{
"name": "@swc/jest",
"version": "0.2.3",
"version": "0.2.4",
"description": "swc integration for jest",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -11,3 +11,3 @@ # @swc/jest

# if you use yarn
yarn add jest @swc/core @swc/jest
yarn add -D jest @swc/core @swc/jest
```

@@ -19,3 +19,3 @@

```
```js
module.exports = {

@@ -30,6 +30,10 @@ transform: {

```
```js
const fs = require('fs')
const config = JSON.parse(fs.readFileSync(`${__dirname}/.swcrc`, 'utf-8'))
module.exports = {
transform: {
'^.+\\.(t|j)sx?$': ['@swc/jest', {/* you swc configuration */}],
'^.+\\.(t|j)sx?$': ['@swc/jest', { ...config, /* custom configuration in jest */ }],
},

@@ -39,2 +43,35 @@ }

## Q & A
**Q: Jest use CommonJS in default. But I want to use ESM.**
A: Setup Jest following this [Guide](https://jestjs.io/docs/ecmascript-modules).
For JavaScript, it need to configure `package.json`:
```json
{
// ...
"type": "module"
}
```
For TypeScript, it need some configuration in `jest.config.js`:
```js
module.exports = {
// ...
extensionsToTreatAsEsm: ['.ts', '.tsx'],
}
```
Run test with `--experimental-vm-modules`:
```sh
cross-env NODE_OPTIONS=--experimental-vm-modules jest
# or
node --experimental-vm-modules ./node_modules/jest/bin/jest.js
```
## License

@@ -41,0 +78,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc