From 88b686c0d42231d359b41bf229bf7db98fbcdc93 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Wed, 1 Dec 2021 17:43:51 -0500 Subject: [PATCH 1/4] fix(pnp): allow ESM loader to load arbitrary file extensions as CJS --- .yarn/versions/32961798.yml | 28 ++++++++ .../pkg-tests-specs/sources/pnp-esm.test.ts | 67 ++++++++++++++++++- .../sources/esm-loader/built-loader.js | 2 +- .../sources/esm-loader/loaderUtils.ts | 24 ++++--- 4 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 .yarn/versions/32961798.yml diff --git a/.yarn/versions/32961798.yml b/.yarn/versions/32961798.yml new file mode 100644 index 000000000000..1ef7ecb1c936 --- /dev/null +++ b/.yarn/versions/32961798.yml @@ -0,0 +1,28 @@ +releases: + "@yarnpkg/cli": patch + "@yarnpkg/plugin-pnp": patch + "@yarnpkg/pnp": patch + +declined: + - "@yarnpkg/esbuild-plugin-pnp" + - "@yarnpkg/plugin-compat" + - "@yarnpkg/plugin-constraints" + - "@yarnpkg/plugin-dlx" + - "@yarnpkg/plugin-essentials" + - "@yarnpkg/plugin-init" + - "@yarnpkg/plugin-interactive-tools" + - "@yarnpkg/plugin-nm" + - "@yarnpkg/plugin-npm-cli" + - "@yarnpkg/plugin-pack" + - "@yarnpkg/plugin-patch" + - "@yarnpkg/plugin-pnpm" + - "@yarnpkg/plugin-stage" + - "@yarnpkg/plugin-typescript" + - "@yarnpkg/plugin-version" + - "@yarnpkg/plugin-workspace-tools" + - "@yarnpkg/builder" + - "@yarnpkg/core" + - "@yarnpkg/doctor" + - "@yarnpkg/nm" + - "@yarnpkg/pnpify" + - "@yarnpkg/sdks" 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 fd1a2893cb0e..920c59e36b06 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 @@ -194,7 +194,25 @@ describe(`Plug'n'Play - ESM`, () => { ); test( - `it should not allow unknown extensions`, + `it should load commonjs with an unknown extension`, + makeTemporaryEnv( + { + }, + async ({path, run, source}) => { + await xfs.writeFilePromise(ppath.join(path, `index.ts` as Filename), `console.log(typeof require === 'undefined')`); + + await expect(run(`install`)).resolves.toMatchObject({code: 0}); + + await expect(run(`node`, `./index.ts`)).resolves.toMatchObject({ + code: 0, + stdout: `false\n`, + }); + }, + ), + ); + + test( + `it should not allow unknown extensions with {type: "module"}`, makeTemporaryEnv( { type: `module`, @@ -214,7 +232,7 @@ describe(`Plug'n'Play - ESM`, () => { // Tests https://github.com/nodejs/node/issues/33226 test( - `it should not load extensionless commonjs files as ESM`, + `it should load extensionless commonjs files as an entrypoint`, makeTemporaryEnv( { }, { @@ -233,6 +251,51 @@ describe(`Plug'n'Play - ESM`, () => { ), ); + // pending the implementation of this suggestion: + // https://github.com/nodejs/node/issues/33226#issuecomment-791603173 + test.skip( + `it should not allow extensionless commonjs imports`, + makeTemporaryEnv( + { }, + { + pnpEnableEsmLoader: true, + }, + async ({path, run, source}) => { + await xfs.writeFilePromise(ppath.join(path, `index.mjs` as Filename), `import('./cjs-bin').then(console.log)`); + await xfs.writeFilePromise(ppath.join(path, `cjs-bin` as Filename), `module.exports = {foo: 'bar'}`); + + await expect(run(`install`)).resolves.toMatchObject({code: 0}); + + await expect(run(`node`, `./index.mjs`)).rejects.toMatchObject({ + code: 1, + stderr: expect.stringContaining(`Unknown file extension`), + }); + }, + ), + ); + + test( + `it should not allow extensionless files with {"type": "module"}`, + makeTemporaryEnv( + { + type: `module`, + }, + { + pnpEnableEsmLoader: true, + }, + async ({path, run, source}) => { + await xfs.writeFilePromise(ppath.join(path, `index` as Filename), ``); + + await expect(run(`install`)).resolves.toMatchObject({code: 0}); + + await expect(run(`node`, `./index`)).rejects.toMatchObject({ + code: 1, + stderr: expect.stringContaining(`Unknown file extension`), + }); + }, + ), + ); + test( `it should support ESM binaries`, makeTemporaryEnv( diff --git a/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js b/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js index 24cc134d6bc0..baf8a098da05 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; }; diff --git a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts index f409bd939aee..47d519eeff48 100644 --- a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts +++ b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts @@ -48,16 +48,24 @@ export function getFileFormat(filepath: string): string | null { `Unknown file extension ".json" for ${filepath}`, ); } - // Matching files without extensions deviates from Node's default - // behaviour but is a fix for https://github.com/nodejs/node/issues/33226 - case ``: case `.js`: { const pkg = nodeUtils.readPackageScope(filepath); - if (pkg) { - return pkg.data.type ?? `commonjs`; - } + // assume CJS for files outside of a package boundary + if (!pkg) + return `commonjs`; + return pkg.data.type ?? `commonjs`; + } + // Matching files beyond those handled above deviates from Node's default + // --experimental-loader behavior but is required to work around + // https://github.com/nodejs/node/issues/33226 + default: { + const pkg = nodeUtils.readPackageScope(filepath); + if (!pkg) + return `commonjs`; + // prevent extensions beyond .mjs or .js from loading as ESM + if (pkg.data.type === `module`) + return null; + return pkg.data.type ?? `commonjs`; } } - - return null; } From 2c42f36228655a3699da28ec6937fe26c8504fdb Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Wed, 1 Dec 2021 18:54:50 -0500 Subject: [PATCH 2/4] fix(pnp): disallow extensionless imports in ESM loader --- .../acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts | 4 +--- packages/yarnpkg-pnp/sources/esm-loader/built-loader.js | 2 +- packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts | 3 +++ 3 files changed, 5 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 920c59e36b06..104a73173fef 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 @@ -251,9 +251,7 @@ describe(`Plug'n'Play - ESM`, () => { ), ); - // pending the implementation of this suggestion: - // https://github.com/nodejs/node/issues/33226#issuecomment-791603173 - test.skip( + test( `it should not allow extensionless commonjs imports`, makeTemporaryEnv( { }, diff --git a/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js b/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js index baf8a098da05..69fe0509c392 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; }; diff --git a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts index 47d519eeff48..83248f2b3cf2 100644 --- a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts +++ b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts @@ -26,6 +26,7 @@ export function tryParseURL(str: string) { export function getFileFormat(filepath: string): string | null { const ext = path.extname(filepath); + const isMain = process.argv[1] === filepath; switch (ext) { case `.mjs`: { @@ -59,6 +60,8 @@ export function getFileFormat(filepath: string): string | null { // --experimental-loader behavior but is required to work around // https://github.com/nodejs/node/issues/33226 default: { + if (!isMain) + return null; const pkg = nodeUtils.readPackageScope(filepath); if (!pkg) return `commonjs`; From 26a33db22744bb157bc8302324748e9d413b6ec3 Mon Sep 17 00:00:00 2001 From: merceyz Date: Thu, 2 Dec 2021 15:51:15 +0100 Subject: [PATCH 3/4] chore: lazy compute `isMain` --- packages/yarnpkg-pnp/sources/esm-loader/built-loader.js | 2 +- packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js b/packages/yarnpkg-pnp/sources/esm-loader/built-loader.js index 69fe0509c392..d1423d9f663c 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; }; diff --git a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts index 83248f2b3cf2..77bc42917e94 100644 --- a/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts +++ b/packages/yarnpkg-pnp/sources/esm-loader/loaderUtils.ts @@ -26,7 +26,6 @@ export function tryParseURL(str: string) { export function getFileFormat(filepath: string): string | null { const ext = path.extname(filepath); - const isMain = process.argv[1] === filepath; switch (ext) { case `.mjs`: { @@ -60,6 +59,7 @@ export function getFileFormat(filepath: string): string | null { // --experimental-loader behavior but is required to work around // https://github.com/nodejs/node/issues/33226 default: { + const isMain = process.argv[1] === filepath; if (!isMain) return null; const pkg = nodeUtils.readPackageScope(filepath); From a757d9699f68a6cb09fd6bb978f45f80560497f6 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Thu, 2 Dec 2021 14:04:28 -0500 Subject: [PATCH 4/4] test(pnp): ensure a consistent non-zero exit code when extensionless import fails --- .../acceptance-tests/pkg-tests-specs/sources/pnp-esm.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 104a73173fef..acc863f58ea8 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 @@ -259,7 +259,7 @@ describe(`Plug'n'Play - ESM`, () => { pnpEnableEsmLoader: true, }, async ({path, run, source}) => { - await xfs.writeFilePromise(ppath.join(path, `index.mjs` as Filename), `import('./cjs-bin').then(console.log)`); + await xfs.writeFilePromise(ppath.join(path, `index.mjs` as Filename), `import bin from './cjs-bin';\nconsole.log(bin)`); await xfs.writeFilePromise(ppath.join(path, `cjs-bin` as Filename), `module.exports = {foo: 'bar'}`); await expect(run(`install`)).resolves.toMatchObject({code: 0});