@@ -61,7 +61,7 @@ export interface Types {
6161 CommaSeperatedArray : Type < string [ ] > ;
6262 Set : Type < Set < any > > ;
6363 Any : Type < any > ;
64- ArrayOf : < T extends Type < any > > ( type : T ) => ( T extends Type < infer R > ? Type < R [ ] > : never ) ;
64+ ArrayOf : < T extends Type < any > > ( type : T , isOptional ?: boolean ) => ( T extends Type < infer R > ? Type < R [ ] > : never ) ;
6565 AnyOf : < T extends Type < any > > ( ...type : T [ ] ) => ( T extends Type < infer R > ? Type < R > : never ) ;
6666}
6767
@@ -175,15 +175,21 @@ export const Types = {
175175 ( v ) => emojiRegex ( ) . test ( v . toString ( ) ) ,
176176 ] ,
177177 Any : [ ( v ) => v , null ] ,
178- ArrayOf : ( type ) => [
178+ ArrayOf : ( type , isOptional = false ) => [
179179 ( v ) => {
180180 const arr = v instanceof Array ? v : [ v ] ;
181- return arr . map ( ( i ) => type [ 0 ] ( i ) ) ;
181+ return arr . map ( ( i ) => {
182+ if ( isOptional && [ undefined , null , '' ] . includes ( i ) ) return undefined ;
183+ return type [ 0 ] ( i ) ;
184+ } ) ;
182185 } ,
183186 ( v ) => {
184187 if ( ! type [ 1 ] ) return true ;
185188 const arr = v instanceof Array ? v : [ v ] ;
186- return arr . every ( ( i ) => type [ 1 ] ( i ) ) ;
189+ return arr . every ( ( i ) => {
190+ if ( [ undefined , null , '' ] . includes ( i ) ) return isOptional ;
191+ return type [ 1 ] ( i ) ;
192+ } ) ;
187193 } ,
188194 ] as any ,
189195 AnyOf : ( ...types ) => [
@@ -195,10 +201,4 @@ export const Types = {
195201try {
196202 const { ObjectId } = require ( 'mongodb' ) ;
197203 Types . ObjectId = [ ( ( v ) => new ObjectId ( v ) ) as any , ObjectId . isValid ] ;
198- } catch ( e ) {
199-
200- }
201-
202- // @ts -ignore
203- Types . ObjectID = Types . ObjectId ;
204- // backward compatibility
204+ } catch ( e ) { }
0 commit comments