From acd9eaf2ec8d964fa5770fdbcd76e41809197848 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Fri, 22 Aug 2025 22:37:57 +0200 Subject: [PATCH] fix: ensure correct order of template effect values (#16655) Compiler does sync then async but `memoizer.apply` did it the other way around --- .changeset/healthy-crabs-marry.md | 5 +++++ .../3-transform/client/visitors/shared/utils.js | 2 +- .../async-template-async-sync-mixed/_config.js | 9 +++++++++ .../async-template-async-sync-mixed/main.svelte | 17 +++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 .changeset/healthy-crabs-marry.md create mode 100644 packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/main.svelte diff --git a/.changeset/healthy-crabs-marry.md b/.changeset/healthy-crabs-marry.md new file mode 100644 index 0000000000..eab29dae4a --- /dev/null +++ b/.changeset/healthy-crabs-marry.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: ensure correct order of template effect values diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js index 014547cf2d..ba140a153e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js @@ -34,7 +34,7 @@ export class Memoizer { } apply() { - return [...this.#async, ...this.#sync].map((memo, i) => { + return [...this.#sync, ...this.#async].map((memo, i) => { memo.id.name = `$${i}`; return memo.id; }); diff --git a/packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/_config.js b/packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/_config.js new file mode 100644 index 0000000000..709b88578f --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/_config.js @@ -0,0 +1,9 @@ +import { tick } from 'svelte'; +import { ok, test } from '../../test'; + +export default test({ + async test({ assert, target }) { + await tick(); + assert.htmlEqual(target.innerHTML, '
foo bar
'); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/main.svelte new file mode 100644 index 0000000000..2e0ae46f1f --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/main.svelte @@ -0,0 +1,17 @@ + + +{foo()} {await bar()}
+ + {#snippet pending()} +pending
+ {/snippet} +