1
+ import type { ValidationAdapter } from '$lib/adapters/adapters.js' ;
1
2
import { zod } from '$lib/adapters/zod.js' ;
2
3
import { superValidate } from '$lib/superValidate.js' ;
3
4
import { stringify } from 'devalue' ;
4
- import { describe , test } from 'vitest' ;
5
+ import { describe , expect , test } from 'vitest' ;
5
6
import { z } from 'zod' ;
6
7
7
- const ZodSchema = z . object ( {
8
- addresses : z . object ( {
9
- additional : z . discriminatedUnion ( 'type' , [
10
- z . object ( {
11
- type : z . literal ( 'poBox' ) ,
12
- name : z . string ( ) . min ( 1 , 'min len' ) . max ( 10 , 'max len' )
13
- } ) ,
14
- z . object ( {
15
- type : z . literal ( 'none' )
16
- } )
17
- ] )
18
- } )
19
- } ) ;
20
- const FormSchema = zod ( ZodSchema ) ;
21
- type FormSchema = ( typeof FormSchema ) [ 'defaults' ] ;
22
-
23
- async function validate ( data : unknown ) {
8
+ async function validate ( data : unknown , schema : ValidationAdapter < Record < string , unknown > > ) {
24
9
const formInput = new FormData ( ) ;
25
10
26
11
formInput . set ( '__superform_json' , stringify ( data ) ) ;
27
12
try {
28
- await superValidate ( formInput , FormSchema ) ;
13
+ return await superValidate ( formInput , schema ) ;
29
14
} catch ( err ) {
30
15
console . error ( err ) ;
31
16
//
32
17
throw err ;
33
18
}
34
19
}
35
20
36
- describe ( 'Demo' , ( ) => {
21
+ describe ( 'Default discriminated union values 1' , ( ) => {
22
+ const schema = z . discriminatedUnion ( 'type' , [
23
+ z . object ( { type : z . literal ( 'empty' ) } ) ,
24
+ z . object ( { type : z . literal ( 'extra' ) , options : z . string ( ) . array ( ) } )
25
+ ] ) ;
26
+
27
+ test ( 'Union with schema' , async ( ) => {
28
+ const form = await validate ( { type : 'extra' } , zod ( schema ) ) ;
29
+ expect ( form . data ) . toEqual ( { type : 'extra' , options : [ ] } ) ;
30
+ } ) ;
31
+ } ) ;
32
+
33
+ describe ( 'Default discriminated union values 2' , ( ) => {
34
+ const ZodSchema = z . object ( {
35
+ addresses : z . object ( {
36
+ additional : z . discriminatedUnion ( 'type' , [
37
+ z . object ( {
38
+ type : z . literal ( 'poBox' ) ,
39
+ name : z . string ( ) . min ( 1 , 'min len' ) . max ( 10 , 'max len' )
40
+ } ) ,
41
+ z . object ( {
42
+ type : z . literal ( 'none' )
43
+ } )
44
+ ] )
45
+ } )
46
+ } ) ;
47
+ const FormSchema = zod ( ZodSchema ) ;
48
+ type FormSchema = ( typeof FormSchema ) [ 'defaults' ] ;
49
+
37
50
test ( 'Bad' , async ( ) => {
38
51
const data = {
39
52
addresses : {
@@ -43,7 +56,7 @@ describe('Demo', () => {
43
56
}
44
57
}
45
58
} satisfies FormSchema ;
46
- await validate ( data ) ;
59
+ await validate ( data , FormSchema ) ;
47
60
} ) ;
48
61
49
62
test ( 'Good' , async ( ) => {
@@ -54,6 +67,6 @@ describe('Demo', () => {
54
67
}
55
68
}
56
69
} satisfies FormSchema ;
57
- await validate ( data ) ;
70
+ await validate ( data , FormSchema ) ;
58
71
} ) ;
59
72
} ) ;
0 commit comments