diff --git a/fixtures/webstudio-custom-template/app/__generated__/_index.tsx b/fixtures/webstudio-custom-template/app/__generated__/_index.tsx index f205ee987888..503e432a1304 100644 --- a/fixtures/webstudio-custom-template/app/__generated__/_index.tsx +++ b/fixtures/webstudio-custom-template/app/__generated__/_index.tsx @@ -85,7 +85,7 @@ const Script = ({ children, ...props }: Record) => { export const CustomCode = () => { return ( <> - + ); diff --git a/fixtures/webstudio-remix-vercel/app/__generated__/_index.tsx b/fixtures/webstudio-remix-vercel/app/__generated__/_index.tsx index ccbc1a68704a..5e26a9ab91d5 100644 --- a/fixtures/webstudio-remix-vercel/app/__generated__/_index.tsx +++ b/fixtures/webstudio-remix-vercel/app/__generated__/_index.tsx @@ -58,7 +58,7 @@ const Script = ({ children, ...props }: Record) => { export const CustomCode = () => { return ( <> - + ); }; diff --git a/packages/cli/src/html-to-jsx.ts b/packages/cli/src/html-to-jsx.ts index 5ae32ea835c3..f8ac40bff6ce 100644 --- a/packages/cli/src/html-to-jsx.ts +++ b/packages/cli/src/html-to-jsx.ts @@ -66,6 +66,15 @@ const convertTagName = (tagName: string) => { return tag; }; +const escapeValue = (value: string) => + value + .trim() + .replace(/\\/g, "\\\\") + .replace(/`/g, "\\`") + .replace(/\$/g, "\\$") + .replace(/\r/g, "\\r") + .replace(/\n/g, "\\n"); + export const htmlToJsx = (html: string) => { const parsedHtml = parseFragment(html); @@ -74,7 +83,11 @@ export const htmlToJsx = (html: string) => { for (const walkNode of walkChildNodes(parsedHtml)) { switch (walkNode.type) { case "text": - result += walkNode.value; + { + const escapedValue = escapeValue(walkNode.value); + + result += escapedValue ? "{`" + escapedValue + "`}" : ""; + } break; case "element-start": {