@@ -150,6 +150,12 @@ type IsPathRequired<P, TypeKey extends string = DefaultTypeKey> =
150150 : P extends Record < TypeKey , ArrayConstructor | any [ ] > ? true
151151 : false ;
152152
153+ // Internal type used to efficiently check for never or any types
154+ // can be efficiently checked like:
155+ // `[T] extends [neverOrAny] ? T : ...`
156+ // to avoid edge cases
157+ type neverOrAny = ' ~neverOrAny~' ;
158+
153159/**
154160 * @summary A Utility to obtain schema's required path keys.
155161 * @param {T } T A generic refers to document definition.
@@ -228,6 +234,7 @@ type PathEnumOrString<T extends SchemaTypeOptions<string>['enum']> =
228234
229235type IsSchemaTypeFromBuiltinClass < T > =
230236 T extends typeof String ? true
237+ : unknown extends Buffer ? false
231238 : T extends typeof Number ? true
232239 : T extends typeof Boolean ? true
233240 : T extends typeof Buffer ? true
@@ -244,7 +251,6 @@ type IsSchemaTypeFromBuiltinClass<T> =
244251 : T extends Types . Decimal128 ? true
245252 : T extends NativeDate ? true
246253 : T extends typeof Schema . Types . Mixed ? true
247- : unknown extends Buffer ? false
248254 : T extends Buffer ? true
249255 : false ;
250256
@@ -260,12 +266,10 @@ type ResolvePathType<
260266 Options extends SchemaTypeOptions < PathValueType > = { } ,
261267 TypeKey extends string = DefaultSchemaOptions [ 'typeKey' ] ,
262268 TypeHint = never
263- > = IfEquals <
264- TypeHint ,
265- never ,
266- PathValueType extends Schema ? InferSchemaType < PathValueType >
269+ > = [ TypeHint ] extends [ never ]
270+ ? PathValueType extends Schema ? InferSchemaType < PathValueType >
267271 : PathValueType extends AnyArray < infer Item > ?
268- IfEquals < Item , never > extends true
272+ [ Item ] extends [ never ]
269273 ? any [ ]
270274 : Item extends Schema ?
271275 // If Item is a schema, infer its type.
@@ -304,7 +308,7 @@ type ResolvePathType<
304308 : never
305309 : PathValueType extends ArrayConstructor ? any [ ]
306310 : PathValueType extends typeof Schema . Types . Mixed ? any
307- : IfEquals < PathValueType , ObjectConstructor > extends true ? any
311+ : PathValueType extends ObjectConstructor ? any
308312 : IfEquals < PathValueType , { } > extends true ? any
309313 : PathValueType extends typeof SchemaType ? PathValueType [ 'prototype' ]
310314 : PathValueType extends Record < string , any > ?
@@ -315,6 +319,5 @@ type ResolvePathType<
315319 typeKey : TypeKey ;
316320 }
317321 >
318- : unknown ,
319- TypeHint
320- > ;
322+ : unknown
323+ : TypeHint ;
0 commit comments