35 lines
1019 B
TypeScript
35 lines
1019 B
TypeScript
import type {
|
|
ZodArray,
|
|
ZodNullable,
|
|
ZodObject,
|
|
ZodOptional,
|
|
ZodRawShape,
|
|
ZodTuple,
|
|
ZodTupleItems,
|
|
ZodTypeAny,
|
|
} from "../types.js";
|
|
|
|
export namespace partialUtil {
|
|
export type DeepPartial<T extends ZodTypeAny> = T extends ZodObject<ZodRawShape>
|
|
? ZodObject<
|
|
{ [k in keyof T["shape"]]: ZodOptional<DeepPartial<T["shape"][k]>> },
|
|
T["_def"]["unknownKeys"],
|
|
T["_def"]["catchall"]
|
|
>
|
|
: T extends ZodArray<infer Type, infer Card>
|
|
? ZodArray<DeepPartial<Type>, Card>
|
|
: T extends ZodOptional<infer Type>
|
|
? ZodOptional<DeepPartial<Type>>
|
|
: T extends ZodNullable<infer Type>
|
|
? ZodNullable<DeepPartial<Type>>
|
|
: T extends ZodTuple<infer Items>
|
|
? {
|
|
[k in keyof Items]: Items[k] extends ZodTypeAny ? DeepPartial<Items[k]> : never;
|
|
} extends infer PI
|
|
? PI extends ZodTupleItems
|
|
? ZodTuple<PI>
|
|
: never
|
|
: never
|
|
: T;
|
|
}
|