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 09190cd72d..44a0c636a3 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 @@ -158,8 +158,6 @@ function getModuleMetadata(programPath: NodePath) { child.get("specifiers").forEach(spec => { if (spec.isImportDefaultSpecifier()) { - if (data.interop === "none") data.interop = "default"; - const localName = spec.get("local").node.name; data.imports.set(localName, "default"); @@ -175,8 +173,6 @@ function getModuleMetadata(programPath: NodePath) { } else if (spec.isImportNamespaceSpecifier()) { const localName = spec.get("local").node.name; - data.interop = "namespace"; - data.importsNamespace.add(localName); const reexport = localData.get(localName); if (reexport) { @@ -192,10 +188,6 @@ function getModuleMetadata(programPath: NodePath) { data.imports.set(localName, importName); - if (importName === "default" && data.interop === "none") { - data.interop = "default"; - } - const reexport = localData.get(localName); if (reexport) { localData.delete(localName); @@ -224,10 +216,6 @@ function getModuleMetadata(programPath: NodePath) { const importName = spec.get("local").node.name; const exportName = spec.get("exported").node.name; - if (importName === "default" && data.interop === "none") { - data.interop = "default"; - } - data.reexports.set(exportName, importName); if (exportName === "__esModule") { @@ -237,6 +225,30 @@ function getModuleMetadata(programPath: NodePath) { } }); + for (const metadata of sourceData.values()) { + if (metadata.importsNamespace.size > 0) { + metadata.interop = "namespace"; + continue; + } + let needsDefault = false; + let needsNamed = false; + for (const importName of metadata.imports.values()) { + if (importName === "default") needsDefault = true; + else needsNamed = true; + } + for (const importName of metadata.reexports.values()) { + if (importName === "default") needsDefault = true; + else needsNamed = true; + } + + if (needsDefault && needsNamed) { + // TODO(logan): Using the namespace interop here is unfortunate. Revisit. + metadata.interop = "namespace"; + } else if (needsDefault) { + metadata.interop = "default"; + } + } + return { local: localData, source: sourceData, diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/expected.js index 599a3a5438..786d7c177d 100644 --- a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/expected.js +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2775/expected.js @@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _react = babelHelpers.interopRequireDefault(require("react")); +var _react = babelHelpers.interopRequireWildcard(require("react")); var RandomComponent = /*#__PURE__*/ diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/imports-mixing/expected.js b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/imports-mixing/expected.js index 65b0f67a5b..df85e22f86 100644 --- a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/imports-mixing/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/imports-mixing/expected.js @@ -1,7 +1,7 @@ define(["foo"], function (_foo) { "use strict"; - _foo = babelHelpers.interopRequireDefault(_foo); + _foo = babelHelpers.interopRequireWildcard(_foo); _foo.default; _foo.baz; }); diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/imports-mixing/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/imports-mixing/expected.js index 2238731921..4e9428f6bd 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/imports-mixing/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/imports-mixing/expected.js @@ -1,6 +1,6 @@ "use strict"; -var _foo = babelHelpers.interopRequireDefault(require("foo")); +var _foo = babelHelpers.interopRequireWildcard(require("foo")); _foo.default; _foo.baz; diff --git a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/imports-mixing/expected.js b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/imports-mixing/expected.js index e488016e25..3fc714c74f 100644 --- a/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/imports-mixing/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-umd/test/fixtures/umd/imports-mixing/expected.js @@ -13,6 +13,6 @@ })(this, function (_foo) { "use strict"; - _foo = babelHelpers.interopRequireDefault(_foo); + _foo = babelHelpers.interopRequireWildcard(_foo); _foo.baz; });