From 346dce858f33d454d72df8f9b84afb600af8a5b7 Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Mon, 27 Oct 2025 08:53:14 +0100 Subject: [PATCH] fix: wait for commit promise instead of `settled` --- .changeset/eager-experts-roll.md | 5 +++++ packages/kit/src/runtime/client/client.js | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 .changeset/eager-experts-roll.md diff --git a/.changeset/eager-experts-roll.md b/.changeset/eager-experts-roll.md new file mode 100644 index 000000000000..efe9b7294892 --- /dev/null +++ b/.changeset/eager-experts-roll.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: wait for commit promise instead of `settled` diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 04c1ab57a93f..ce4fbddb0f93 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -1689,6 +1689,10 @@ async function navigate({ navigation_result.props.page.state = state; + /** + * @type {Promise | undefined} + */ + let commit_promise; if (started) { const after_navigate = ( await Promise.all( @@ -1722,7 +1726,7 @@ async function navigate({ const fork = load_cache_fork && (await load_cache_fork); if (fork) { - void fork.commit(); + commit_promise = fork.commit(); } else { root.$set(navigation_result.props); } @@ -1738,9 +1742,9 @@ async function navigate({ const promises = [tick()]; // need to render the DOM before we can scroll to the rendered elements and do focus management - // svelte.settled is only available in Svelte 5 - if (/** @type {any} */ (svelte).settled) { - promises.push(/** @type {any} */ (svelte).settled()); + // so we wait for the commit if there's one + if (commit_promise) { + promises.push(commit_promise); } // we still need to await tick everytime because if there's no async work settled resolves immediately await Promise.all(promises);