remove interop require on bluebird - fixes #1289

This commit is contained in:
Sebastian McKenzie
2015-04-20 00:22:41 +01:00
parent 3564309a77
commit 6b1c5bc358
10 changed files with 41 additions and 39 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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