From e9ccbbe6530c6e8ee0d50a8d4b89257278a82ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Sat, 23 Jan 2021 22:22:06 +0100 Subject: [PATCH] Implement `constantReexports` and `enumerableModuleMeta` assumptions (#12618) --- .../src/config/validation/options.js | 2 + .../src/index.js | 49 +++++++++++-------- .../src/normalize-and-load-metadata.js | 23 +++++---- .../src/index.js | 17 +++++-- .../export-from-2/input.mjs | 1 + .../export-from-2/output.js | 9 ++++ .../export-from-3/input.mjs | 1 + .../export-from-3/output.js | 10 ++++ .../export-from-4/input.mjs | 1 + .../export-from-4/output.js | 9 ++++ .../export-from-5/input.mjs | 1 + .../export-from-5/output.js | 10 ++++ .../export-from-6/input.mjs | 1 + .../export-from-6/output.js | 12 +++++ .../export-from/input.mjs | 1 + .../export-from/output.js | 9 ++++ .../import-export/input.mjs | 3 ++ .../import-export/output.js | 8 +++ .../assumption-constantReexports/options.json | 6 +++ .../export/input.mjs | 1 + .../export/output.js | 8 +++ .../options.json | 6 +++ .../src/index.js | 16 ++++-- .../export-from-2/input.mjs | 1 + .../export-from-2/output.js | 10 ++++ .../export-from-3/input.mjs | 1 + .../export-from-3/output.js | 11 +++++ .../export-from-4/input.mjs | 1 + .../export-from-4/output.js | 10 ++++ .../export-from-5/input.mjs | 1 + .../export-from-5/output.js | 11 +++++ .../export-from-6/input.mjs | 1 + .../export-from-6/output.js | 13 +++++ .../export-from/input.mjs | 1 + .../export-from/output.js | 10 ++++ .../import-export/input.mjs | 3 ++ .../import-export/output.js | 9 ++++ .../assumption-constantReexports/options.json | 6 +++ .../export/input.mjs | 1 + .../export/output.js | 6 +++ .../options.json | 6 +++ .../src/index.js | 15 ++++-- .../export-from-2/input.mjs | 1 + .../export-from-2/output.js | 21 ++++++++ .../export-from-3/input.mjs | 1 + .../export-from-3/output.js | 22 +++++++++ .../export-from-4/input.mjs | 1 + .../export-from-4/output.js | 21 ++++++++ .../export-from-5/input.mjs | 1 + .../export-from-5/output.js | 22 +++++++++ .../export-from-6/input.mjs | 1 + .../export-from-6/output.js | 24 +++++++++ .../export-from/input.mjs | 1 + .../export-from/output.js | 21 ++++++++ .../import-export/input.mjs | 3 ++ .../import-export/output.js | 20 ++++++++ .../assumption-constantReexports/options.json | 6 +++ .../export/input.mjs | 1 + .../export/output.js | 20 ++++++++ .../options.json | 6 +++ 60 files changed, 473 insertions(+), 41 deletions(-) create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-2/input.mjs create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-2/output.js create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-3/input.mjs create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-3/output.js create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-4/input.mjs create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-4/output.js create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-5/input.mjs create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-5/output.js create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-6/input.mjs create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-6/output.js create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from/input.mjs create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from/output.js create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/import-export/input.mjs create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/import-export/output.js create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/options.json create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/export/output.js create mode 100644 packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/options.json create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-2/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-2/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-3/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-3/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-4/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-4/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-5/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-5/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-6/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-6/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/import-export/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/import-export/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/options.json create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/export/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/options.json create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-2/input.mjs create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-2/output.js create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-3/input.mjs create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-3/output.js create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-4/input.mjs create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-4/output.js create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-5/input.mjs create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-5/output.js create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-6/input.mjs create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-6/output.js create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from/input.mjs create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from/output.js create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/import-export/input.mjs create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/import-export/output.js create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/options.json create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/export/output.js create mode 100644 packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/options.json diff --git a/packages/babel-core/src/config/validation/options.js b/packages/babel-core/src/config/validation/options.js index ecaab92cb908..4213a4492be3 100644 --- a/packages/babel-core/src/config/validation/options.js +++ b/packages/babel-core/src/config/validation/options.js @@ -333,6 +333,8 @@ export type NestingPath = RootPath | OverridesPath | EnvPath; export const assumptionsNames = new Set([ "arrayLikeIsIterable", + "constantReexports", + "enumerableModuleMeta", "ignoreFunctionLength", "ignoreToPrimitiveHint", "iterableIsArray", diff --git a/packages/babel-helper-module-transforms/src/index.js b/packages/babel-helper-module-transforms/src/index.js index 164462ee0450..5e244e2ab2f1 100644 --- a/packages/babel-helper-module-transforms/src/index.js +++ b/packages/babel-helper-module-transforms/src/index.js @@ -27,14 +27,19 @@ export { hasExports, isSideEffectImport, isModule, rewriteThis }; export function rewriteModuleStatementsAndPrepareHeader( path: NodePath, { + // TODO(Babel 8): Remove this + loose, + exportName, strict, allowTopLevelThis, strictMode, - loose, noInterop, lazy, esNamespaceOnly, + + constantReexports = loose, + enumerableModuleMeta = loose, }, ) { assert(isModule(path), "Cannot process module statements in a script"); @@ -42,7 +47,7 @@ export function rewriteModuleStatementsAndPrepareHeader( const meta = normalizeAndLoadModuleMetadata(path, exportName, { noInterop, - loose, + initializeReexports: constantReexports, lazy, esNamespaceOnly, }); @@ -67,7 +72,7 @@ export function rewriteModuleStatementsAndPrepareHeader( const headers = []; if (hasExports(meta) && !strict) { - headers.push(buildESModuleHeader(meta, loose /* enumerable */)); + headers.push(buildESModuleHeader(meta, enumerableModuleMeta)); } const nameList = buildExportNameListDeclaration(path, meta); @@ -78,7 +83,9 @@ export function rewriteModuleStatementsAndPrepareHeader( } // Create all of the statically known named exports. - headers.push(...buildExportInitializationStatements(path, meta, loose)); + headers.push( + ...buildExportInitializationStatements(path, meta, constantReexports), + ); return { meta, headers }; } @@ -128,7 +135,7 @@ export function wrapInterop( export function buildNamespaceInitStatements( metadata: ModuleMetadata, sourceMetadata: SourceModuleMetadata, - loose: boolean = false, + constantReexports: boolean = false, ) { const statements = []; @@ -146,8 +153,8 @@ export function buildNamespaceInitStatements( }), ); } - if (loose) { - statements.push(...buildReexportsFromMeta(metadata, sourceMetadata, loose)); + if (constantReexports) { + statements.push(...buildReexportsFromMeta(metadata, sourceMetadata, true)); } for (const exportName of sourceMetadata.reexportNamespace) { // Assign export to namespace object. @@ -172,7 +179,7 @@ export function buildNamespaceInitStatements( const statement = buildNamespaceReexport( metadata, t.cloneNode(srcNamespace), - loose, + constantReexports, ); statement.loc = sourceMetadata.reexportAll.loc; @@ -183,8 +190,8 @@ export function buildNamespaceInitStatements( } const ReexportTemplate = { - loose: template.statement`EXPORTS.EXPORT_NAME = NAMESPACE_IMPORT;`, - looseComputed: template.statement`EXPORTS["EXPORT_NAME"] = NAMESPACE_IMPORT;`, + constant: template.statement`EXPORTS.EXPORT_NAME = NAMESPACE_IMPORT;`, + constantComputed: template.statement`EXPORTS["EXPORT_NAME"] = NAMESPACE_IMPORT;`, spec: template` Object.defineProperty(EXPORTS, "EXPORT_NAME", { enumerable: true, @@ -198,7 +205,7 @@ const ReexportTemplate = { const buildReexportsFromMeta = ( meta: ModuleMetadata, metadata: SourceModuleMetadata, - loose, + constantReexports: boolean, ) => { const namespace = metadata.lazy ? t.callExpression(t.identifier(metadata.name), []) @@ -224,11 +231,11 @@ const buildReexportsFromMeta = ( EXPORT_NAME: exportName, NAMESPACE_IMPORT, }; - if (loose) { + if (constantReexports) { if (stringSpecifiers.has(exportName)) { - return ReexportTemplate.looseComputed(astNodes); + return ReexportTemplate.constantComputed(astNodes); } else { - return ReexportTemplate.loose(astNodes); + return ReexportTemplate.constant(astNodes); } } else { return ReexportTemplate.spec(astNodes); @@ -241,9 +248,9 @@ const buildReexportsFromMeta = ( */ function buildESModuleHeader( metadata: ModuleMetadata, - enumerable: boolean = false, + enumerableModuleMeta: boolean = false, ) { - return (enumerable + return (enumerableModuleMeta ? template.statement` EXPORTS.__esModule = true; ` @@ -257,8 +264,8 @@ function buildESModuleHeader( /** * Create a re-export initialization loop for a specific imported namespace. */ -function buildNamespaceReexport(metadata, namespace, loose) { - return (loose +function buildNamespaceReexport(metadata, namespace, constantReexports) { + return (constantReexports ? template.statement` Object.keys(NAMESPACE).forEach(function(key) { if (key === "default" || key === "__esModule") return; @@ -347,7 +354,7 @@ function buildExportNameListDeclaration( function buildExportInitializationStatements( programPath: NodePath, metadata: ModuleMetadata, - loose: boolean = false, + constantReexports: boolean = false, ) { const initStatements = []; @@ -365,8 +372,8 @@ function buildExportInitializationStatements( } for (const data of metadata.source.values()) { - if (!loose) { - initStatements.push(...buildReexportsFromMeta(metadata, data, loose)); + if (!constantReexports) { + initStatements.push(...buildReexportsFromMeta(metadata, data, false)); } for (const exportName of data.reexportNamespace) { exportNames.push(exportName); diff --git a/packages/babel-helper-module-transforms/src/normalize-and-load-metadata.js b/packages/babel-helper-module-transforms/src/normalize-and-load-metadata.js index c95e0b188cb2..84bac99f3ce0 100644 --- a/packages/babel-helper-module-transforms/src/normalize-and-load-metadata.js +++ b/packages/babel-helper-module-transforms/src/normalize-and-load-metadata.js @@ -86,7 +86,7 @@ export default function normalizeModuleAndLoadMetadata( exportName?: string, { noInterop = false, - loose = false, + initializeReexports = false, lazy = false, esNamespaceOnly = false, } = {}, @@ -100,10 +100,7 @@ export default function normalizeModuleAndLoadMetadata( const { local, source, hasExports } = getModuleMetadata( programPath, - { - loose, - lazy, - }, + { initializeReexports, lazy }, stringSpecifiers, ); @@ -170,12 +167,15 @@ function getExportSpecifierName( */ function getModuleMetadata( programPath: NodePath, - { loose, lazy }: { loose: boolean, lazy: boolean }, + { + lazy, + initializeReexports, + }: { lazy: boolean, initializeReexports: boolean }, stringSpecifiers: Set, ) { const localData = getLocalExportMetadata( programPath, - loose, + initializeReexports, stringSpecifiers, ); @@ -361,7 +361,7 @@ function getModuleMetadata( */ function getLocalExportMetadata( programPath: NodePath, - loose: boolean, + initializeReexports: boolean, stringSpecifiers: Set, ): Map { const bindingKindLookup = new Map(); @@ -376,7 +376,7 @@ function getLocalExportMetadata( if (child.node.declaration) { child = child.get("declaration"); } else if ( - loose && + initializeReexports && child.node.source && child.get("source").isStringLiteral() ) { @@ -429,7 +429,10 @@ function getLocalExportMetadata( }; programPath.get("body").forEach(child => { - if (child.isExportNamedDeclaration() && (loose || !child.node.source)) { + if ( + child.isExportNamedDeclaration() && + (initializeReexports || !child.node.source) + ) { if (child.node.declaration) { const declaration = child.get("declaration"); const ids = declaration.getOuterBindingIdentifierPaths(); diff --git a/packages/babel-plugin-transform-modules-amd/src/index.js b/packages/babel-plugin-transform-modules-amd/src/index.js index 7ea2b150f04b..9d916292d8df 100644 --- a/packages/babel-plugin-transform-modules-amd/src/index.js +++ b/packages/babel-plugin-transform-modules-amd/src/index.js @@ -38,7 +38,13 @@ function injectWrapper(path, wrapper) { export default declare((api, options) => { api.assertVersion(7); - const { loose, allowTopLevelThis, strict, strictMode, noInterop } = options; + const { allowTopLevelThis, strict, strictMode, noInterop } = options; + + const constantReexports = + api.assumption("constantReexports") ?? options.loose; + const enumerableModuleMeta = + api.assumption("enumerableModuleMeta") ?? options.loose; + return { name: "transform-modules-amd", @@ -103,7 +109,8 @@ export default declare((api, options) => { const { meta, headers } = rewriteModuleStatementsAndPrepareHeader( path, { - loose, + enumerableModuleMeta, + constantReexports, strict, strictMode, allowTopLevelThis, @@ -141,7 +148,11 @@ export default declare((api, options) => { } headers.push( - ...buildNamespaceInitStatements(meta, metadata, loose), + ...buildNamespaceInitStatements( + meta, + metadata, + constantReexports, + ), ); } diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-2/input.mjs b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-2/input.mjs new file mode 100644 index 000000000000..5be9a685aabd --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-2/input.mjs @@ -0,0 +1 @@ +export {foo as default} from "foo"; diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-2/output.js b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-2/output.js new file mode 100644 index 000000000000..c4d089259801 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-2/output.js @@ -0,0 +1,9 @@ +define(["exports", "foo"], function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.default = void 0; + _exports.default = _foo.foo; +}); diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-3/input.mjs b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-3/input.mjs new file mode 100644 index 000000000000..4461d79e3bf3 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-3/input.mjs @@ -0,0 +1 @@ +export {foo as default, bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-3/output.js b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-3/output.js new file mode 100644 index 000000000000..0497fcd36acb --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-3/output.js @@ -0,0 +1,10 @@ +define(["exports", "foo"], function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.bar = _exports.default = void 0; + _exports.default = _foo.foo; + _exports.bar = _foo.bar; +}); diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-4/input.mjs b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-4/input.mjs new file mode 100644 index 000000000000..9fff903bd969 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-4/input.mjs @@ -0,0 +1 @@ +export {foo as bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-4/output.js b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-4/output.js new file mode 100644 index 000000000000..ee86c9ebeb3a --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-4/output.js @@ -0,0 +1,9 @@ +define(["exports", "foo"], function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.bar = void 0; + _exports.bar = _foo.foo; +}); diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-5/input.mjs b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-5/input.mjs new file mode 100644 index 000000000000..35c2762a2954 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-5/input.mjs @@ -0,0 +1 @@ +export {foo, bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-5/output.js b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-5/output.js new file mode 100644 index 000000000000..64d68cdbf862 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-5/output.js @@ -0,0 +1,10 @@ +define(["exports", "foo"], function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.bar = _exports.foo = void 0; + _exports.foo = _foo.foo; + _exports.bar = _foo.bar; +}); diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-6/input.mjs b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-6/input.mjs new file mode 100644 index 000000000000..9ec8f63ab2fd --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-6/input.mjs @@ -0,0 +1 @@ +export * from "foo"; diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-6/output.js b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-6/output.js new file mode 100644 index 000000000000..e7988a807f00 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from-6/output.js @@ -0,0 +1,12 @@ +define(["exports", "foo"], function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + Object.keys(_foo).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in _exports && _exports[key] === _foo[key]) return; + _exports[key] = _foo[key]; + }); +}); diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from/input.mjs b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from/input.mjs new file mode 100644 index 000000000000..83b7b67c51ce --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from/input.mjs @@ -0,0 +1 @@ +export {foo} from "foo"; diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from/output.js b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from/output.js new file mode 100644 index 000000000000..6fb67b7327a9 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/export-from/output.js @@ -0,0 +1,9 @@ +define(["exports", "foo"], function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.foo = void 0; + _exports.foo = _foo.foo; +}); diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/import-export/input.mjs b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/import-export/input.mjs new file mode 100644 index 000000000000..b9e4c92265a4 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/import-export/input.mjs @@ -0,0 +1,3 @@ +import { foo } from "./foo"; + +export { foo }; diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/import-export/output.js b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/import-export/output.js new file mode 100644 index 000000000000..4b3c1b13a220 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/import-export/output.js @@ -0,0 +1,8 @@ +define(["exports", "./foo"], function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.foo = _foo.foo; +}); diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/options.json b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/options.json new file mode 100644 index 000000000000..6687fc23f80a --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-constantReexports/options.json @@ -0,0 +1,6 @@ +{ + "assumptions": { + "constantReexports": true + }, + "plugins": ["external-helpers", "transform-modules-amd"] +} diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs new file mode 100644 index 000000000000..2263b5a27c28 --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs @@ -0,0 +1 @@ +export var foo = 2; diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/export/output.js b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/export/output.js new file mode 100644 index 000000000000..06ac96c4985d --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/export/output.js @@ -0,0 +1,8 @@ +define(["exports"], function (_exports) { + "use strict"; + + _exports.__esModule = true; + _exports.foo = void 0; + var foo = 2; + _exports.foo = foo; +}); diff --git a/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/options.json b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/options.json new file mode 100644 index 000000000000..7f92d5a3c9ea --- /dev/null +++ b/packages/babel-plugin-transform-modules-amd/test/fixtures/assumption-enumerableModuleMeta/options.json @@ -0,0 +1,6 @@ +{ + "assumptions": { + "enumerableModuleMeta": true + }, + "plugins": ["external-helpers", "transform-modules-amd"] +} diff --git a/packages/babel-plugin-transform-modules-commonjs/src/index.js b/packages/babel-plugin-transform-modules-commonjs/src/index.js index de9274d890f7..0004c3c773bc 100644 --- a/packages/babel-plugin-transform-modules-commonjs/src/index.js +++ b/packages/babel-plugin-transform-modules-commonjs/src/index.js @@ -19,8 +19,6 @@ export default declare((api, options) => { const transformImportCall = createDynamicImportTransform(api); const { - loose, - // 'true' for non-mjs files to strictly have .default, instead of having // destructuring-like behavior for their properties. strictNamespace = false, @@ -37,6 +35,11 @@ export default declare((api, options) => { allowCommonJSExports = true, } = options; + const constantReexports = + api.assumption("constantReexports") ?? options.loose; + const enumerableModuleMeta = + api.assumption("enumerableModuleMeta") ?? options.loose; + if ( typeof lazy !== "boolean" && typeof lazy !== "function" && @@ -169,7 +172,8 @@ export default declare((api, options) => { path, { exportName: "exports", - loose, + constantReexports, + enumerableModuleMeta, strict, strictMode, allowTopLevelThis, @@ -215,7 +219,11 @@ export default declare((api, options) => { headers.push(header); headers.push( - ...buildNamespaceInitStatements(meta, metadata, loose), + ...buildNamespaceInitStatements( + meta, + metadata, + constantReexports, + ), ); } diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-2/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-2/input.mjs new file mode 100644 index 000000000000..5be9a685aabd --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-2/input.mjs @@ -0,0 +1 @@ +export {foo as default} from "foo"; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-2/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-2/output.js new file mode 100644 index 000000000000..efa99139e82e --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-2/output.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _foo = require("foo"); + +exports.default = _foo.foo; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-3/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-3/input.mjs new file mode 100644 index 000000000000..4461d79e3bf3 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-3/input.mjs @@ -0,0 +1 @@ +export {foo as default, bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-3/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-3/output.js new file mode 100644 index 000000000000..aef9e075e34e --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-3/output.js @@ -0,0 +1,11 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.bar = exports.default = void 0; + +var _foo = require("foo"); + +exports.default = _foo.foo; +exports.bar = _foo.bar; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-4/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-4/input.mjs new file mode 100644 index 000000000000..9fff903bd969 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-4/input.mjs @@ -0,0 +1 @@ +export {foo as bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-4/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-4/output.js new file mode 100644 index 000000000000..7c4b8590b769 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-4/output.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.bar = void 0; + +var _foo = require("foo"); + +exports.bar = _foo.foo; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-5/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-5/input.mjs new file mode 100644 index 000000000000..35c2762a2954 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-5/input.mjs @@ -0,0 +1 @@ +export {foo, bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-5/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-5/output.js new file mode 100644 index 000000000000..f9446e04700f --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-5/output.js @@ -0,0 +1,11 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.bar = exports.foo = void 0; + +var _foo = require("foo"); + +exports.foo = _foo.foo; +exports.bar = _foo.bar; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-6/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-6/input.mjs new file mode 100644 index 000000000000..9ec8f63ab2fd --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-6/input.mjs @@ -0,0 +1 @@ +export * from "foo"; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-6/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-6/output.js new file mode 100644 index 000000000000..8eba9a5ceeca --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from-6/output.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _foo = require("foo"); + +Object.keys(_foo).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _foo[key]) return; + exports[key] = _foo[key]; +}); diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from/input.mjs new file mode 100644 index 000000000000..83b7b67c51ce --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from/input.mjs @@ -0,0 +1 @@ +export {foo} from "foo"; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from/output.js new file mode 100644 index 000000000000..9902d90fc95f --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/export-from/output.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.foo = void 0; + +var _foo = require("foo"); + +exports.foo = _foo.foo; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/import-export/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/import-export/input.mjs new file mode 100644 index 000000000000..b9e4c92265a4 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/import-export/input.mjs @@ -0,0 +1,3 @@ +import { foo } from "./foo"; + +export { foo }; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/import-export/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/import-export/output.js new file mode 100644 index 000000000000..8e12703582dc --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/import-export/output.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _foo = require("./foo"); + +exports.foo = _foo.foo; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/options.json b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/options.json new file mode 100644 index 000000000000..d795b6de6c28 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-constantReexports/options.json @@ -0,0 +1,6 @@ +{ + "assumptions": { + "constantReexports": true + }, + "plugins": ["external-helpers", "transform-modules-commonjs"] +} diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs new file mode 100644 index 000000000000..2263b5a27c28 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs @@ -0,0 +1 @@ +export var foo = 2; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/export/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/export/output.js new file mode 100644 index 000000000000..5429b31f4ce8 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/export/output.js @@ -0,0 +1,6 @@ +"use strict"; + +exports.__esModule = true; +exports.foo = void 0; +var foo = 2; +exports.foo = foo; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/options.json b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/options.json new file mode 100644 index 000000000000..7b20177727bd --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/assumption-enumerableModuleMeta/options.json @@ -0,0 +1,6 @@ +{ + "assumptions": { + "enumerableModuleMeta": true + }, + "plugins": ["external-helpers", "transform-modules-commonjs"] +} diff --git a/packages/babel-plugin-transform-modules-umd/src/index.js b/packages/babel-plugin-transform-modules-umd/src/index.js index 0f85d5f9a324..4b1d69b63bdd 100644 --- a/packages/babel-plugin-transform-modules-umd/src/index.js +++ b/packages/babel-plugin-transform-modules-umd/src/index.js @@ -44,13 +44,17 @@ export default declare((api, options) => { const { globals, exactGlobals, - loose, allowTopLevelThis, strict, strictMode, noInterop, } = options; + const constantReexports = + api.assumption("constantReexports") ?? options.loose; + const enumerableModuleMeta = + api.assumption("enumerableModuleMeta") ?? options.loose; + /** * Build the assignment statements that initialize the UMD global. */ @@ -147,7 +151,8 @@ export default declare((api, options) => { const { meta, headers } = rewriteModuleStatementsAndPrepareHeader( path, { - loose, + constantReexports, + enumerableModuleMeta, strict, strictMode, allowTopLevelThis, @@ -201,7 +206,11 @@ export default declare((api, options) => { } headers.push( - ...buildNamespaceInitStatements(meta, metadata, loose), + ...buildNamespaceInitStatements( + meta, + metadata, + constantReexports, + ), ); } diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-2/input.mjs b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-2/input.mjs new file mode 100644 index 000000000000..5be9a685aabd --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-2/input.mjs @@ -0,0 +1 @@ +export {foo as default} from "foo"; diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-2/output.js b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-2/output.js new file mode 100644 index 000000000000..88d339f99e7c --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-2/output.js @@ -0,0 +1,21 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports", "foo"], factory); + } else if (typeof exports !== "undefined") { + factory(exports, require("foo")); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, global.foo); + global.input = mod.exports; + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.default = void 0; + _exports.default = _foo.foo; +}); diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-3/input.mjs b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-3/input.mjs new file mode 100644 index 000000000000..4461d79e3bf3 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-3/input.mjs @@ -0,0 +1 @@ +export {foo as default, bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-3/output.js b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-3/output.js new file mode 100644 index 000000000000..6a46f9585f99 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-3/output.js @@ -0,0 +1,22 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports", "foo"], factory); + } else if (typeof exports !== "undefined") { + factory(exports, require("foo")); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, global.foo); + global.input = mod.exports; + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.bar = _exports.default = void 0; + _exports.default = _foo.foo; + _exports.bar = _foo.bar; +}); diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-4/input.mjs b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-4/input.mjs new file mode 100644 index 000000000000..9fff903bd969 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-4/input.mjs @@ -0,0 +1 @@ +export {foo as bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-4/output.js b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-4/output.js new file mode 100644 index 000000000000..de25f98ea8a6 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-4/output.js @@ -0,0 +1,21 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports", "foo"], factory); + } else if (typeof exports !== "undefined") { + factory(exports, require("foo")); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, global.foo); + global.input = mod.exports; + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.bar = void 0; + _exports.bar = _foo.foo; +}); diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-5/input.mjs b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-5/input.mjs new file mode 100644 index 000000000000..35c2762a2954 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-5/input.mjs @@ -0,0 +1 @@ +export {foo, bar} from "foo"; diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-5/output.js b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-5/output.js new file mode 100644 index 000000000000..ebcd9bd3ef61 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-5/output.js @@ -0,0 +1,22 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports", "foo"], factory); + } else if (typeof exports !== "undefined") { + factory(exports, require("foo")); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, global.foo); + global.input = mod.exports; + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.bar = _exports.foo = void 0; + _exports.foo = _foo.foo; + _exports.bar = _foo.bar; +}); diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-6/input.mjs b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-6/input.mjs new file mode 100644 index 000000000000..9ec8f63ab2fd --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-6/input.mjs @@ -0,0 +1 @@ +export * from "foo"; diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-6/output.js b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-6/output.js new file mode 100644 index 000000000000..2ce869023290 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from-6/output.js @@ -0,0 +1,24 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports", "foo"], factory); + } else if (typeof exports !== "undefined") { + factory(exports, require("foo")); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, global.foo); + global.input = mod.exports; + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + Object.keys(_foo).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in _exports && _exports[key] === _foo[key]) return; + _exports[key] = _foo[key]; + }); +}); diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from/input.mjs b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from/input.mjs new file mode 100644 index 000000000000..83b7b67c51ce --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from/input.mjs @@ -0,0 +1 @@ +export {foo} from "foo"; diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from/output.js b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from/output.js new file mode 100644 index 000000000000..4e921805b159 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/export-from/output.js @@ -0,0 +1,21 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports", "foo"], factory); + } else if (typeof exports !== "undefined") { + factory(exports, require("foo")); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, global.foo); + global.input = mod.exports; + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.foo = void 0; + _exports.foo = _foo.foo; +}); diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/import-export/input.mjs b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/import-export/input.mjs new file mode 100644 index 000000000000..b9e4c92265a4 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/import-export/input.mjs @@ -0,0 +1,3 @@ +import { foo } from "./foo"; + +export { foo }; diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/import-export/output.js b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/import-export/output.js new file mode 100644 index 000000000000..b1b0636d9e00 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/import-export/output.js @@ -0,0 +1,20 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports", "./foo"], factory); + } else if (typeof exports !== "undefined") { + factory(exports, require("./foo")); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, global.foo); + global.input = mod.exports; + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _foo) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true + }); + _exports.foo = _foo.foo; +}); diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/options.json b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/options.json new file mode 100644 index 000000000000..1a3f6d1a0d60 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-constantReexports/options.json @@ -0,0 +1,6 @@ +{ + "assumptions": { + "constantReexports": true + }, + "plugins": ["external-helpers", "transform-modules-umd"] +} diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs new file mode 100644 index 000000000000..2263b5a27c28 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/export/input.mjs @@ -0,0 +1 @@ +export var foo = 2; diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/export/output.js b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/export/output.js new file mode 100644 index 000000000000..e80e1fe59ee3 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/export/output.js @@ -0,0 +1,20 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(["exports"], factory); + } else if (typeof exports !== "undefined") { + factory(exports); + } else { + var mod = { + exports: {} + }; + factory(mod.exports); + global.input = mod.exports; + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports) { + "use strict"; + + _exports.__esModule = true; + _exports.foo = void 0; + var foo = 2; + _exports.foo = foo; +}); diff --git a/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/options.json b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/options.json new file mode 100644 index 000000000000..56bfa8f269a6 --- /dev/null +++ b/packages/babel-plugin-transform-modules-umd/test/fixtures/assumption-enumerableModuleMeta/options.json @@ -0,0 +1,6 @@ +{ + "assumptions": { + "enumerableModuleMeta": true + }, + "plugins": ["external-helpers", "transform-modules-umd"] +}