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 8ffda28444..3f2f86dfdd 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 @@ -246,12 +246,18 @@ function getModuleMetadata( }); for (const metadata of sourceData.values()) { - if (metadata.importsNamespace.size > 0) { - metadata.interop = "namespace"; - continue; - } let needsDefault = false; let needsNamed = false; + + if (metadata.importsNamespace.size > 0) { + needsDefault = true; + needsNamed = true; + } + + if (metadata.reexportAll) { + needsNamed = true; + } + for (const importName of metadata.imports.values()) { if (importName === "default") needsDefault = true; else needsNamed = true; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/interop/export-all/input.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/interop/export-all/input.js new file mode 100644 index 0000000000..f419f4c89c --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/interop/export-all/input.js @@ -0,0 +1,6 @@ +// The fact that this exports both a normal default, and all of the names via +// re-export is an edge case that is important not to miss. See +// https://github.com/babel/babel/issues/8306 as an example. +import _default from 'react'; +export default _default; +export * from 'react'; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/interop/export-all/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/interop/export-all/output.js new file mode 100644 index 0000000000..95892f7cc6 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/interop/export-all/output.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var _exportNames = {}; +exports.default = void 0; + +var _react = babelHelpers.interopRequireWildcard(require("react")); + +Object.keys(_react).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _react[key]; + } + }); +}); +// The fact that this exports both a normal default, and all of the names via +// re-export is an edge case that is important not to miss. See +// https://github.com/babel/babel/issues/8306 as an example. +var _default2 = _react.default; +exports.default = _default2;