From aa4ead049ccf6aaa5a596bb435cae2fb29ea4ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 17 Mar 2022 11:46:19 +0100 Subject: [PATCH 1/2] Align named imports behavior in `.mjs` and `.js` files --- .../src/index.ts | 11 ++++++----- .../fixtures/auxiliary-comment/overview/output.js | 2 +- .../test/fixtures/lazy-dep/import-namespace/output.js | 2 +- .../fixtures/lazy-dep/reexport-namespace/output.js | 2 +- .../fixtures/lazy-local/import-namespace/output.js | 2 +- .../fixtures/lazy-local/reexport-namespace/output.js | 2 +- .../lazy-whitelist/import-namespace/output.js | 4 ++-- .../lazy-whitelist/reexport-namespace/output.js | 4 ++-- .../copy-getters-setters-star/{exec.mjs => exec.js} | 4 ++-- .../misc/copy-getters-setters-star/options.json | 2 +- .../misc/copy-getters-setters/{exec.mjs => exec.js} | 3 ++- .../test/fixtures/misc/copy-getters-setters/output.js | 6 ++++-- .../test/fixtures/misc/import-const-throw/output.js | 6 +++++- .../test/fixtures/misc/reference-source-map/output.js | 2 +- .../test/fixtures/regression/lazy-7176/output.js | 2 +- .../test/fixtures/strict/options.json | 7 +------ 16 files changed, 32 insertions(+), 29 deletions(-) rename packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/{exec.mjs => exec.js} (80%) rename packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/{exec.mjs => exec.js} (77%) diff --git a/packages/babel-plugin-transform-modules-commonjs/src/index.ts b/packages/babel-plugin-transform-modules-commonjs/src/index.ts index 452da2203629..f89866366534 100644 --- a/packages/babel-plugin-transform-modules-commonjs/src/index.ts +++ b/packages/babel-plugin-transform-modules-commonjs/src/index.ts @@ -19,13 +19,14 @@ export default declare((api, options) => { const transformImportCall = createDynamicImportTransform(api); const { - // 'true' for non-mjs files to strictly have .default, instead of having - // destructuring-like behavior for their properties. + // 'true' for imports to strictly have .default, instead of having + // destructuring-like behavior for their properties. This matches the behavior + // of the initial Node.js (v12) behavior when importing a CommonJS without + // the __esMoule property. + // .strictNamespace is for non-mjs files, mjsStrictNamespace if for mjs files. strictNamespace = false, + mjsStrictNamespace = strictNamespace, - // 'true' for mjs files to strictly have .default, instead of having - // destructuring-like behavior for their properties. - mjsStrictNamespace = true, allowTopLevelThis, strict, strictMode, diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/auxiliary-comment/overview/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/auxiliary-comment/overview/output.js index dfa19a51ab03..6d16e52641ad 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/auxiliary-comment/overview/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/auxiliary-comment/overview/output.js @@ -31,7 +31,7 @@ _foo2 = babelHelpers.interopRequireDefault(require("foo2")) var /*before*/ -foo2 = babelHelpers.interopRequireDefault(require("foo3")) +foo2 = babelHelpers.interopRequireWildcard(require("foo3")) /*after*/ ; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-dep/import-namespace/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-dep/import-namespace/output.js index ef26faaebcf2..e720a87205fb 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-dep/import-namespace/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-dep/import-namespace/output.js @@ -1,7 +1,7 @@ "use strict"; function foo() { - const data = babelHelpers.interopRequireDefault(require("foo")); + const data = babelHelpers.interopRequireWildcard(require("foo")); foo = function () { return data; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-dep/reexport-namespace/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-dep/reexport-namespace/output.js index cb6dab1f4162..239f67e25a87 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-dep/reexport-namespace/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-dep/reexport-namespace/output.js @@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { exports.namespace = void 0; function namespace() { - const data = babelHelpers.interopRequireDefault(require("foo")); + const data = babelHelpers.interopRequireWildcard(require("foo")); namespace = function () { return data; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-local/import-namespace/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-local/import-namespace/output.js index ffdc4d816346..d041921ee450 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-local/import-namespace/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-local/import-namespace/output.js @@ -1,4 +1,4 @@ "use strict"; -var foo = babelHelpers.interopRequireDefault(require("./foo")); +var foo = babelHelpers.interopRequireWildcard(require("./foo")); console.log(foo); diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-local/reexport-namespace/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-local/reexport-namespace/output.js index 82e3c24904e1..6aad5e4726b7 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-local/reexport-namespace/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-local/reexport-namespace/output.js @@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.namespace = void 0; -var namespace = babelHelpers.interopRequireDefault(require("./foo")); +var namespace = babelHelpers.interopRequireWildcard(require("./foo")); exports.namespace = namespace; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-whitelist/import-namespace/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-whitelist/import-namespace/output.js index 208fc75d2196..3e0eaadb0282 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-whitelist/import-namespace/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-whitelist/import-namespace/output.js @@ -1,7 +1,7 @@ "use strict"; function foo1() { - const data = babelHelpers.interopRequireDefault(require("white")); + const data = babelHelpers.interopRequireWildcard(require("white")); foo1 = function () { return data; @@ -10,6 +10,6 @@ function foo1() { return data; } -var foo2 = babelHelpers.interopRequireDefault(require("black")); +var foo2 = babelHelpers.interopRequireWildcard(require("black")); console.log(foo1()); console.log(foo2); diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-whitelist/reexport-namespace/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-whitelist/reexport-namespace/output.js index 6eaee023ec52..1405c3232cc9 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-whitelist/reexport-namespace/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/lazy-whitelist/reexport-namespace/output.js @@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { exports.namespace2 = exports.namespace1 = void 0; function namespace1() { - const data = babelHelpers.interopRequireDefault(require("white")); + const data = babelHelpers.interopRequireWildcard(require("white")); namespace1 = function () { return data; @@ -21,5 +21,5 @@ Object.defineProperty(exports, "namespace1", { return namespace1(); } }); -var namespace2 = babelHelpers.interopRequireDefault(require("black")); +var namespace2 = babelHelpers.interopRequireWildcard(require("black")); exports.namespace2 = namespace2; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.js similarity index 80% rename from packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.mjs rename to packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.js index 2466d09e6def..49f1cb09c40e 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.mjs +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.js @@ -1,5 +1,5 @@ +// No exception should be thrown import * as foo from "./moduleWithGetter"; +expect(foo.baz).toBe(123); expect(() => foo.boo).toThrow(); - -// No exception should be thrown diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/options.json b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/options.json index 8920c8f09feb..81e5ce12436d 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/options.json +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/options.json @@ -1,3 +1,3 @@ { - "plugins": [["transform-modules-commonjs", { "mjsStrictNamespace": false }]] + "plugins": ["transform-modules-commonjs"] } diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.js similarity index 77% rename from packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.mjs rename to packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.js index cdb5546b8258..b857019b502f 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.mjs +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.js @@ -1,3 +1,4 @@ +// No exception should be thrown import Foo, { baz } from "./moduleWithGetter"; -// No exception should be thrown +expect(baz).toBe(123); diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/output.js index 721f9af381e8..ee0003a3e662 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/output.js @@ -16,6 +16,8 @@ Object.defineProperty(exports, "baz", { } }); -var _moduleWithGetter = _interopRequireDefault(require("./moduleWithGetter")); +var _moduleWithGetter = _interopRequireWildcard(require("./moduleWithGetter")); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/import-const-throw/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/import-const-throw/output.js index 4656571763d3..fcb2fa6f5b61 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/import-const-throw/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/import-const-throw/output.js @@ -2,10 +2,14 @@ var _foo = _interopRequireDefault(require("foo")); -var Bar = _interopRequireDefault(require("bar")); +var Bar = _interopRequireWildcard(require("bar")); var _baz = require("baz"); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _foo.default = (42, function () { diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/reference-source-map/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/reference-source-map/output.js index c40ee11036e2..b09c24ce46c9 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/reference-source-map/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/reference-source-map/output.js @@ -6,7 +6,7 @@ var _two = require("two"); var _three = require("three"); -var aNamespace = babelHelpers.interopRequireDefault(require("four")); +var aNamespace = babelHelpers.interopRequireWildcard(require("four")); console.log(_one.default); console.log(_two.aNamed); console.log(_three.orig); diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/lazy-7176/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/lazy-7176/output.js index 7ed4c7dfaf61..1d580efea9c8 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/lazy-7176/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/lazy-7176/output.js @@ -1,7 +1,7 @@ "use strict"; function mod() { - const data = babelHelpers.interopRequireDefault(require("mod")); + const data = babelHelpers.interopRequireWildcard(require("mod")); mod = function () { return data; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/strict/options.json b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/strict/options.json index b2444c1e5e54..abdfe774789c 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/strict/options.json +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/strict/options.json @@ -1,8 +1,3 @@ { - "plugins": [ - [ - "transform-modules-commonjs", - { "strict": true, "mjsStrictNamespace": false } - ] - ] + "plugins": [["transform-modules-commonjs", { "strict": true }]] } From 43098692dd5aad08481105696b211db07d91bddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 17 Mar 2022 12:12:20 +0100 Subject: [PATCH 2/2] Update other fixtures --- .../test/fixtures/regression/2775/output.js | 2 +- .../export-namespace-from/auto-esm-not-supported/output.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/2775/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/2775/output.js index 42e4703566a0..d0e58d4377cc 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/2775/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/2775/output.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__*/function (_Component) { babelHelpers.inherits(RandomComponent, _Component); diff --git a/packages/babel-preset-env/test/fixtures/export-namespace-from/auto-esm-not-supported/output.js b/packages/babel-preset-env/test/fixtures/export-namespace-from/auto-esm-not-supported/output.js index e4c87ecceeb3..afcc00a6b6b7 100644 --- a/packages/babel-preset-env/test/fixtures/export-namespace-from/auto-esm-not-supported/output.js +++ b/packages/babel-preset-env/test/fixtures/export-namespace-from/auto-esm-not-supported/output.js @@ -5,6 +5,6 @@ Object.defineProperty(exports, "__esModule", { }); exports.foo = void 0; -var _foo = babelHelpers.interopRequireDefault(require("./foo.mjs")); +var _foo = babelHelpers.interopRequireWildcard(require("./foo.mjs")); exports.foo = _foo;