import syntaxExportExtensions from "babel-plugin-syntax-export-extensions"; export default function({ types: t }) { function build(node, nodes, scope) { const hasNoExportDefault = node.specifiers.every( specifier => !t.isExportDefaultSpecifier(specifier), ); if (hasNoExportDefault) return; const specifier = node.specifiers.shift(); const uid = scope.generateUidIdentifier(specifier.exported.name); let newSpecifier; if (t.isExportNamespaceSpecifier(specifier)) { newSpecifier = t.importNamespaceSpecifier(uid); } else { newSpecifier = t.importDefaultSpecifier(uid); } nodes.push(t.importDeclaration([newSpecifier], node.source)); nodes.push( t.exportNamedDeclaration(null, [ t.exportSpecifier(uid, specifier.exported), ]), ); build(node, nodes, scope); } return { inherits: syntaxExportExtensions, visitor: { ExportNamedDeclaration(path) { const { node, scope } = path; const nodes = []; build(node, nodes, scope); if (!nodes.length) return; if (node.specifiers.length >= 1) { nodes.push(node); } path.replaceWithMultiple(nodes); }, }, }; }