Skip to content

Commit 361d97c

Browse files
authored
feat: ESM emulation over Babel (#20)
1 parent d3fc458 commit 361d97c

File tree

7 files changed

+31
-49
lines changed

7 files changed

+31
-49
lines changed

__fixtures__/simple-project/.esbuild-jestrc.js

-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ module.exports = {
44
"sourcemap": true,
55
"platform": "node",
66
"outdir": "../simple-project-bundled",
7-
"outExtension": {
8-
".js": ".mjs"
9-
},
107
"external": ["chalk", "dtrace-provider", "@linked-dependencies/external"],
118
},
129
"useTransformer": ({ build, transformer }) => {

__fixtures__/simple-project/verify.js

+16-16
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ function main() {
1616
function verifyDirectoryStructure() {
1717
assertExists('package.json');
1818
assertExists('jest.config.json');
19-
assertExists('globalSetup.mjs');
20-
assertExists('globalTeardown.mjs');
21-
assertExists('customReporter.mjs');
22-
assertExists('src/entry1.test.mjs');
23-
assertExists('src/entry2.test.mjs');
24-
assertExists('_.._/linked-dependencies/bundled/reporters/default.mjs');
25-
assertExists('bundled_externals/jest-environment-emit/node.mjs');
26-
assertExists('bundled_externals/lodash/noop.mjs');
19+
assertExists('globalSetup.js');
20+
assertExists('globalTeardown.js');
21+
assertExists('customReporter.js');
22+
assertExists('src/entry1.test.js');
23+
assertExists('src/entry2.test.js');
24+
assertExists('_.._/linked-dependencies/bundled/reporters/default.js');
25+
assertExists('bundled_externals/jest-environment-emit/node.js');
26+
assertExists('bundled_externals/lodash/noop.js');
2727
assertDoesNotExist('node_modules');
2828
assertDoesNotExist('_.._/linked-dependencies/external');
2929
}
@@ -32,20 +32,20 @@ function verifyJestConfig() {
3232
const { coverageDirectory, globalSetup, reporters, setupFilesAfterEnv, testEnvironment, testMatch, testRunner, globalTeardown } = parseJSON('jest.config.json');
3333

3434
assertEqual(coverageDirectory, '<rootDir>/coverage', 'coverageDirectory');
35-
assertEqual(globalSetup, '<rootDir>/globalSetup.mjs', 'globalSetup');
35+
assertEqual(globalSetup, '<rootDir>/globalSetup.js', 'globalSetup');
3636
assertEqual(reporters.length, 4, 'reporters length');
3737
assertEqual(reporters[0][0], 'default', 'reporters[0]');
38-
assertEqual(reporters[1][0], '<rootDir>/_.._/linked-dependencies/bundled/reporters/default.mjs', 'reporters[1]');
38+
assertEqual(reporters[1][0], '<rootDir>/_.._/linked-dependencies/bundled/reporters/default.js', 'reporters[1]');
3939
assertEqual(reporters[2][0], '@linked-dependencies/external/reporter', 'reporters[2]');
40-
assertEqual(reporters[3][0], '<rootDir>/customReporter.mjs', 'reporters[3]');
40+
assertEqual(reporters[3][0], '<rootDir>/customReporter.js', 'reporters[3]');
4141
assertEqual(setupFilesAfterEnv.length, 1, 'setupFilesAfterEnv.length');
42-
assertEqual(setupFilesAfterEnv[0], '<rootDir>/bundled_externals/lodash/noop.mjs', 'setupFilesAfterEnv[0]');
43-
assertEqual(testEnvironment, '<rootDir>/bundled_externals/jest-environment-emit/node.mjs', 'testEnvironment');
42+
assertEqual(setupFilesAfterEnv[0], '<rootDir>/bundled_externals/lodash/noop.js', 'setupFilesAfterEnv[0]');
43+
assertEqual(testEnvironment, '<rootDir>/bundled_externals/jest-environment-emit/node.js', 'testEnvironment');
4444
assertEqual(testMatch.length, 2, 'testMatch.length');
45-
assertEqual(testMatch[0], '<rootDir>/src/entry1.test.mjs', 'testMatch[0]');
46-
assertEqual(testMatch[1], '<rootDir>/src/entry2.test.mjs', 'testMatch[1]');
45+
assertEqual(testMatch[0], '<rootDir>/src/entry1.test.js', 'testMatch[0]');
46+
assertEqual(testMatch[1], '<rootDir>/src/entry2.test.js', 'testMatch[1]');
4747
assertEqual(testRunner, 'jest-circus/runner', 'testRunner');
48-
assertEqual(globalTeardown, '<rootDir>/globalTeardown.mjs', 'globalTeardown');
48+
assertEqual(globalTeardown, '<rootDir>/globalTeardown.js', 'globalTeardown');
4949
}
5050

5151
function assertExists(fileName) {

index.mjs

-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import merge from 'lodash.merge';
22
import { build as esbuild } from 'esbuild';
33

44
import esbuildJest from './plugin.mjs';
5-
import {ESM_REQUIRE_SHIM} from "./utils/esm-require-shim.mjs";
65
import {isBuiltinReporter} from "./utils/is-builtin-reporter.mjs";
76
import {JEST_DEPENDENCIES} from "./utils/jest-dependencies.mjs";
87
import {logger, optimizedLogger, optimizeTracing} from "./utils/logger.mjs";
@@ -89,10 +88,6 @@ export async function build(esbuildJestConfig = {}) {
8988
metafile: true,
9089
external: externalModules,
9190
outbase: rootDir,
92-
banner: {
93-
js: ESM_REQUIRE_SHIM,
94-
},
95-
9691
format: 'esm',
9792

9893
entryPoints,

package.json

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
"main": "index.mjs",
77
"types": "index.d.mts",
88
"bin": {
9-
"esbuild-jest": "build.mjs",
10-
"esbuild-jest-patch": "utils/patch-jest.mjs"
9+
"esbuild-jest": "build.mjs"
1110
},
1211
"exports": {
1312
".": "./index.mjs",
@@ -38,16 +37,16 @@
3837
"bunyan-debug-stream": "^3.1.0",
3938
"cosmiconfig": "^8.1.3",
4039
"find-up": "^7.0.0",
41-
"lodash.merge": "^4.6.2",
4240
"import-from": "^4.0.0",
41+
"lodash.merge": "^4.6.2",
4342
"resolve-from": "^5.0.0"
4443
},
4544
"peerDependencies": {
4645
"esbuild": ">=0.17.4"
4746
},
4847
"devDependencies": {
49-
"@jest/types": "^29.6.3",
5048
"@jest/transform": "^29.6.3",
51-
"esbuild": "^0.19.8"
49+
"@jest/types": "^29.6.3",
50+
"esbuild": "^0.21.4"
5251
}
5352
}

plugin.mjs

+11-3
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ export default ({
135135
testEnvironment: mapFile(projectConfig.testEnvironment),
136136
testMatch: tests.map(mapFile),
137137
testRunner: mapFile(projectConfig.testRunner),
138-
transform: {},
138+
transform: undefined,
139+
transformIgnorePatterns: undefined,
139140
};
140141

141142
__JEST_CONFIG(logger, flattenedConfig);
@@ -157,18 +158,25 @@ export default ({
157158
const packageJson = packageMiddleware({
158159
name: 'bundled-tests',
159160
version: '0.0.0',
160-
type: 'module',
161161
private: true,
162162
scripts: {
163-
test: 'NODE_NO_WARNINGS=1 NODE_OPTIONS="--experimental-vm-modules" jest',
163+
test: "NODE_OPTIONS='-r @babel/register' jest"
164164
},
165165
dependencies: {
166+
"@babel/core": "^7.24.6",
167+
"@babel/plugin-transform-modules-commonjs": "^7.24.6",
168+
"@babel/register": "^7.24.6",
169+
166170
...externalDependencies,
167171
},
168172
});
169173

170174
__PACKAGE_JSON(logger, packageJson);
171175
await writeFile(join(outdir, 'package.json'), JSON.stringify(packageJson, null, 2));
176+
await writeFile(join(outdir, '.babelrc'), JSON.stringify({
177+
"compact": false,
178+
"plugins": ["@babel/plugin-transform-modules-commonjs"]
179+
}, null, 2));
172180
});
173181
},
174182
};

utils/esm-require-shim.mjs

-11
This file was deleted.

utils/patch-jest.mjs

-6
This file was deleted.

0 commit comments

Comments
 (0)