From 8e0a0ea1f7a3c22b734aced2108c51befc9df5b5 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Tue, 7 Sep 2021 16:59:20 +0200 Subject: [PATCH 01/10] fix(resolver): support node prefix from ESM --- CHANGELOG.md | 1 + .../__snapshots__/moduleNameMapper.test.ts.snap | 4 ++-- e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap | 2 +- .../__snapshots__/resolveNoFileExtensions.test.ts.snap | 2 +- e2e/native-esm/__tests__/native-esm.test.js | 6 ++++++ packages/jest-resolve/src/resolver.ts | 9 +++++++-- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1af0d3e822cf..4380a6f2855b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ ### Fixes +- `[jest-resolver]` Support `node:` prefix when importing Node core modules with ESM ([#11817](https://github.com/facebook/jest/pull/11817)) - `[jest-types]` Export the `PrettyFormatOptions` interface ([#11801](https://github.com/facebook/jest/pull/11801)) ### Chore & Maintenance diff --git a/e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap b/e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap index e6c44c61c5e4..4431860f7880 100644 --- a/e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap +++ b/e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap @@ -41,7 +41,7 @@ FAIL __tests__/index.js 12 | module.exports = () => 'test'; 13 | - at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:561:17) + at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:566:17) at Object.require (index.js:10:1) `; @@ -70,6 +70,6 @@ FAIL __tests__/index.js 12 | module.exports = () => 'test'; 13 | - at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:561:17) + at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:566:17) at Object.require (index.js:10:1) `; diff --git a/e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap b/e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap index 27a97a8da96a..e530b3607f71 100644 --- a/e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap +++ b/e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap @@ -10,7 +10,7 @@ Ran all test suites matching /native-esm.tla.test.js/i. exports[`on node ^12.16.0 || >=13.7.0 runs test with native ESM 1`] = ` Test Suites: 1 passed, 1 total -Tests: 20 passed, 20 total +Tests: 21 passed, 21 total Snapshots: 0 total Time: <> Ran all test suites matching /native-esm.test.js/i. diff --git a/e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap b/e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap index 284c4c43706a..10321533f870 100644 --- a/e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap +++ b/e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap @@ -37,6 +37,6 @@ FAIL __tests__/test.js | ^ 9 | - at Resolver.resolveModule (../../packages/jest-resolve/build/resolver.js:313:11) + at Resolver.resolveModule (../../packages/jest-resolve/build/resolver.js:318:11) at Object.require (index.js:8:18) `; diff --git a/e2e/native-esm/__tests__/native-esm.test.js b/e2e/native-esm/__tests__/native-esm.test.js index edff8b0fbc81..340a9b3cae10 100644 --- a/e2e/native-esm/__tests__/native-esm.test.js +++ b/e2e/native-esm/__tests__/native-esm.test.js @@ -5,12 +5,14 @@ * LICENSE file in the root directory of this source tree. */ +import dns from 'dns'; // the point here is that it's the node core module // eslint-disable-next-line no-restricted-imports import {readFileSync} from 'fs'; import {createRequire} from 'module'; import {dirname, resolve} from 'path'; import {fileURLToPath} from 'url'; +import prefixDns from 'node:dns'; import {jest as jestObject} from '@jest/globals'; import staticImportedStatefulFromCjs from '../fromCjs.mjs'; import {double} from '../index'; @@ -188,3 +190,7 @@ test('can mock module', async () => { expect(Object.keys(importedMock)).toEqual(['foo']); expect(importedMock.foo).toEqual('bar'); }); + +test('supports imports using "node:" prefix', () => { + expect(dns).toBe(prefixDns); +}); diff --git a/packages/jest-resolve/src/resolver.ts b/packages/jest-resolve/src/resolver.ts index c0800eef94cf..b532c73ba410 100644 --- a/packages/jest-resolve/src/resolver.ts +++ b/packages/jest-resolve/src/resolver.ts @@ -176,8 +176,12 @@ export default class Resolver { const skipResolution = options && options.skipNodeResolution && !moduleName.includes(path.sep); - const resolveNodeModule = (name: Config.Path, throwIfNotFound = false) => - Resolver.findNodeModule(name, { + const resolveNodeModule = (name: Config.Path, throwIfNotFound = false) => { + if (this.isCoreModule(name)) { + return name; + } + + return Resolver.findNodeModule(name, { basedir: dirname, extensions, moduleDirectory, @@ -186,6 +190,7 @@ export default class Resolver { rootDir: this._options.rootDir, throwIfNotFound, }); + }; if (!skipResolution) { module = resolveNodeModule(moduleName, Boolean(process.versions.pnp)); From 3cd0076078bf458fce7978430852b41c07dc2558 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 08:05:56 +0200 Subject: [PATCH 02/10] log test --- e2e/__tests__/nativeEsm.test.ts | 11 ++++++++--- jest.config.ci.js | 11 ----------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/e2e/__tests__/nativeEsm.test.ts b/e2e/__tests__/nativeEsm.test.ts index 9aa963af31c7..cc5fe23b5113 100644 --- a/e2e/__tests__/nativeEsm.test.ts +++ b/e2e/__tests__/nativeEsm.test.ts @@ -29,9 +29,14 @@ onNodeVersions('^12.16.0 || >=13.7.0', () => { const {summary} = extractSummary(stderr); - expect(wrap(summary)).toMatchSnapshot(); - expect(stdout).toBe(''); - expect(exitCode).toBe(0); + try { + expect(wrap(summary)).toMatchSnapshot(); + expect(stdout).toBe(''); + expect(exitCode).toBe(0); + } catch (e) { + console.log(stderr); + throw e; + } }); }); diff --git a/jest.config.ci.js b/jest.config.ci.js index 68e16b4300ac..a9b55b187d8e 100644 --- a/jest.config.ci.js +++ b/jest.config.ci.js @@ -9,15 +9,4 @@ module.exports = { ...require('./jest.config'), - coverageReporters: ['json'], - reporters: [ - [ - 'jest-junit', - {outputDirectory: 'reports/junit', outputName: 'js-test-results.xml'}, - ], - [ - 'jest-silent-reporter', - {showPaths: true, showWarnings: true, useDots: true}, - ], - ], }; From 27d16e1d8c352054a9419865785927c8d5299b94 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 09:56:25 +0200 Subject: [PATCH 03/10] try more logging --- packages/jest-runtime/src/index.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 340501e0b44b..12df77844c6a 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -1451,7 +1451,22 @@ export default class Runtime { return this._getMockedNativeModule(); } - return require(moduleWithoutNodePrefix); + try { + return require(moduleWithoutNodePrefix); + } catch (e) { + console.error( + 'Error requiring core module', + { + moduleName, + moduleWithoutNodePrefix, + supportPrefix, + supportsNodeColonModulePrefixInImport, + supportsNodeColonModulePrefixInRequire, + }, + e, + ); + throw e; + } } private _importCoreModule(moduleName: string, context: VMContext) { From 515466355bfa597f9fa3526f6d9e89bc5023c054 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 10:25:49 +0200 Subject: [PATCH 04/10] moar --- packages/jest-runtime/src/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 12df77844c6a..d04a22dc44e2 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -161,7 +161,7 @@ const supportsNodeColonModulePrefixInRequire = (() => { })(); const supportsNodeColonModulePrefixInImport = (() => { - const {stdout} = execa.sync( + const {stdout, stderr} = execa.sync( 'node', [ '--eval', @@ -170,6 +170,8 @@ const supportsNodeColonModulePrefixInImport = (() => { {reject: false}, ); + console.log('is supported???', {stdout, stderr}); + return stdout === 'true'; })(); From a9b3f99932b988c1413d31f18973cb2bfeb18a25 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 10:40:39 +0200 Subject: [PATCH 05/10] node version when spawning --- packages/jest-runtime/src/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index d04a22dc44e2..9f235fb7fa64 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -169,8 +169,11 @@ const supportsNodeColonModulePrefixInImport = (() => { ], {reject: false}, ); + const {stdout: nodeVersion} = execa.sync('node', ['--version'], { + reject: false, + }); - console.log('is supported???', {stdout, stderr}); + console.log('is supported???', {nodeVersion, stderr, stdout}); return stdout === 'true'; })(); From 6867360b8daa00583bb7fa832c6e49a177197765 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 10:44:27 +0200 Subject: [PATCH 06/10] maybe newer orb on ci fixes it --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 42241a70c7d4..9c2ed2bf9a6b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,7 +12,7 @@ aliases: app-dir: ~/jest orbs: - node: circleci/node@4.0.0 + node: circleci/node@4.7.0 jobs: test-node: From 3ad14c2488c41910b378f0319b47c105c0e9d1ee Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 10:51:26 +0200 Subject: [PATCH 07/10] Revert "node version when spawning" This reverts commit a9b3f99932b988c1413d31f18973cb2bfeb18a25. --- packages/jest-runtime/src/index.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 9f235fb7fa64..d04a22dc44e2 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -169,11 +169,8 @@ const supportsNodeColonModulePrefixInImport = (() => { ], {reject: false}, ); - const {stdout: nodeVersion} = execa.sync('node', ['--version'], { - reject: false, - }); - console.log('is supported???', {nodeVersion, stderr, stdout}); + console.log('is supported???', {stdout, stderr}); return stdout === 'true'; })(); From 14bc3d4a758bec41b90a2d780e08a2c1cd63038c Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 10:51:29 +0200 Subject: [PATCH 08/10] Revert "moar" This reverts commit 515466355bfa597f9fa3526f6d9e89bc5023c054. --- packages/jest-runtime/src/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index d04a22dc44e2..12df77844c6a 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -161,7 +161,7 @@ const supportsNodeColonModulePrefixInRequire = (() => { })(); const supportsNodeColonModulePrefixInImport = (() => { - const {stdout, stderr} = execa.sync( + const {stdout} = execa.sync( 'node', [ '--eval', @@ -170,8 +170,6 @@ const supportsNodeColonModulePrefixInImport = (() => { {reject: false}, ); - console.log('is supported???', {stdout, stderr}); - return stdout === 'true'; })(); From a759a36b0519f1e520696df53fa8b56b43aa96c0 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 10:51:34 +0200 Subject: [PATCH 09/10] Revert "try more logging" This reverts commit 27d16e1d8c352054a9419865785927c8d5299b94. --- packages/jest-runtime/src/index.ts | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 12df77844c6a..340501e0b44b 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -1451,22 +1451,7 @@ export default class Runtime { return this._getMockedNativeModule(); } - try { - return require(moduleWithoutNodePrefix); - } catch (e) { - console.error( - 'Error requiring core module', - { - moduleName, - moduleWithoutNodePrefix, - supportPrefix, - supportsNodeColonModulePrefixInImport, - supportsNodeColonModulePrefixInRequire, - }, - e, - ); - throw e; - } + return require(moduleWithoutNodePrefix); } private _importCoreModule(moduleName: string, context: VMContext) { From 84964a051fcdf0b8f36e64fc7831151122ef3db7 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 8 Sep 2021 10:51:37 +0200 Subject: [PATCH 10/10] Revert "log test" This reverts commit 3cd0076078bf458fce7978430852b41c07dc2558. --- e2e/__tests__/nativeEsm.test.ts | 11 +++-------- jest.config.ci.js | 11 +++++++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/e2e/__tests__/nativeEsm.test.ts b/e2e/__tests__/nativeEsm.test.ts index cc5fe23b5113..9aa963af31c7 100644 --- a/e2e/__tests__/nativeEsm.test.ts +++ b/e2e/__tests__/nativeEsm.test.ts @@ -29,14 +29,9 @@ onNodeVersions('^12.16.0 || >=13.7.0', () => { const {summary} = extractSummary(stderr); - try { - expect(wrap(summary)).toMatchSnapshot(); - expect(stdout).toBe(''); - expect(exitCode).toBe(0); - } catch (e) { - console.log(stderr); - throw e; - } + expect(wrap(summary)).toMatchSnapshot(); + expect(stdout).toBe(''); + expect(exitCode).toBe(0); }); }); diff --git a/jest.config.ci.js b/jest.config.ci.js index a9b55b187d8e..68e16b4300ac 100644 --- a/jest.config.ci.js +++ b/jest.config.ci.js @@ -9,4 +9,15 @@ module.exports = { ...require('./jest.config'), + coverageReporters: ['json'], + reporters: [ + [ + 'jest-junit', + {outputDirectory: 'reports/junit', outputName: 'js-test-results.xml'}, + ], + [ + 'jest-silent-reporter', + {showPaths: true, showWarnings: true, useDots: true}, + ], + ], };