From 9aa0ed3eb62d5fd3621ea6b371ea5f79821238ce Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Tue, 6 Feb 2024 17:30:48 +0100 Subject: [PATCH] fix: handle nested script tags (#10416) fixes #9484 --- .changeset/loud-ravens-drop.md | 5 ++ .../3-transform/client/transform-client.js | 5 +- .../phases/3-transform/client/types.d.ts | 17 +++++- .../3-transform/client/visitors/template.js | 49 +++++++++++---- .../svelte/src/internal/client/reconciler.js | 30 ++++++++-- packages/svelte/src/internal/client/render.js | 60 +++++++++++++++---- .../samples/nested-script-tag/_config.js | 28 +++++++++ .../samples/nested-script-tag/main.svelte | 5 ++ 8 files changed, 171 insertions(+), 28 deletions(-) create mode 100644 .changeset/loud-ravens-drop.md create mode 100644 packages/svelte/tests/runtime-runes/samples/nested-script-tag/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/nested-script-tag/main.svelte diff --git a/.changeset/loud-ravens-drop.md b/.changeset/loud-ravens-drop.md new file mode 100644 index 0000000000..59fb1618c5 --- /dev/null +++ b/.changeset/loud-ravens-drop.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: handle nested script tags diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index 124eee0a52..5102e62c09 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -84,7 +84,10 @@ export function client_component(source, analysis, options) { }, legacy_reactive_statements: new Map(), metadata: { - template_needs_import_node: false, + context: { + template_needs_import_node: false, + template_contains_script_tag: false + }, namespace: options.namespace, bound_contenteditable: false }, diff --git a/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts b/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts index 14b628a89d..96fce18986 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts +++ b/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts @@ -47,9 +47,22 @@ export interface ComponentClientTransformState extends ClientTransformState { readonly template: string[]; readonly metadata: { namespace: Namespace; - /** `true` if the HTML template needs to be instantiated with `importNode` */ - template_needs_import_node: boolean; bound_contenteditable: boolean; + /** + * Stuff that is set within the children of one `create_block` that is relevant + * to said `create_block`. Shouldn't be destructured or otherwise spread unless + * inside `create_block` to keep the object reference intact (it's also nested + * within `metadata` for this reason). + */ + context: { + /** `true` if the HTML template needs to be instantiated with `importNode` */ + template_needs_import_node: boolean; + /** + * `true` if HTML template contains a ` +