diff --git a/.changeset/great-eggs-applaud.md b/.changeset/great-eggs-applaud.md new file mode 100644 index 0000000..9d90f97 --- /dev/null +++ b/.changeset/great-eggs-applaud.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 7910275..17e2ea7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,7 +14,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; /** Possible options for the extensions property */ export interface ExtensionOptions { @@ -277,6 +279,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 } : {}),