From 4b3f619d4ad3585e3e2d1f2c15230475cc18b68b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 6 Sep 2022 17:12:04 -0400 Subject: [PATCH] fix: do not remove type import used in TS import= (#14913) * fix: do not remove type import used in TS import= * tweak typing --- .../babel-plugin-transform-typescript/src/index.ts | 10 ++++++++-- .../elide-type-referenced-in-imports-equal-no/input.ts | 5 +++++ .../options.json | 3 +++ .../output.mjs | 4 ++++ 4 files changed, 20 insertions(+), 2 deletions(-) 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..3662ad8252c0 100644 --- a/packages/babel-plugin-transform-typescript/src/index.ts +++ b/packages/babel-plugin-transform-typescript/src/index.ts @@ -13,13 +13,19 @@ 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 === + // @ts-expect-error: DeclareExportDeclaration does not have `exportKind` + (path.parentPath as NodePath).parent.exportKind === "type" ); default: 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;