Skip to content

Commit

Permalink
fix: prefer JSX integration over Astro runtime
Browse files Browse the repository at this point in the history
  • Loading branch information
bholmesdev committed Aug 3, 2022
1 parent d2a77ab commit 3e5fa49
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions packages/astro/src/vite-plugin-jsx/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,20 +137,43 @@ export default function jsx({ config, logging }: AstroPluginJSXOptions): Plugin
JSX_RENDERER_CACHE.set(config, jsxRenderers);
}

// Attempt: Single JSX renderer
// If we only have one renderer, we can skip a bunch of work!
if (jsxRenderers.size === 1) {
const astroRenderer = jsxRenderers.get('astro');

// Attempt: Astro renderer only - use for all cases
if (jsxRenderers.size === 1 && astroRenderer) {
// downlevel any non-standard syntax, but preserve JSX
const { code: jsxCode } = await esbuild.transform(code, {
loader: getEsbuildLoader(path.extname(id)) as esbuild.Loader,
jsx: 'preserve',
sourcefile: id,
sourcemap: 'inline',
});

return transformJSX({
code: jsxCode,
id,
renderer: astroRenderer,
mode,
ssr,
});
}

// Attempt: 1 JSX integration or Astro renderer + JSX integration
// If we only have one renderer, prefer that in all cases
if (jsxRenderers.size === 1 || (jsxRenderers.size === 2 && astroRenderer)) {
// downlevel any non-standard syntax, but preserve JSX
const { code: jsxCode } = await esbuild.transform(code, {
loader: getEsbuildLoader(path.extname(id)) as esbuild.Loader,
jsx: 'preserve',
sourcefile: id,
sourcemap: 'inline',
});

const nonAstroRendererKey = [...jsxRenderers.keys()].find((k) => k !== 'astro')!;
return transformJSX({
code: jsxCode,
id,
renderer: [...jsxRenderers.values()][0],
renderer: jsxRenderers.get(nonAstroRendererKey)!,
mode,
ssr,
});
Expand Down

0 comments on commit 3e5fa49

Please sign in to comment.