From 4c34dd52be1a4639621ae47ff25a01b74160fbd5 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Mon, 18 Apr 2022 14:04:54 +0200 Subject: [PATCH] fix(commonjs): Warn when plugins do not pass options to resolveId (#1038) --- packages/commonjs/README.md | 2 + packages/commonjs/src/index.js | 18 +- packages/commonjs/src/resolve-id.js | 159 +++++++++++------- .../commonjs/src/resolve-require-sources.js | 10 +- .../_config.js | 29 ++++ .../warn-this-resolve-without-options/foo.js | 1 + .../warn-this-resolve-without-options/main.js | 3 + .../commonjs/test/snapshots/function.js.md | 17 ++ .../commonjs/test/snapshots/function.js.snap | Bin 22034 -> 22058 bytes 9 files changed, 168 insertions(+), 71 deletions(-) create mode 100644 packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/_config.js create mode 100644 packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/foo.js create mode 100644 packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/main.js diff --git a/packages/commonjs/README.md b/packages/commonjs/README.md index 44a7652db..225ed182c 100644 --- a/packages/commonjs/README.md +++ b/packages/commonjs/README.md @@ -68,6 +68,8 @@ You can also provide a [minimatch pattern](https://github.com/isaacs/minimatch), Type: `string | string[]`
Default: `[]` +_Note: In previous versions, this option would spin up a rather comprehensive mock environment that was capable of handling modules that manipulate `require.cache`. This is no longer supported. If you rely on this e.g. when using request-promise-native, use version 21 of this plugin._ + Some modules contain dynamic `require` calls, or require modules that contain circular dependencies, which are not handled well by static imports. Including those modules as `dynamicRequireTargets` will simulate a CommonJS (NodeJS-like) environment for them with support for dynamic dependencies. It also enables `strictRequires` for those modules, see above. diff --git a/packages/commonjs/src/index.js b/packages/commonjs/src/index.js index b53fa7fd4..3c8f5f642 100644 --- a/packages/commonjs/src/index.js +++ b/packages/commonjs/src/index.js @@ -99,7 +99,7 @@ export default function commonjs(options = {}) { }; }; - const resolveId = getResolveId(extensions); + const { currentlyResolving, resolveId } = getResolveId(extensions); const sourceMap = options.sourceMap !== false; @@ -204,7 +204,11 @@ export default function commonjs(options = {}) { 'The namedExports option from "@rollup/plugin-commonjs" is deprecated. Named exports are now handled automatically.' ); } - requireResolver = getRequireResolver(extensions, detectCyclesAndConditional); + requireResolver = getRequireResolver( + extensions, + detectCyclesAndConditional, + currentlyResolving + ); }, buildEnd() { @@ -260,15 +264,13 @@ export default function commonjs(options = {}) { // entry suffix is just appended to not mess up relative external resolution if (id.endsWith(ENTRY_SUFFIX)) { - return getEntryProxy( - id.slice(0, -ENTRY_SUFFIX.length), - defaultIsModuleExports, - this.getModuleInfo - ); + const acutalId = id.slice(0, -ENTRY_SUFFIX.length); + return getEntryProxy(acutalId, getDefaultIsModuleExports(acutalId), this.getModuleInfo); } if (isWrappedId(id, ES_IMPORT_SUFFIX)) { - return getEsImportProxy(unwrapId(id, ES_IMPORT_SUFFIX), defaultIsModuleExports); + const actualId = unwrapId(id, ES_IMPORT_SUFFIX); + return getEsImportProxy(actualId, getDefaultIsModuleExports(actualId)); } if (id === DYNAMIC_MODULES_ID) { diff --git a/packages/commonjs/src/resolve-id.js b/packages/commonjs/src/resolve-id.js index 43066afad..7fa7f04fe 100644 --- a/packages/commonjs/src/resolve-id.js +++ b/packages/commonjs/src/resolve-id.js @@ -50,79 +50,114 @@ export function resolveExtensions(importee, importer, extensions) { } export default function getResolveId(extensions) { - return async function resolveId(importee, importer, resolveOptions) { - // We assume that all requires are pre-resolved - const customOptions = resolveOptions.custom; - if (customOptions && customOptions['node-resolve'] && customOptions['node-resolve'].isRequire) { - return null; - } - if (isWrappedId(importee, WRAPPED_SUFFIX)) { - return unwrapId(importee, WRAPPED_SUFFIX); - } + const currentlyResolving = new Map(); - if ( - importee.endsWith(ENTRY_SUFFIX) || - isWrappedId(importee, MODULE_SUFFIX) || - isWrappedId(importee, EXPORTS_SUFFIX) || - isWrappedId(importee, PROXY_SUFFIX) || - isWrappedId(importee, ES_IMPORT_SUFFIX) || - isWrappedId(importee, EXTERNAL_SUFFIX) || - importee.startsWith(HELPERS_ID) || - importee === DYNAMIC_MODULES_ID - ) { - return importee; - } + return { + /** + * This is a Maps of importers to Sets of require sources being resolved at + * the moment by resolveRequireSourcesAndUpdateMeta + */ + currentlyResolving, + async resolveId(importee, importer, resolveOptions) { + const customOptions = resolveOptions.custom; + // All logic below is specific to ES imports. + // Also, if we do not skip this logic for requires that are resolved while + // transforming a commonjs file, it can easily lead to deadlocks. + if ( + customOptions && + customOptions['node-resolve'] && + customOptions['node-resolve'].isRequire + ) { + return null; + } + const currentlyResolvingForParent = currentlyResolving.get(importer); + if (currentlyResolvingForParent && currentlyResolvingForParent.has(importee)) { + this.warn({ + code: 'THIS_RESOLVE_WITHOUT_OPTIONS', + message: + 'It appears a plugin has implemented a "resolveId" hook that uses "this.resolve" without forwarding the third "options" parameter of "resolveId". This is problematic as it can lead to wrong module resolutions especially for the node-resolve plugin and in certain cases cause early exit errors for the commonjs plugin.\nIn rare cases, this warning can appear if the same file is both imported and required from the same mixed ES/CommonJS module, in which case it can be ignored.', + url: 'https://rollupjs.org/guide/en/#resolveid' + }); + return null; + } + + if (isWrappedId(importee, WRAPPED_SUFFIX)) { + return unwrapId(importee, WRAPPED_SUFFIX); + } - if (importer) { if ( - importer === DYNAMIC_MODULES_ID || - // Proxies are only importing resolved ids, no need to resolve again - isWrappedId(importer, PROXY_SUFFIX) || - isWrappedId(importer, ES_IMPORT_SUFFIX) || - importer.endsWith(ENTRY_SUFFIX) + importee.endsWith(ENTRY_SUFFIX) || + isWrappedId(importee, MODULE_SUFFIX) || + isWrappedId(importee, EXPORTS_SUFFIX) || + isWrappedId(importee, PROXY_SUFFIX) || + isWrappedId(importee, ES_IMPORT_SUFFIX) || + isWrappedId(importee, EXTERNAL_SUFFIX) || + importee.startsWith(HELPERS_ID) || + importee === DYNAMIC_MODULES_ID ) { return importee; } - if (isWrappedId(importer, EXTERNAL_SUFFIX)) { - // We need to return null for unresolved imports so that the proper warning is shown - if (!(await this.resolve(importee, importer, { skipSelf: true }))) { - return null; + + if (importer) { + if ( + importer === DYNAMIC_MODULES_ID || + // Proxies are only importing resolved ids, no need to resolve again + isWrappedId(importer, PROXY_SUFFIX) || + isWrappedId(importer, ES_IMPORT_SUFFIX) || + importer.endsWith(ENTRY_SUFFIX) + ) { + return importee; + } + if (isWrappedId(importer, EXTERNAL_SUFFIX)) { + // We need to return null for unresolved imports so that the proper warning is shown + if ( + !(await this.resolve( + importee, + importer, + Object.assign({ skipSelf: true }, resolveOptions) + )) + ) { + return null; + } + // For other external imports, we need to make sure they are handled as external + return { id: importee, external: true }; } - // For other external imports, we need to make sure they are handled as external - return { id: importee, external: true }; } - } - if (importee.startsWith('\0')) { - return null; - } + if (importee.startsWith('\0')) { + return null; + } - // If this is an entry point or ESM import, we need to figure out if the importee is wrapped and - // if that is the case, we need to add a proxy. - const resolved = - (await this.resolve(importee, importer, Object.assign({ skipSelf: true }, resolveOptions))) || - resolveExtensions(importee, importer, extensions); - // Make sure that even if other plugins resolve again, we ignore our own proxies - if ( - !resolved || - resolved.external || - resolved.id.endsWith(ENTRY_SUFFIX) || - isWrappedId(resolved.id, ES_IMPORT_SUFFIX) - ) { + // If this is an entry point or ESM import, we need to figure out if the importee is wrapped and + // if that is the case, we need to add a proxy. + const resolved = + (await this.resolve( + importee, + importer, + Object.assign({ skipSelf: true }, resolveOptions) + )) || resolveExtensions(importee, importer, extensions); + // Make sure that even if other plugins resolve again, we ignore our own proxies + if ( + !resolved || + resolved.external || + resolved.id.endsWith(ENTRY_SUFFIX) || + isWrappedId(resolved.id, ES_IMPORT_SUFFIX) + ) { + return resolved; + } + const moduleInfo = await this.load(resolved); + if (resolveOptions.isEntry) { + moduleInfo.moduleSideEffects = true; + // We must not precede entry proxies with a `\0` as that will mess up relative external resolution + return resolved.id + ENTRY_SUFFIX; + } + const { + meta: { commonjs: commonjsMeta } + } = moduleInfo; + if (commonjsMeta && commonjsMeta.isCommonJS === IS_WRAPPED_COMMONJS) { + return { id: wrapId(resolved.id, ES_IMPORT_SUFFIX), meta: { commonjs: { resolved } } }; + } return resolved; } - const moduleInfo = await this.load(resolved); - if (resolveOptions.isEntry) { - moduleInfo.moduleSideEffects = true; - // We must not precede entry proxies with a `\0` as that will mess up relative external resolution - return resolved.id + ENTRY_SUFFIX; - } - const { - meta: { commonjs: commonjsMeta } - } = moduleInfo; - if (commonjsMeta && commonjsMeta.isCommonJS === IS_WRAPPED_COMMONJS) { - return { id: wrapId(resolved.id, ES_IMPORT_SUFFIX), meta: { commonjs: { resolved } } }; - } - return resolved; }; } diff --git a/packages/commonjs/src/resolve-require-sources.js b/packages/commonjs/src/resolve-require-sources.js index f96ace50e..d392a0755 100644 --- a/packages/commonjs/src/resolve-require-sources.js +++ b/packages/commonjs/src/resolve-require-sources.js @@ -9,7 +9,7 @@ import { } from './helpers'; import { resolveExtensions } from './resolve-id'; -export function getRequireResolver(extensions, detectCyclesAndConditional) { +export function getRequireResolver(extensions, detectCyclesAndConditional, currentlyResolving) { const knownCjsModuleTypes = Object.create(null); const requiredIds = Object.create(null); const unconditionallyRequiredIds = Object.create(null); @@ -161,16 +161,20 @@ export function getRequireResolver(extensions, detectCyclesAndConditional) { parentMeta.requires = []; parentMeta.isRequiredCommonJS = Object.create(null); setInitialParentType(parentId, isParentCommonJS); + const currentlyResolvingForParent = currentlyResolving.get(parentId) || new Set(); + currentlyResolving.set(parentId, currentlyResolvingForParent); const requireTargets = await Promise.all( sources.map(async ({ source, isConditional }) => { // Never analyze or proxy internal modules if (source.startsWith('\0')) { return { id: source, allowProxy: false }; } + currentlyResolvingForParent.add(source); const resolved = (await rollupContext.resolve(source, parentId, { custom: { 'node-resolve': { isRequire: true } } })) || resolveExtensions(source, parentId, extensions); + currentlyResolvingForParent.delete(source); if (!resolved) { return { id: wrapId(source, EXTERNAL_SUFFIX), allowProxy: false }; } @@ -201,6 +205,10 @@ export function getRequireResolver(extensions, detectCyclesAndConditional) { isCommonJS }; }); + }, + isCurrentlyResolving(source, parentId) { + const currentlyResolvingForParent = currentlyResolving.get(parentId); + return currentlyResolvingForParent && currentlyResolvingForParent.has(source); } }; } diff --git a/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/_config.js b/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/_config.js new file mode 100644 index 000000000..a79b74cb8 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/_config.js @@ -0,0 +1,29 @@ +const assert = require('assert'); + +const warnings = []; + +module.exports = { + description: 'Warns when another plugin uses this.resolve without forwarding options', + options: { + onwarn(warning) { + warnings.push(warning); + }, + plugins: [ + { + name: 'test', + resolveId(source, importer) { + return this.resolve(source, importer, { skipSelf: true }); + }, + buildEnd() { + assert.strictEqual(warnings.length, 1); + assert.strictEqual( + warnings[0].message, + 'It appears a plugin has implemented a "resolveId" hook that uses "this.resolve" without forwarding the third "options" parameter of "resolveId". This is problematic as it can lead to wrong module resolutions especially for the node-resolve plugin and in certain cases cause early exit errors for the commonjs plugin.\nIn rare cases, this warning can appear if the same file is both imported and required from the same mixed ES/CommonJS module, in which case it can be ignored.' + ); + assert.strictEqual(warnings[0].pluginCode, 'THIS_RESOLVE_WITHOUT_OPTIONS'); + assert.strictEqual(warnings[0].url, 'https://rollupjs.org/guide/en/#resolveid'); + } + } + ] + } +}; diff --git a/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/foo.js b/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/foo.js new file mode 100644 index 000000000..ce0fffb75 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/foo.js @@ -0,0 +1 @@ +module.exports = 21; diff --git a/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/main.js b/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/main.js new file mode 100644 index 000000000..ba12948f6 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/warn-this-resolve-without-options/main.js @@ -0,0 +1,3 @@ +const foo = require('./foo'); + +module.exports = foo * 2; diff --git a/packages/commonjs/test/snapshots/function.js.md b/packages/commonjs/test/snapshots/function.js.md index 8f1eaa57b..f34b58c15 100644 --- a/packages/commonjs/test/snapshots/function.js.md +++ b/packages/commonjs/test/snapshots/function.js.md @@ -7713,3 +7713,20 @@ Generated by [AVA](https://avajs.dev). module.exports = main;␊ `, } + +## warn-this-resolve-without-options + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + var foo$1 = 21;␊ + ␊ + const foo = foo$1;␊ + ␊ + var main = foo * 2;␊ + ␊ + module.exports = main;␊ + `, + } diff --git a/packages/commonjs/test/snapshots/function.js.snap b/packages/commonjs/test/snapshots/function.js.snap index c4fac9a4fa226d12ca80434f86677057cb751983..e9e8b3c332571bd81f28f7d9518ab356eac84fac 100644 GIT binary patch delta 21790 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 delta 21762 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 o>eX&AP9;_=GmK?6fca4IGdIChs4