From 2aa0ac95eccc94bb64f836241fc8e68ea8a13779 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 12 Nov 2021 12:54:11 +0100 Subject: [PATCH] feat(commonjs): Infer type for unidentified modules (#1038) --- packages/commonjs/src/index.js | 29 ++- .../commonjs/src/resolve-require-sources.js | 3 + packages/commonjs/src/transform-commonjs.js | 4 +- .../_config.js | 0 .../a-imports-b.js | 0 .../b-imports-c.js | 0 .../c-imports-a.js | 0 .../main.js | 0 .../_config.js | 0 .../main.js | 0 .../other.js | 0 .../_config.js | 0 .../a-imports-b.js | 0 .../b-imports-c.js | 0 .../c-imports-a.js | 0 .../main.js | 0 .../_config.js | 0 .../main.js | 0 .../_config.js | 0 .../a-imports-b.js | 0 .../b-imports-c.js | 0 .../c-imports-a.js | 0 .../main.js | 0 .../_config.js | 31 +++ .../main.js | 0 .../_config.js | 2 +- .../assignExports.js | 0 .../compiledEsm.js | 0 .../main.js | 0 .../wrappedExports.js | 0 .../_config.js | 2 +- .../assignModuleAndExports.js | 0 .../assignModuleExports.js | 0 .../main.js | 0 .../wrappedModuleExports.js | 0 .../_config.js | 2 +- .../main.js | 0 .../replaceModuleExports.js | 0 .../_config.js | 7 + .../error.js | 1 + .../main.js | 2 + .../_config.js | 2 +- .../dep.js | 0 .../main.js | 0 .../strict.js | 0 .../_config.js | 6 +- .../strict-requires-multiple-entry/main.js | 1 + .../other.js | 0 .../commonjs/test/snapshots/function.js.md | 191 +++++++++++++----- .../commonjs/test/snapshots/function.js.snap | Bin 19153 -> 19636 bytes 50 files changed, 220 insertions(+), 63 deletions(-) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-auto => strict-requires-auto}/_config.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-auto => strict-requires-auto}/a-imports-b.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-auto => strict-requires-auto}/b-imports-c.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-auto => strict-requires-auto}/c-imports-a.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-auto => strict-requires-auto}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-circular => strict-requires-circular}/_config.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-circular => strict-requires-circular}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-circular => strict-requires-circular}/other.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-cycle-detection => strict-requires-cycle-detection}/_config.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-cycle-detection => strict-requires-cycle-detection}/a-imports-b.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-cycle-detection => strict-requires-cycle-detection}/b-imports-c.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-cycle-detection => strict-requires-cycle-detection}/c-imports-a.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-cycle-detection => strict-requires-cycle-detection}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-debug-none => strict-requires-debug-none}/_config.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-debug-none => strict-requires-debug-none}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-debug => strict-requires-debug}/_config.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-debug => strict-requires-debug}/a-imports-b.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-debug => strict-requires-debug}/b-imports-c.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-debug => strict-requires-debug}/c-imports-a.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-debug => strict-requires-debug}/main.js (100%) create mode 100644 packages/commonjs/test/fixtures/function/strict-requires-entry-node-resolve/_config.js rename packages/commonjs/test/fixtures/function/{strict-require-semantic-entry => strict-requires-entry-node-resolve}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-exports => strict-requires-exportmode-exports}/_config.js (59%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-exports => strict-requires-exportmode-exports}/assignExports.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-exports => strict-requires-exportmode-exports}/compiledEsm.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-exports => strict-requires-exportmode-exports}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-exports => strict-requires-exportmode-exports}/wrappedExports.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-module => strict-requires-exportmode-module}/_config.js (59%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-module => strict-requires-exportmode-module}/assignModuleAndExports.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-module => strict-requires-exportmode-module}/assignModuleExports.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-module => strict-requires-exportmode-module}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-module => strict-requires-exportmode-module}/wrappedModuleExports.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-replace => strict-requires-exportmode-replace}/_config.js (59%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-replace => strict-requires-exportmode-replace}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-exportmode-replace => strict-requires-exportmode-replace}/replaceModuleExports.js (100%) create mode 100644 packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/_config.js create mode 100644 packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/error.js create mode 100644 packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/main.js rename packages/commonjs/test/fixtures/function/{strict-require-semantic-from-esm => strict-requires-from-esm}/_config.js (55%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-from-esm => strict-requires-from-esm}/dep.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-from-esm => strict-requires-from-esm}/main.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-from-esm => strict-requires-from-esm}/strict.js (100%) rename packages/commonjs/test/fixtures/function/{strict-require-semantic-entry => strict-requires-multiple-entry}/_config.js (60%) create mode 100644 packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/main.js rename packages/commonjs/test/fixtures/function/{strict-require-semantic-entry => strict-requires-multiple-entry}/other.js (100%) diff --git a/packages/commonjs/src/index.js b/packages/commonjs/src/index.js index b3e277e0e..53be16678 100644 --- a/packages/commonjs/src/index.js +++ b/packages/commonjs/src/index.js @@ -60,10 +60,11 @@ export default function commonjs(options = {}) { : () => typeof defaultIsModuleExportsOption === 'boolean' ? defaultIsModuleExportsOption : 'auto'; - const { resolveRequireSourcesAndGetMeta, getWrappedIds } = getResolveRequireSourcesAndGetMeta( - extensions, - detectCycles - ); + const { + resolveRequireSourcesAndGetMeta, + getWrappedIds, + isRequiredId + } = getResolveRequireSourcesAndGetMeta(extensions, detectCycles); const dynamicRequireModuleSet = getDynamicRequireModuleSet(options.dynamicRequireTargets); const isDynamicRequireModulesEnabled = dynamicRequireModuleSet.size > 0; const commonDir = isDynamicRequireModulesEnabled @@ -115,7 +116,8 @@ export default function commonjs(options = {}) { if ( !dynamicRequireModuleSet.has(normalizePathSlashes(id)) && - (!hasCjsKeywords(code, ignoreGlobal) || (isEsModule && !options.transformMixedEsModules)) + (!(hasCjsKeywords(code, ignoreGlobal) || isRequiredId(id)) || + (isEsModule && !options.transformMixedEsModules)) ) { return { meta: { commonjs: { isCommonJS: false } } }; } @@ -140,13 +142,28 @@ export default function commonjs(options = {}) { ast, getDefaultIsModuleExports(id), needsRequireWrapper, - resolveRequireSourcesAndGetMeta(this) + resolveRequireSourcesAndGetMeta(this), + isRequiredId(id) ); } return { name: 'commonjs', + options(options) { + // Always sort the node-resolve plugin after the commonjs plugin as otherwise CommonJS entries + // will not work with strictRequires: true + const { plugins } = options; + if (Array.isArray(plugins)) { + const cjsIndex = plugins.findIndex((plugin) => plugin.name === 'commonjs'); + const nodeResolveIndex = plugins.findIndex((plugin) => plugin.name === 'node-resolve'); + if (nodeResolveIndex >= 0 && nodeResolveIndex < cjsIndex) { + plugins.splice(cjsIndex + 1, 0, plugins[nodeResolveIndex]); + plugins.splice(nodeResolveIndex, 1); + } + } + }, + buildStart() { validateRollupVersion(this.meta.rollupVersion, peerDependencies.rollup); if (options.namedExports != null) { diff --git a/packages/commonjs/src/resolve-require-sources.js b/packages/commonjs/src/resolve-require-sources.js index ce3727288..08b0de297 100644 --- a/packages/commonjs/src/resolve-require-sources.js +++ b/packages/commonjs/src/resolve-require-sources.js @@ -3,6 +3,7 @@ import { resolveExtensions } from './resolve-id'; export function getResolveRequireSourcesAndGetMeta(extensions, detectCycles) { const knownCjsModuleTypes = Object.create(null); + const requiredIds = Object.create(null); const dependentModules = Object.create(null); const getDependentModules = (id) => dependentModules[id] || (dependentModules[id] = Object.create(null)); @@ -12,6 +13,7 @@ export function getResolveRequireSourcesAndGetMeta(extensions, detectCycles) { Object.keys(knownCjsModuleTypes).filter( (id) => knownCjsModuleTypes[id] === IS_WRAPPED_COMMONJS ), + isRequiredId: (id) => requiredIds[id], resolveRequireSourcesAndGetMeta: (rollupContext) => async (id, isParentCommonJS, sources) => { knownCjsModuleTypes[id] = isParentCommonJS; const requireTargets = await Promise.all( @@ -34,6 +36,7 @@ export function getResolveRequireSourcesAndGetMeta(extensions, detectCycles) { if (resolved.external) { return { id: wrapId(childId, EXTERNAL_SUFFIX), allowProxy: false }; } + requiredIds[childId] = true; const parentDependentModules = getDependentModules(id); const childDependentModules = getDependentModules(childId); childDependentModules[id] = true; diff --git a/packages/commonjs/src/transform-commonjs.js b/packages/commonjs/src/transform-commonjs.js index fed2690d6..c6cfbdc1a 100644 --- a/packages/commonjs/src/transform-commonjs.js +++ b/packages/commonjs/src/transform-commonjs.js @@ -51,7 +51,8 @@ export default async function transformCommonjs( astCache, defaultIsModuleExports, needsRequireWrapper, - resolveRequireSourcesAndGetMeta + resolveRequireSourcesAndGetMeta, + isRequired ) { const ast = astCache || tryParse(parse, code, id); const magicString = new MagicString(code); @@ -418,6 +419,7 @@ export default async function transformCommonjs( if ( !( shouldWrap || + isRequired || uses.module || uses.exports || uses.require || diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-auto/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-auto/_config.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-auto/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-auto/_config.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-auto/a-imports-b.js b/packages/commonjs/test/fixtures/function/strict-requires-auto/a-imports-b.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-auto/a-imports-b.js rename to packages/commonjs/test/fixtures/function/strict-requires-auto/a-imports-b.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-auto/b-imports-c.js b/packages/commonjs/test/fixtures/function/strict-requires-auto/b-imports-c.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-auto/b-imports-c.js rename to packages/commonjs/test/fixtures/function/strict-requires-auto/b-imports-c.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-auto/c-imports-a.js b/packages/commonjs/test/fixtures/function/strict-requires-auto/c-imports-a.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-auto/c-imports-a.js rename to packages/commonjs/test/fixtures/function/strict-requires-auto/c-imports-a.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-auto/main.js b/packages/commonjs/test/fixtures/function/strict-requires-auto/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-auto/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-auto/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-circular/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-circular/_config.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-circular/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-circular/_config.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-circular/main.js b/packages/commonjs/test/fixtures/function/strict-requires-circular/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-circular/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-circular/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-circular/other.js b/packages/commonjs/test/fixtures/function/strict-requires-circular/other.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-circular/other.js rename to packages/commonjs/test/fixtures/function/strict-requires-circular/other.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/_config.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/_config.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/a-imports-b.js b/packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/a-imports-b.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/a-imports-b.js rename to packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/a-imports-b.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/b-imports-c.js b/packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/b-imports-c.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/b-imports-c.js rename to packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/b-imports-c.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/c-imports-a.js b/packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/c-imports-a.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/c-imports-a.js rename to packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/c-imports-a.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/main.js b/packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-cycle-detection/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-cycle-detection/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-debug-none/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-debug-none/_config.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-debug-none/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-debug-none/_config.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-debug-none/main.js b/packages/commonjs/test/fixtures/function/strict-requires-debug-none/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-debug-none/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-debug-none/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-debug/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-debug/_config.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-debug/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-debug/_config.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-debug/a-imports-b.js b/packages/commonjs/test/fixtures/function/strict-requires-debug/a-imports-b.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-debug/a-imports-b.js rename to packages/commonjs/test/fixtures/function/strict-requires-debug/a-imports-b.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-debug/b-imports-c.js b/packages/commonjs/test/fixtures/function/strict-requires-debug/b-imports-c.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-debug/b-imports-c.js rename to packages/commonjs/test/fixtures/function/strict-requires-debug/b-imports-c.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-debug/c-imports-a.js b/packages/commonjs/test/fixtures/function/strict-requires-debug/c-imports-a.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-debug/c-imports-a.js rename to packages/commonjs/test/fixtures/function/strict-requires-debug/c-imports-a.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-debug/main.js b/packages/commonjs/test/fixtures/function/strict-requires-debug/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-debug/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-debug/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-requires-entry-node-resolve/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-entry-node-resolve/_config.js new file mode 100644 index 000000000..d5ae8bbb1 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/strict-requires-entry-node-resolve/_config.js @@ -0,0 +1,31 @@ +const assert = require('assert'); + +const { nodeResolve } = require('@rollup/plugin-node-resolve'); + +module.exports = { + description: + 'strict require semantic modules can be entry points when the node-resolve plugin is used', + pluginOptions: { + strictRequires: true + }, + options: { + plugins: [ + { + name: 'before-node', + buildStart({ plugins }) { + assert.deepStrictEqual( + plugins.map((plugin) => plugin.name), + ['before-node', 'after-node', 'commonjs', 'node-resolve'] + ); + } + }, + nodeResolve(), + { + name: 'after-node' + } + ] + }, + exports(exports) { + assert.deepStrictEqual(exports, { foo: 'foo' }); + } +}; diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-entry/main.js b/packages/commonjs/test/fixtures/function/strict-requires-entry-node-resolve/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-entry/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-entry-node-resolve/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/_config.js similarity index 59% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/_config.js index 683e0b747..350658699 100644 --- a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/_config.js +++ b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/_config.js @@ -1,6 +1,6 @@ module.exports = { description: 'supports using function wrappers for modules for export mode "exports"', pluginOptions: { - strictRequires: ['fixtures/function/strict-require-semantic-exportmode-exports/*E*.js'] + strictRequires: ['fixtures/function/strict-requires-exportmode-exports/*E*.js'] } }; diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/assignExports.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/assignExports.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/assignExports.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/assignExports.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/compiledEsm.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/compiledEsm.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/compiledEsm.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/compiledEsm.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/main.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/wrappedExports.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/wrappedExports.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-exports/wrappedExports.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-exports/wrappedExports.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/_config.js similarity index 59% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/_config.js index dda61ff86..6ca355ff8 100644 --- a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/_config.js +++ b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/_config.js @@ -1,6 +1,6 @@ module.exports = { description: 'supports using function wrappers for modules for export mode "module"', pluginOptions: { - strictRequires: ['fixtures/function/strict-require-semantic-exportmode-module/*E*.js'] + strictRequires: ['fixtures/function/strict-requires-exportmode-module/*E*.js'] } }; diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/assignModuleAndExports.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/assignModuleAndExports.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/assignModuleAndExports.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/assignModuleAndExports.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/assignModuleExports.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/assignModuleExports.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/assignModuleExports.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/assignModuleExports.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/main.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/wrappedModuleExports.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/wrappedModuleExports.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-module/wrappedModuleExports.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-module/wrappedModuleExports.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-replace/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-replace/_config.js similarity index 59% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-replace/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-replace/_config.js index 4f1cd0f78..1766448d1 100644 --- a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-replace/_config.js +++ b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-replace/_config.js @@ -1,6 +1,6 @@ module.exports = { description: 'supports using function wrappers for modules for export mode "replace"', pluginOptions: { - strictRequires: ['fixtures/function/strict-require-semantic-exportmode-replace/*E*.js'] + strictRequires: ['fixtures/function/strict-requires-exportmode-replace/*E*.js'] } }; diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-replace/main.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-replace/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-replace/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-replace/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-replace/replaceModuleExports.js b/packages/commonjs/test/fixtures/function/strict-requires-exportmode-replace/replaceModuleExports.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-exportmode-replace/replaceModuleExports.js rename to packages/commonjs/test/fixtures/function/strict-requires-exportmode-replace/replaceModuleExports.js diff --git a/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/_config.js new file mode 100644 index 000000000..aa3d115c7 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: + 'identifies files without module features as commonjs if they are required by another file', + pluginOptions: { + strictRequires: true + } +}; diff --git a/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/error.js b/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/error.js new file mode 100644 index 000000000..85dbb8dd0 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/error.js @@ -0,0 +1 @@ +throw new Error('FAIL'); diff --git a/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/main.js b/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/main.js new file mode 100644 index 000000000..c10a2ca10 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/strict-requires-file-without-module-type/main.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line global-require +t.is(0 && require('./error.js'), 0); diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-from-esm/_config.js similarity index 55% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-from-esm/_config.js index 9ba78e6a5..f445b5c88 100644 --- a/packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/_config.js +++ b/packages/commonjs/test/fixtures/function/strict-requires-from-esm/_config.js @@ -1,6 +1,6 @@ module.exports = { description: 'handles importing wrapped modules from ESM', pluginOptions: { - strictRequires: ['fixtures/function/strict-require-semantic-from-esm/strict.js'] + strictRequires: ['fixtures/function/strict-requires-from-esm/strict.js'] } }; diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/dep.js b/packages/commonjs/test/fixtures/function/strict-requires-from-esm/dep.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/dep.js rename to packages/commonjs/test/fixtures/function/strict-requires-from-esm/dep.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/main.js b/packages/commonjs/test/fixtures/function/strict-requires-from-esm/main.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/main.js rename to packages/commonjs/test/fixtures/function/strict-requires-from-esm/main.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/strict.js b/packages/commonjs/test/fixtures/function/strict-requires-from-esm/strict.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-from-esm/strict.js rename to packages/commonjs/test/fixtures/function/strict-requires-from-esm/strict.js diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-entry/_config.js b/packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/_config.js similarity index 60% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-entry/_config.js rename to packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/_config.js index 757ac2cab..6e3b65ee2 100644 --- a/packages/commonjs/test/fixtures/function/strict-require-semantic-entry/_config.js +++ b/packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/_config.js @@ -4,15 +4,15 @@ module.exports = { description: 'strict require semantic modules can be entry points', options: { input: [ - 'fixtures/function/strict-require-semantic-entry/main.js', - 'fixtures/function/strict-require-semantic-entry/other.js' + 'fixtures/function/strict-requires-multiple-entry/main.js', + 'fixtures/function/strict-requires-multiple-entry/other.js' ], output: { chunkFileNames: 'generated-[name].js' } }, pluginOptions: { - strictRequires: ['fixtures/function/strict-require-semantic-entry/main.js'] + strictRequires: ['fixtures/function/strict-requires-multiple-entry/main.js'] }, exports(exports) { assert.deepStrictEqual(exports, { foo: 'foo' }); diff --git a/packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/main.js b/packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/main.js new file mode 100644 index 000000000..94ecacb72 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/main.js @@ -0,0 +1 @@ +exports.foo = 'foo'; diff --git a/packages/commonjs/test/fixtures/function/strict-require-semantic-entry/other.js b/packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/other.js similarity index 100% rename from packages/commonjs/test/fixtures/function/strict-require-semantic-entry/other.js rename to packages/commonjs/test/fixtures/function/strict-requires-multiple-entry/other.js diff --git a/packages/commonjs/test/snapshots/function.js.md b/packages/commonjs/test/snapshots/function.js.md index c9311e099..260d58e48 100644 --- a/packages/commonjs/test/snapshots/function.js.md +++ b/packages/commonjs/test/snapshots/function.js.md @@ -3588,9 +3588,7 @@ Generated by [AVA](https://avajs.dev). ␊ var require$$5 = 'bar';␊ ␊ - var none = /*#__PURE__*/Object.freeze({␊ - __proto__: null␊ - });␊ + var none = {};␊ ␊ const externalNamed = require$$0;␊ const externalMixed = require$$1;␊ @@ -3698,11 +3696,7 @@ Generated by [AVA](https://avajs.dev). ␊ var require$$5 = /*@__PURE__*/getAugmentedNamespace(_default$1);␊ ␊ - var none = /*#__PURE__*/Object.freeze({␊ - __proto__: null␊ - });␊ - ␊ - var require$$6 = /*@__PURE__*/getAugmentedNamespace(none);␊ + var none = {};␊ ␊ const externalNamed = require$$0;␊ const externalMixed = require$$1;␊ @@ -3711,7 +3705,7 @@ Generated by [AVA](https://avajs.dev). const namedExports = require$$3;␊ const mixedExports = require$$4;␊ const defaultExport = require$$5;␊ - const noExports = require$$6;␊ + const noExports = none;␊ ␊ t.deepEqual(namedExports, { foo: 'foo' }, 'named exports');␊ t.deepEqual(mixedExports, { foo: 'foo', default: 'bar' }, 'mixed exports');␊ @@ -4004,9 +3998,7 @@ Generated by [AVA](https://avajs.dev). 'default': _default␊ });␊ ␊ - var none = /*#__PURE__*/Object.freeze({␊ - __proto__: null␊ - });␊ + var none = {};␊ ␊ const externalNamed = externalEsmNamed__namespace;␊ const externalMixed = externalEsmMixed__namespace;␊ @@ -4085,9 +4077,7 @@ Generated by [AVA](https://avajs.dev). ␊ var require$$5 = 'bar';␊ ␊ - var none = /*#__PURE__*/Object.freeze({␊ - __proto__: null␊ - });␊ + var none = {};␊ ␊ const externalNamed = require$$0;␊ const externalMixed = require$$1;␊ @@ -4235,11 +4225,7 @@ Generated by [AVA](https://avajs.dev). ␊ var require$$5 = /*@__PURE__*/getAugmentedNamespace(_default$1);␊ ␊ - var none = /*#__PURE__*/Object.freeze({␊ - __proto__: null␊ - });␊ - ␊ - var require$$6 = /*@__PURE__*/getAugmentedNamespace(none);␊ + var none = {};␊ ␊ const externalNamed = require$$0;␊ const externalMixed = require$$1;␊ @@ -4248,7 +4234,7 @@ Generated by [AVA](https://avajs.dev). const namedExports = require$$3;␊ const mixedExports = require$$4;␊ const defaultExport = require$$5;␊ - const noExports = require$$6;␊ + const noExports = none;␊ ␊ t.deepEqual(namedExports, { foo: 'foo' }, 'named exports');␊ t.deepEqual(mixedExports, { foo: 'foo', default: 'bar' }, 'mixed exports');␊ @@ -5442,7 +5428,7 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-auto +## strict-requires-auto > Snapshot 1 @@ -5491,7 +5477,7 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-circular +## strict-requires-circular > Snapshot 1 @@ -5527,7 +5513,7 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-cycle-detection +## strict-requires-cycle-detection > Snapshot 1 @@ -5576,7 +5562,7 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-debug +## strict-requires-debug > Snapshot 1 @@ -5625,7 +5611,7 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-debug-none +## strict-requires-debug-none > Snapshot 1 @@ -5638,12 +5624,12 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-entry +## strict-requires-entry > Snapshot 1 { - 'generated-main.js': `'use strict';␊ + 'main.js': `'use strict';␊ ␊ var main = {};␊ ␊ @@ -5656,29 +5642,13 @@ Generated by [AVA](https://avajs.dev). return main;␊ }␊ ␊ - exports.requireMain = requireMain;␊ - `, - 'main.js': `'use strict';␊ - ␊ - var main = require('./generated-main.js');␊ - ␊ - var mainExports = main.requireMain();␊ + var mainExports = requireMain();␊ ␊ module.exports = mainExports;␊ `, - 'other.js': `'use strict';␊ - ␊ - var main = require('./generated-main.js');␊ - ␊ - var other = {};␊ - ␊ - t.is(main.requireMain().foo, 'foo');␊ - ␊ - module.exports = other;␊ - `, } -## strict-require-semantic-exportmode-exports +## strict-requires-exportmode-exports > Snapshot 1 @@ -5754,7 +5724,7 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-exportmode-module +## strict-requires-exportmode-module > Snapshot 1 @@ -5830,7 +5800,7 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-exportmode-replace +## strict-requires-exportmode-replace > Snapshot 1 @@ -5862,7 +5832,32 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-require-semantic-from-esm +## strict-requires-file-without-module-type + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + var main = {};␊ + ␊ + var hasRequiredMain;␊ + ␊ + function requireMain () {␊ + if (hasRequiredMain) return main;␊ + hasRequiredMain = 1;␊ + // eslint-disable-next-line global-require␊ + t.is(0 , 0);␊ + return main;␊ + }␊ + ␊ + var mainExports = requireMain();␊ + ␊ + module.exports = mainExports;␊ + `, + } + +## strict-requires-from-esm > Snapshot 1 @@ -5888,6 +5883,80 @@ Generated by [AVA](https://avajs.dev). `, } +## strict-requires-magic-string + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + Object.defineProperty(exports, '__esModule', { value: true });␊ + ␊ + var main = {};␊ + ␊ + var hasRequiredMain;␊ + ␊ + function requireMain () {␊ + if (hasRequiredMain) return main;␊ + hasRequiredMain = 1;␊ + console.log('hey');␊ + // magic-string@0.25.7␊ + const m = new MagicString('0123456789');␊ + console.log(␊ + m.prependRight(0, 'W').prependLeft(3, 'AB').appendRight(9, 'XY').remove(6, 8).toString()␊ + );␊ + const bundle = new MagicString.Bundle();␊ + bundle.addSource({ filename: 'foo.txt', content: m });␊ + const map = bundle.generateMap({ file: 'bundle.txt', includeContent: true, hires: true });␊ + console.log(JSON.stringify(map));␊ + main.foo = 'foo';␊ + return main;␊ + }␊ + ␊ + exports.__require = requireMain;␊ + `, + } + +## strict-requires-multiple-entry + +> Snapshot 1 + + { + 'generated-main.js': `'use strict';␊ + ␊ + var main = {};␊ + ␊ + var hasRequiredMain;␊ + ␊ + function requireMain () {␊ + if (hasRequiredMain) return main;␊ + hasRequiredMain = 1;␊ + main.foo = 'foo';␊ + return main;␊ + }␊ + ␊ + exports.requireMain = requireMain;␊ + `, + 'main.js': `'use strict';␊ + ␊ + var main = require('./generated-main.js');␊ + ␊ + var mainExports = main.requireMain();␊ + ␊ + module.exports = mainExports;␊ + `, + 'other.js': `'use strict';␊ + ␊ + var main = require('./generated-main.js');␊ + ␊ + var other = {};␊ + ␊ + t.is(main.requireMain().foo, 'foo');␊ + ␊ + module.exports = other;␊ + `, + } + ## this > Snapshot 1 @@ -6738,3 +6807,27 @@ Generated by [AVA](https://avajs.dev). module.exports = main;␊ `, } + +## strict-requires-entry-node-resolve + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + var main = {};␊ + ␊ + var hasRequiredMain;␊ + ␊ + function requireMain () {␊ + if (hasRequiredMain) return main;␊ + hasRequiredMain = 1;␊ + main.foo = 'foo';␊ + return main;␊ + }␊ + ␊ + var mainExports = requireMain();␊ + ␊ + module.exports = mainExports;␊ + `, + } diff --git a/packages/commonjs/test/snapshots/function.js.snap b/packages/commonjs/test/snapshots/function.js.snap index 71ddc9153d0d9342ba798d1498193c98856035c3..4ec48d232698616a4f850a2f6ddcf378ff8b05e9 100644 GIT binary patch literal 19636 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 literal 19153 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