Skip to content

Commit edc3272

Browse files
authored
fix: resolve builtin modules correctly (#15683)
1 parent 42c8e7d commit edc3272

File tree

8 files changed

+72
-13
lines changed

8 files changed

+72
-13
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
- `[jest-resolver]` Implement the `defaultAsyncResolver` ([#15679](https://github.com/jestjs/jest/pull/15679))
66

7+
### Fixes
8+
9+
- `[jest-resolver]` Resolve builtin modules correctly ([#15683](https://github.com/jestjs/jest/pull/15683))
10+
711
### Chore & Maintenance
812

913
- `[*]` Remove and deprecate `jest-repl` package ([#15673](https://github.com/jestjs/jest/pull/15673))

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 @@ exports[`moduleNameMapper wrong array configuration 1`] = `
4141
12 | module.exports = () => 'test';
4242
13 |
4343
44-
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/index.js:1129:17)
44+
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/index.js:1142:17)
4545
at Object.require (index.js:10:1)
4646
at Object.require (__tests__/index.js:10:20)"
4747
`;
@@ -71,7 +71,7 @@ exports[`moduleNameMapper wrong configuration 1`] = `
7171
12 | module.exports = () => 'test';
7272
13 |
7373
74-
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/index.js:1129:17)
74+
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/index.js:1142:17)
7575
at Object.require (index.js:10:1)
7676
at Object.require (__tests__/index.js:10:20)"
7777
`;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ exports[`shows a proper error from deep requires 1`] = `
2626
12 | test('dummy', () => {
2727
13 | expect(1).toBe(1);
2828
29-
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/index.js:875:11)
29+
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/index.js:888:11)
3030
at Object.<anonymous> (node_modules/discord.js/src/index.js:21:12)
3131
at Object.require (__tests__/test.js:10:1)"
3232
`;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ exports[`show error message with matching files 1`] = `
3737
| ^
3838
9 |
3939
40-
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/index.js:875:11)
40+
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/index.js:888:11)
4141
at Object.require (index.js:8:18)
4242
at Object.require (__tests__/test.js:8:11)"
4343
`;

packages/jest-resolve/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
"unrs-resolver": "^1.7.11"
3030
},
3131
"devDependencies": {
32-
"@types/graceful-fs": "^4.1.9"
32+
"@types/graceful-fs": "^4.1.9",
33+
"url": "^0.11.4"
3334
},
3435
"engines": {
3536
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"

packages/jest-resolve/src/__tests__/resolve.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,24 @@ describe('isCoreModule', () => {
8484
});
8585

8686
describe('findNodeModule', () => {
87+
it('should resolve builtin modules as-is', () => {
88+
expect(
89+
Resolver.findNodeModule('url', {
90+
basedir: __dirname,
91+
}),
92+
).toBe('url');
93+
expect(
94+
Resolver.findNodeModule('node:url', {
95+
basedir: __dirname,
96+
}),
97+
).toBe('node:url');
98+
expect(
99+
Resolver.findNodeModule('url/', {
100+
basedir: __dirname,
101+
}),
102+
).toBe(path.resolve('node_modules/url/url.js'));
103+
});
104+
87105
it('is possible to override the default resolver', () => {
88106
const cwd = process.cwd();
89107
const resolvedCwd = fs.realpathSync(cwd) || cwd;

packages/jest-resolve/src/defaultResolver.ts

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

8+
import {isBuiltin} from 'module';
89
import {fileURLToPath} from 'url';
910
import pnpResolver from 'jest-pnp-resolver';
1011
import {
@@ -73,6 +74,12 @@ function baseResolver(
7374
options: ResolverOptions,
7475
async?: true,
7576
): string | Promise<string> {
77+
// https://github.com/oxc-project/oxc-resolver/issues/565
78+
// https://github.com/jestjs/jest/issues/15676
79+
if (isBuiltin(path)) {
80+
return path;
81+
}
82+
7683
if (process.versions.pnp && options.allowPnp !== false) {
7784
return pnpResolver(path, options);
7885
}
@@ -111,13 +118,12 @@ function baseResolver(
111118
unrsResolver = unrsResolver.cloneWithOptions(resolveOptions);
112119
} else {
113120
unrsResolver = new ResolverFactory(resolveOptions);
114-
setResolver(unrsResolver);
115121
}
116122

123+
setResolver(unrsResolver);
124+
117125
const finalResolver = (
118-
resolve: (
119-
resolver: ResolverFactory,
120-
) => ResolveResult | Promise<ResolveResult>,
126+
resolve: () => ResolveResult | Promise<ResolveResult>,
121127
) => {
122128
const resolveWithPathsFallback = (result: ResolveResult) => {
123129
if (!result.path && paths?.length) {
@@ -131,12 +137,13 @@ function baseResolver(
131137
...resolveOptions,
132138
modules: paths,
133139
});
134-
return resolve(unrsResolver);
140+
setResolver(unrsResolver);
141+
return resolve();
135142
}
136143
}
137144
return result;
138145
};
139-
const result = resolve(unrsResolver!);
146+
const result = resolve();
140147
if ('then' in result) {
141148
return result.then(resolveWithPathsFallback).then(handleResolveResult);
142149
}
@@ -145,8 +152,10 @@ function baseResolver(
145152
);
146153
};
147154

148-
return finalResolver((resolver: ResolverFactory) =>
149-
async ? resolver.async(basedir, path) : resolver.sync(basedir, path),
155+
return finalResolver(() =>
156+
async
157+
? unrsResolver!.async(basedir, path)
158+
: unrsResolver!.sync(basedir, path),
150159
);
151160
}
152161

yarn.lock

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13797,6 +13797,7 @@ __metadata:
1379713797
jest-validate: "workspace:*"
1379813798
slash: "npm:^3.0.0"
1379913799
unrs-resolver: "npm:^1.7.11"
13800+
url: "npm:^0.11.4"
1380013801
languageName: unknown
1380113802
linkType: soft
1380213803

@@ -18400,6 +18401,13 @@ __metadata:
1840018401
languageName: node
1840118402
linkType: hard
1840218403

18404+
"punycode@npm:^1.4.1":
18405+
version: 1.4.1
18406+
resolution: "punycode@npm:1.4.1"
18407+
checksum: 10/af2700dde1a116791ff8301348ff344c47d6c224e875057237d1b5112035655fb07a6175cfdb8bf0e3a8cdfd2dc82b3a622e0aefd605566c0e949a6d0d1256a4
18408+
languageName: node
18409+
linkType: hard
18410+
1840318411
"punycode@npm:^2.1.0, punycode@npm:^2.3.1":
1840418412
version: 2.3.1
1840518413
resolution: "punycode@npm:2.3.1"
@@ -18432,6 +18440,15 @@ __metadata:
1843218440
languageName: node
1843318441
linkType: hard
1843418442

18443+
"qs@npm:^6.12.3":
18444+
version: 6.14.0
18445+
resolution: "qs@npm:6.14.0"
18446+
dependencies:
18447+
side-channel: "npm:^1.1.0"
18448+
checksum: 10/a60e49bbd51c935a8a4759e7505677b122e23bf392d6535b8fc31c1e447acba2c901235ecb192764013cd2781723dc1f61978b5fdd93cc31d7043d31cdc01974
18449+
languageName: node
18450+
linkType: hard
18451+
1843518452
"queue-microtask@npm:^1.2.2":
1843618453
version: 1.2.3
1843718454
resolution: "queue-microtask@npm:1.2.3"
@@ -21567,6 +21584,16 @@ __metadata:
2156721584
languageName: node
2156821585
linkType: hard
2156921586

21587+
"url@npm:^0.11.4":
21588+
version: 0.11.4
21589+
resolution: "url@npm:0.11.4"
21590+
dependencies:
21591+
punycode: "npm:^1.4.1"
21592+
qs: "npm:^6.12.3"
21593+
checksum: 10/e787d070f0756518b982a4653ef6cdf4d9030d8691eee2d483344faf2b530b71d302287fa63b292299455fea5075c502a5ad5f920cb790e95605847f957a65e4
21594+
languageName: node
21595+
linkType: hard
21596+
2157021597
"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1":
2157121598
version: 1.0.2
2157221599
resolution: "util-deprecate@npm:1.0.2"

0 commit comments

Comments
 (0)