From 50d70d35d0810494a6a76f062177caf185fb9c77 Mon Sep 17 00:00:00 2001 From: magic-akari Date: Fri, 23 Aug 2024 06:01:40 +0800 Subject: [PATCH] fix(es/typescript): Correctly handle deep import chains (#9487) **Related issue:** - Closes https://github.com/swc-project/swc/issues/9486 --- .changeset/silver-taxis-do.md | 5 +++++ .../src/strip_import_export.rs | 8 ++++---- .../tests/fixture/issue-9486/input.ts | 5 +++++ .../tests/fixture/issue-9486/output.js | 4 ++++ 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 .changeset/silver-taxis-do.md create mode 100644 crates/swc_ecma_transforms_typescript/tests/fixture/issue-9486/input.ts create mode 100644 crates/swc_ecma_transforms_typescript/tests/fixture/issue-9486/output.js diff --git a/.changeset/silver-taxis-do.md b/.changeset/silver-taxis-do.md new file mode 100644 index 000000000000..b929393a630e --- /dev/null +++ b/.changeset/silver-taxis-do.md @@ -0,0 +1,5 @@ +--- +swc_ecma_transforms_typescript: patch +--- + +fix(es/typescript): Correctly handle deep import chains diff --git a/crates/swc_ecma_transforms_typescript/src/strip_import_export.rs b/crates/swc_ecma_transforms_typescript/src/strip_import_export.rs index ab4eda550ae4..65719a3922a4 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip_import_export.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip_import_export.rs @@ -121,10 +121,10 @@ impl UsageCollect { let mut new_usage = AHashSet::default(); for id in &self.id_usage { - let mut entry = self.import_chain.remove_entry(id); - while let Some((id, next)) = entry { - new_usage.insert(next); - entry = self.import_chain.remove_entry(&id); + let mut next = self.import_chain.remove(id); + while let Some(id) = next { + next = self.import_chain.remove(&id); + new_usage.insert(id); } if self.import_chain.is_empty() { break; diff --git a/crates/swc_ecma_transforms_typescript/tests/fixture/issue-9486/input.ts b/crates/swc_ecma_transforms_typescript/tests/fixture/issue-9486/input.ts new file mode 100644 index 000000000000..87dc74f2ab2c --- /dev/null +++ b/crates/swc_ecma_transforms_typescript/tests/fixture/issue-9486/input.ts @@ -0,0 +1,5 @@ +import { ns1 } from '../anotherFile'; +import ns2 = ns1.ns2; +import Class = ns2.Class; + +const a = new Class(5); \ No newline at end of file diff --git a/crates/swc_ecma_transforms_typescript/tests/fixture/issue-9486/output.js b/crates/swc_ecma_transforms_typescript/tests/fixture/issue-9486/output.js new file mode 100644 index 000000000000..9ff0deaca86d --- /dev/null +++ b/crates/swc_ecma_transforms_typescript/tests/fixture/issue-9486/output.js @@ -0,0 +1,4 @@ +import { ns1 } from '../anotherFile'; +const ns2 = ns1.ns2; +const Class = ns2.Class; +const a = new Class(5);