From c38fd4e65dacf2fe4fb77515126a610639674e11 Mon Sep 17 00:00:00 2001 From: Reece Dunham Date: Tue, 12 Nov 2024 13:19:43 -0500 Subject: [PATCH 1/6] Treat `.mts` as an ES Module --- packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts index cdea66901092..ac28528ae867 100644 --- a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts +++ b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts @@ -36,6 +36,9 @@ export function getFileFormat(filepath: string): string | null { case `.mjs`: { return `module`; } + case `.mts`: { + return `module`; + } case `.cjs`: { return `commonjs`; } From eacdb9e64b6703f2bdac3304369797db18cd9f6c Mon Sep 17 00:00:00 2001 From: Reece Dunham Date: Tue, 12 Nov 2024 18:31:17 +0000 Subject: [PATCH 2/6] version --- .yarn/versions/b3ee5c53.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .yarn/versions/b3ee5c53.yml diff --git a/.yarn/versions/b3ee5c53.yml b/.yarn/versions/b3ee5c53.yml new file mode 100644 index 000000000000..c102b820e303 --- /dev/null +++ b/.yarn/versions/b3ee5c53.yml @@ -0,0 +1,9 @@ +releases: + "@yarnpkg/pnp": patch + +declined: + - "@yarnpkg/plugin-nm" + - "@yarnpkg/plugin-pnp" + - "@yarnpkg/nm" + - "@yarnpkg/pnpify" + - "@yarnpkg/sdks" From 4519c604d8df8b9bfa6289d5a60b71e12380107d Mon Sep 17 00:00:00 2001 From: Reece Dunham Date: Mon, 20 Jan 2025 10:23:28 -0500 Subject: [PATCH 3/6] Add CTS --- packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts index ac28528ae867..421846880cc7 100644 --- a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts +++ b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts @@ -39,6 +39,9 @@ export function getFileFormat(filepath: string): string | null { case `.mts`: { return `module`; } + case `.cts`: { + return `commonjs`; + } case `.cjs`: { return `commonjs`; } From 6ef93eee097ec3902f4f9453a728d7914a854bd7 Mon Sep 17 00:00:00 2001 From: Reece Dunham Date: Mon, 20 Jan 2025 15:34:21 +0000 Subject: [PATCH 4/6] Update the hook --- .pnp.loader.mjs | 6 ++++++ packages/yarnpkg-pnp/sources/esm-loader/built-loader.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.pnp.loader.mjs b/.pnp.loader.mjs index e5a542909641..9ec1acfacb77 100644 --- a/.pnp.loader.mjs +++ b/.pnp.loader.mjs @@ -1485,6 +1485,12 @@ function getFileFormat(filepath) { case `.mjs`: { return `module`; } + case `.mts`: { + return `module`; + } + case `.cts`: { + return `commonjs`; + } case `.cjs`: { return `commonjs`; } diff --git a/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js b/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js index 224d4740b500..0b4af5ce1e70 100644 --- a/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js +++ b/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js @@ -2,7 +2,7 @@ let hook; module.exports = () => { if (typeof hook === `undefined`) - hook = require('zlib').brotliDecompressSync(Buffer.from('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', 'base64')).toString(); + hook = require('zlib').brotliDecompressSync(Buffer.from('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', 'base64')).toString(); return hook; }; From 8e669f7e22a111bcd2814543ccdbbceda656d641 Mon Sep 17 00:00:00 2001 From: Reece Dunham Date: Tue, 21 Jan 2025 02:03:11 +0000 Subject: [PATCH 5/6] Add basic test --- .../pkg-tests-specs/sources/pnp-esm.test.ts | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/packages/acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts b/packages/acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts index f2bc7e76abe2..64611d7fc9e9 100644 --- a/packages/acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts +++ b/packages/acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts @@ -1160,4 +1160,50 @@ describe(`Plug'n'Play - ESM`, () => { }, ), ); + + describe(`Node builtin type stripping`, () => { + it( + `should be able to resolve a .cts file`, + makeTemporaryEnv( + { + type: `module`, + }, + async ({path, run, source}) => { + await run(`install`); + + await xfs.writeFilePromise( + ppath.join(path, `index.cts`), + `const {TextDecoder} = require('node:util');\nconst decoder = new TextDecoder();\nconst u8arr = new Uint8Array([72, 101, 108, 108, 111]);\nconsole.log(decoder.decode(u8arr));`, + ); + + await expect(run(`node`, `./index.cts`)).resolves.toMatchObject({ + code: 0, + stdout: `Hello\n`, + }); + }, + ), + ); + + it( + `should be able to resolve a .mts file`, + makeTemporaryEnv( + { + type: `module`, + }, + async ({path, run, source}) => { + await run(`install`); + + await xfs.writeFilePromise( + ppath.join(path, `index.mts`), + `import {TextDecoder} from 'node:util';\nconst decoder = new TextDecoder();\nconst u8arr = new Uint8Array([72, 101, 108, 108, 111]);\nconsole.log(decoder.decode(u8arr));`, + ); + + await expect(run(`node`, `./index.mts`)).resolves.toMatchObject({ + code: 0, + stdout: `Hello\n`, + }); + }, + ), + ); + }); }); From 50a6a61d195e9903b3d5c145fa0432d3f373194a Mon Sep 17 00:00:00 2001 From: Reece Dunham Date: Tue, 21 Jan 2025 02:21:54 +0000 Subject: [PATCH 6/6] Only run tests if possible in env --- .../pkg-tests-specs/sources/pnp-esm.test.ts | 8 ++++---- packages/yarnpkg-pnp/sources/esm-loader/loaderFlags.ts | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts b/packages/acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts index 64611d7fc9e9..aacdce5fcc01 100644 --- a/packages/acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts +++ b/packages/acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts @@ -1,6 +1,6 @@ -import {Filename, npath, ppath, xfs} from '@yarnpkg/fslib'; -import {ALLOWS_EXTENSIONLESS_FILES, HAS_LOADERS_AFFECTING_LOADERS, SUPPORTS_IMPORT_ATTRIBUTES, SUPPORTS_IMPORT_ATTRIBUTES_ONLY} from '@yarnpkg/pnp/sources/esm-loader/loaderFlags'; -import {pathToFileURL} from 'url'; +import {Filename, npath, ppath, xfs} from '@yarnpkg/fslib'; +import {ALLOWS_EXTENSIONLESS_FILES, HAS_LOADERS_AFFECTING_LOADERS, SUPPORTS_IMPORT_ATTRIBUTES, SUPPORTS_IMPORT_ATTRIBUTES_ONLY, SUPPORTS_TYPE_STRIPPING} from '@yarnpkg/pnp/sources/esm-loader/loaderFlags'; +import {pathToFileURL} from 'url'; describe(`Plug'n'Play - ESM`, () => { test( @@ -1161,7 +1161,7 @@ describe(`Plug'n'Play - ESM`, () => { ), ); - describe(`Node builtin type stripping`, () => { + (SUPPORTS_TYPE_STRIPPING ? describe : describe.skip)(`Node builtin type stripping`, () => { it( `should be able to resolve a .cts file`, makeTemporaryEnv( diff --git a/packages/yarnpkg-pnp/sources/esm-loader/loaderFlags.ts b/packages/yarnpkg-pnp/sources/esm-loader/loaderFlags.ts index 1ea69f7c845f..3144f204f359 100644 --- a/packages/yarnpkg-pnp/sources/esm-loader/loaderFlags.ts +++ b/packages/yarnpkg-pnp/sources/esm-loader/loaderFlags.ts @@ -20,3 +20,6 @@ export const SUPPORTS_IMPORT_ATTRIBUTES = major >= 21 || (major === 20 && minor // https://github.com/nodejs/node/pull/52104 export const SUPPORTS_IMPORT_ATTRIBUTES_ONLY = major >= 22; + +// https://github.com/nodejs/node/pull/53725 +export const SUPPORTS_TYPE_STRIPPING = major > 23 || (major === 23 && minor > 6);