Use strict namespace behavior for mjs files. (#7545)
This commit is contained in:
parent
b6e54800b4
commit
c662c2ada2
@ -22,7 +22,16 @@ export { hasExports, isSideEffectImport, isModule };
|
||||
*/
|
||||
export function rewriteModuleStatementsAndPrepareHeader(
|
||||
path: NodePath,
|
||||
{ exportName, strict, allowTopLevelThis, strictMode, loose, noInterop, lazy },
|
||||
{
|
||||
exportName,
|
||||
strict,
|
||||
allowTopLevelThis,
|
||||
strictMode,
|
||||
loose,
|
||||
noInterop,
|
||||
lazy,
|
||||
esNamespaceOnly,
|
||||
},
|
||||
) {
|
||||
assert(isModule(path), "Cannot process module statements in a script");
|
||||
path.node.sourceType = "script";
|
||||
@ -31,6 +40,7 @@ export function rewriteModuleStatementsAndPrepareHeader(
|
||||
noInterop,
|
||||
loose,
|
||||
lazy,
|
||||
esNamespaceOnly,
|
||||
});
|
||||
|
||||
if (!allowTopLevelThis) {
|
||||
|
||||
@ -86,7 +86,12 @@ export function isSideEffectImport(source: SourceModuleMetadata) {
|
||||
export default function normalizeModuleAndLoadMetadata(
|
||||
programPath: NodePath,
|
||||
exportName?: string,
|
||||
{ noInterop = false, loose = false, lazy = false } = {},
|
||||
{
|
||||
noInterop = false,
|
||||
loose = false,
|
||||
lazy = false,
|
||||
esNamespaceOnly = false,
|
||||
} = {},
|
||||
): ModuleMetadata {
|
||||
if (!exportName) {
|
||||
exportName = programPath.scope.generateUidIdentifier("exports").name;
|
||||
@ -107,6 +112,16 @@ export default function normalizeModuleAndLoadMetadata(
|
||||
}
|
||||
|
||||
if (noInterop) metadata.interop = "none";
|
||||
else if (esNamespaceOnly) {
|
||||
// Both the default and namespace interops pass through __esModule
|
||||
// objects, but the namespace interop is used to enable Babel's
|
||||
// destructuring-like interop behavior for normal CommonJS.
|
||||
// Since some tooling has started to remove that behavior, we expose
|
||||
// it as the `esNamespace` option.
|
||||
if (metadata.interop === "namespace") {
|
||||
metadata.interop = "default";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _react = babelHelpers.interopRequireWildcard(require("react"));
|
||||
var _react = babelHelpers.interopRequireDefault(require("react"));
|
||||
|
||||
var RandomComponent =
|
||||
/*#__PURE__*/
|
||||
|
||||
@ -15,6 +15,14 @@ export default declare((api, options) => {
|
||||
|
||||
const {
|
||||
loose,
|
||||
|
||||
// 'true' for non-mjs files to strictly have .default, instead of having
|
||||
// destructuring-like behavior for their properties.
|
||||
strictNamespace = false,
|
||||
|
||||
// 'true' for mjs files to strictly have .default, instead of having
|
||||
// destructuring-like behavior for their properties.
|
||||
mjsStrictNamespace = true,
|
||||
allowTopLevelThis,
|
||||
strict,
|
||||
strictMode,
|
||||
@ -32,6 +40,13 @@ export default declare((api, options) => {
|
||||
throw new Error(`.lazy must be a boolean, array of strings, or a function`);
|
||||
}
|
||||
|
||||
if (typeof strictNamespace !== "boolean") {
|
||||
throw new Error(`.strictNamespace must be a boolean, or undefined`);
|
||||
}
|
||||
if (typeof mjsStrictNamespace !== "boolean") {
|
||||
throw new Error(`.mjsStrictNamespace must be a boolean, or undefined`);
|
||||
}
|
||||
|
||||
const getAssertion = localName => template.expression.ast`
|
||||
(function(){
|
||||
throw new Error(
|
||||
@ -103,7 +118,7 @@ export default declare((api, options) => {
|
||||
return {
|
||||
visitor: {
|
||||
Program: {
|
||||
exit(path) {
|
||||
exit(path, state) {
|
||||
if (!isModule(path)) return;
|
||||
|
||||
// Rename the bindings auto-injected into the scope so there is no
|
||||
@ -137,6 +152,11 @@ export default declare((api, options) => {
|
||||
allowTopLevelThis,
|
||||
noInterop,
|
||||
lazy,
|
||||
esNamespaceOnly:
|
||||
typeof state.filename === "string" &&
|
||||
/\.mjs$/.test(state.filename)
|
||||
? mjsStrictNamespace
|
||||
: strictNamespace,
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@ _foo2 = babelHelpers.interopRequireDefault(require("foo2"))
|
||||
|
||||
var
|
||||
/*before*/
|
||||
foo2 = babelHelpers.interopRequireWildcard(require("foo3"))
|
||||
foo2 = babelHelpers.interopRequireDefault(require("foo3"))
|
||||
/*after*/
|
||||
;
|
||||
|
||||
|
||||
@ -1,5 +1,9 @@
|
||||
var _taggedTemplateLiteral = require("@babel/runtime/helpers/taggedTemplateLiteral");
|
||||
"use strict";
|
||||
|
||||
var _templateObject = /*#__PURE__*/ _taggedTemplateLiteral(["foo"]);
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||
|
||||
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
||||
|
||||
var _templateObject = /*#__PURE__*/ (0, _taggedTemplateLiteral2.default)(["foo"]);
|
||||
|
||||
tag(_templateObject);
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
{
|
||||
"sourceType": "module",
|
||||
"plugins": [
|
||||
"external-helpers",
|
||||
["transform-modules-commonjs", { "loose": true }]
|
||||
|
||||
@ -1,5 +1,9 @@
|
||||
var _taggedTemplateLiteral = require("@babel/runtime/helpers/taggedTemplateLiteral");
|
||||
"use strict";
|
||||
|
||||
var _templateObject = /*#__PURE__*/ _taggedTemplateLiteral(["foo"]);
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||
|
||||
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
||||
|
||||
var _templateObject = /*#__PURE__*/ (0, _taggedTemplateLiteral2.default)(["foo"]);
|
||||
|
||||
tag(_templateObject);
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"sourceType": "module",
|
||||
"plugins": ["external-helpers", "transform-modules-commonjs"]
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
function foo() {
|
||||
const data = babelHelpers.interopRequireWildcard(require("foo"));
|
||||
const data = babelHelpers.interopRequireDefault(require("foo"));
|
||||
|
||||
foo = function () {
|
||||
return data;
|
||||
|
||||
@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
||||
exports.namespace = void 0;
|
||||
|
||||
function namespace() {
|
||||
const data = babelHelpers.interopRequireWildcard(require("foo"));
|
||||
const data = babelHelpers.interopRequireDefault(require("foo"));
|
||||
|
||||
namespace = function () {
|
||||
return data;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
"use strict";
|
||||
|
||||
var foo = babelHelpers.interopRequireWildcard(require("./foo"));
|
||||
var foo = babelHelpers.interopRequireDefault(require("./foo"));
|
||||
console.log(foo);
|
||||
|
||||
@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.namespace = void 0;
|
||||
var namespace = babelHelpers.interopRequireWildcard(require("./foo"));
|
||||
var namespace = babelHelpers.interopRequireDefault(require("./foo"));
|
||||
exports.namespace = namespace;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
var foo1 = babelHelpers.interopRequireWildcard(require("white"));
|
||||
var foo1 = babelHelpers.interopRequireDefault(require("white"));
|
||||
|
||||
function foo2() {
|
||||
const data = babelHelpers.interopRequireWildcard(require("black"));
|
||||
const data = babelHelpers.interopRequireDefault(require("black"));
|
||||
|
||||
foo2 = function () {
|
||||
return data;
|
||||
|
||||
@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.namespace2 = exports.namespace1 = void 0;
|
||||
var namespace1 = babelHelpers.interopRequireWildcard(require("white"));
|
||||
var namespace1 = babelHelpers.interopRequireDefault(require("white"));
|
||||
exports.namespace1 = namespace1;
|
||||
|
||||
function namespace2() {
|
||||
const data = babelHelpers.interopRequireWildcard(require("black"));
|
||||
const data = babelHelpers.interopRequireDefault(require("black"));
|
||||
|
||||
namespace2 = function () {
|
||||
return data;
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
{
|
||||
"plugins": [
|
||||
["transform-modules-commonjs", { "mjsStrictNamespace": false }]
|
||||
]
|
||||
}
|
||||
@ -16,6 +16,6 @@ Object.defineProperty(exports, "baz", {
|
||||
}
|
||||
});
|
||||
|
||||
var _moduleWithGetter = _interopRequireWildcard(require("./moduleWithGetter"));
|
||||
var _moduleWithGetter = _interopRequireDefault(require("./moduleWithGetter"));
|
||||
|
||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
@ -2,12 +2,10 @@
|
||||
|
||||
var _foo = _interopRequireDefault(require("foo"));
|
||||
|
||||
var Bar = _interopRequireWildcard(require("bar"));
|
||||
var Bar = _interopRequireDefault(require("bar"));
|
||||
|
||||
var _baz = require("baz");
|
||||
|
||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
_foo.default = (42, function () {
|
||||
|
||||
@ -6,7 +6,7 @@ var _two = require("two");
|
||||
|
||||
var _three = require("three");
|
||||
|
||||
var aNamespace = babelHelpers.interopRequireWildcard(require("four"));
|
||||
var aNamespace = babelHelpers.interopRequireDefault(require("four"));
|
||||
console.log(_one.default);
|
||||
console.log(_two.aNamed);
|
||||
console.log(_three.orig);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
function mod() {
|
||||
const data = babelHelpers.interopRequireWildcard(require("mod"));
|
||||
const data = babelHelpers.interopRequireDefault(require("mod"));
|
||||
|
||||
mod = function () {
|
||||
return data;
|
||||
|
||||
@ -2,6 +2,6 @@
|
||||
"plugins": [
|
||||
"external-helpers",
|
||||
"syntax-object-rest-spread",
|
||||
["transform-modules-commonjs", { "strict": true }]
|
||||
["transform-modules-commonjs", { "strict": true, "mjsStrictNamespace": false }]
|
||||
]
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user