mirror of https://github.com/facebook/jest.git
fix: resolve builtin modules correctly (#15683)
This commit is contained in:
parent
42c8e7de64
commit
edc3272abc
|
@ -4,6 +4,10 @@
|
|||
|
||||
- `[jest-resolver]` Implement the `defaultAsyncResolver` ([#15679](https://github.com/jestjs/jest/pull/15679))
|
||||
|
||||
### Fixes
|
||||
|
||||
- `[jest-resolver]` Resolve builtin modules correctly ([#15683](https://github.com/jestjs/jest/pull/15683))
|
||||
|
||||
### Chore & Maintenance
|
||||
|
||||
- `[*]` Remove and deprecate `jest-repl` package ([#15673](https://github.com/jestjs/jest/pull/15673))
|
||||
|
|
|
@ -41,7 +41,7 @@ exports[`moduleNameMapper wrong array configuration 1`] = `
|
|||
12 | module.exports = () => 'test';
|
||||
13 |
|
||||
|
||||
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/index.js:1129:17)
|
||||
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/index.js:1142:17)
|
||||
at Object.require (index.js:10:1)
|
||||
at Object.require (__tests__/index.js:10:20)"
|
||||
`;
|
||||
|
@ -71,7 +71,7 @@ exports[`moduleNameMapper wrong configuration 1`] = `
|
|||
12 | module.exports = () => 'test';
|
||||
13 |
|
||||
|
||||
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/index.js:1129:17)
|
||||
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/index.js:1142:17)
|
||||
at Object.require (index.js:10:1)
|
||||
at Object.require (__tests__/index.js:10:20)"
|
||||
`;
|
||||
|
|
|
@ -26,7 +26,7 @@ exports[`shows a proper error from deep requires 1`] = `
|
|||
12 | test('dummy', () => {
|
||||
13 | expect(1).toBe(1);
|
||||
|
||||
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/index.js:875:11)
|
||||
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/index.js:888:11)
|
||||
at Object.<anonymous> (node_modules/discord.js/src/index.js:21:12)
|
||||
at Object.require (__tests__/test.js:10:1)"
|
||||
`;
|
||||
|
|
|
@ -37,7 +37,7 @@ exports[`show error message with matching files 1`] = `
|
|||
| ^
|
||||
9 |
|
||||
|
||||
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/index.js:875:11)
|
||||
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/index.js:888:11)
|
||||
at Object.require (index.js:8:18)
|
||||
at Object.require (__tests__/test.js:8:11)"
|
||||
`;
|
||||
|
|
|
@ -29,7 +29,8 @@
|
|||
"unrs-resolver": "^1.7.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/graceful-fs": "^4.1.9"
|
||||
"@types/graceful-fs": "^4.1.9",
|
||||
"url": "^0.11.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
|
||||
|
|
|
@ -84,6 +84,24 @@ describe('isCoreModule', () => {
|
|||
});
|
||||
|
||||
describe('findNodeModule', () => {
|
||||
it('should resolve builtin modules as-is', () => {
|
||||
expect(
|
||||
Resolver.findNodeModule('url', {
|
||||
basedir: __dirname,
|
||||
}),
|
||||
).toBe('url');
|
||||
expect(
|
||||
Resolver.findNodeModule('node:url', {
|
||||
basedir: __dirname,
|
||||
}),
|
||||
).toBe('node:url');
|
||||
expect(
|
||||
Resolver.findNodeModule('url/', {
|
||||
basedir: __dirname,
|
||||
}),
|
||||
).toBe(path.resolve('node_modules/url/url.js'));
|
||||
});
|
||||
|
||||
it('is possible to override the default resolver', () => {
|
||||
const cwd = process.cwd();
|
||||
const resolvedCwd = fs.realpathSync(cwd) || cwd;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import {isBuiltin} from 'module';
|
||||
import {fileURLToPath} from 'url';
|
||||
import pnpResolver from 'jest-pnp-resolver';
|
||||
import {
|
||||
|
@ -73,6 +74,12 @@ function baseResolver(
|
|||
options: ResolverOptions,
|
||||
async?: true,
|
||||
): string | Promise<string> {
|
||||
// https://github.com/oxc-project/oxc-resolver/issues/565
|
||||
// https://github.com/jestjs/jest/issues/15676
|
||||
if (isBuiltin(path)) {
|
||||
return path;
|
||||
}
|
||||
|
||||
if (process.versions.pnp && options.allowPnp !== false) {
|
||||
return pnpResolver(path, options);
|
||||
}
|
||||
|
@ -111,13 +118,12 @@ function baseResolver(
|
|||
unrsResolver = unrsResolver.cloneWithOptions(resolveOptions);
|
||||
} else {
|
||||
unrsResolver = new ResolverFactory(resolveOptions);
|
||||
setResolver(unrsResolver);
|
||||
}
|
||||
|
||||
setResolver(unrsResolver);
|
||||
|
||||
const finalResolver = (
|
||||
resolve: (
|
||||
resolver: ResolverFactory,
|
||||
) => ResolveResult | Promise<ResolveResult>,
|
||||
resolve: () => ResolveResult | Promise<ResolveResult>,
|
||||
) => {
|
||||
const resolveWithPathsFallback = (result: ResolveResult) => {
|
||||
if (!result.path && paths?.length) {
|
||||
|
@ -131,12 +137,13 @@ function baseResolver(
|
|||
...resolveOptions,
|
||||
modules: paths,
|
||||
});
|
||||
return resolve(unrsResolver);
|
||||
setResolver(unrsResolver);
|
||||
return resolve();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
const result = resolve(unrsResolver!);
|
||||
const result = resolve();
|
||||
if ('then' in result) {
|
||||
return result.then(resolveWithPathsFallback).then(handleResolveResult);
|
||||
}
|
||||
|
@ -145,8 +152,10 @@ function baseResolver(
|
|||
);
|
||||
};
|
||||
|
||||
return finalResolver((resolver: ResolverFactory) =>
|
||||
async ? resolver.async(basedir, path) : resolver.sync(basedir, path),
|
||||
return finalResolver(() =>
|
||||
async
|
||||
? unrsResolver!.async(basedir, path)
|
||||
: unrsResolver!.sync(basedir, path),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
27
yarn.lock
27
yarn.lock
|
@ -13797,6 +13797,7 @@ __metadata:
|
|||
jest-validate: "workspace:*"
|
||||
slash: "npm:^3.0.0"
|
||||
unrs-resolver: "npm:^1.7.11"
|
||||
url: "npm:^0.11.4"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
|
@ -18400,6 +18401,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"punycode@npm:^1.4.1":
|
||||
version: 1.4.1
|
||||
resolution: "punycode@npm:1.4.1"
|
||||
checksum: 10/af2700dde1a116791ff8301348ff344c47d6c224e875057237d1b5112035655fb07a6175cfdb8bf0e3a8cdfd2dc82b3a622e0aefd605566c0e949a6d0d1256a4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"punycode@npm:^2.1.0, punycode@npm:^2.3.1":
|
||||
version: 2.3.1
|
||||
resolution: "punycode@npm:2.3.1"
|
||||
|
@ -18432,6 +18440,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"qs@npm:^6.12.3":
|
||||
version: 6.14.0
|
||||
resolution: "qs@npm:6.14.0"
|
||||
dependencies:
|
||||
side-channel: "npm:^1.1.0"
|
||||
checksum: 10/a60e49bbd51c935a8a4759e7505677b122e23bf392d6535b8fc31c1e447acba2c901235ecb192764013cd2781723dc1f61978b5fdd93cc31d7043d31cdc01974
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"queue-microtask@npm:^1.2.2":
|
||||
version: 1.2.3
|
||||
resolution: "queue-microtask@npm:1.2.3"
|
||||
|
@ -21567,6 +21584,16 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"url@npm:^0.11.4":
|
||||
version: 0.11.4
|
||||
resolution: "url@npm:0.11.4"
|
||||
dependencies:
|
||||
punycode: "npm:^1.4.1"
|
||||
qs: "npm:^6.12.3"
|
||||
checksum: 10/e787d070f0756518b982a4653ef6cdf4d9030d8691eee2d483344faf2b530b71d302287fa63b292299455fea5075c502a5ad5f920cb790e95605847f957a65e4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1":
|
||||
version: 1.0.2
|
||||
resolution: "util-deprecate@npm:1.0.2"
|
||||
|
|
Loading…
Reference in New Issue