From c2524f87c04de055c1af42d9b24b7d59357c134f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 6 Sep 2022 15:31:46 -0400 Subject: [PATCH 1/2] fix: do not remove type import used in TS import= --- packages/babel-plugin-transform-typescript/src/index.ts | 7 ++++++- .../elide-type-referenced-in-imports-equal-no/input.ts | 5 +++++ .../elide-type-referenced-in-imports-equal-no/options.json | 3 +++ .../elide-type-referenced-in-imports-equal-no/output.mjs | 4 ++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/input.ts create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/options.json create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/output.mjs diff --git a/packages/babel-plugin-transform-typescript/src/index.ts b/packages/babel-plugin-transform-typescript/src/index.ts index 1696f8e9f780..f58ad0fdd0c1 100644 --- a/packages/babel-plugin-transform-typescript/src/index.ts +++ b/packages/babel-plugin-transform-typescript/src/index.ts @@ -13,10 +13,15 @@ import transpileNamespace from "./namespace"; function isInType(path: NodePath) { switch (path.parent.type) { case "TSTypeReference": - case "TSQualifiedName": case "TSExpressionWithTypeArguments": case "TSTypeQuery": return true; + case "TSQualifiedName": + return ( + // `import foo = ns.bar` is transformed to `var foo = ns.bar` and should not be removed + path.parentPath.findParent(path => path.type !== "TSQualifiedName") + .type !== "TSImportEqualsDeclaration" + ); case "ExportSpecifier": return ( (path.parentPath.parent as t.ExportNamedDeclaration).exportKind === diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/input.ts new file mode 100644 index 000000000000..f4da1ee0208d --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/input.ts @@ -0,0 +1,5 @@ +import nsa from "./module-a"; +import foo = nsa.bar; + +import nsb from "./module-b"; +import bar = nsb.foo.bar; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/options.json b/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/options.json new file mode 100644 index 000000000000..5c79172a6082 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-typescript"] +} diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/output.mjs new file mode 100644 index 000000000000..b47cdaf84293 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/imports/elide-type-referenced-in-imports-equal-no/output.mjs @@ -0,0 +1,4 @@ +import nsa from "./module-a"; +var foo = nsa.bar; +import nsb from "./module-b"; +var bar = nsb.foo.bar; From 70fbf78effdacfbc5bfdfba50d750922c774be87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 6 Sep 2022 15:40:55 -0400 Subject: [PATCH 2/2] tweak typing --- packages/babel-plugin-transform-typescript/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/babel-plugin-transform-typescript/src/index.ts b/packages/babel-plugin-transform-typescript/src/index.ts index f58ad0fdd0c1..3662ad8252c0 100644 --- a/packages/babel-plugin-transform-typescript/src/index.ts +++ b/packages/babel-plugin-transform-typescript/src/index.ts @@ -24,7 +24,8 @@ function isInType(path: NodePath) { ); case "ExportSpecifier": return ( - (path.parentPath.parent as t.ExportNamedDeclaration).exportKind === + // @ts-expect-error: DeclareExportDeclaration does not have `exportKind` + (path.parentPath as NodePath).parent.exportKind === "type" ); default: