From a08d02167cf41252a3fd6d2a254e43722a0ea818 Mon Sep 17 00:00:00 2001 From: LeeWxx Date: Thu, 9 Oct 2025 04:02:28 +0900 Subject: [PATCH 1/5] fix: ensure remote form fields.set triggers reactivity --- .../runtime/client/remote-functions/form.svelte.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/kit/src/runtime/client/remote-functions/form.svelte.js b/packages/kit/src/runtime/client/remote-functions/form.svelte.js index 62c97b2f48d2..724b8a232edb 100644 --- a/packages/kit/src/runtime/client/remote-functions/form.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/form.svelte.js @@ -537,8 +537,22 @@ export function form(id) { (path, value) => { if (path.length === 0) { input = value; + update_all_versions(); + return; } else { input = deep_set(input, path.map(String), value); + + const key = build_path_string(path); + versions[key] ??= 0; + versions[key] += 1; + touched[key] = true; + + const parent_path = path.slice(); + while (parent_path.pop() !== undefined) { + const parent_key = build_path_string(parent_path); + versions[parent_key] ??= 0; + versions[parent_key] += 1; + } } }, () => issues From a7884bff6a1871506c18f117b1a6f0b8212f4ebf Mon Sep 17 00:00:00 2001 From: LeeWxx Date: Thu, 9 Oct 2025 04:02:49 +0900 Subject: [PATCH 2/5] test: cover remote form fields.set reactivity --- .../remote/form/imperative/+page.svelte | 35 +++++++++++++++++++ .../kit/test/apps/basics/test/client.test.js | 12 +++++++ 2 files changed, 47 insertions(+) create mode 100644 packages/kit/test/apps/basics/src/routes/remote/form/imperative/+page.svelte diff --git a/packages/kit/test/apps/basics/src/routes/remote/form/imperative/+page.svelte b/packages/kit/test/apps/basics/src/routes/remote/form/imperative/+page.svelte new file mode 100644 index 000000000000..c21e4d146af3 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/remote/form/imperative/+page.svelte @@ -0,0 +1,35 @@ + + +
+ + +

+ {set_message.fields.message.issues()?.[0]?.message ?? 'ok'} +

+

{set_message.fields.message.value()}

+ + + +
diff --git a/packages/kit/test/apps/basics/test/client.test.js b/packages/kit/test/apps/basics/test/client.test.js index fec98e4a214e..3a4d795fab7b 100644 --- a/packages/kit/test/apps/basics/test/client.test.js +++ b/packages/kit/test/apps/basics/test/client.test.js @@ -1965,6 +1965,18 @@ test.describe('remote functions', () => { await expect(page.locator('p')).toHaveText('success'); }); + test('fields.set updates DOM before validate', async ({ page }) => { + await page.goto('/remote/form/imperative'); + + const input = page.locator('input[name="message"]'); + await input.fill('123'); + + await page.locator('#set-and-validate').click(); + + await expect(input).toHaveValue('hello'); + await expect(page.locator('#issue')).toHaveText('ok'); + }); + test('command pending state is tracked correctly', async ({ page }) => { await page.goto('/remote'); From 1f9061f15ee39605376ec9717766ef98facd45c5 Mon Sep 17 00:00:00 2001 From: LeeWxx Date: Thu, 9 Oct 2025 04:04:39 +0900 Subject: [PATCH 3/5] chore: changeset --- .changeset/easy-plants-remain.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/easy-plants-remain.md diff --git a/.changeset/easy-plants-remain.md b/.changeset/easy-plants-remain.md new file mode 100644 index 000000000000..f61681add6b2 --- /dev/null +++ b/.changeset/easy-plants-remain.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: ensure remote form fields.set triggers reactivity From 593a5621092499a0888664e555b9a1787970ed6e Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 9 Oct 2025 14:52:22 +0800 Subject: [PATCH 4/5] Apply suggestion from @teemingc --- packages/kit/src/runtime/client/remote-functions/form.svelte.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/kit/src/runtime/client/remote-functions/form.svelte.js b/packages/kit/src/runtime/client/remote-functions/form.svelte.js index 724b8a232edb..2799a397f88a 100644 --- a/packages/kit/src/runtime/client/remote-functions/form.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/form.svelte.js @@ -538,7 +538,6 @@ export function form(id) { if (path.length === 0) { input = value; update_all_versions(); - return; } else { input = deep_set(input, path.map(String), value); From b74eab1b20a9f9d8f67f1f96c986d409d5a2e64f Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 9 Oct 2025 14:53:06 +0800 Subject: [PATCH 5/5] Apply suggestion from @teemingc --- .changeset/easy-plants-remain.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/easy-plants-remain.md b/.changeset/easy-plants-remain.md index f61681add6b2..10af2d624bfa 100644 --- a/.changeset/easy-plants-remain.md +++ b/.changeset/easy-plants-remain.md @@ -2,4 +2,4 @@ '@sveltejs/kit': patch --- -fix: ensure remote form fields.set triggers reactivity +fix: ensure `form` remote functions' `fields.set` triggers reactivity