From f1c8046c524b940b749f8f6cde2337d9ec3c3528 Mon Sep 17 00:00:00 2001 From: naokihaba <59875779+naokihaba@users.noreply.github.com> Date: Sat, 9 May 2026 22:44:15 +0900 Subject: [PATCH 1/5] feat(import-rewriter): add rules to rewrite tsdown/client imports and declarations --- crates/vite_migration/src/import_rewriter.rs | 90 ++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/crates/vite_migration/src/import_rewriter.rs b/crates/vite_migration/src/import_rewriter.rs index a191031ea4..01605b84f4 100644 --- a/crates/vite_migration/src/import_rewriter.rs +++ b/crates/vite_migration/src/import_rewriter.rs @@ -277,6 +277,38 @@ transform: replace: tsdown by: "vite-plus/pack" fix: $NEW_IMPORT +--- +id: rewrite-tsdown-client-import +language: TypeScript +rule: + pattern: $STR + kind: string + regex: ^['"]tsdown/client['"]$ + inside: + kind: import_statement +transform: + NEW_IMPORT: + replace: + source: $STR + replace: tsdown/client + by: "vite-plus/pack/client" +fix: $NEW_IMPORT +--- +id: rewrite-declare-module-tsdown-client +language: TypeScript +rule: + pattern: $STR + kind: string + regex: ^['"]tsdown/client['"]$ + inside: + kind: module +transform: + NEW_IMPORT: + replace: + source: $STR + replace: tsdown/client + by: "vite-plus/pack/client" +fix: $NEW_IMPORT "#; static PARSED_VITE_RULES: LazyLock>> = LazyLock::new(|| { @@ -1922,6 +1954,64 @@ export default defineConfig({ ); } + #[test] + fn test_rewrite_import_content_tsdown_client() { + let content = r#"import 'tsdown/client';"#; + + let result = rewrite_import_content(content, &SkipPackages::default()).unwrap(); + assert!(result.updated); + assert_eq!(result.content, r#"import 'vite-plus/pack/client';"#); + } + + #[test] + fn test_rewrite_import_content_tsdown_client_double_quotes() { + let content = r#"import "tsdown/client";"#; + + let result = rewrite_import_content(content, &SkipPackages::default()).unwrap(); + assert!(result.updated); + assert_eq!(result.content, r#"import "vite-plus/pack/client";"#); + } + + #[test] + fn test_rewrite_declare_module_tsdown_client() { + let content = r#"declare module 'tsdown/client' { + interface ClientConfig { + custom?: boolean; + } +}"#; + + let result = rewrite_import_content(content, &SkipPackages::default()).unwrap(); + assert!(result.updated); + assert_eq!( + result.content, + r#"declare module 'vite-plus/pack/client' { + interface ClientConfig { + custom?: boolean; + } +}"# + ); + } + + #[test] + fn test_rewrite_declare_module_tsdown_client_double_quotes() { + let content = r#"declare module "tsdown/client" { + interface ClientConfig { + custom?: boolean; + } +}"#; + + let result = rewrite_import_content(content, &SkipPackages::default()).unwrap(); + assert!(result.updated); + assert_eq!( + result.content, + r#"declare module "vite-plus/pack/client" { + interface ClientConfig { + custom?: boolean; + } +}"# + ); + } + // ======================== // PeerDependencies Tests // ======================== From 11f3675398e9200d7c0effdf2610ae19873f043b Mon Sep 17 00:00:00 2001 From: naokihaba <59875779+naokihaba@users.noreply.github.com> Date: Sat, 9 May 2026 23:21:34 +0900 Subject: [PATCH 2/5] feat(import-rewriter): add regex for rewriting tsdown/client references to vite-plus --- crates/vite_migration/src/import_rewriter.rs | 27 ++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/crates/vite_migration/src/import_rewriter.rs b/crates/vite_migration/src/import_rewriter.rs index 01605b84f4..4b317247b6 100644 --- a/crates/vite_migration/src/import_rewriter.rs +++ b/crates/vite_migration/src/import_rewriter.rs @@ -363,6 +363,11 @@ static RE_REF_VITE_SUBPATH: LazyLock = LazyLock::new(|| { Regex::new(r#"^(\s*///\s*)"#).unwrap() }); +/// `tsdown/client` → `vite-plus/pack/client` +static RE_REF_TSDOWN_CLIENT: LazyLock = LazyLock::new(|| { + Regex::new(r#"^(\s*///\s*)"#).unwrap() +}); + /// bare `tsdown` → `vite-plus/pack` static RE_REF_TSDOWN: LazyLock = LazyLock::new(|| { Regex::new(r#"^(\s*///\s*)"#).unwrap() @@ -527,10 +532,14 @@ fn rewrite_reference_types(content: &mut String, skip_packages: &SkipPackages) - continue; } } - if !skip_packages.skip_tsdown - && apply_regex_replace(line, &RE_REF_TSDOWN, "${1}vite-plus/pack${2}") - { - changed = true; + if !skip_packages.skip_tsdown { + if apply_regex_replace(line, &RE_REF_TSDOWN_CLIENT, "${1}vite-plus/pack/client${2}") { + changed = true; + continue; + } + if apply_regex_replace(line, &RE_REF_TSDOWN, "${1}vite-plus/pack${2}") { + changed = true; + } } } @@ -2553,12 +2562,14 @@ export default defineConfig({});"# } #[test] - fn test_rewrite_reference_types_tsdown_subpath_not_rewritten() { - // tsdown subpaths should NOT be rewritten because vite-plus only exports ./pack (no subpaths) + fn test_rewrite_reference_types_tsdown_client() { let content = r#"/// "#; let result = rewrite_import_content(content, &SkipPackages::default()).unwrap(); - assert!(!result.updated); - assert_eq!(result.content, content); + assert!(result.updated); + assert_eq!( + result.content, + r#"/// "# + ); } #[test] From 0bc0117e10d7623c2b2f5db6699787fe2d7e5579 Mon Sep 17 00:00:00 2001 From: naokihaba <59875779+naokihaba@users.noreply.github.com> Date: Sat, 9 May 2026 23:25:34 +0900 Subject: [PATCH 3/5] test: update assertion for tsdown/client reference rewrite --- crates/vite_migration/src/import_rewriter.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/crates/vite_migration/src/import_rewriter.rs b/crates/vite_migration/src/import_rewriter.rs index 4b317247b6..eb18e52f3a 100644 --- a/crates/vite_migration/src/import_rewriter.rs +++ b/crates/vite_migration/src/import_rewriter.rs @@ -2566,10 +2566,7 @@ export default defineConfig({});"# let content = r#"/// "#; let result = rewrite_import_content(content, &SkipPackages::default()).unwrap(); assert!(result.updated); - assert_eq!( - result.content, - r#"/// "# - ); + assert_eq!(result.content, r#"/// "#); } #[test] From af1ccf9c6644d1bada2e0f436c953a45ba71138c Mon Sep 17 00:00:00 2001 From: naokihaba <59875779+naokihaba@users.noreply.github.com> Date: Sat, 9 May 2026 23:36:52 +0900 Subject: [PATCH 4/5] ci: trigger pipeline From c01e17fedea8e7d53ec8335f9dfd506b034f7248 Mon Sep 17 00:00:00 2001 From: naokihaba <59875779+naokihaba@users.noreply.github.com> Date: Mon, 11 May 2026 15:21:55 +0900 Subject: [PATCH 5/5] fix: remove unused tsdown/client reference regex --- crates/vite_migration/src/import_rewriter.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/crates/vite_migration/src/import_rewriter.rs b/crates/vite_migration/src/import_rewriter.rs index ab8698324a..91146d3b38 100644 --- a/crates/vite_migration/src/import_rewriter.rs +++ b/crates/vite_migration/src/import_rewriter.rs @@ -363,11 +363,6 @@ static RE_REF_VITE_SUBPATH: LazyLock = LazyLock::new(|| { Regex::new(r#"^(\s*///\s*)"#).unwrap() }); -/// `tsdown/client` → `vite-plus/pack/client` -static RE_REF_TSDOWN_CLIENT: LazyLock = LazyLock::new(|| { - Regex::new(r#"^(\s*///\s*)"#).unwrap() -}); - /// bare `tsdown` → `vite-plus/pack` static RE_REF_TSDOWN: LazyLock = LazyLock::new(|| { Regex::new(r#"^(\s*///\s*)"#).unwrap()