Skip to content

Commit 2d3683e

Browse files
committed
[sveltekit] Fix initial form data type inference
1 parent b12b3a6 commit 2d3683e

File tree

3 files changed

+22
-23
lines changed

3 files changed

+22
-23
lines changed

packages/sveltekit/src/lib/client/meta.ts

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,30 @@ import type { SchemaValue } from '@sjsf/form';
44

55
import type { ValidatedFormData, InitialFormData } from '../model.js';
66

7-
export type SvelteKitFormMeta<
7+
export interface SvelteKitFormMeta<
88
ActionData,
99
PageData,
1010
Name extends FormNameFromActionDataUnion<ActionData>,
1111
FallbackValue,
12-
VFD = ValidatedFormDataFromActionDataUnion<ActionData, Name>,
13-
IFD = InitialFromDataFromPageData<PageData, Name>
14-
> = {
12+
IFD = InitialFromDataFromPageData<PageData, Name>,
13+
VFD = ValidatedFormDataFromActionDataUnion<ActionData, Name>
14+
> {
1515
name: Name;
1616
__actionData: ActionData;
1717
__pageData: PageData;
18-
__fallbackValue: FallbackValue;
19-
__validationFormData: VFD;
20-
__initialFormData: IFD;
2118
__formValue: FormValueFromInitialFormData<IFD, FallbackValue>;
2219
__validationError: ValidatorErrorFromValidatedFormData<VFD>;
2320
__sendSchema: SendSchemaFromInitialFormData<IFD>;
2421
__sendData: SendDataFromValidatedFormData<VFD>;
25-
};
22+
}
2623

2724
export function createMeta<
2825
ActionData,
2926
PageData,
30-
N extends FormNameFromActionDataUnion<ActionData>,
27+
Name extends FormNameFromActionDataUnion<ActionData>,
3128
FallbackValue = SchemaValue
32-
>(name: N): SvelteKitFormMeta<ActionData, PageData, N, FallbackValue> {
33-
return { name } as SvelteKitFormMeta<ActionData, PageData, N, FallbackValue>;
29+
>(name: Name) {
30+
return { name } as SvelteKitFormMeta<ActionData, PageData, Name, FallbackValue>;
3431
}
3532

3633
type FormNameFromActionDataBranch<ActionData> = keyof {
@@ -52,17 +49,17 @@ type ValidatedFormDataFromActionDataUnion<
5249
type ValidatorErrorFromValidatedFormData<VFD> =
5350
VFD extends ValidatedFormData<infer E, any> ? E : never;
5451

55-
type InitialFromDataFromPageData<PageData, FormName extends AnyKey> =
56-
PageData[keyof PageData & FormName] extends InitialFormData<any, any, any>
57-
? PageData[keyof PageData & FormName]
58-
: InitialFormData<never, never, false>;
52+
type InitialFromDataFromPageData<PageData, FormName extends AnyKey> = PageData extends {
53+
[K in FormName]: InitialFormData<any, any, any>;
54+
}
55+
? PageData[FormName]
56+
: unknown
5957

60-
type FormValueFromInitialFormData<IFD, FallbackValue> =
61-
IFD extends InitialFormData<infer T, any, any>
62-
? unknown extends T
63-
? FallbackValue
64-
: T
65-
: FallbackValue;
58+
type FormValueFromInitialFormData<IFD, FallbackValue> = unknown extends IFD
59+
? FallbackValue
60+
: IFD extends InitialFormData<infer T, any, any>
61+
? T
62+
: never;
6663

6764
type SendDataFromValidatedFormData<VFD> =
6865
VFD extends ValidatedFormData<any, infer SendData> ? SendData : false;

packages/sveltekit/src/routes/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script lang="ts">
22
import Form1 from './form1.svelte';
33
import Form2 from './form2.svelte';
4-
import Form3 from './form3.svelte';
4+
import Form3 from './form3.svelte';
55
</script>
66

77
<Form1 />

packages/sveltekit/svelte.config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ const config = {
1111
// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
1212
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
1313
// See https://kit.svelte.dev/docs/adapters for more information about adapters.
14-
adapter: adapter()
14+
adapter: adapter({
15+
strict: false
16+
})
1517
}
1618
};
1719

0 commit comments

Comments
 (0)