Skip to content

Commit a5ed6db

Browse files
fengmk2claude
andcommitted
feat(migration): support @vitest/browser-preview and @vitest/browser-webdriverio
Add rewrite rules for additional vitest browser packages: - @vitest/browser-preview → @voidzero-dev/vite-plus/test/browser-preview - @vitest/browser-webdriverio → @voidzero-dev/vite-plus/test/browser-webdriverio 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 669a1b2 commit a5ed6db

9 files changed

Lines changed: 106 additions & 37 deletions

File tree

crates/vite_migration/src/import_rewriter.rs

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ use crate::{ast_grep, file_walker};
1616
/// - `import { ... } from '@vitest/browser/{name}'` → `import { ... } from '@voidzero-dev/vite-plus/test/browser/{name}'`
1717
/// - `import { ... } from '@vitest/browser-playwright'` → `import { ... } from '@voidzero-dev/vite-plus/test/browser-playwright'`
1818
/// - `import { ... } from '@vitest/browser-playwright/{name}'` → `import { ... } from '@voidzero-dev/vite-plus/test/browser-playwright/{name}'`
19+
/// - `import { ... } from '@vitest/browser-preview'` → `import { ... } from '@voidzero-dev/vite-plus/test/browser-preview'`
20+
/// - `import { ... } from '@vitest/browser-preview/{name}'` → `import { ... } from '@voidzero-dev/vite-plus/test/browser-preview/{name}'`
21+
/// - `import { ... } from '@vitest/browser-webdriverio'` → `import { ... } from '@voidzero-dev/vite-plus/test/browser-webdriverio'`
22+
/// - `import { ... } from '@vitest/browser-webdriverio/{name}'` → `import { ... } from '@voidzero-dev/vite-plus/test/browser-webdriverio/{name}'`
1923
const REWRITE_IMPORT_RULES: &str = r#"---
2024
id: rewrite-vitest-config-import
2125
language: TypeScript
@@ -70,7 +74,7 @@ language: TypeScript
7074
rule:
7175
pattern: $STR
7276
kind: string
73-
regex: ^['"]@vitest/(browser-playwright|browser)(/.*)?['"]$
77+
regex: ^['"]@vitest/(browser-playwright|browser-preview|browser-webdriverio|browser)(/.*)?['"]$
7478
inside:
7579
kind: import_statement
7680
transform:
@@ -509,6 +513,70 @@ export default something;"#;
509513
result.content,
510514
r#"import { something } from "@voidzero-dev/vite-plus/test/browser-playwright/context";
511515
516+
export default something;"#
517+
);
518+
}
519+
520+
#[test]
521+
fn test_rewrite_import_content_vitest_browser_preview() {
522+
let vite_config = r#"import { preview } from '@vitest/browser-preview';
523+
524+
export default preview;"#;
525+
526+
let result = rewrite_import_content(vite_config).unwrap();
527+
assert!(result.updated);
528+
assert_eq!(
529+
result.content,
530+
r#"import { preview } from '@voidzero-dev/vite-plus/test/browser-preview';
531+
532+
export default preview;"#
533+
);
534+
}
535+
536+
#[test]
537+
fn test_rewrite_import_content_vitest_browser_preview_subpath() {
538+
let vite_config = r#"import { something } from "@vitest/browser-preview/context";
539+
540+
export default something;"#;
541+
542+
let result = rewrite_import_content(vite_config).unwrap();
543+
assert!(result.updated);
544+
assert_eq!(
545+
result.content,
546+
r#"import { something } from "@voidzero-dev/vite-plus/test/browser-preview/context";
547+
548+
export default something;"#
549+
);
550+
}
551+
552+
#[test]
553+
fn test_rewrite_import_content_vitest_browser_webdriverio() {
554+
let vite_config = r#"import { webdriverio } from '@vitest/browser-webdriverio';
555+
556+
export default webdriverio;"#;
557+
558+
let result = rewrite_import_content(vite_config).unwrap();
559+
assert!(result.updated);
560+
assert_eq!(
561+
result.content,
562+
r#"import { webdriverio } from '@voidzero-dev/vite-plus/test/browser-webdriverio';
563+
564+
export default webdriverio;"#
565+
);
566+
}
567+
568+
#[test]
569+
fn test_rewrite_import_content_vitest_browser_webdriverio_subpath() {
570+
let vite_config = r#"import { something } from "@vitest/browser-webdriverio/context";
571+
572+
export default something;"#;
573+
574+
let result = rewrite_import_content(vite_config).unwrap();
575+
assert!(result.updated);
576+
assert_eq!(
577+
result.content,
578+
r#"import { something } from "@voidzero-dev/vite-plus/test/browser-webdriverio/context";
579+
512580
export default something;"#
513581
);
514582
}

crates/vite_migration/src/vite_config.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,10 +542,21 @@ export default defineConfig({});"#;
542542
}"#;
543543

544544
let result = merge_json_config_content(vite_config, oxlint_config, "lint").unwrap();
545+
assert_eq!(
546+
result.content,
547+
r#"import { defineConfig } from 'vite';
548+
549+
export default defineConfig({
550+
lint: {
551+
rules: {
552+
'no-console': 'warn',
553+
},
554+
},
555+
556+
});"#
557+
);
545558
assert!(result.updated);
546559
assert!(!result.uses_function_callback);
547-
assert!(result.content.contains("lint: {"));
548-
assert!(result.content.contains("'no-console': 'warn'"));
549560
}
550561

551562
#[test]

packages/global/snap-tests/migration-from-vitest/snap.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import { join } from 'node:path';
2121
import { foo } from '@foo/vite-plugin-foo';
2222
import { playwright } from '@voidzero-dev/vite-plus/test/browser-playwright';
2323
import { server } from '@voidzero-dev/vite-plus/test/browser-playwright/context';
24+
import { preview } from '@voidzero-dev/vite-plus/test/browser-preview';
25+
import { webdriverio } from '@voidzero-dev/vite-plus/test/browser-webdriverio';
2426
import { userEvent } from '@voidzero-dev/vite-plus/test/browser/context';
2527
import { defineConfig } from '@voidzero-dev/vite-plus';
2628

packages/global/snap-tests/migration-from-vitest/vitest.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { join } from 'node:path';
33
import { foo } from '@foo/vite-plugin-foo';
44
import { playwright } from '@vitest/browser-playwright';
55
import { server } from '@vitest/browser-playwright/context';
6+
import { preview } from '@vitest/browser-preview';
7+
import { webdriverio } from '@vitest/browser-webdriverio';
68
import { userEvent } from '@vitest/browser/context';
79
import { defineConfig } from 'vitest/config';
810

packages/global/snap-tests/migration-merge-vite-config-ts/snap.txt

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@
1111
1212
◆ ✅ Merged .oxfmtrc.json into vite.config.ts
1313
14-
◆ ✅ Rewrote imports in 2 file(s)
14+
◆ ✅ Rewrote imports in 1 file(s)
1515
1616
● vite.config.ts
17-
│ vitest.config.ts
1817
1918
└ ✨ Migration completed!
2019

2120

2221
> cat vite.config.ts # check vite.config.ts
22+
import { join } from 'node:path';
23+
2324
import react from '@vitejs/plugin-react';
25+
import { playwright } from '@voidzero-dev/vite-plus/test/browser-playwright';
2426
import { defineConfig } from '@voidzero-dev/vite-plus';
2527

2628
export default defineConfig({
@@ -37,17 +39,6 @@ export default defineConfig({
3739
},
3840
},
3941
plugins: [react()],
40-
});
41-
42-
> cat vitest.config.ts # check vitest.config.ts
43-
import { join } from 'node:path';
44-
45-
import { foo } from '@foo/vite-plugin-foo';
46-
import { playwright } from '@voidzero-dev/vite-plus/test/browser-playwright';
47-
import { defineConfig } from '@voidzero-dev/vite-plus';
48-
49-
export default defineConfig({
50-
plugins: [foo()],
5142
test: {
5243
dir: join(import.meta.dirname, 'test'),
5344
browser: {

packages/global/snap-tests/migration-merge-vite-config-ts/steps.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
"commands": [
66
"vp migration # migration should merge vite.config.ts and remove oxlintrc and oxfmtrc",
77
"cat vite.config.ts # check vite.config.ts",
8-
"cat vitest.config.ts # check vitest.config.ts",
98
"cat .oxlintrc.json && exit 1 || true # check .oxlintrc.json is removed",
109
"cat .oxfmtrc.json && exit 1 || true # check .oxfmtrc.json is removed",
1110
"cat package.json # check package.json"
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
1+
import { join } from 'node:path';
2+
13
import react from '@vitejs/plugin-react';
2-
import { defineConfig } from 'vite';
4+
import { playwright } from '@vitest/browser-playwright';
5+
import { defineConfig } from 'vitest/config';
36

47
export default defineConfig({
58
plugins: [react()],
9+
test: {
10+
dir: join(import.meta.dirname, 'test'),
11+
browser: {
12+
enabled: true,
13+
provider: playwright(),
14+
headless: true,
15+
screenshotFailures: false,
16+
instances: [{ browser: 'chromium' }],
17+
},
18+
},
619
});

packages/global/snap-tests/migration-merge-vite-config-ts/vitest.config.ts

Lines changed: 0 additions & 19 deletions
This file was deleted.

packages/global/src/migration/migrator.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ const REMOVE_PACKAGES = [
3636
'oxlint-tsgolint',
3737
'oxfmt',
3838
'@vitest/browser',
39+
'@vitest/browser-preview',
3940
'@vitest/browser-playwright',
41+
'@vitest/browser-webdriverio',
4042
] as const;
4143

4244
export function checkViteVersion(projectPath: string): boolean {

0 commit comments

Comments
 (0)