From 799c0c1f0ffa4932c77ef0cab02b413c07ce42b8 Mon Sep 17 00:00:00 2001 From: Ming Date: Wed, 20 Jul 2022 17:52:25 +0800 Subject: [PATCH 1/3] Declare class in namespace should be removed --- packages/babel-plugin-transform-typescript/src/namespace.ts | 4 ++++ .../test/fixtures/namespace/declare-class/input.ts | 4 ++++ .../test/fixtures/namespace/declare-class/output.mjs | 3 +++ 3 files changed, 11 insertions(+) create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/input.ts create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/output.mjs diff --git a/packages/babel-plugin-transform-typescript/src/namespace.ts b/packages/babel-plugin-transform-typescript/src/namespace.ts index 74532eca9412..7d26dec320c1 100644 --- a/packages/babel-plugin-transform-typescript/src/namespace.ts +++ b/packages/babel-plugin-transform-typescript/src/namespace.ts @@ -185,6 +185,10 @@ function handleNested( case "TSEnumDeclaration": case "FunctionDeclaration": case "ClassDeclaration": { + if (subNode.declaration.declare) { + continue; + } + const itemName = subNode.declaration.id.name; names.add(itemName); namespaceTopLevel.splice( diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/input.ts new file mode 100644 index 000000000000..ab6316e99249 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/input.ts @@ -0,0 +1,4 @@ +export namespace A { + export declare class B { + } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/output.mjs new file mode 100644 index 000000000000..d4cc47055d31 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/output.mjs @@ -0,0 +1,3 @@ +export let A; + +(function (_A) {})(A || (A = {})); From 8d05accef194112c673cf56fe217affbd43be448 Mon Sep 17 00:00:00 2001 From: Ming Date: Wed, 20 Jul 2022 23:14:05 +0800 Subject: [PATCH 2/3] support VariableDeclaration in namespace --- .../src/namespace.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/babel-plugin-transform-typescript/src/namespace.ts b/packages/babel-plugin-transform-typescript/src/namespace.ts index 7d26dec320c1..a181cdca7448 100644 --- a/packages/babel-plugin-transform-typescript/src/namespace.ts +++ b/packages/babel-plugin-transform-typescript/src/namespace.ts @@ -81,11 +81,14 @@ function handleVariableDeclaration( // `export const a = 1` transforms to `const a = N.a = 1`, the output // is smaller than `const a = 1; N.a = a`; for (const declarator of declarations) { - declarator.init = t.assignmentExpression( - "=", - getMemberExpression(name, declarator.id.name), - declarator.init, - ); + // `export declare const a`,the declarator.init would be null, + if (declarator.init) { + declarator.init = t.assignmentExpression( + "=", + getMemberExpression(name, declarator.id.name), + declarator.init, + ); + } } return [node]; } From 7435df39c7d0ddf138c87faea7e288ca8190709c Mon Sep 17 00:00:00 2001 From: Ming Date: Wed, 20 Jul 2022 23:15:41 +0800 Subject: [PATCH 3/3] add test case for enums, functions, and variables --- .../test/fixtures/namespace/declare-class/input.ts | 4 ---- .../test/fixtures/namespace/declare-class/output.mjs | 3 --- .../test/fixtures/namespace/declare/input.ts | 7 +++++++ .../test/fixtures/namespace/declare/output.mjs | 5 +++++ 4 files changed, 12 insertions(+), 7 deletions(-) delete mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/input.ts delete mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/output.mjs create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare/input.ts create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare/output.mjs diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/input.ts deleted file mode 100644 index ab6316e99249..000000000000 --- a/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/input.ts +++ /dev/null @@ -1,4 +0,0 @@ -export namespace A { - export declare class B { - } -} \ No newline at end of file diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/output.mjs deleted file mode 100644 index d4cc47055d31..000000000000 --- a/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare-class/output.mjs +++ /dev/null @@ -1,3 +0,0 @@ -export let A; - -(function (_A) {})(A || (A = {})); diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare/input.ts new file mode 100644 index 000000000000..8850f9ac5929 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare/input.ts @@ -0,0 +1,7 @@ +export namespace N { + export declare class C { + } + export declare enum e { }; + export declare function f(): void; + export declare const v: unknown; +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare/output.mjs new file mode 100644 index 000000000000..70db61af014a --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/namespace/declare/output.mjs @@ -0,0 +1,5 @@ +export let N; + +(function (_N) { + ; +})(N || (N = {}));