Skip to content

Commit 1366811

Browse files
committed
fix(resolver): support node prefix from ESM
1 parent 90d6908 commit 1366811

File tree

6 files changed

+18
-6
lines changed

6 files changed

+18
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
### Fixes
88

9+
- `[jest-resolver]` Support `node:` prefix when importing Node core modules with ESM ([#11817](https://github.com/facebook/jest/pull/11817))
910
- `[jest-types]` Export the `PrettyFormatOptions` interface ([#11801](https://github.com/facebook/jest/pull/11801))
1011

1112
### Chore & Maintenance

e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ FAIL __tests__/index.js
4141
12 | module.exports = () => 'test';
4242
13 |
4343
44-
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:561:17)
44+
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:566:17)
4545
at Object.require (index.js:10:1)
4646
`;
4747

@@ -70,6 +70,6 @@ FAIL __tests__/index.js
7070
12 | module.exports = () => 'test';
7171
13 |
7272
73-
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:561:17)
73+
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:566:17)
7474
at Object.require (index.js:10:1)
7575
`;

e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Ran all test suites matching /native-esm.tla.test.js/i.
1010
1111
exports[`on node ^12.16.0 || >=13.7.0 runs test with native ESM 1`] = `
1212
Test Suites: 1 passed, 1 total
13-
Tests: 20 passed, 20 total
13+
Tests: 21 passed, 21 total
1414
Snapshots: 0 total
1515
Time: <<REPLACED>>
1616
Ran all test suites matching /native-esm.test.js/i.

e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ FAIL __tests__/test.js
3737
| ^
3838
9 |
3939
40-
at Resolver.resolveModule (../../packages/jest-resolve/build/resolver.js:313:11)
40+
at Resolver.resolveModule (../../packages/jest-resolve/build/resolver.js:318:11)
4141
at Object.require (index.js:8:18)
4242
`;

e2e/native-esm/__tests__/native-esm.test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8+
import dns from 'dns';
89
// the point here is that it's the node core module
910
// eslint-disable-next-line no-restricted-imports
1011
import {readFileSync} from 'fs';
1112
import {createRequire} from 'module';
1213
import {dirname, resolve} from 'path';
1314
import {fileURLToPath} from 'url';
15+
import prefixDns from 'node:dns';
1416
import {jest as jestObject} from '@jest/globals';
1517
import staticImportedStatefulFromCjs from '../fromCjs.mjs';
1618
import {double} from '../index';
@@ -188,3 +190,7 @@ test('can mock module', async () => {
188190
expect(Object.keys(importedMock)).toEqual(['foo']);
189191
expect(importedMock.foo).toEqual('bar');
190192
});
193+
194+
test('supports imports using "node:" prefix', () => {
195+
expect(dns).toBe(prefixDns);
196+
});

packages/jest-resolve/src/resolver.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,12 @@ export default class Resolver {
176176
const skipResolution =
177177
options && options.skipNodeResolution && !moduleName.includes(path.sep);
178178

179-
const resolveNodeModule = (name: Config.Path, throwIfNotFound = false) =>
180-
Resolver.findNodeModule(name, {
179+
const resolveNodeModule = (name: Config.Path, throwIfNotFound = false) => {
180+
if (this.isCoreModule(name)) {
181+
return name;
182+
}
183+
184+
return Resolver.findNodeModule(name, {
181185
basedir: dirname,
182186
extensions,
183187
moduleDirectory,
@@ -186,6 +190,7 @@ export default class Resolver {
186190
rootDir: this._options.rootDir,
187191
throwIfNotFound,
188192
});
193+
};
189194

190195
if (!skipResolution) {
191196
module = resolveNodeModule(moduleName, Boolean(process.versions.pnp));

0 commit comments

Comments
 (0)