support multiple export specifier remapping

This commit is contained in:
Sebastian McKenzie
2015-04-02 20:25:05 +11:00
parent 33fde5f143
commit 01a2aa7dd1
10 changed files with 89 additions and 37 deletions

View File

@@ -15,7 +15,7 @@ var remapVisitor = {
}
if (t.isUpdateExpression(node)) {
var exported = formatter.getLocalReference(node.argument, scope);
var exported = formatter.getExport(node.argument, scope);
if (exported) {
this.skip();
@@ -47,7 +47,7 @@ var remapVisitor = {
}
if (t.isAssignmentExpression(node)) {
var exported = formatter.getLocalReference(node.left, scope);
var exported = formatter.getExport(node.left, scope);
if (exported) {
this.skip();
return formatter.remapExportAssignment(node, exported);
@@ -76,10 +76,7 @@ var exportsVisitor = traverse.explode({
var bindings = declar.getBindingIdentifiers()
for (var name in bindings) {
var binding = bindings[name];
formatter.localExports[name] = {
binding: binding,
exported: binding
};
formatter._addExport(name, binding);
}
}
@@ -89,10 +86,7 @@ var exportsVisitor = traverse.explode({
var local = specifier.local;
if (!local) continue;
formatter.localExports[local.name] = {
binding: scope.getBindingIdentifier(local.name),
exported: specifier.exported
};
formatter._addExport(local.name, specifier.exported);
}
}
@@ -164,18 +158,28 @@ export default class DefaultFormatter {
}
remapExportAssignment(node, exported) {
return t.assignmentExpression(
"=",
node.left,
t.assignmentExpression(
node.operator,
t.memberExpression(t.identifier("exports"), exported),
node.right
)
);
var assign = node;
for (var i = 0; i < exported.length; i++) {
assign = t.assignmentExpression(
"=",
t.memberExpression(t.identifier("exports"), exported[i]),
assign
);
}
return assign;
}
getLocalReference(node, scope) {
_addExport(name, exported) {
var info = this.localExports[name] ||= {
binding: this.scope.getBindingIdentifier(name),
exported: []
};
info.exported.push(exported);
}
getExport(node, scope) {
if (!t.isIdentifier(node)) return;
var local = this.localExports[node.name];

View File

@@ -126,7 +126,13 @@ export default class SystemFormatter extends AMDFormatter {
}
remapExportAssignment(node, exported) {
return this.buildExportCall(t.literal(exported.name), node);
var assign = node;
for (var i = 0; i < exported.length; i++) {
assign = this.buildExportCall(t.literal(exported[i].name), assign);
}
return assign;
}
buildExportCall(id, init, isStatement) {