From f8425cbcb6a350d73d5b144e2e3745e824d8b420 Mon Sep 17 00:00:00 2001 From: Matt DeKok Date: Fri, 10 Oct 2025 14:19:33 -0500 Subject: [PATCH 1/3] fix `RecursiveFormFields` type for recursive or unknown schemas --- .changeset/beige-dogs-sell.md | 5 +++++ packages/kit/src/exports/public.d.ts | 22 +++++++++++++++++----- packages/kit/types/index.d.ts | 22 +++++++++++++++++----- 3 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 .changeset/beige-dogs-sell.md diff --git a/.changeset/beige-dogs-sell.md b/.changeset/beige-dogs-sell.md new file mode 100644 index 000000000000..b1c6f38e4770 --- /dev/null +++ b/.changeset/beige-dogs-sell.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: fix `RecursiveFormFields` type for recursive or unknown schemas diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 01e4f8cf9eb9..18ed911e8302 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -1917,19 +1917,31 @@ type RemoteFormFieldContainer = RemoteFormFieldMethods & { /** * Recursive type to build form fields structure with proxy access */ -type RemoteFormFields = +export type RemoteFormFields = WillRecurseIndefinitely extends true - ? RecursiveFormFields + ? RecursiveFormFields : NonNullable extends string | number | boolean | File ? RemoteFormField> : T extends string[] | File[] ? RemoteFormField & { [K in number]: RemoteFormField } : T extends Array - ? RemoteFormFieldContainer & { [K in number]: RemoteFormFields } - : RemoteFormFieldContainer & { [K in keyof T]-?: RemoteFormFields }; + ? RemoteFormFieldContainer & { + [K in number]: RemoteFormFields< + U, + U extends RemoteFormFieldValue | unknown ? true : false + >; + } + : RemoteFormFieldContainer & { + [K in keyof T]-?: RemoteFormFields< + T[K], + T[K] extends RemoteFormFieldValue | unknown ? true : false + >; + }; // By breaking this out into its own type, we avoid the TS recursion depth limit -type RecursiveFormFields = RemoteFormField & { [key: string | number]: RecursiveFormFields }; +type RecursiveFormFields = (Leaf extends true + ? RemoteFormField + : RemoteFormFieldContainer) & { [key: string | number]: RecursiveFormFields }; type MaybeArray = T | T[]; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index b503853794e8..e04c0dd4d082 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -1893,19 +1893,31 @@ declare module '@sveltejs/kit' { /** * Recursive type to build form fields structure with proxy access */ - type RemoteFormFields = + export type RemoteFormFields = WillRecurseIndefinitely extends true - ? RecursiveFormFields + ? RecursiveFormFields : NonNullable extends string | number | boolean | File ? RemoteFormField> : T extends string[] | File[] ? RemoteFormField & { [K in number]: RemoteFormField } : T extends Array - ? RemoteFormFieldContainer & { [K in number]: RemoteFormFields } - : RemoteFormFieldContainer & { [K in keyof T]-?: RemoteFormFields }; + ? RemoteFormFieldContainer & { + [K in number]: RemoteFormFields< + U, + U extends RemoteFormFieldValue | unknown ? true : false + >; + } + : RemoteFormFieldContainer & { + [K in keyof T]-?: RemoteFormFields< + T[K], + T[K] extends RemoteFormFieldValue | unknown ? true : false + >; + }; // By breaking this out into its own type, we avoid the TS recursion depth limit - type RecursiveFormFields = RemoteFormField & { [key: string | number]: RecursiveFormFields }; + type RecursiveFormFields = (Leaf extends true + ? RemoteFormField + : RemoteFormFieldContainer) & { [key: string | number]: RecursiveFormFields }; type MaybeArray = T | T[]; From 0bc7c9a2fa72e81ce801ec43dfc6601e05fb2bdd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 10:06:21 +0200 Subject: [PATCH 2/3] Version Packages (#14664) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/easy-plants-remain.md | 5 ----- packages/kit/CHANGELOG.md | 6 ++++++ packages/kit/package.json | 2 +- packages/kit/src/version.js | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) delete mode 100644 .changeset/easy-plants-remain.md diff --git a/.changeset/easy-plants-remain.md b/.changeset/easy-plants-remain.md deleted file mode 100644 index 10af2d624bfa..000000000000 --- a/.changeset/easy-plants-remain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@sveltejs/kit': patch ---- - -fix: ensure `form` remote functions' `fields.set` triggers reactivity diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 8c0023fa9bc9..0f2062888243 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/kit +## 2.46.5 +### Patch Changes + + +- fix: ensure `form` remote functions' `fields.set` triggers reactivity ([#14661](https://github.com/sveltejs/kit/pull/14661)) + ## 2.46.4 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index accae32dbb66..02e46dcf2a89 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "2.46.4", + "version": "2.46.5", "description": "SvelteKit is the fastest way to build Svelte apps", "keywords": [ "framework", diff --git a/packages/kit/src/version.js b/packages/kit/src/version.js index 5960bdbc4161..ad52027cad84 100644 --- a/packages/kit/src/version.js +++ b/packages/kit/src/version.js @@ -1,4 +1,4 @@ // generated during release, do not modify /** @type {string} */ -export const VERSION = '2.46.4'; +export const VERSION = '2.46.5'; From 99cbe087f6fdb3fee22dca8fc4d92f3e43675cde Mon Sep 17 00:00:00 2001 From: Matt DeKok Date: Fri, 10 Oct 2025 14:19:33 -0500 Subject: [PATCH 3/3] fix `RecursiveFormFields` type for recursive or unknown schemas --- .changeset/beige-dogs-sell.md | 5 +++++ packages/kit/src/exports/public.d.ts | 22 +++++++++++++++++----- packages/kit/types/index.d.ts | 22 +++++++++++++++++----- 3 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 .changeset/beige-dogs-sell.md diff --git a/.changeset/beige-dogs-sell.md b/.changeset/beige-dogs-sell.md new file mode 100644 index 000000000000..b1c6f38e4770 --- /dev/null +++ b/.changeset/beige-dogs-sell.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: fix `RecursiveFormFields` type for recursive or unknown schemas diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 01e4f8cf9eb9..18ed911e8302 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -1917,19 +1917,31 @@ type RemoteFormFieldContainer = RemoteFormFieldMethods & { /** * Recursive type to build form fields structure with proxy access */ -type RemoteFormFields = +export type RemoteFormFields = WillRecurseIndefinitely extends true - ? RecursiveFormFields + ? RecursiveFormFields : NonNullable extends string | number | boolean | File ? RemoteFormField> : T extends string[] | File[] ? RemoteFormField & { [K in number]: RemoteFormField } : T extends Array - ? RemoteFormFieldContainer & { [K in number]: RemoteFormFields } - : RemoteFormFieldContainer & { [K in keyof T]-?: RemoteFormFields }; + ? RemoteFormFieldContainer & { + [K in number]: RemoteFormFields< + U, + U extends RemoteFormFieldValue | unknown ? true : false + >; + } + : RemoteFormFieldContainer & { + [K in keyof T]-?: RemoteFormFields< + T[K], + T[K] extends RemoteFormFieldValue | unknown ? true : false + >; + }; // By breaking this out into its own type, we avoid the TS recursion depth limit -type RecursiveFormFields = RemoteFormField & { [key: string | number]: RecursiveFormFields }; +type RecursiveFormFields = (Leaf extends true + ? RemoteFormField + : RemoteFormFieldContainer) & { [key: string | number]: RecursiveFormFields }; type MaybeArray = T | T[]; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index b503853794e8..e04c0dd4d082 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -1893,19 +1893,31 @@ declare module '@sveltejs/kit' { /** * Recursive type to build form fields structure with proxy access */ - type RemoteFormFields = + export type RemoteFormFields = WillRecurseIndefinitely extends true - ? RecursiveFormFields + ? RecursiveFormFields : NonNullable extends string | number | boolean | File ? RemoteFormField> : T extends string[] | File[] ? RemoteFormField & { [K in number]: RemoteFormField } : T extends Array - ? RemoteFormFieldContainer & { [K in number]: RemoteFormFields } - : RemoteFormFieldContainer & { [K in keyof T]-?: RemoteFormFields }; + ? RemoteFormFieldContainer & { + [K in number]: RemoteFormFields< + U, + U extends RemoteFormFieldValue | unknown ? true : false + >; + } + : RemoteFormFieldContainer & { + [K in keyof T]-?: RemoteFormFields< + T[K], + T[K] extends RemoteFormFieldValue | unknown ? true : false + >; + }; // By breaking this out into its own type, we avoid the TS recursion depth limit - type RecursiveFormFields = RemoteFormField & { [key: string | number]: RecursiveFormFields }; + type RecursiveFormFields = (Leaf extends true + ? RemoteFormField + : RemoteFormFieldContainer) & { [key: string | number]: RecursiveFormFields }; type MaybeArray = T | T[];