From 5a35a6c0a41d99a82f35c776f74887f25d7d2f76 Mon Sep 17 00:00:00 2001 From: Lukas Trombach Date: Sun, 2 Feb 2025 12:02:35 +0100 Subject: [PATCH 1/3] fix(parser): persist the current namespace when adding an expression node --- internal/parser.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/parser.go b/internal/parser.go index ac01859b9..42d7eb0d8 100644 --- a/internal/parser.go +++ b/internal/parser.go @@ -391,6 +391,7 @@ func (p *parser) addExpression() { CustomElement: false, HandledScript: false, Loc: p.generateLoc(), + Namespace: p.top().Namespace, }) } From b34bc546f304525dccfcab26bcd1b5e2b3e45b74 Mon Sep 17 00:00:00 2001 From: Lukas Trombach Date: Sun, 2 Feb 2025 12:07:23 +0100 Subject: [PATCH 2/3] test: add printer test for `image` tag inside svg context --- ...s_preserved_when_inside_an_expression.snap | 41 +++++++++++++++++++ internal/printer/printer_test.go | 8 +++- 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100755 internal/printer/__printer_js__/namespace_is_preserved_when_inside_an_expression.snap diff --git a/internal/printer/__printer_js__/namespace_is_preserved_when_inside_an_expression.snap b/internal/printer/__printer_js__/namespace_is_preserved_when_inside_an_expression.snap new file mode 100755 index 000000000..472045568 --- /dev/null +++ b/internal/printer/__printer_js__/namespace_is_preserved_when_inside_an_expression.snap @@ -0,0 +1,41 @@ + +[TestPrinter/namespace_is_preserved_when_inside_an_expression - 1] +## Input + +``` +{} +``` + +## Output + +```js +import { + Fragment, + render as $$render, + createAstro as $$createAstro, + createComponent as $$createComponent, + renderComponent as $$renderComponent, + renderHead as $$renderHead, + maybeRenderHead as $$maybeRenderHead, + unescapeHTML as $$unescapeHTML, + renderSlot as $$renderSlot, + mergeSlots as $$mergeSlots, + addAttribute as $$addAttribute, + spreadAttributes as $$spreadAttributes, + defineStyleVars as $$defineStyleVars, + defineScriptVars as $$defineScriptVars, + renderTransition as $$renderTransition, + createTransitionScope as $$createTransitionScope, + renderScript as $$renderScript, + createMetadata as $$createMetadata +} from "http://localhost:3000/"; + +export const $$metadata = $$createMetadata(import.meta.url, { modules: [], hydratedComponents: [], clientOnlyComponents: [], hydrationDirectives: new Set([]), hoisted: [] }); + +const $$Component = $$createComponent(($$result, $$props, $$slots) => { + +return $$render`${$$maybeRenderHead($$result)}${$$render``}`; +}, undefined, undefined); +export default $$Component; +``` +--- diff --git a/internal/printer/printer_test.go b/internal/printer/printer_test.go index 12d1ae9ee..fac41f730 100644 --- a/internal/printer/printer_test.go +++ b/internal/printer/printer_test.go @@ -905,8 +905,8 @@ import Widget2 from '../components/Widget2.astro'; { // maintain the original behavior, though it may be // unneeded as renderScript is now on by default - name: "script external in expression (renderScript: false)", - source: `
{}`, + name: "script external in expression (renderScript: false)", + source: `
{}`, filename: "/src/pages/index.astro", }, { @@ -2072,6 +2072,10 @@ const meta = { title: 'My App' }; `, }, + { + name: "namespace is preserved when inside an expression", + source: `{}`, + }, } for _, tt := range tests { if tt.only { From a30bd42a35b51808bce1dd2cbc944d4b9843df00 Mon Sep 17 00:00:00 2001 From: Lukas Trombach Date: Sun, 2 Feb 2025 12:25:20 +0100 Subject: [PATCH 3/3] chore: add changeset --- .changeset/plenty-geese-laugh.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/plenty-geese-laugh.md diff --git a/.changeset/plenty-geese-laugh.md b/.changeset/plenty-geese-laugh.md new file mode 100644 index 000000000..8d3d610f9 --- /dev/null +++ b/.changeset/plenty-geese-laugh.md @@ -0,0 +1,5 @@ +--- +"@astrojs/compiler": patch +--- + +Fixes an issue when parsing elements inside foreign content (e.g. SVG), when they were inside an expression