@@ -28,37 +28,37 @@ export class InputValidator<Schema extends SchemaDef> {
28
28
29
29
constructor ( private readonly schema : Schema ) { }
30
30
31
- validateFindArgs ( model : string , unique : boolean , args : unknown ) {
31
+ validateFindArgs ( model : GetModels < Schema > , unique : boolean , args : unknown ) {
32
32
return this . validate < FindArgs < Schema , GetModels < Schema > , true > > (
33
33
this . makeFindSchema ( model , unique , true ) ,
34
34
'find' ,
35
35
args
36
36
) ;
37
37
}
38
38
39
- validateCreateArgs ( model : string , args : unknown ) {
39
+ validateCreateArgs ( model : GetModels < Schema > , args : unknown ) {
40
40
return this . validate < CreateArgs < Schema , GetModels < Schema > > > (
41
41
this . makeCreateSchema ( model ) ,
42
42
'create' ,
43
43
args
44
44
) ;
45
45
}
46
46
47
- validateCreateManyArgs ( model : string , args : unknown ) {
47
+ validateCreateManyArgs ( model : GetModels < Schema > , args : unknown ) {
48
48
return this . validate <
49
49
CreateManyArgs < Schema , GetModels < Schema > > | undefined
50
50
> ( this . makeCreateManySchema ( model ) , 'createMany' , args ) ;
51
51
}
52
52
53
- validateUpdateArgs ( model : string , args : unknown ) {
53
+ validateUpdateArgs ( model : GetModels < Schema > , args : unknown ) {
54
54
return this . validate < UpdateArgs < Schema , GetModels < Schema > > > (
55
55
this . makeUpdateSchema ( model ) ,
56
56
'update' ,
57
57
args
58
58
) ;
59
59
}
60
60
61
- validateUpdateManyArgs ( model : string , args : unknown ) {
61
+ validateUpdateManyArgs ( model : GetModels < Schema > , args : unknown ) {
62
62
return this . validate < UpdateManyArgs < Schema , GetModels < Schema > > > (
63
63
this . makeUpdateManySchema ( model ) ,
64
64
'updateMany' ,
@@ -121,6 +121,7 @@ export class InputValidator<Schema extends SchemaDef> {
121
121
122
122
fields [ 'select' ] = this . makeSelectSchema ( model ) . optional ( ) ;
123
123
fields [ 'include' ] = this . makeIncludeSchema ( model ) . optional ( ) ;
124
+ fields [ 'omit' ] = this . makeOmitSchema ( model ) . optional ( ) ;
124
125
125
126
if ( collection ) {
126
127
fields [ 'skip' ] = z . number ( ) . int ( ) . nonnegative ( ) . optional ( ) ;
@@ -133,6 +134,7 @@ export class InputValidator<Schema extends SchemaDef> {
133
134
134
135
let result : ZodSchema = z . object ( fields ) . strict ( ) ;
135
136
result = this . refineForSelectIncludeMutuallyExclusive ( result ) ;
137
+ result = this . refineForSelectOmitMutuallyExclusive ( result ) ;
136
138
137
139
if ( ! unique ) {
138
140
result = result . optional ( ) ;
@@ -446,6 +448,18 @@ export class InputValidator<Schema extends SchemaDef> {
446
448
return z . object ( fields ) . strict ( ) ;
447
449
}
448
450
451
+ protected makeOmitSchema ( model : string ) {
452
+ const modelDef = requireModel ( this . schema , model ) ;
453
+ const fields : Record < string , ZodSchema > = { } ;
454
+ for ( const field of Object . keys ( modelDef . fields ) ) {
455
+ const fieldDef = requireField ( this . schema , model , field ) ;
456
+ if ( ! fieldDef . relation ) {
457
+ fields [ field ] = z . boolean ( ) . optional ( ) ;
458
+ }
459
+ }
460
+ return z . object ( fields ) . strict ( ) ;
461
+ }
462
+
449
463
protected makeIncludeSchema ( model : string ) {
450
464
const modelDef = requireModel ( this . schema , model ) ;
451
465
const fields : Record < string , ZodSchema > = { } ;
@@ -1029,6 +1043,13 @@ export class InputValidator<Schema extends SchemaDef> {
1029
1043
) ;
1030
1044
}
1031
1045
1046
+ private refineForSelectOmitMutuallyExclusive ( schema : ZodSchema ) {
1047
+ return schema . refine (
1048
+ ( value ) => ! ( value [ 'select' ] && value [ 'omit' ] ) ,
1049
+ '"select" and "omit" cannot be used together'
1050
+ ) ;
1051
+ }
1052
+
1032
1053
private nullableIf ( schema : ZodSchema , nullable : boolean ) {
1033
1054
return nullable ? schema . nullable ( ) : schema ;
1034
1055
}
0 commit comments