From 6046bbb4564cc3cc44332313a6293cf06f148227 Mon Sep 17 00:00:00 2001 From: Benjamin Tamasi Date: Sat, 24 Jan 2026 15:37:04 +0100 Subject: [PATCH] fix: export `wait` function from internal client index (#17530) PR #17461 added the `wait` function to `reactivity/async.js` and modified the compiler to generate `$.wait()` calls, but forgot to export it from `index.js`. This causes a runtime error when using `await` inside `$derived()` with `experimental.async: true`: ``` TypeError: $.wait is not a function ``` Fixes #17529 --- .changeset/fix-wait-export.md | 5 +++++ packages/svelte/src/internal/client/index.js | 3 ++- .../samples/async-const-wait/_config.js | 18 ++++++++++++++++++ .../samples/async-const-wait/main.svelte | 16 ++++++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .changeset/fix-wait-export.md create mode 100644 packages/svelte/tests/runtime-runes/samples/async-const-wait/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/async-const-wait/main.svelte diff --git a/.changeset/fix-wait-export.md b/.changeset/fix-wait-export.md new file mode 100644 index 0000000000..e0ab97207c --- /dev/null +++ b/.changeset/fix-wait-export.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: export `wait` function from internal client index diff --git a/packages/svelte/src/internal/client/index.js b/packages/svelte/src/internal/client/index.js index 0f20ce300d..1d9f7dfff7 100644 --- a/packages/svelte/src/internal/client/index.js +++ b/packages/svelte/src/internal/client/index.js @@ -103,7 +103,8 @@ export { run, save, track_reactivity_loss, - run_after_blockers + run_after_blockers, + wait } from './reactivity/async.js'; export { eager, flushSync as flush } from './reactivity/batch.js'; export { diff --git a/packages/svelte/tests/runtime-runes/samples/async-const-wait/_config.js b/packages/svelte/tests/runtime-runes/samples/async-const-wait/_config.js new file mode 100644 index 0000000000..fe85c0393a --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-const-wait/_config.js @@ -0,0 +1,18 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +export default test({ + mode: ['client'], + + props: { + a_promise: Promise.resolve(10), + b_promise: Promise.resolve(20) + }, + + async test({ assert, target }) { + await tick(); + await tick(); + + assert.htmlEqual(target.innerHTML, `

30

`); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-const-wait/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-const-wait/main.svelte new file mode 100644 index 0000000000..b5e6d90f7c --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-const-wait/main.svelte @@ -0,0 +1,16 @@ + + + + {@const a = await a_promise} + {#if true} + + {@const b = await b_promise} + {#if true} + {@const sum = a + b} +

{sum}

+ {/if} +
+ {/if} +