From 5853c9085dd69b6439873c8918d88b21804989d7 Mon Sep 17 00:00:00 2001 From: magic-akari Date: Tue, 19 Jul 2022 14:13:09 +0800 Subject: [PATCH 1/2] optimize: Simplify the `export-default-from` transform --- .../src/index.ts | 21 +++++++------------ .../default-compound-es6/output.mjs | 3 +-- .../export-default/default-es6/output.mjs | 3 +-- .../default-typescript/output.mjs | 3 +-- 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/packages/babel-plugin-proposal-export-default-from/src/index.ts b/packages/babel-plugin-proposal-export-default-from/src/index.ts index 4013eacf9997..099e71562a7d 100644 --- a/packages/babel-plugin-proposal-export-default-from/src/index.ts +++ b/packages/babel-plugin-proposal-export-default-from/src/index.ts @@ -11,33 +11,26 @@ export default declare(api => { visitor: { ExportNamedDeclaration(path) { - const { node, scope } = path; - const { specifiers } = node; + const { node } = path; + const { specifiers, source } = node; if (!t.isExportDefaultSpecifier(specifiers[0])) return; const specifier = specifiers.shift(); const { exported } = specifier; - const uid = scope.generateUidIdentifier( - // @ts-expect-error Identifier ?? StringLiteral - exported.name ?? exported.value, - ); const nodes = [ - t.importDeclaration( - [t.importDefaultSpecifier(uid)], - t.cloneNode(node.source), + t.exportNamedDeclaration( + null, + [t.exportSpecifier(t.identifier("default"), exported)], + t.cloneNode(source), ), - t.exportNamedDeclaration(null, [ - t.exportSpecifier(t.cloneNode(uid), exported), - ]), ]; if (specifiers.length >= 1) { nodes.push(node); } - const [importDeclaration] = path.replaceWithMultiple(nodes); - path.scope.registerDeclaration(importDeclaration); + path.replaceWithMultiple(nodes); }, }, }; diff --git a/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-compound-es6/output.mjs b/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-compound-es6/output.mjs index 45bc5549fde4..2be8339460ef 100644 --- a/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-compound-es6/output.mjs +++ b/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-compound-es6/output.mjs @@ -1,3 +1,2 @@ -import _v from "mod"; -export { _v as v }; +export { default as v } from "mod"; export { x, y as w } from "mod"; diff --git a/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-es6/output.mjs b/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-es6/output.mjs index 076607d0d743..8d64a17cad3f 100644 --- a/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-es6/output.mjs +++ b/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-es6/output.mjs @@ -1,2 +1 @@ -import _foo from "bar"; -export { _foo as foo }; +export { default as foo } from "bar"; diff --git a/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-typescript/output.mjs b/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-typescript/output.mjs index 076607d0d743..8d64a17cad3f 100644 --- a/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-typescript/output.mjs +++ b/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-typescript/output.mjs @@ -1,2 +1 @@ -import _foo from "bar"; -export { _foo as foo }; +export { default as foo } from "bar"; From e8852da56924cfaeb0754f6fca6cad6c93304d45 Mon Sep 17 00:00:00 2001 From: magic-akari Date: Tue, 19 Jul 2022 22:26:48 +0800 Subject: [PATCH 2/2] chore: merge specifiers if possible --- .../src/index.ts | 10 ++++++++-- .../export-default/default-compound-es6/output.mjs | 3 +-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/babel-plugin-proposal-export-default-from/src/index.ts b/packages/babel-plugin-proposal-export-default-from/src/index.ts index 099e71562a7d..d9fae94505f7 100644 --- a/packages/babel-plugin-proposal-export-default-from/src/index.ts +++ b/packages/babel-plugin-proposal-export-default-from/src/index.ts @@ -15,8 +15,14 @@ export default declare(api => { const { specifiers, source } = node; if (!t.isExportDefaultSpecifier(specifiers[0])) return; - const specifier = specifiers.shift(); - const { exported } = specifier; + const { exported } = specifiers.shift(); + + if (specifiers.every(s => t.isExportSpecifier(s))) { + specifiers.unshift( + t.exportSpecifier(t.identifier("default"), exported), + ); + return; + } const nodes = [ t.exportNamedDeclaration( diff --git a/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-compound-es6/output.mjs b/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-compound-es6/output.mjs index 2be8339460ef..a325c050502e 100644 --- a/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-compound-es6/output.mjs +++ b/packages/babel-plugin-proposal-export-default-from/test/fixtures/export-default/default-compound-es6/output.mjs @@ -1,2 +1 @@ -export { default as v } from "mod"; -export { x, y as w } from "mod"; +export { default as v, x, y as w } from "mod";