diff --git a/src/babel/transformation/file/index.js b/src/babel/transformation/file/index.js index 41250e8773..bd0d9a22d5 100644 --- a/src/babel/transformation/file/index.js +++ b/src/babel/transformation/file/index.js @@ -37,9 +37,9 @@ function checkNode(stack, node, scope) { export default class File { constructor(opts = {}) { - this.dynamicImportAbsoluteDefaults = []; - this.dynamicImportIds = {}; - this.dynamicImports = []; + this.dynamicImportTypes = {}; + this.dynamicImportIds = {}; + this.dynamicImports = []; this.usedHelpers = {}; this.dynamicData = {}; @@ -343,7 +343,7 @@ export default class File { return source; } - addImport(source: string, name?: string, absoluteDefault?: boolean): Object { + addImport(source: string, name?: string, type?: string): Object { name ||= source; var id = this.dynamicImportIds[name]; @@ -354,7 +354,11 @@ export default class File { var specifiers = [t.importDefaultSpecifier(id)]; var declar = t.importDeclaration(specifiers, t.literal(source)); declar._blockHoist = 3; - if (absoluteDefault) this.dynamicImportAbsoluteDefaults.push(declar); + + if (type) { + var modules = this.dynamicImportTypes[type] ||= []; + modules.push(declar); + } if (this.transformers["es6.modules"].canTransform()) { this.moduleFormatter.importSpecifier(specifiers[0], declar, this.dynamicImports); diff --git a/src/babel/transformation/modules/_default.js b/src/babel/transformation/modules/_default.js index 8bab24192b..6d237a54c9 100644 --- a/src/babel/transformation/modules/_default.js +++ b/src/babel/transformation/modules/_default.js @@ -124,6 +124,11 @@ export default class DefaultFormatter { this.getLocalImports(); } + isModuleType(node, type) { + var modules = this.file.dynamicImportTypes[type]; + return modules && modules.indexOf(node) >= 0; + } + transform() { this.remapAssignments(); } diff --git a/src/babel/transformation/modules/amd.js b/src/babel/transformation/modules/amd.js index d2106e37ce..3e8228bb70 100644 --- a/src/babel/transformation/modules/amd.js +++ b/src/babel/transformation/modules/amd.js @@ -80,7 +80,9 @@ export default class AMDFormatter extends DefaultFormatter { this.defaultIds[key] = specifier.local; } - if (includes(this.file.dynamicImportAbsoluteDefaults, node)) { + if (this.isModuleType(node, "absolute")) { + // absolute module reference + } else if (this.isModuleType(node, "absoluteDefault")) { // prevent unnecessary renaming of dynamic imports this.ids[node.source.value] = ref; ref = t.memberExpression(ref, t.identifier("default")); diff --git a/src/babel/transformation/modules/common.js b/src/babel/transformation/modules/common.js index 9e44048df9..20527e71ae 100644 --- a/src/babel/transformation/modules/common.js +++ b/src/babel/transformation/modules/common.js @@ -45,7 +45,9 @@ export default class CommonJSFormatter extends DefaultFormatter { // import foo from "foo"; if (t.isSpecifierDefault(specifier)) { - if (includes(this.file.dynamicImportAbsoluteDefaults, node)) { + if (this.isModuleType(node, "absolute")) { + // absolute module reference + } else if (this.isModuleType(node, "absoluteDefault")) { this.internalRemap[variableName.name] = ref; } else if (this.noInteropRequireImport) { this.internalRemap[variableName.name] = t.memberExpression(ref, t.identifier("default")); @@ -104,13 +106,16 @@ export default class CommonJSFormatter extends DefaultFormatter { var call = t.callExpression(t.identifier("require"), [node.source]); var uid; - if (includes(this.file.dynamicImportAbsoluteDefaults, node)) { + if (this.isModuleType(node, "absolute")) { + // absolute module reference + } else if (this.isModuleType(node, "absoluteDefault")) { call = t.memberExpression(call, t.identifier("default")); - uid = node.specifiers[0].local; } else { uid = this.scope.generateUidBasedOnNode(node, "import"); } + uid ||= node.specifiers[0].local; + var declar = t.variableDeclaration("var", [ t.variableDeclarator(uid, call) ]); diff --git a/src/babel/transformation/transformers/other/bluebird-coroutines.js b/src/babel/transformation/transformers/other/bluebird-coroutines.js index 8b16c00211..cb4f99e09a 100644 --- a/src/babel/transformation/transformers/other/bluebird-coroutines.js +++ b/src/babel/transformation/transformers/other/bluebird-coroutines.js @@ -15,7 +15,7 @@ exports.Function = function (node, parent, scope, file) { return remapAsyncToGenerator( node, - t.memberExpression(file.addImport("bluebird"), t.identifier("coroutine")), + t.memberExpression(file.addImport("bluebird", null, "absolute"), t.identifier("coroutine")), scope ); }; diff --git a/src/babel/transformation/transformers/other/runtime/index.js b/src/babel/transformation/transformers/other/runtime/index.js index 0f88697867..972701e099 100644 --- a/src/babel/transformation/transformers/other/runtime/index.js +++ b/src/babel/transformation/transformers/other/runtime/index.js @@ -18,7 +18,7 @@ var astVisitor = traverse.explode({ // Symbol() -> _core.Symbol(); new Promise -> new _core.Promise var modulePath = definitions.builtins[node.name]; - return file.addImport(`${RUNTIME_MODULE_NAME}/core-js/${modulePath}`, node.name, true); + return file.addImport(`${RUNTIME_MODULE_NAME}/core-js/${modulePath}`, node.name, "absoluteDefault"); }, CallExpression(node, parent, scope, file) { @@ -33,7 +33,7 @@ var astVisitor = traverse.explode({ var prop = callee.property; if (!isSymbolIterator(prop)) return; - return t.callExpression(file.addImport(`${RUNTIME_MODULE_NAME}/core-js/get-iterator`, "getIterator", true), [callee.object]); + return t.callExpression(file.addImport(`${RUNTIME_MODULE_NAME}/core-js/get-iterator`, "getIterator", "absoluteDefault"), [callee.object]); }, BinaryExpression(node, parent, scope, file) { @@ -45,7 +45,7 @@ var astVisitor = traverse.explode({ if (!isSymbolIterator(left)) return; return t.callExpression( - file.addImport(`${RUNTIME_MODULE_NAME}/core-js/is-iterable`, "isIterable", true), + file.addImport(`${RUNTIME_MODULE_NAME}/core-js/is-iterable`, "isIterable", "absoluteDefault"), [node.right] ); }, @@ -71,7 +71,7 @@ var astVisitor = traverse.explode({ if (scope.getBindingIdentifier(obj.name)) return; var modulePath = methods[prop.name]; - return file.addImport(`${RUNTIME_MODULE_NAME}/core-js/${modulePath}`, `${obj.name}$${prop.name}`, true); + return file.addImport(`${RUNTIME_MODULE_NAME}/core-js/${modulePath}`, `${obj.name}$${prop.name}`, "absoluteDefault"); }, exit(node, parent, scope, file) { @@ -85,7 +85,7 @@ var astVisitor = traverse.explode({ var modulePath = definitions.builtins[obj.name]; return t.memberExpression( - file.addImport(`${RUNTIME_MODULE_NAME}/core-js/${modulePath}`, `${obj.name}`, true), + file.addImport(`${RUNTIME_MODULE_NAME}/core-js/${modulePath}`, `${obj.name}`, "absoluteDefault"), prop ); } @@ -102,11 +102,11 @@ exports.Program = function (node, parent, scope, file) { exports.pre = function (file) { file.set("helperGenerator", function (name) { - return file.addImport(`${RUNTIME_MODULE_NAME}/helpers/${name}`, name, true); + return file.addImport(`${RUNTIME_MODULE_NAME}/helpers/${name}`, name, "absoluteDefault"); }); file.setDynamic("regeneratorIdentifier", function () { - return file.addImport(`${RUNTIME_MODULE_NAME}/regenerator`, "regeneratorRuntime", true); + return file.addImport(`${RUNTIME_MODULE_NAME}/regenerator`, "regeneratorRuntime", "absoluteDefault"); }); }; diff --git a/test/core/fixtures/transformation/bluebird-coroutines/class/expected.js b/test/core/fixtures/transformation/bluebird-coroutines/class/expected.js index a672789c8b..b08077911d 100644 --- a/test/core/fixtures/transformation/bluebird-coroutines/class/expected.js +++ b/test/core/fixtures/transformation/bluebird-coroutines/class/expected.js @@ -1,8 +1,6 @@ "use strict"; -var _bluebird2 = require("bluebird"); - -var _bluebird3 = babelHelpers.interopRequireWildcard(_bluebird2); +var _bluebird = require("bluebird"); var Foo = (function () { function Foo() { @@ -11,7 +9,7 @@ var Foo = (function () { babelHelpers.createClass(Foo, [{ key: "foo", - value: _bluebird3["default"].coroutine(function* () { + value: _bluebird.coroutine(function* () { var wat = yield bar(); }) }]); diff --git a/test/core/fixtures/transformation/bluebird-coroutines/expression/expected.js b/test/core/fixtures/transformation/bluebird-coroutines/expression/expected.js index c6720ad2bf..ed68858b19 100644 --- a/test/core/fixtures/transformation/bluebird-coroutines/expression/expected.js +++ b/test/core/fixtures/transformation/bluebird-coroutines/expression/expected.js @@ -1,11 +1,7 @@ "use strict"; -var _bluebird2 = require("bluebird"); +var _bluebird = require("bluebird"); -var _bluebird3 = _interopRequireWildcard(_bluebird2); - -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; - -var foo = _bluebird3["default"].coroutine(function* () { +var foo = _bluebird.coroutine(function* () { var wat = yield bar(); }); diff --git a/test/core/fixtures/transformation/bluebird-coroutines/named-expression/expected.js b/test/core/fixtures/transformation/bluebird-coroutines/named-expression/expected.js index 6b6d89b5db..777cbc71c6 100644 --- a/test/core/fixtures/transformation/bluebird-coroutines/named-expression/expected.js +++ b/test/core/fixtures/transformation/bluebird-coroutines/named-expression/expected.js @@ -1,14 +1,10 @@ "use strict"; -var _bluebird2 = require("bluebird"); - -var _bluebird3 = _interopRequireWildcard(_bluebird2); +var _bluebird = require("bluebird"); var _bar; -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; - -var foo = _bar = _bluebird3["default"].coroutine(function* () { +var foo = _bar = _bluebird.coroutine(function* () { console.log(_bar); }); diff --git a/test/core/fixtures/transformation/bluebird-coroutines/statement/expected.js b/test/core/fixtures/transformation/bluebird-coroutines/statement/expected.js index c6720ad2bf..ed68858b19 100644 --- a/test/core/fixtures/transformation/bluebird-coroutines/statement/expected.js +++ b/test/core/fixtures/transformation/bluebird-coroutines/statement/expected.js @@ -1,11 +1,7 @@ "use strict"; -var _bluebird2 = require("bluebird"); +var _bluebird = require("bluebird"); -var _bluebird3 = _interopRequireWildcard(_bluebird2); - -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; - -var foo = _bluebird3["default"].coroutine(function* () { +var foo = _bluebird.coroutine(function* () { var wat = yield bar(); });