@@ -500,20 +500,20 @@ export type Ref<T = any> = {
500
500
[ K in keyof T ] : IsNonExactOptional < T [ K ] > extends true
501
501
? IsNonExactNullable < T [ K ] > extends true
502
502
? // Both optional and nullable
503
- NonNullable < T [ K ] > extends Record < string , any >
503
+ IsPlainObject < NonNullable < T [ K ] > > extends true
504
504
? Ref < NonNullable < T [ K ] > > | undefined
505
505
: RefLeaf < NonNullable < T [ K ] > > | undefined
506
506
: // Optional only
507
- NonUndefined < T [ K ] > extends Record < string , any >
507
+ IsPlainObject < NonUndefined < T [ K ] > > extends true
508
508
? Ref < NonUndefined < T [ K ] > > | undefined
509
509
: RefLeaf < NonUndefined < T [ K ] > > | undefined
510
510
: IsNonExactNullable < T [ K ] > extends true
511
511
? // Nullable only
512
- NonNull < T [ K ] > extends Record < string , any >
512
+ IsPlainObject < NonNull < T [ K ] > > extends true
513
513
? Ref < NonNull < T [ K ] > > | null
514
514
: RefLeaf < NonNull < T [ K ] > > | null
515
515
: // Required
516
- T [ K ] extends Record < string , any >
516
+ IsPlainObject < T [ K ] > extends true
517
517
? Ref < T [ K ] >
518
518
: RefLeaf < T [ K ] >
519
519
} & RefLeaf < T >
@@ -825,3 +825,48 @@ export type WithResult<TContext extends Context, TResult> = Prettify<
825
825
export type Prettify < T > = {
826
826
[ K in keyof T ] : T [ K ]
827
827
} & { }
828
+
829
+ /**
830
+ * IsPlainObject - Utility type to check if T is a plain object
831
+ */
832
+ type IsPlainObject < T > = T extends unknown
833
+ ? T extends object
834
+ ? T extends ReadonlyArray < any >
835
+ ? false
836
+ : T extends JsBuiltIns
837
+ ? false
838
+ : true
839
+ : false
840
+ : false
841
+
842
+ /**
843
+ * JsBuiltIns - List of JavaScript built-ins
844
+ */
845
+ type JsBuiltIns =
846
+ | ArrayBuffer
847
+ | ArrayBufferLike
848
+ | AsyncGenerator < any , any , any >
849
+ | BigInt64Array
850
+ | BigUint64Array
851
+ | DataView
852
+ | Date
853
+ | Error
854
+ | Float32Array
855
+ | Float64Array
856
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
857
+ | Function
858
+ | Generator < any , any , any >
859
+ | Int16Array
860
+ | Int32Array
861
+ | Int8Array
862
+ | Map < any , any >
863
+ | Promise < any >
864
+ | RegExp
865
+ | Set < any >
866
+ | string
867
+ | Uint16Array
868
+ | Uint32Array
869
+ | Uint8Array
870
+ | Uint8ClampedArray
871
+ | WeakMap < any , any >
872
+ | WeakSet < any >
0 commit comments