From 1e89a851314c36bd655a2fa99477ee8a29bf08ff Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 28 Jul 2026 08:57:04 +0000 Subject: [PATCH 1/3] test: add regression tests for React Compiler detection with @rolldown/plugin-babel Adds tests for React Compiler detection when using reactCompilerPreset() with @rolldown/plugin-babel in Vite configurations. Tests cover: - defineConfig wrapper (reported in #1468) - Various file extensions (.js, .mjs, .ts) - Configuration without babel-plugin-react-compiler explicitly listed The detection logic already handles these cases correctly (working in 0.9.2), but these tests prevent future regressions. Co-authored-by: Skosh --- packages/core/tests/discover-project.test.ts | 81 ++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/packages/core/tests/discover-project.test.ts b/packages/core/tests/discover-project.test.ts index 80e94bfbf..ffe4f4b03 100644 --- a/packages/core/tests/discover-project.test.ts +++ b/packages/core/tests/discover-project.test.ts @@ -2574,6 +2574,87 @@ describe("discoverProject", () => { expect(projectInfo.hasReactCompiler).toBe(true); }); + it("detects the Vite 6 React Compiler preset with defineConfig wrapper (issue #1468)", () => { + const projectDirectory = path.join(tempDirectory, "vite-react-compiler-preset-defineconfig"); + fs.mkdirSync(projectDirectory, { recursive: true }); + fs.writeFileSync( + path.join(projectDirectory, "package.json"), + JSON.stringify({ + name: "vite-react-compiler-preset-defineconfig", + dependencies: { react: "19.2.3" }, + devDependencies: { + "vite": "^8.1.0", + "@vitejs/plugin-react": "^6.0.1", + "@rolldown/plugin-babel": "^0.2.3", + "babel-plugin-react-compiler": "^1.0.0", + }, + }), + ); + fs.writeFileSync( + path.join(projectDirectory, "vite.config.ts"), + "import babel from '@rolldown/plugin-babel';\nimport react, { reactCompilerPreset } from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n plugins: [\n react(),\n babel({\n presets: [reactCompilerPreset()],\n }),\n ],\n});\n", + ); + + const projectInfo = discoverProject(projectDirectory); + expect(projectInfo.hasReactCompiler).toBe(true); + }); + + it("detects the Vite 6 React Compiler preset with various file extensions", () => { + [".js", ".mjs", ".ts"].forEach((extension) => { + const projectDirectory = path.join( + tempDirectory, + `vite-react-compiler-preset-${extension.slice(1)}`, + ); + fs.mkdirSync(projectDirectory, { recursive: true }); + fs.writeFileSync( + path.join(projectDirectory, "package.json"), + JSON.stringify({ + name: `vite-react-compiler-preset-${extension.slice(1)}`, + dependencies: { react: "^19.0.0" }, + devDependencies: { + "vite": "^8.1.0", + "@vitejs/plugin-react": "^6.0.1", + "@rolldown/plugin-babel": "^0.2.3", + }, + }), + ); + fs.writeFileSync( + path.join(projectDirectory, `vite.config${extension}`), + "import babel from '@rolldown/plugin-babel';\nimport react, { reactCompilerPreset } from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n plugins: [\n react(),\n babel({\n presets: [reactCompilerPreset()],\n }),\n ],\n});\n", + ); + + const projectInfo = discoverProject(projectDirectory); + expect(projectInfo.hasReactCompiler).toBe(true); + }); + }); + + it("detects the Vite 6 React Compiler preset without babel-plugin-react-compiler listed", () => { + const projectDirectory = path.join( + tempDirectory, + "vite-react-compiler-preset-no-babel-plugin", + ); + fs.mkdirSync(projectDirectory, { recursive: true }); + fs.writeFileSync( + path.join(projectDirectory, "package.json"), + JSON.stringify({ + name: "vite-react-compiler-preset-no-babel-plugin", + dependencies: { react: "19.2.3" }, + devDependencies: { + "vite": "^8.1.0", + "@vitejs/plugin-react": "^6.0.1", + "@rolldown/plugin-babel": "^0.2.3", + }, + }), + ); + fs.writeFileSync( + path.join(projectDirectory, "vite.config.ts"), + "import babel from '@rolldown/plugin-babel';\nimport react, { reactCompilerPreset } from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n plugins: [\n react(),\n babel({\n presets: [reactCompilerPreset()],\n }),\n ],\n});\n", + ); + + const projectInfo = discoverProject(projectDirectory); + expect(projectInfo.hasReactCompiler).toBe(true); + }); + it("detects the Rsbuild React Compiler transform", () => { const projectDirectory = path.join(tempDirectory, "rsbuild-react-compiler"); fs.mkdirSync(projectDirectory, { recursive: true }); From da5f2122f4adb5953ee017923028d8cd5049bc14 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 28 Jul 2026 08:58:00 +0000 Subject: [PATCH 2/3] chore: add changeset for React Compiler regression tests Co-authored-by: Skosh --- .changeset/test-react-compiler-rolldown.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/test-react-compiler-rolldown.md diff --git a/.changeset/test-react-compiler-rolldown.md b/.changeset/test-react-compiler-rolldown.md new file mode 100644 index 000000000..62b93c008 --- /dev/null +++ b/.changeset/test-react-compiler-rolldown.md @@ -0,0 +1,5 @@ +--- +"@react-doctor/core": patch +--- + +Add regression tests for React Compiler detection with @rolldown/plugin-babel. The detection logic already correctly handles reactCompilerPreset() with @rolldown/plugin-babel (working in 0.9.2), but these tests prevent future regressions. From 76da2cf943a8eddf0f0c8a7c7ac20da5be569eb4 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 28 Jul 2026 09:03:01 +0000 Subject: [PATCH 3/3] chore: format test file Co-authored-by: Skosh --- packages/core/tests/discover-project.test.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/core/tests/discover-project.test.ts b/packages/core/tests/discover-project.test.ts index ffe4f4b03..3668672b1 100644 --- a/packages/core/tests/discover-project.test.ts +++ b/packages/core/tests/discover-project.test.ts @@ -2583,7 +2583,7 @@ describe("discoverProject", () => { name: "vite-react-compiler-preset-defineconfig", dependencies: { react: "19.2.3" }, devDependencies: { - "vite": "^8.1.0", + vite: "^8.1.0", "@vitejs/plugin-react": "^6.0.1", "@rolldown/plugin-babel": "^0.2.3", "babel-plugin-react-compiler": "^1.0.0", @@ -2612,7 +2612,7 @@ describe("discoverProject", () => { name: `vite-react-compiler-preset-${extension.slice(1)}`, dependencies: { react: "^19.0.0" }, devDependencies: { - "vite": "^8.1.0", + vite: "^8.1.0", "@vitejs/plugin-react": "^6.0.1", "@rolldown/plugin-babel": "^0.2.3", }, @@ -2629,10 +2629,7 @@ describe("discoverProject", () => { }); it("detects the Vite 6 React Compiler preset without babel-plugin-react-compiler listed", () => { - const projectDirectory = path.join( - tempDirectory, - "vite-react-compiler-preset-no-babel-plugin", - ); + const projectDirectory = path.join(tempDirectory, "vite-react-compiler-preset-no-babel-plugin"); fs.mkdirSync(projectDirectory, { recursive: true }); fs.writeFileSync( path.join(projectDirectory, "package.json"), @@ -2640,7 +2637,7 @@ describe("discoverProject", () => { name: "vite-react-compiler-preset-no-babel-plugin", dependencies: { react: "19.2.3" }, devDependencies: { - "vite": "^8.1.0", + vite: "^8.1.0", "@vitejs/plugin-react": "^6.0.1", "@rolldown/plugin-babel": "^0.2.3", },