summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ben Holmes <hey@bholmes.dev> 2022-06-02 13:35:03 -0400
committerGravatar GitHub <noreply@github.com> 2022-06-02 13:35:03 -0400
commit2b35650b5dca28b5cd5dd7c9bb689d0eee6a2ddf (patch)
tree71379e9dac6b806daea08bd5573c190713782d2e
parent45ae85c32f168c37b50331b5643bc5ff251066cf (diff)
downloadastro-2b35650b5dca28b5cd5dd7c9bb689d0eee6a2ddf.tar.gz
astro-2b35650b5dca28b5cd5dd7c9bb689d0eee6a2ddf.tar.zst
astro-2b35650b5dca28b5cd5dd7c9bb689d0eee6a2ddf.zip
Fix: newline characters in Solid (#3505)
* fix: remove source map consumption from babel transform * refactor: move inputSourceMap to integration option * tests: add newline ex to test build and dev * chore: change back to babel.transformAsync * chore: changeset
-rw-r--r--.changeset/real-dogs-taste.md6
-rw-r--r--packages/astro/src/@types/astro.ts7
-rw-r--r--packages/astro/src/vite-plugin-jsx/index.ts1
-rw-r--r--packages/astro/test/fixtures/solid-component/src/components/WithNewlines.jsx15
-rw-r--r--packages/astro/test/fixtures/solid-component/src/pages/index.astro2
-rw-r--r--packages/integrations/solid/src/index.ts4
6 files changed, 29 insertions, 6 deletions
diff --git a/.changeset/real-dogs-taste.md b/.changeset/real-dogs-taste.md
new file mode 100644
index 000000000..907d91b45
--- /dev/null
+++ b/.changeset/real-dogs-taste.md
@@ -0,0 +1,6 @@
+---
+'astro': patch
+'@astrojs/solid-js': patch
+---
+
+Fix newline characters in SolidJS JSX attributes (ex: multiline CSS classes)
diff --git a/packages/astro/src/@types/astro.ts b/packages/astro/src/@types/astro.ts
index b64edbb2b..ff158ffe1 100644
--- a/packages/astro/src/@types/astro.ts
+++ b/packages/astro/src/@types/astro.ts
@@ -793,12 +793,7 @@ export interface HydrateOptions {
value?: string;
}
-export interface JSXTransformConfig {
- /** Babel presets */
- presets?: babel.PluginItem[];
- /** Babel plugins */
- plugins?: babel.PluginItem[];
-}
+export type JSXTransformConfig = Pick<babel.TransformOptions, 'presets' | 'plugins' | 'inputSourceMap'>;
export type JSXTransformFn = (options: {
mode: string;
diff --git a/packages/astro/src/vite-plugin-jsx/index.ts b/packages/astro/src/vite-plugin-jsx/index.ts
index 004ae2eee..9881a7834 100644
--- a/packages/astro/src/vite-plugin-jsx/index.ts
+++ b/packages/astro/src/vite-plugin-jsx/index.ts
@@ -63,6 +63,7 @@ async function transformJSX({
sourceMaps: true,
configFile: false,
babelrc: false,
+ inputSourceMap: options.inputSourceMap,
});
// TODO: Be more strict about bad return values here.
// Should we throw an error instead? Should we never return `{code: ""}`?
diff --git a/packages/astro/test/fixtures/solid-component/src/components/WithNewlines.jsx b/packages/astro/test/fixtures/solid-component/src/components/WithNewlines.jsx
new file mode 100644
index 000000000..6ddc4c22d
--- /dev/null
+++ b/packages/astro/test/fixtures/solid-component/src/components/WithNewlines.jsx
@@ -0,0 +1,15 @@
+// Test introduced to ensure JSX is correctly transformed
+// See https://github.com/withastro/astro/issues/3371
+import { createSignal } from 'solid-js';
+
+export default function WithNewlines() {
+ const [count] = createSignal(0);
+
+ return (
+ <>
+ <div class="multiline
+
+ css-classes">Hello world - {count}</div>
+ </>
+ );
+}
diff --git a/packages/astro/test/fixtures/solid-component/src/pages/index.astro b/packages/astro/test/fixtures/solid-component/src/pages/index.astro
index 73a9e2d3a..1f7522ced 100644
--- a/packages/astro/test/fixtures/solid-component/src/pages/index.astro
+++ b/packages/astro/test/fixtures/solid-component/src/pages/index.astro
@@ -1,11 +1,13 @@
---
import Hello from '../components/Hello.jsx';
+import WithNewlines from '../components/WithNewlines.jsx';
---
<html>
<head><title>Solid</title></head>
<body>
<div>
<Hello client:load />
+ <WithNewlines client:load />
</div>
</body>
</html>
diff --git a/packages/integrations/solid/src/index.ts b/packages/integrations/solid/src/index.ts
index 1205c6d09..00c61a75a 100644
--- a/packages/integrations/solid/src/index.ts
+++ b/packages/integrations/solid/src/index.ts
@@ -12,6 +12,10 @@ function getRenderer(): AstroRenderer {
const options = {
presets: [solid({}, { generate: ssr ? 'ssr' : 'dom', hydratable: true })],
plugins: [],
+ // Otherwise, babel will try to consume the source map generated by esbuild
+ // This causes unexpected issues with newline characters: https://github.com/withastro/astro/issues/3371
+ // Note "vite-plugin-solid" does the same: https://github.com/solidjs/vite-plugin-solid/blob/master/src/index.ts#L344-L345
+ inputSourceMap: false as any,
};
return options;