From e318d0105fba19fec6bf111bba441b9742a53b2b Mon Sep 17 00:00:00 2001 From: floriskn <48930050+floriskn@users.noreply.github.com> Date: Thu, 30 Oct 2025 01:42:05 +0100 Subject: [PATCH 1/5] fix: clone page.params in Pyramid component --- .changeset/modern-clowns-bet.md | 5 +++++ packages/kit/src/core/sync/write_root.js | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/modern-clowns-bet.md diff --git a/.changeset/modern-clowns-bet.md b/.changeset/modern-clowns-bet.md new file mode 100644 index 000000000000..cb9a62d74042 --- /dev/null +++ b/.changeset/modern-clowns-bet.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Cloned page.params in Pyramid component for Svelte 5+ to prevent async updates from clearing them. diff --git a/packages/kit/src/core/sync/write_root.js b/packages/kit/src/core/sync/write_root.js index eb9c61885c9c..90e90d08a8ab 100644 --- a/packages/kit/src/core/sync/write_root.js +++ b/packages/kit/src/core/sync/write_root.js @@ -25,7 +25,7 @@ export function write_root(manifest_data, output) { ${ isSvelte5Plus() ? ` - ` + ` : `` }`; @@ -36,7 +36,7 @@ export function write_root(manifest_data, output) { isSvelte5Plus() ? dedent`{@const Pyramid_${l} = constructors[${l}]} - + ${pyramid} ` : dedent` @@ -50,7 +50,7 @@ export function write_root(manifest_data, output) { ? dedent` {@const Pyramid_${l} = constructors[${l}]} - + ` : dedent`` } From 1482111456e7eaca87b46051be172cdab340ed50 Mon Sep 17 00:00:00 2001 From: floriskn <48930050+floriskn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:19:52 +0100 Subject: [PATCH 2/5] feat: added test --- .../src/routes/params-prop-async/+layout.svelte | 8 ++++++++ .../basics/src/routes/params-prop-async/+page.svelte | 0 .../src/routes/params-prop-async/[x]/+page.svelte | 7 +++++++ packages/kit/test/apps/basics/test/test.js | 12 ++++++++++++ 4 files changed, 27 insertions(+) create mode 100644 packages/kit/test/apps/basics/src/routes/params-prop-async/+layout.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/params-prop-async/+page.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/params-prop-async/[x]/+page.svelte diff --git a/packages/kit/test/apps/basics/src/routes/params-prop-async/+layout.svelte b/packages/kit/test/apps/basics/src/routes/params-prop-async/+layout.svelte new file mode 100644 index 000000000000..5c10cb145399 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/params-prop-async/+layout.svelte @@ -0,0 +1,8 @@ + + +123 +456 + +{@render children()} diff --git a/packages/kit/test/apps/basics/src/routes/params-prop-async/+page.svelte b/packages/kit/test/apps/basics/src/routes/params-prop-async/+page.svelte new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/test/apps/basics/src/routes/params-prop-async/[x]/+page.svelte b/packages/kit/test/apps/basics/src/routes/params-prop-async/[x]/+page.svelte new file mode 100644 index 000000000000..883648964a42 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/params-prop-async/[x]/+page.svelte @@ -0,0 +1,7 @@ + + +

x: {params.x}

diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index 2518529e27d5..28c74ec329ae 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -2039,6 +2039,18 @@ test.describe('params prop', () => { }); }); +test.describe('params prop async', () => { + test('params prop is passed to the page', async ({ page, clicknav }) => { + await page.goto('/params-prop-async'); + + await clicknav('[href="/params-prop-async/123"]'); + await expect(page.locator('p')).toHaveText('x: 123'); + + await clicknav('[href="/params-prop-async/456"]'); + await expect(page.locator('p')).toHaveText('x: 456'); + }); +}); + test.describe('service worker option', () => { test('pass the options to the service worker', async ({ page }) => { await page.goto('/'); From 9dfb03ebfa0f8fe79e748558f915dfdbe3b1b3bf Mon Sep 17 00:00:00 2001 From: floriskn <48930050+floriskn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:47:32 +0100 Subject: [PATCH 3/5] fix: fixed test --- .../apps/basics/src/routes/params-prop-async/+layout.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/kit/test/apps/basics/src/routes/params-prop-async/+layout.svelte b/packages/kit/test/apps/basics/src/routes/params-prop-async/+layout.svelte index 5c10cb145399..3ea59f15a9b2 100644 --- a/packages/kit/test/apps/basics/src/routes/params-prop-async/+layout.svelte +++ b/packages/kit/test/apps/basics/src/routes/params-prop-async/+layout.svelte @@ -2,7 +2,7 @@ let { children } = $props(); -123 -456 +123 +456 {@render children()} From 4780deed1ab50cebf701a1f0fb47026d1283b527 Mon Sep 17 00:00:00 2001 From: floriskn <48930050+floriskn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:48:42 +0100 Subject: [PATCH 4/5] fix: fixed test --- packages/kit/test/apps/basics/test/test.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index 28c74ec329ae..a08fa3625b4d 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -2043,9 +2043,13 @@ test.describe('params prop async', () => { test('params prop is passed to the page', async ({ page, clicknav }) => { await page.goto('/params-prop-async'); + await page.hover('[href="/params-prop-async/123"]'); + await page.waitForTimeout(100); await clicknav('[href="/params-prop-async/123"]'); await expect(page.locator('p')).toHaveText('x: 123'); + await page.hover('[href="/params-prop-async/456"]'); + await page.waitForTimeout(100); await clicknav('[href="/params-prop-async/456"]'); await expect(page.locator('p')).toHaveText('x: 456'); }); From 7669fe4240e8c35ef86472e101a46c53eb9bc83e Mon Sep 17 00:00:00 2001 From: floriskn <48930050+floriskn@users.noreply.github.com> Date: Thu, 30 Oct 2025 03:03:32 +0100 Subject: [PATCH 5/5] fix: fixed test --- packages/kit/test/apps/basics/test/test.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index a08fa3625b4d..dea657ca4865 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -2040,17 +2040,22 @@ test.describe('params prop', () => { }); test.describe('params prop async', () => { - test('params prop is passed to the page', async ({ page, clicknav }) => { + test('params prop is passed to the page and persists after async updates', async ({ + page, + clicknav + }) => { await page.goto('/params-prop-async'); await page.hover('[href="/params-prop-async/123"]'); await page.waitForTimeout(100); await clicknav('[href="/params-prop-async/123"]'); + await page.waitForTimeout(100); await expect(page.locator('p')).toHaveText('x: 123'); await page.hover('[href="/params-prop-async/456"]'); await page.waitForTimeout(100); await clicknav('[href="/params-prop-async/456"]'); + await page.waitForTimeout(100); await expect(page.locator('p')).toHaveText('x: 456'); }); });