Use strict namespace behavior for mjs files. (#7545)

This commit is contained in:
Logan Smyth
2018-03-15 13:27:01 -07:00
committed by GitHub
parent b6e54800b4
commit c662c2ada2
27 changed files with 83 additions and 25 deletions

View File

@@ -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,
},
);

View File

@@ -31,7 +31,7 @@ _foo2 = babelHelpers.interopRequireDefault(require("foo2"))
var
/*before*/
foo2 = babelHelpers.interopRequireWildcard(require("foo3"))
foo2 = babelHelpers.interopRequireDefault(require("foo3"))
/*after*/
;

View File

@@ -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);

View File

@@ -1,4 +1,5 @@
{
"sourceType": "module",
"plugins": [
"external-helpers",
["transform-modules-commonjs", { "loose": true }]

View File

@@ -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);

View File

@@ -1,3 +1,4 @@
{
"sourceType": "module",
"plugins": ["external-helpers", "transform-modules-commonjs"]
}

View File

@@ -1,7 +1,7 @@
"use strict";
function foo() {
const data = babelHelpers.interopRequireWildcard(require("foo"));
const data = babelHelpers.interopRequireDefault(require("foo"));
foo = function () {
return data;

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
"use strict";
var foo = babelHelpers.interopRequireWildcard(require("./foo"));
var foo = babelHelpers.interopRequireDefault(require("./foo"));
console.log(foo);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -0,0 +1,5 @@
{
"plugins": [
["transform-modules-commonjs", { "mjsStrictNamespace": false }]
]
}

View File

@@ -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 }; }

View File

@@ -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 () {

View File

@@ -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);

View File

@@ -1,7 +1,7 @@
"use strict";
function mod() {
const data = babelHelpers.interopRequireWildcard(require("mod"));
const data = babelHelpers.interopRequireDefault(require("mod"));
mod = function () {
return data;

View File

@@ -2,6 +2,6 @@
"plugins": [
"external-helpers",
"syntax-object-rest-spread",
["transform-modules-commonjs", { "strict": true }]
["transform-modules-commonjs", { "strict": true, "mjsStrictNamespace": false }]
]
}