From 89cab4311ce6dea0090d5819a721a1269765d6ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 28 Sep 2021 15:13:37 -0400 Subject: [PATCH] fix: remove imported types from export (#13800) * fix: remove imported types from export * add onlyRemoveTypeImports testcase --- .../src/index.ts | 16 ++++++++++------ .../input.ts | 5 +++++ .../options.json | 10 ++++++++++ .../output.mjs | 2 ++ .../fixtures/exports/imported-types/input.ts | 5 +++++ .../fixtures/exports/imported-types/output.mjs | 2 ++ 6 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/input.ts create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/options.json create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/output.mjs create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types/input.ts create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types/output.mjs diff --git a/packages/babel-plugin-transform-typescript/src/index.ts b/packages/babel-plugin-transform-typescript/src/index.ts index 6daeb9fa26f3..b79d6deb96ad 100644 --- a/packages/babel-plugin-transform-typescript/src/index.ts +++ b/packages/babel-plugin-transform-typescript/src/index.ts @@ -47,8 +47,8 @@ function isGlobalType(path, name) { return false; } -function registerGlobalType(programScope, name) { - GLOBAL_TYPES.get(programScope.path.node).add(name); +function registerGlobalType(programNode, name) { + GLOBAL_TYPES.get(programNode).add(name); } export default declare((api, opts) => { @@ -188,9 +188,10 @@ export default declare((api, opts) => { const { file } = state; let fileJsxPragma = null; let fileJsxPragmaFrag = null; + const programNode = path.node; - if (!GLOBAL_TYPES.has(path.node)) { - GLOBAL_TYPES.set(path.node, new Set()); + if (!GLOBAL_TYPES.has(programNode)) { + GLOBAL_TYPES.set(programNode, new Set()); } if (file.ast.comments) { @@ -225,6 +226,9 @@ export default declare((api, opts) => { } if (stmt.node.importKind === "type") { + for (const specifier of stmt.node.specifiers) { + registerGlobalType(programNode, specifier.local.name); + } stmt.remove(); continue; } @@ -287,7 +291,7 @@ export default declare((api, opts) => { if (stmt.isVariableDeclaration({ declare: true })) { for (const name of Object.keys(stmt.getBindingIdentifiers())) { - registerGlobalType(path.scope, name); + registerGlobalType(programNode, name); } } else if ( stmt.isTSTypeAliasDeclaration() || @@ -298,7 +302,7 @@ export default declare((api, opts) => { (stmt.isTSModuleDeclaration({ declare: true }) && stmt.get("id").isIdentifier()) ) { - registerGlobalType(path.scope, stmt.node.id.name); + registerGlobalType(programNode, stmt.node.id.name); } } }, diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/input.ts new file mode 100644 index 000000000000..ea7f2c79fc17 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/input.ts @@ -0,0 +1,5 @@ +import type A from "A"; +import type { B } from "B"; +import C from "C"; + +export { A, B, C } // <-- A and B will be removed diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/options.json b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/options.json new file mode 100644 index 000000000000..0ec61d2b5e55 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/options.json @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "transform-typescript", + { + "onlyRemoveTypeImports": true + } + ] + ] +} diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/output.mjs new file mode 100644 index 000000000000..4dffd19d5f0b --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types-only-remove-type-imports/output.mjs @@ -0,0 +1,2 @@ +import C from "C"; +export { C }; // <-- A and B will be removed diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types/input.ts new file mode 100644 index 000000000000..ea7f2c79fc17 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types/input.ts @@ -0,0 +1,5 @@ +import type A from "A"; +import type { B } from "B"; +import C from "C"; + +export { A, B, C } // <-- A and B will be removed diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types/output.mjs new file mode 100644 index 000000000000..4dffd19d5f0b --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/imported-types/output.mjs @@ -0,0 +1,2 @@ +import C from "C"; +export { C }; // <-- A and B will be removed