diff --git a/.changeset/blue-bears-roll.md b/.changeset/blue-bears-roll.md new file mode 100644 index 000000000000..e21b9642879b --- /dev/null +++ b/.changeset/blue-bears-roll.md @@ -0,0 +1,5 @@ +--- +"@sveltejs/kit": patch +--- + +fix: add `null` to `RemoteFormInput` type to allow nullable schema validators diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 1bae4ca70b47..1f05380a007c 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -2090,7 +2090,7 @@ type RecursiveFormFields = RemoteFormFieldContainer & { type MaybeArray = T | T[]; export interface RemoteFormInput { - [key: string]: MaybeArray; + [key: string]: MaybeArray; } export interface RemoteFormIssue { diff --git a/packages/kit/test/types/remote.test.ts b/packages/kit/test/types/remote.test.ts index 2d00abec55af..30a89eb09bd5 100644 --- a/packages/kit/test/types/remote.test.ts +++ b/packages/kit/test/types/remote.test.ts @@ -624,6 +624,27 @@ function form_tests() { f11_field2.propA; // @ts-expect-error f11_field2.propB; + + // schema with nullable values (e.g. Zod nullable()) + const f12 = form( + null as any as StandardSchemaV1<{ + nullable_string: string | null; + nested: { nullable_value: number | null }; + }>, + (data) => { + data.nullable_string === '' || data.nullable_string === null; + data.nested.nullable_value === 0 || data.nested.nullable_value === null; + // @ts-expect-error + data.nonexistent; + return { success: true }; + } + ); + // @ts-expect-error + f12.fields.as('text'); + f12.fields.nullable_string.issues(); + f12.fields.nullable_string.value(); + f12.fields.nested.nullable_value.issues(); + f12.fields.nested.nullable_value.value(); } form_tests(); diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index cf5f41397366..0188a2e81773 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2064,7 +2064,7 @@ declare module '@sveltejs/kit' { type MaybeArray = T | T[]; export interface RemoteFormInput { - [key: string]: MaybeArray; + [key: string]: MaybeArray; } export interface RemoteFormIssue {