From 8cd77fb26069fca26eb302b7aa9d3b87ee3c3122 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Mon, 25 Aug 2025 01:02:44 -0700 Subject: [PATCH 1/2] fix: place instance-level snippets inside async body --- .changeset/cool-garlics-fail.md | 5 +++++ .../phases/3-transform/client/transform-client.js | 9 ++++++--- .../samples/async-reference-in-snippet/_config.js | 9 +++++++++ .../samples/async-reference-in-snippet/app.svelte | 9 +++++++++ .../samples/async-reference-in-snippet/main.svelte | 8 ++++++++ 5 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 .changeset/cool-garlics-fail.md create mode 100644 packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/app.svelte create mode 100644 packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/main.svelte diff --git a/.changeset/cool-garlics-fail.md b/.changeset/cool-garlics-fail.md new file mode 100644 index 000000000000..cabff1840d22 --- /dev/null +++ b/.changeset/cool-garlics-fail.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: place instance-level snippets inside async body 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 940d6a9e004d..bdd7eb3f1799 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 @@ -362,12 +362,12 @@ export function client_component(analysis, options) { store_init, ...store_setup, ...legacy_reactive_declarations, - ...group_binding_declarations, - ...state.instance_level_snippets + ...group_binding_declarations ]); if (analysis.instance.has_await) { const body = b.block([ + ...state.instance_level_snippets, .../** @type {ESTree.Statement[]} */ (instance.body), b.if(b.call('$.aborted'), b.return()), .../** @type {ESTree.Statement[]} */ (template.body) @@ -375,7 +375,10 @@ export function client_component(analysis, options) { component_block.body.push(b.stmt(b.call(`$.async_body`, b.arrow([], body, true)))); } else { - component_block.body.push(.../** @type {ESTree.Statement[]} */ (instance.body)); + component_block.body.push( + ...state.instance_level_snippets, + .../** @type {ESTree.Statement[]} */ (instance.body) + ); if (!analysis.runes && analysis.needs_context) { component_block.body.push(b.stmt(b.call('$.init', analysis.immutable ? b.true : undefined))); diff --git a/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js b/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js new file mode 100644 index 000000000000..b3b2f272f152 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js @@ -0,0 +1,9 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +export default test({ + async test({ assert, target }) { + await tick(); + assert.htmlEqual(target.innerHTML, 'value'); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/app.svelte b/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/app.svelte new file mode 100644 index 000000000000..27b29cfe5039 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/app.svelte @@ -0,0 +1,9 @@ + + +{#snippet valueSnippet()} + {value} +{/snippet} + +{@render valueSnippet()} \ No newline at end of file diff --git a/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/main.svelte new file mode 100644 index 000000000000..c251a5645b7a --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/main.svelte @@ -0,0 +1,8 @@ + + + {#snippet pending()} + {/snippet} + + \ No newline at end of file From 8bcd9e5f00b832c11f7aba133b25de1f0aac0cc3 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Mon, 25 Aug 2025 01:07:52 -0700 Subject: [PATCH 2/2] lint --- .../samples/async-reference-in-snippet/_config.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js b/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js index b3b2f272f152..c6903c3eed32 100644 --- a/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js @@ -2,8 +2,8 @@ import { tick } from 'svelte'; import { test } from '../../test'; export default test({ - async test({ assert, target }) { - await tick(); - assert.htmlEqual(target.innerHTML, 'value'); - } + async test({ assert, target }) { + await tick(); + assert.htmlEqual(target.innerHTML, 'value'); + } });