From 38a3aa4c75dba583a30a26b83c2be39ab81e93bf Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 19 Nov 2021 06:38:57 +0100 Subject: [PATCH] feat(commonjs): limit ignoreTryCatch to external requires (#1038) --- packages/commonjs/README.md | 10 ++- packages/commonjs/src/generate-imports.js | 80 ++++++++++++++---- packages/commonjs/src/index.js | 2 +- packages/commonjs/src/transform-commonjs.js | 62 +++----------- .../fixtures/form/try-catch-remove/_config.js | 5 -- .../fixtures/form/try-catch-remove/output.js | 12 --- .../function/try-catch-internal/_config.js | 7 ++ .../function/try-catch-internal/dep.js | 1 + .../function/try-catch-internal/main.js | 7 ++ .../function/try-catch-remove/_config.js | 5 ++ .../try-catch-remove/main.js} | 2 +- .../commonjs/test/snapshots/function.js.md | 38 +++++++++ .../commonjs/test/snapshots/function.js.snap | Bin 19932 -> 20032 bytes 13 files changed, 139 insertions(+), 92 deletions(-) delete mode 100644 packages/commonjs/test/fixtures/form/try-catch-remove/_config.js delete mode 100644 packages/commonjs/test/fixtures/form/try-catch-remove/output.js create mode 100644 packages/commonjs/test/fixtures/function/try-catch-internal/_config.js create mode 100644 packages/commonjs/test/fixtures/function/try-catch-internal/dep.js create mode 100644 packages/commonjs/test/fixtures/function/try-catch-internal/main.js create mode 100644 packages/commonjs/test/fixtures/function/try-catch-remove/_config.js rename packages/commonjs/test/fixtures/{form/try-catch-remove/input.js => function/try-catch-remove/main.js} (56%) diff --git a/packages/commonjs/README.md b/packages/commonjs/README.md index 9f8724204..127b7e688 100644 --- a/packages/commonjs/README.md +++ b/packages/commonjs/README.md @@ -144,15 +144,17 @@ Sometimes you have to leave require statements unconverted. Pass an array contai Type: `boolean | 'remove' | string[] | ((id: string) => boolean)`
Default: `true` -In most cases, where `require` calls are inside a `try-catch` clause, they should be left unconverted as it requires an optional dependency that may or may not be installed beside the rolled up package. +In most cases, where `require` calls to external dependencies are inside a `try-catch` clause, they should be left unconverted as it requires an optional dependency that may or may not be installed beside the rolled up package. Due to the conversion of `require` to a static `import` - the call is hoisted to the top of the file, outside of the `try-catch` clause. -- `true`: All `require` calls inside a `try` will be left unconverted. -- `false`: All `require` calls inside a `try` will be converted as if the `try-catch` clause is not there. -- `remove`: Remove all `require` calls from inside any `try` block. +- `true`: All external `require` calls inside a `try` will be left unconverted. +- `false`: All external `require` calls inside a `try` will be converted as if the `try-catch` clause is not there. +- `remove`: Remove all external `require` calls from inside any `try` block. - `string[]`: Pass an array containing the IDs to left unconverted. - `((id: string) => boolean|'remove')`: Pass a function that control individual IDs. +Note that non-external requires will not be ignored by this option. + ### `ignoreDynamicRequires` Type: `boolean` diff --git a/packages/commonjs/src/generate-imports.js b/packages/commonjs/src/generate-imports.js index 34f66e518..7aa0c33a7 100644 --- a/packages/commonjs/src/generate-imports.js +++ b/packages/commonjs/src/generate-imports.js @@ -5,8 +5,10 @@ import { sync as nodeResolveSync } from 'resolve'; import { DYNAMIC_MODULES_ID, EXPORTS_SUFFIX, + EXTERNAL_SUFFIX, HELPERS_ID, IS_WRAPPED_COMMONJS, + isWrappedId, MODULE_SUFFIX, wrapId } from './helpers'; @@ -96,14 +98,27 @@ export function hasDynamicModuleForPath(source, id, dynamicRequireModules) { export function getRequireHandlers() { const requireExpressions = []; - function addRequireStatement(sourceId, node, scope, usesReturnValue, toBeRemoved) { - requireExpressions.push({ sourceId, node, scope, usesReturnValue, toBeRemoved }); + function addRequireStatement( + sourceId, + node, + scope, + usesReturnValue, + isInsideTryBlock, + toBeRemoved + ) { + requireExpressions.push({ + sourceId, + node, + scope, + usesReturnValue, + isInsideTryBlock, + toBeRemoved + }); } async function rewriteRequireExpressionsAndGetImportBlock( magicString, topLevelDeclarations, - topLevelRequireDeclarators, reassignedNames, helpersName, dynamicRequireName, @@ -114,7 +129,8 @@ export function getRequireHandlers() { resolveRequireSourcesAndGetMeta, needsRequireWrapper, isEsModule, - usesRequire + usesRequire, + getIgnoreTryCatchRequireStatementMode ) { const imports = []; imports.push(`import * as ${helpersName} from "${HELPERS_ID}";`); @@ -141,7 +157,13 @@ export function getRequireHandlers() { needsRequireWrapper ? IS_WRAPPED_COMMONJS : !isEsModule, Object.keys(requiresBySource) ); - processRequireExpressions(imports, requireTargets, requiresBySource, magicString); + processRequireExpressions( + imports, + requireTargets, + requiresBySource, + getIgnoreTryCatchRequireStatementMode, + magicString + ); return { importBlock: imports.length ? `${imports.join('\n')}\n\n` : '', usesRequireWrapper @@ -156,37 +178,59 @@ export function getRequireHandlers() { function collectSources(requireExpressions) { const requiresBySource = Object.create(null); - for (const { sourceId, node, scope, usesReturnValue, toBeRemoved } of requireExpressions) { + for (const requireExpression of requireExpressions) { + const { sourceId } = requireExpression; if (!requiresBySource[sourceId]) { requiresBySource[sourceId] = []; } const requires = requiresBySource[sourceId]; - requires.push({ node, scope, usesReturnValue, toBeRemoved }); + requires.push(requireExpression); } return requiresBySource; } -function processRequireExpressions(imports, requireTargets, requiresBySource, magicString) { +function processRequireExpressions( + imports, + requireTargets, + requiresBySource, + getIgnoreTryCatchRequireStatementMode, + magicString +) { const generateRequireName = getGenerateRequireName(); - for (const { source, id: resolveId, isCommonJS } of requireTargets) { + for (const { source, id: resolvedId, isCommonJS } of requireTargets) { const requires = requiresBySource[source]; const name = generateRequireName(requires); - if (isCommonJS === IS_WRAPPED_COMMONJS) { - for (const { node } of requires) { - magicString.overwrite(node.start, node.end, `${name}()`); - } - imports.push(`import { __require as ${name} } from ${JSON.stringify(resolveId)};`); - } else { - let usesRequired = false; - for (const { node, usesReturnValue, toBeRemoved } of requires) { + let usesRequired = false; + let needsImport = false; + for (const { node, usesReturnValue, toBeRemoved, isInsideTryBlock } of requires) { + const { canConvertRequire, shouldRemoveRequire } = + isInsideTryBlock && isWrappedId(resolvedId, EXTERNAL_SUFFIX) + ? getIgnoreTryCatchRequireStatementMode(source) + : { canConvertRequire: true, shouldRemoveRequire: false }; + if (shouldRemoveRequire) { if (usesReturnValue) { + magicString.overwrite(node.start, node.end, 'undefined'); + } else { + magicString.remove(toBeRemoved.start, toBeRemoved.end); + } + } else if (canConvertRequire) { + needsImport = true; + if (isCommonJS === IS_WRAPPED_COMMONJS) { + magicString.overwrite(node.start, node.end, `${name}()`); + } else if (usesReturnValue) { usesRequired = true; magicString.overwrite(node.start, node.end, name); } else { magicString.remove(toBeRemoved.start, toBeRemoved.end); } } - imports.push(`import ${usesRequired ? `${name} from ` : ''}${JSON.stringify(resolveId)};`); + } + if (needsImport) { + if (isCommonJS === IS_WRAPPED_COMMONJS) { + imports.push(`import { __require as ${name} } from ${JSON.stringify(resolvedId)};`); + } else { + imports.push(`import ${usesRequired ? `${name} from ` : ''}${JSON.stringify(resolvedId)};`); + } } } } diff --git a/packages/commonjs/src/index.js b/packages/commonjs/src/index.js index fe73d0f8d..45eb23c98 100644 --- a/packages/commonjs/src/index.js +++ b/packages/commonjs/src/index.js @@ -93,7 +93,7 @@ export default function commonjs(options = {}) { return { canConvertRequire: mode !== 'remove' && mode !== true, - shouldRemoveRequireStatement: mode === 'remove' + shouldRemoveRequire: mode === 'remove' }; }; diff --git a/packages/commonjs/src/transform-commonjs.js b/packages/commonjs/src/transform-commonjs.js index f0c43c362..7b53b5ab8 100644 --- a/packages/commonjs/src/transform-commonjs.js +++ b/packages/commonjs/src/transform-commonjs.js @@ -8,8 +8,8 @@ import MagicString from 'magic-string'; import { getKeypath, - isDefineCompiledEsm, hasDefineEsmProperty, + isDefineCompiledEsm, isFalsy, isReference, isShorthandProperty, @@ -75,7 +75,6 @@ export default async function transformCommonjs( // TODO technically wrong since globals isn't populated yet, but ¯\_(ツ)_/¯ const helpersName = deconflict([scope], globals, 'commonjsHelpers'); const dynamicRequireName = deconflict([scope], globals, 'commonjsRequire'); - let hasRemovedRequire = false; const { addRequireStatement, rewriteRequireExpressionsAndGetImportBlock } = getRequireHandlers(); @@ -84,7 +83,6 @@ export default async function transformCommonjs( // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh) const reassignedNames = new Set(); const topLevelDeclarations = []; - const topLevelRequireDeclarators = new Set(); const skippedNodes = new Set(); const moduleAccessScopes = new Set([scope]); const exportsAccessScopes = new Set([scope]); @@ -223,51 +221,14 @@ export default async function transformCommonjs( if (!isIgnoredRequireStatement(node, ignoreRequire)) { const usesReturnValue = parent.type !== 'ExpressionStatement'; - - let canConvertRequire = true; - let shouldRemoveRequireStatement = false; - - if (currentTryBlockEnd !== null) { - const ignoreTryCatchRequire = getIgnoreTryCatchRequireStatementMode( - node.arguments[0].value - ); - ({ canConvertRequire, shouldRemoveRequireStatement } = ignoreTryCatchRequire); - if (shouldRemoveRequireStatement) { - hasRemovedRequire = true; - } - } - - const sourceId = getRequireStringArg(node); - if (shouldRemoveRequireStatement) { - if (usesReturnValue) { - magicString.overwrite(node.start, node.end, `undefined`); - } else { - magicString.remove(parent.start, parent.end); - } - return; - } - - if (canConvertRequire) { - addRequireStatement( - sourceId, - node, - scope, - usesReturnValue, - parent.type === 'ExpressionStatement' ? parent : node - ); - } - - if (usesReturnValue) { - if ( - parent.type === 'VariableDeclarator' && - !scope.parent && - parent.id.type === 'Identifier' - ) { - // This will allow us to reuse this variable name as the imported variable if it is not reassigned - // and does not conflict with variables in other places where this is imported - topLevelRequireDeclarators.add(parent); - } - } + addRequireStatement( + getRequireStringArg(node), + node, + scope, + usesReturnValue, + currentTryBlockEnd !== null, + parent.type === 'ExpressionStatement' ? parent : node + ); } return; } @@ -423,7 +384,6 @@ export default async function transformCommonjs( uses.module || uses.exports || uses.require || - hasRemovedRequire || topLevelDefineCompiledEsmExpressions.length > 0 ) && (ignoreGlobal || !uses.global) @@ -453,7 +413,6 @@ export default async function transformCommonjs( const { importBlock, usesRequireWrapper } = await rewriteRequireExpressionsAndGetImportBlock( magicString, topLevelDeclarations, - topLevelRequireDeclarators, reassignedNames, helpersName, dynamicRequireName, @@ -464,7 +423,8 @@ export default async function transformCommonjs( resolveRequireSourcesAndGetMeta, needsRequireWrapper, isEsModule, - uses.require + uses.require, + getIgnoreTryCatchRequireStatementMode ); const exportBlock = isEsModule ? '' diff --git a/packages/commonjs/test/fixtures/form/try-catch-remove/_config.js b/packages/commonjs/test/fixtures/form/try-catch-remove/_config.js deleted file mode 100644 index de5563f0d..000000000 --- a/packages/commonjs/test/fixtures/form/try-catch-remove/_config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - options: { - ignoreTryCatch: (id) => id === 'uninstalled-external-module' ? 'remove' : false - } -}; diff --git a/packages/commonjs/test/fixtures/form/try-catch-remove/output.js b/packages/commonjs/test/fixtures/form/try-catch-remove/output.js deleted file mode 100644 index e18f11df0..000000000 --- a/packages/commonjs/test/fixtures/form/try-catch-remove/output.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable global-require */ -import * as commonjsHelpers from "_commonjsHelpers.js"; -import { commonjsRequire as commonjsRequire } from "_commonjs-dynamic-modules"; -import { __exports as input } from "\u0000fixtures/form/try-catch-remove/input.js?commonjs-exports" - -try { - -} catch (ignored) { - /* ignore */ -} - -export { input as __moduleExports, input as default }; diff --git a/packages/commonjs/test/fixtures/function/try-catch-internal/_config.js b/packages/commonjs/test/fixtures/function/try-catch-internal/_config.js new file mode 100644 index 000000000..fec6f7626 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/try-catch-internal/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: + 'inlines internal require statements in try-catch blocks even when try-catch is ignored', + pluginOptions: { + ignoreTryCatch: true + } +}; diff --git a/packages/commonjs/test/fixtures/function/try-catch-internal/dep.js b/packages/commonjs/test/fixtures/function/try-catch-internal/dep.js new file mode 100644 index 000000000..94ecacb72 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/try-catch-internal/dep.js @@ -0,0 +1 @@ +exports.foo = 'foo'; diff --git a/packages/commonjs/test/fixtures/function/try-catch-internal/main.js b/packages/commonjs/test/fixtures/function/try-catch-internal/main.js new file mode 100644 index 000000000..df773bb29 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/try-catch-internal/main.js @@ -0,0 +1,7 @@ +/* eslint-disable global-require */ + +try { + t.is(require('./dep.js').foo, 'foo'); +} catch (err) { + throw new Error(`Could not require: ${err}`); +} diff --git a/packages/commonjs/test/fixtures/function/try-catch-remove/_config.js b/packages/commonjs/test/fixtures/function/try-catch-remove/_config.js new file mode 100644 index 000000000..c7d4363f4 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/try-catch-remove/_config.js @@ -0,0 +1,5 @@ +module.exports = { + pluginOptions: { + ignoreTryCatch: (id) => (id === 'uninstalled-external-module' ? 'remove' : false) + } +}; diff --git a/packages/commonjs/test/fixtures/form/try-catch-remove/input.js b/packages/commonjs/test/fixtures/function/try-catch-remove/main.js similarity index 56% rename from packages/commonjs/test/fixtures/form/try-catch-remove/input.js rename to packages/commonjs/test/fixtures/function/try-catch-remove/main.js index 1aae6b291..fa5fa693e 100644 --- a/packages/commonjs/test/fixtures/form/try-catch-remove/input.js +++ b/packages/commonjs/test/fixtures/function/try-catch-remove/main.js @@ -3,5 +3,5 @@ try { require('uninstalled-external-module'); } catch (ignored) { - /* ignore */ + throw new Error('This should no longer be reached as the require is removed.'); } diff --git a/packages/commonjs/test/snapshots/function.js.md b/packages/commonjs/test/snapshots/function.js.md index e09892341..68e51acb0 100644 --- a/packages/commonjs/test/snapshots/function.js.md +++ b/packages/commonjs/test/snapshots/function.js.md @@ -7030,3 +7030,41 @@ Generated by [AVA](https://avajs.dev). module.exports = main;␊ `, } + +## try-catch-internal + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + var main = {};␊ + ␊ + var dep = {};␊ + ␊ + dep.foo = 'foo';␊ + ␊ + /* eslint-disable global-require */␊ + ␊ + try {␊ + t.is(dep.foo, 'foo');␊ + } catch (err) {␊ + throw new Error(`Could not require: ${err}`);␊ + }␊ + ␊ + module.exports = main;␊ + `, + } + +## try-catch-remove + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + var main = {};␊ + ␊ + module.exports = main;␊ + `, + } diff --git a/packages/commonjs/test/snapshots/function.js.snap b/packages/commonjs/test/snapshots/function.js.snap index 732515802d01b322faf9285733d88faaabc3f8eb..568120c83d385a08c1d41b26413a707caa8646e4 100644 GIT binary patch delta 19737 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 delta 19571 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