diff --git a/src/babel/transformation/transformers/internal/explode.js b/src/babel/transformation/transformers/internal/explode.js index e26bc44634..374d88f022 100644 --- a/src/babel/transformation/transformers/internal/explode.js +++ b/src/babel/transformation/transformers/internal/explode.js @@ -13,6 +13,18 @@ function buildClone(bindingKey, refKey) { }; } +function buildListClone(listKey, bindingKey, refKey) { + var clone = buildClone(bindingKey, refKey); + + return function (node) { + if (!node[listKey]) return; + + for (var subNode of (node[listKey]: Array)) { + clone(subNode); + } + }; +} + export var Property = buildClone("value", "key"); -export var ExportSpecifier = buildClone("local", "exported"); -export var ImportSpecifier = buildClone("local", "imported"); +export var ExportDeclaration = buildListClone("specifiers", "local", "exported"); +export var ImportDeclaration = buildListClone("specifiers", "local", "imported"); diff --git a/src/babel/transformation/transformers/internal/modules.js b/src/babel/transformation/transformers/internal/modules.js index 75bc4f6edb..7fa03c8ee0 100644 --- a/src/babel/transformation/transformers/internal/modules.js +++ b/src/babel/transformation/transformers/internal/modules.js @@ -49,6 +49,10 @@ export function ExportDefaultDeclaration(node, parent, scope) { } } +function buildExportSpecifier(id) { + return t.exportSpecifier(clone(id), clone(id)); +} + export function ExportNamedDeclaration(node, parent, scope) { ImportDeclaration.apply(this, arguments); @@ -61,12 +65,12 @@ export function ExportNamedDeclaration(node, parent, scope) { if (t.isClassDeclaration(declar)) { // export class Foo {} - node.specifiers = [t.exportSpecifier(declar.id, declar.id)]; + node.specifiers = [buildExportSpecifier(declar.id)]; node.declaration = null; return [getDeclar(), node]; } else if (t.isFunctionDeclaration(declar)) { // export function Foo() {} - node.specifiers = [t.exportSpecifier(declar.id, declar.id)]; + node.specifiers = [buildExportSpecifier(declar.id)]; node.declaration = null; node._blockHoist = 2; return [getDeclar(), node]; @@ -75,8 +79,7 @@ export function ExportNamedDeclaration(node, parent, scope) { var specifiers = []; var bindings = this.get("declaration").getBindingIdentifiers(); for (var key in bindings) { - var id = bindings[key]; - specifiers.push(t.exportSpecifier(clone(id), clone(id))); + specifiers.push(buildExportSpecifier(bindings[key])); } return [declar, t.exportNamedDeclaration(null, specifiers)]; }