From e6bcd306067de50ad392b36e17e2c9195e64da69 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Fri, 3 Apr 2026 19:11:59 +0200 Subject: [PATCH] fix: preserve jsx for rolldown dep scan --- .changeset/six-lions-joke.md | 5 +++++ src/index.ts | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 .changeset/six-lions-joke.md diff --git a/.changeset/six-lions-joke.md b/.changeset/six-lions-joke.md new file mode 100644 index 0000000..9d90f97 --- /dev/null +++ b/.changeset/six-lions-joke.md @@ -0,0 +1,5 @@ +--- +'vite-plugin-solid': patch +--- + +fix: preserve jsx for rolldown dep scan diff --git a/src/index.ts b/src/index.ts index 4cb4f7f..72d6ce9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,7 +18,9 @@ const runtimePublicPath = '/@solid-refresh'; const runtimeFilePath = require.resolve('solid-refresh/dist/solid-refresh.mjs'); const runtimeCode = readFileSync(runtimeFilePath, 'utf-8'); -const isVite6 = +version.split('.')[0] >= 6; +const viteVersionMajor = +version.split('.')[0]; +const isVite6 = viteVersionMajor >= 6; +const isVite8 = viteVersionMajor >= 8; const VIRTUAL_MANIFEST_ID = 'virtual:solid-manifest'; const RESOLVED_VIRTUAL_MANIFEST_ID = '\0' + VIRTUAL_MANIFEST_ID; @@ -307,6 +309,13 @@ export default function solidPlugin(options: Partial = {}): Plugin { optimizeDeps: { include: [...nestedDeps, ...solidPkgsConfig.optimizeDeps.include], exclude: solidPkgsConfig.optimizeDeps.exclude, + // Vite 8+ uses Rolldown for dependency scanning. Rolldown defaults to + // React's automatic JSX runtime for .tsx files, injecting a + // react/jsx-dev-runtime import. Tell it to preserve JSX as-is since + // this plugin handles JSX transformation via babel-preset-solid. + ...(isVite8 + ? { rolldownOptions: { transform: { jsx: 'preserve' as const } } } + : {}), }, ...(!isVite6 ? { ssr: solidPkgsConfig.ssr } : {}), ...(test.server ? { test } : {}),