zod
Version:
TypeScript-first schema declaration and validation library with static type inference
1,339 lines (1,178 loc) • 71.8 kB
text/typescript
import * as core from "../core/index.js";
import { util } from "../core/index.js";
import * as checks from "./checks.js";
import * as iso from "./iso.js";
import * as parse from "./parse.js";
///////////////////////////////////////////
///////////////////////////////////////////
//////////// ////////////
//////////// ZodType ////////////
//////////// ////////////
///////////////////////////////////////////
///////////////////////////////////////////
export interface RefinementCtx<T = unknown> extends core.ParsePayload<T> {
addIssue(arg: string | core.$ZodRawIssue | Partial<core.$ZodIssueCustom>): void;
}
export interface ZodType<
out Output = unknown,
out Input = unknown,
out Internals extends core.$ZodTypeInternals<Output, Input> = core.$ZodTypeInternals<Output, Input>,
> extends core.$ZodType<Output, Input, Internals> {
def: Internals["def"];
type: Internals["def"]["type"];
/** @deprecated Use `.def` instead. */
_def: Internals["def"];
/** @deprecated Use `z.output<typeof schema>` instead. */
_output: Internals["output"];
/** @deprecated Use `z.input<typeof schema>` instead. */
_input: Internals["input"];
// base methods
check(...checks: (core.CheckFn<core.output<this>> | core.$ZodCheck<core.output<this>>)[]): this;
clone(def?: Internals["def"], params?: { parent: boolean }): this;
register<R extends core.$ZodRegistry>(
registry: R,
...meta: this extends R["_schema"]
? undefined extends R["_meta"]
? [core.$replace<R["_meta"], this>?]
: [core.$replace<R["_meta"], this>]
: ["Incompatible schema"]
): this;
brand<T extends PropertyKey = PropertyKey>(value?: T): PropertyKey extends T ? this : core.$ZodBranded<this, T>;
// parsing
parse(data: unknown, params?: core.ParseContext<core.$ZodIssue>): core.output<this>;
safeParse(data: unknown, params?: core.ParseContext<core.$ZodIssue>): parse.ZodSafeParseResult<core.output<this>>;
parseAsync(data: unknown, params?: core.ParseContext<core.$ZodIssue>): Promise<core.output<this>>;
safeParseAsync(
data: unknown,
params?: core.ParseContext<core.$ZodIssue>
): Promise<parse.ZodSafeParseResult<core.output<this>>>;
spa: (
data: unknown,
params?: core.ParseContext<core.$ZodIssue>
) => Promise<parse.ZodSafeParseResult<core.output<this>>>;
// refinements
refine(check: (arg: core.output<this>) => unknown | Promise<unknown>, params?: string | core.$ZodCustomParams): this;
/** @deprecated Use [`.check()`](https://zod.dev/api?id=check) instead.
*/
superRefine(
refinement: (arg: core.output<this>, ctx: RefinementCtx<core.output<this>>) => void | Promise<void>
): this;
overwrite(fn: (x: core.output<this>) => core.output<this>): this;
// wrappers
optional(): ZodOptional<this>;
nonoptional(params?: string | core.$ZodNonOptionalParams): ZodNonOptional<this>;
nullable(): ZodNullable<this>;
nullish(): ZodOptional<ZodNullable<this>>;
default(def: core.output<this>): ZodDefault<this>;
default(def: () => util.NoUndefined<core.output<this>>): ZodDefault<this>;
prefault(def: () => core.input<this>): ZodPrefault<this>;
prefault(def: core.input<this>): ZodPrefault<this>;
array(): ZodArray<this>;
or<T extends core.SomeType>(option: T): ZodUnion<[this, T]>;
and<T extends core.SomeType>(incoming: T): ZodIntersection<this, T>;
transform<NewOut>(
transform: (arg: core.output<this>, ctx: RefinementCtx<core.output<this>>) => NewOut | Promise<NewOut>
): ZodPipe<this, ZodTransform<Awaited<NewOut>, core.output<this>>>;
catch(def: core.output<this>): ZodCatch<this>;
catch(def: (ctx: core.$ZodCatchCtx) => core.output<this>): ZodCatch<this>;
pipe<T extends core.$ZodType<any, core.output<this>>>(
target: T | core.$ZodType<any, core.output<this>>
): ZodPipe<this, T>;
readonly(): ZodReadonly<this>;
/** Returns a new instance that has been registered in `z.globalRegistry` with the specified description */
describe(description: string): this;
description?: string;
/** Returns the metadata associated with this instance in `z.globalRegistry` */
meta(): core.$replace<core.GlobalMeta, this> | undefined;
/** Returns a new instance that has been registered in `z.globalRegistry` with the specified metadata */
meta(data: core.$replace<core.GlobalMeta, this>): this;
// helpers
/** @deprecated Try safe-parsing `undefined` (this is what `isOptional` does internally):
*
* ```ts
* const schema = z.string().optional();
* const isOptional = schema.safeParse(undefined).success; // true
* ```
*/
isOptional(): boolean;
/**
* @deprecated Try safe-parsing `null` (this is what `isNullable` does internally):
*
* ```ts
* const schema = z.string().nullable();
* const isNullable = schema.safeParse(null).success; // true
* ```
*/
isNullable(): boolean;
}
export interface _ZodType<out Internals extends core.$ZodTypeInternals = core.$ZodTypeInternals>
extends ZodType<any, any, Internals> {}
export const ZodType: core.$constructor<ZodType> = /*@__PURE__*/ core.$constructor("ZodType", (inst, def) => {
core.$ZodType.init(inst, def);
inst.def = def;
Object.defineProperty(inst, "_def", { value: def });
// base methods
inst.check = (...checks) => {
return inst.clone(
{
...def,
checks: [
...(def.checks ?? []),
...checks.map((ch) =>
typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch
),
],
}
// { parent: true }
);
};
inst.clone = (def, params) => core.clone(inst, def, params);
inst.brand = () => inst as any;
inst.register = ((reg: any, meta: any) => {
reg.add(inst, meta);
return inst;
}) as any;
// parsing
inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });
inst.safeParse = (data, params) => parse.safeParse(inst, data, params);
inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });
inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);
inst.spa = inst.safeParseAsync;
// refinements
inst.refine = (check, params) => inst.check(refine(check, params));
inst.superRefine = (refinement) => inst.check(superRefine(refinement));
inst.overwrite = (fn) => inst.check(checks.overwrite(fn));
// wrappers
inst.optional = () => optional(inst);
inst.nullable = () => nullable(inst);
inst.nullish = () => optional(nullable(inst));
inst.nonoptional = (params) => nonoptional(inst, params);
inst.array = () => array(inst);
inst.or = (arg) => union([inst, arg]);
inst.and = (arg) => intersection(inst, arg);
inst.transform = (tx) => pipe(inst, transform(tx as any)) as never;
inst.default = (def) => _default(inst, def);
inst.prefault = (def) => prefault(inst, def);
// inst.coalesce = (def, params) => coalesce(inst, def, params);
inst.catch = (params) => _catch(inst, params);
inst.pipe = (target) => pipe(inst, target);
inst.readonly = () => readonly(inst);
// meta
inst.describe = (description) => {
const cl = inst.clone();
core.globalRegistry.add(cl, { description });
return cl;
};
Object.defineProperty(inst, "description", {
get() {
return core.globalRegistry.get(inst)?.description;
},
configurable: true,
});
inst.meta = (...args: any) => {
if (args.length === 0) {
return core.globalRegistry.get(inst);
}
const cl = inst.clone();
core.globalRegistry.add(cl, args[0]);
return cl as any;
};
// helpers
inst.isOptional = () => inst.safeParse(undefined).success;
inst.isNullable = () => inst.safeParse(null).success;
return inst;
});
// ZodString
export interface _ZodString<T extends core.$ZodStringInternals<unknown> = core.$ZodStringInternals<unknown>>
extends _ZodType<T> {
format: string | null;
minLength: number | null;
maxLength: number | null;
// miscellaneous checks
regex(regex: RegExp, params?: string | core.$ZodCheckRegexParams): this;
includes(value: string, params?: core.$ZodCheckIncludesParams): this;
startsWith(value: string, params?: string | core.$ZodCheckStartsWithParams): this;
endsWith(value: string, params?: string | core.$ZodCheckEndsWithParams): this;
min(minLength: number, params?: string | core.$ZodCheckMinLengthParams): this;
max(maxLength: number, params?: string | core.$ZodCheckMaxLengthParams): this;
length(len: number, params?: string | core.$ZodCheckLengthEqualsParams): this;
nonempty(params?: string | core.$ZodCheckMinLengthParams): this;
lowercase(params?: string | core.$ZodCheckLowerCaseParams): this;
uppercase(params?: string | core.$ZodCheckUpperCaseParams): this;
// transforms
trim(): this;
normalize(form?: "NFC" | "NFD" | "NFKC" | "NFKD" | (string & {})): this;
toLowerCase(): this;
toUpperCase(): this;
}
/** @internal */
export const _ZodString: core.$constructor<_ZodString> = /*@__PURE__*/ core.$constructor("_ZodString", (inst, def) => {
core.$ZodString.init(inst, def);
ZodType.init(inst, def);
const bag = inst._zod.bag;
inst.format = bag.format ?? null;
inst.minLength = bag.minimum ?? null;
inst.maxLength = bag.maximum ?? null;
// validations
inst.regex = (...args) => inst.check(checks.regex(...args));
inst.includes = (...args) => inst.check(checks.includes(...args));
inst.startsWith = (...args) => inst.check(checks.startsWith(...args));
inst.endsWith = (...args) => inst.check(checks.endsWith(...args));
inst.min = (...args) => inst.check(checks.minLength(...args));
inst.max = (...args) => inst.check(checks.maxLength(...args));
inst.length = (...args) => inst.check(checks.length(...args));
inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));
inst.lowercase = (params) => inst.check(checks.lowercase(params));
inst.uppercase = (params) => inst.check(checks.uppercase(params));
// transforms
inst.trim = () => inst.check(checks.trim());
inst.normalize = (...args) => inst.check(checks.normalize(...args));
inst.toLowerCase = () => inst.check(checks.toLowerCase());
inst.toUpperCase = () => inst.check(checks.toUpperCase());
});
export interface ZodString extends _ZodString<core.$ZodStringInternals<string>> {
// string format checks
/** @deprecated Use `z.email()` instead. */
email(params?: string | core.$ZodCheckEmailParams): this;
/** @deprecated Use `z.url()` instead. */
url(params?: string | core.$ZodCheckURLParams): this;
/** @deprecated Use `z.jwt()` instead. */
jwt(params?: string | core.$ZodCheckJWTParams): this;
/** @deprecated Use `z.emoji()` instead. */
emoji(params?: string | core.$ZodCheckEmojiParams): this;
/** @deprecated Use `z.guid()` instead. */
guid(params?: string | core.$ZodCheckGUIDParams): this;
/** @deprecated Use `z.uuid()` instead. */
uuid(params?: string | core.$ZodCheckUUIDParams): this;
/** @deprecated Use `z.uuid()` instead. */
uuidv4(params?: string | core.$ZodCheckUUIDParams): this;
/** @deprecated Use `z.uuid()` instead. */
uuidv6(params?: string | core.$ZodCheckUUIDParams): this;
/** @deprecated Use `z.uuid()` instead. */
uuidv7(params?: string | core.$ZodCheckUUIDParams): this;
/** @deprecated Use `z.nanoid()` instead. */
nanoid(params?: string | core.$ZodCheckNanoIDParams): this;
/** @deprecated Use `z.guid()` instead. */
guid(params?: string | core.$ZodCheckGUIDParams): this;
/** @deprecated Use `z.cuid()` instead. */
cuid(params?: string | core.$ZodCheckCUIDParams): this;
/** @deprecated Use `z.cuid2()` instead. */
cuid2(params?: string | core.$ZodCheckCUID2Params): this;
/** @deprecated Use `z.ulid()` instead. */
ulid(params?: string | core.$ZodCheckULIDParams): this;
/** @deprecated Use `z.base64()` instead. */
base64(params?: string | core.$ZodCheckBase64Params): this;
/** @deprecated Use `z.base64url()` instead. */
base64url(params?: string | core.$ZodCheckBase64URLParams): this;
// /** @deprecated Use `z.jsonString()` instead. */
// jsonString(params?: string | core.$ZodCheckJSONStringParams): this;
/** @deprecated Use `z.xid()` instead. */
xid(params?: string | core.$ZodCheckXIDParams): this;
/** @deprecated Use `z.ksuid()` instead. */
ksuid(params?: string | core.$ZodCheckKSUIDParams): this;
// /** @deprecated Use `z.ipv4()` or `z.ipv6()` instead. */
// ip(params?: string | (core.$ZodCheckIPv4Params & { version?: "v4" | "v6" })): ZodUnion<[this, this]>;
/** @deprecated Use `z.ipv4()` instead. */
ipv4(params?: string | core.$ZodCheckIPv4Params): this;
/** @deprecated Use `z.ipv6()` instead. */
ipv6(params?: string | core.$ZodCheckIPv6Params): this;
/** @deprecated Use `z.cidrv4()` instead. */
cidrv4(params?: string | core.$ZodCheckCIDRv4Params): this;
/** @deprecated Use `z.cidrv6()` instead. */
cidrv6(params?: string | core.$ZodCheckCIDRv6Params): this;
/** @deprecated Use `z.e164()` instead. */
e164(params?: string | core.$ZodCheckE164Params): this;
// ISO 8601 checks
/** @deprecated Use `z.iso.datetime()` instead. */
datetime(params?: string | core.$ZodCheckISODateTimeParams): this;
/** @deprecated Use `z.iso.date()` instead. */
date(params?: string | core.$ZodCheckISODateParams): this;
/** @deprecated Use `z.iso.time()` instead. */
time(
params?:
| string
// | {
// message?: string | undefined;
// precision?: number | null;
// }
| core.$ZodCheckISOTimeParams
): this;
/** @deprecated Use `z.iso.duration()` instead. */
duration(params?: string | core.$ZodCheckISODurationParams): this;
}
export const ZodString: core.$constructor<ZodString> = /*@__PURE__*/ core.$constructor("ZodString", (inst, def) => {
core.$ZodString.init(inst, def);
_ZodString.init(inst, def);
inst.email = (params) => inst.check(core._email(ZodEmail, params));
inst.url = (params) => inst.check(core._url(ZodURL, params));
inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));
inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));
inst.guid = (params) => inst.check(core._guid(ZodGUID, params));
inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));
inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));
inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));
inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));
inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));
inst.guid = (params) => inst.check(core._guid(ZodGUID, params));
inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));
inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));
inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));
inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));
inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));
inst.xid = (params) => inst.check(core._xid(ZodXID, params));
inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));
inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));
inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));
inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));
inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));
inst.e164 = (params) => inst.check(core._e164(ZodE164, params));
// iso
inst.datetime = (params) => inst.check(iso.datetime(params as any));
inst.date = (params) => inst.check(iso.date(params as any));
inst.time = (params) => inst.check(iso.time(params as any));
inst.duration = (params) => inst.check(iso.duration(params as any));
});
export function string(params?: string | core.$ZodStringParams): ZodString;
export function string<T extends string>(params?: string | core.$ZodStringParams): core.$ZodType<T, T>;
export function string(params?: string | core.$ZodStringParams): ZodString {
return core._string(ZodString, params) as any;
}
// ZodStringFormat
export interface ZodStringFormat<Format extends string = string>
extends _ZodString<core.$ZodStringFormatInternals<Format>> {}
export const ZodStringFormat: core.$constructor<ZodStringFormat> = /*@__PURE__*/ core.$constructor(
"ZodStringFormat",
(inst, def) => {
core.$ZodStringFormat.init(inst, def);
_ZodString.init(inst, def);
}
);
// ZodEmail
export interface ZodEmail extends ZodStringFormat<"email"> {
_zod: core.$ZodEmailInternals;
}
export const ZodEmail: core.$constructor<ZodEmail> = /*@__PURE__*/ core.$constructor("ZodEmail", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodEmail.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function email(params?: string | core.$ZodEmailParams): ZodEmail {
return core._email(ZodEmail, params);
}
// ZodGUID
export interface ZodGUID extends ZodStringFormat<"guid"> {
_zod: core.$ZodGUIDInternals;
}
export const ZodGUID: core.$constructor<ZodGUID> = /*@__PURE__*/ core.$constructor("ZodGUID", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodGUID.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function guid(params?: string | core.$ZodGUIDParams): ZodGUID {
return core._guid(ZodGUID, params);
}
// ZodUUID
export interface ZodUUID extends ZodStringFormat<"uuid"> {
_zod: core.$ZodUUIDInternals;
}
export const ZodUUID: core.$constructor<ZodUUID> = /*@__PURE__*/ core.$constructor("ZodUUID", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodUUID.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function uuid(params?: string | core.$ZodUUIDParams): ZodUUID {
return core._uuid(ZodUUID, params);
}
export function uuidv4(params?: string | core.$ZodUUIDv4Params): ZodUUID {
return core._uuidv4(ZodUUID, params);
}
// ZodUUIDv6
export function uuidv6(params?: string | core.$ZodUUIDv6Params): ZodUUID {
return core._uuidv6(ZodUUID, params);
}
// ZodUUIDv7
export function uuidv7(params?: string | core.$ZodUUIDv7Params): ZodUUID {
return core._uuidv7(ZodUUID, params);
}
// ZodURL
export interface ZodURL extends ZodStringFormat<"url"> {
_zod: core.$ZodURLInternals;
}
export const ZodURL: core.$constructor<ZodURL> = /*@__PURE__*/ core.$constructor("ZodURL", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodURL.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function url(params?: string | core.$ZodURLParams): ZodURL {
return core._url(ZodURL, params);
}
// ZodEmoji
export interface ZodEmoji extends ZodStringFormat<"emoji"> {
_zod: core.$ZodEmojiInternals;
}
export const ZodEmoji: core.$constructor<ZodEmoji> = /*@__PURE__*/ core.$constructor("ZodEmoji", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodEmoji.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function emoji(params?: string | core.$ZodEmojiParams): ZodEmoji {
return core._emoji(ZodEmoji, params);
}
// ZodNanoID
export interface ZodNanoID extends ZodStringFormat<"nanoid"> {
_zod: core.$ZodNanoIDInternals;
}
export const ZodNanoID: core.$constructor<ZodNanoID> = /*@__PURE__*/ core.$constructor("ZodNanoID", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodNanoID.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function nanoid(params?: string | core.$ZodNanoIDParams): ZodNanoID {
return core._nanoid(ZodNanoID, params);
}
// ZodCUID
export interface ZodCUID extends ZodStringFormat<"cuid"> {
_zod: core.$ZodCUIDInternals;
}
export const ZodCUID: core.$constructor<ZodCUID> = /*@__PURE__*/ core.$constructor("ZodCUID", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodCUID.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function cuid(params?: string | core.$ZodCUIDParams): ZodCUID {
return core._cuid(ZodCUID, params);
}
// ZodCUID2
export interface ZodCUID2 extends ZodStringFormat<"cuid2"> {
_zod: core.$ZodCUID2Internals;
}
export const ZodCUID2: core.$constructor<ZodCUID2> = /*@__PURE__*/ core.$constructor("ZodCUID2", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodCUID2.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function cuid2(params?: string | core.$ZodCUID2Params): ZodCUID2 {
return core._cuid2(ZodCUID2, params);
}
// ZodULID
export interface ZodULID extends ZodStringFormat<"ulid"> {
_zod: core.$ZodULIDInternals;
}
export const ZodULID: core.$constructor<ZodULID> = /*@__PURE__*/ core.$constructor("ZodULID", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodULID.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function ulid(params?: string | core.$ZodULIDParams): ZodULID {
return core._ulid(ZodULID, params);
}
// ZodXID
export interface ZodXID extends ZodStringFormat<"xid"> {
_zod: core.$ZodXIDInternals;
}
export const ZodXID: core.$constructor<ZodXID> = /*@__PURE__*/ core.$constructor("ZodXID", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodXID.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function xid(params?: string | core.$ZodXIDParams): ZodXID {
return core._xid(ZodXID, params);
}
// ZodKSUID
export interface ZodKSUID extends ZodStringFormat<"ksuid"> {
_zod: core.$ZodKSUIDInternals;
}
export const ZodKSUID: core.$constructor<ZodKSUID> = /*@__PURE__*/ core.$constructor("ZodKSUID", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodKSUID.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function ksuid(params?: string | core.$ZodKSUIDParams): ZodKSUID {
return core._ksuid(ZodKSUID, params);
}
// ZodIP
// export interface ZodIP extends ZodStringFormat<"ip"> {
// _zod: core.$ZodIPInternals;
// }
// export const ZodIP: core.$constructor<ZodIP> = /*@__PURE__*/ core.$constructor("ZodIP", (inst, def) => {
// // ZodStringFormat.init(inst, def);
// core.$ZodIP.init(inst, def);
// ZodStringFormat.init(inst, def);
// });
// export function ip(params?: string | core.$ZodIPParams): ZodIP {
// return core._ip(ZodIP, params);
// }
// ZodIPv4
export interface ZodIPv4 extends ZodStringFormat<"ipv4"> {
_zod: core.$ZodIPv4Internals;
}
export const ZodIPv4: core.$constructor<ZodIPv4> = /*@__PURE__*/ core.$constructor("ZodIPv4", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodIPv4.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function ipv4(params?: string | core.$ZodIPv4Params): ZodIPv4 {
return core._ipv4(ZodIPv4, params);
}
// ZodIPv6
export interface ZodIPv6 extends ZodStringFormat<"ipv6"> {
_zod: core.$ZodIPv6Internals;
}
export const ZodIPv6: core.$constructor<ZodIPv6> = /*@__PURE__*/ core.$constructor("ZodIPv6", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodIPv6.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function ipv6(params?: string | core.$ZodIPv6Params): ZodIPv6 {
return core._ipv6(ZodIPv6, params);
}
// ZodCIDRv4
export interface ZodCIDRv4 extends ZodStringFormat<"cidrv4"> {
_zod: core.$ZodCIDRv4Internals;
}
export const ZodCIDRv4: core.$constructor<ZodCIDRv4> = /*@__PURE__*/ core.$constructor("ZodCIDRv4", (inst, def) => {
core.$ZodCIDRv4.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function cidrv4(params?: string | core.$ZodCIDRv4Params): ZodCIDRv4 {
return core._cidrv4(ZodCIDRv4, params);
}
// ZodCIDRv6
export interface ZodCIDRv6 extends ZodStringFormat<"cidrv6"> {
_zod: core.$ZodCIDRv6Internals;
}
export const ZodCIDRv6: core.$constructor<ZodCIDRv6> = /*@__PURE__*/ core.$constructor("ZodCIDRv6", (inst, def) => {
core.$ZodCIDRv6.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function cidrv6(params?: string | core.$ZodCIDRv6Params): ZodCIDRv6 {
return core._cidrv6(ZodCIDRv6, params);
}
// ZodBase64
export interface ZodBase64 extends ZodStringFormat<"base64"> {
_zod: core.$ZodBase64Internals;
}
export const ZodBase64: core.$constructor<ZodBase64> = /*@__PURE__*/ core.$constructor("ZodBase64", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodBase64.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function base64(params?: string | core.$ZodBase64Params): ZodBase64 {
return core._base64(ZodBase64, params);
}
// ZodBase64URL
export interface ZodBase64URL extends ZodStringFormat<"base64url"> {
_zod: core.$ZodBase64URLInternals;
}
export const ZodBase64URL: core.$constructor<ZodBase64URL> = /*@__PURE__*/ core.$constructor(
"ZodBase64URL",
(inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodBase64URL.init(inst, def);
ZodStringFormat.init(inst, def);
}
);
export function base64url(params?: string | core.$ZodBase64URLParams): ZodBase64URL {
return core._base64url(ZodBase64URL, params);
}
// ZodE164
export interface ZodE164 extends ZodStringFormat<"e164"> {
_zod: core.$ZodE164Internals;
}
export const ZodE164: core.$constructor<ZodE164> = /*@__PURE__*/ core.$constructor("ZodE164", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodE164.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function e164(params?: string | core.$ZodE164Params): ZodE164 {
return core._e164(ZodE164, params);
}
// ZodJWT
export interface ZodJWT extends ZodStringFormat<"jwt"> {
_zod: core.$ZodJWTInternals;
}
export const ZodJWT: core.$constructor<ZodJWT> = /*@__PURE__*/ core.$constructor("ZodJWT", (inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodJWT.init(inst, def);
ZodStringFormat.init(inst, def);
});
export function jwt(params?: string | core.$ZodJWTParams): ZodJWT {
return core._jwt(ZodJWT, params);
}
// ZodCustomStringFormat
export interface ZodCustomStringFormat<Format extends string = string>
extends ZodStringFormat<Format>,
core.$ZodCustomStringFormat<Format> {
_zod: core.$ZodCustomStringFormatInternals<Format>;
}
export const ZodCustomStringFormat: core.$constructor<ZodCustomStringFormat> = /*@__PURE__*/ core.$constructor(
"ZodCustomStringFormat",
(inst, def) => {
// ZodStringFormat.init(inst, def);
core.$ZodCustomStringFormat.init(inst, def);
ZodStringFormat.init(inst, def);
}
);
export function stringFormat<Format extends string>(
format: Format,
fnOrRegex: ((arg: string) => util.MaybeAsync<unknown>) | RegExp,
_params: string | core.$ZodStringFormatParams = {}
): ZodCustomStringFormat<Format> {
return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params) as any;
}
// ZodNumber
export interface _ZodNumber<Internals extends core.$ZodNumberInternals = core.$ZodNumberInternals>
extends _ZodType<Internals> {
gt(value: number, params?: string | core.$ZodCheckGreaterThanParams): this;
/** Identical to .min() */
gte(value: number, params?: string | core.$ZodCheckGreaterThanParams): this;
min(value: number, params?: string | core.$ZodCheckGreaterThanParams): this;
lt(value: number, params?: string | core.$ZodCheckLessThanParams): this;
/** Identical to .max() */
lte(value: number, params?: string | core.$ZodCheckLessThanParams): this;
max(value: number, params?: string | core.$ZodCheckLessThanParams): this;
/** Consider `z.int()` instead. This API is considered *legacy*; it will never be removed but a better alternative exists. */
int(params?: string | core.$ZodCheckNumberFormatParams): this;
/** @deprecated This is now identical to `.int()`. Only numbers in the safe integer range are accepted. */
safe(params?: string | core.$ZodCheckNumberFormatParams): this;
positive(params?: string | core.$ZodCheckGreaterThanParams): this;
nonnegative(params?: string | core.$ZodCheckGreaterThanParams): this;
negative(params?: string | core.$ZodCheckLessThanParams): this;
nonpositive(params?: string | core.$ZodCheckLessThanParams): this;
multipleOf(value: number, params?: string | core.$ZodCheckMultipleOfParams): this;
/** @deprecated Use `.multipleOf()` instead. */
step(value: number, params?: string | core.$ZodCheckMultipleOfParams): this;
/** @deprecated In v4 and later, z.number() does not allow infinite values by default. This is a no-op. */
finite(params?: unknown): this;
minValue: number | null;
maxValue: number | null;
/** @deprecated Check the `format` property instead. */
isInt: boolean;
/** @deprecated Number schemas no longer accept infinite values, so this always returns `true`. */
isFinite: boolean;
format: string | null;
}
export interface ZodNumber extends _ZodNumber<core.$ZodNumberInternals<number>> {}
export const ZodNumber: core.$constructor<ZodNumber> = /*@__PURE__*/ core.$constructor("ZodNumber", (inst, def) => {
core.$ZodNumber.init(inst, def);
ZodType.init(inst, def);
inst.gt = (value, params) => inst.check(checks.gt(value, params));
inst.gte = (value, params) => inst.check(checks.gte(value, params));
inst.min = (value, params) => inst.check(checks.gte(value, params));
inst.lt = (value, params) => inst.check(checks.lt(value, params));
inst.lte = (value, params) => inst.check(checks.lte(value, params));
inst.max = (value, params) => inst.check(checks.lte(value, params));
inst.int = (params) => inst.check(int(params));
inst.safe = (params) => inst.check(int(params));
inst.positive = (params) => inst.check(checks.gt(0, params));
inst.nonnegative = (params) => inst.check(checks.gte(0, params));
inst.negative = (params) => inst.check(checks.lt(0, params));
inst.nonpositive = (params) => inst.check(checks.lte(0, params));
inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));
inst.step = (value, params) => inst.check(checks.multipleOf(value, params));
// inst.finite = (params) => inst.check(core.finite(params));
inst.finite = () => inst;
const bag = inst._zod.bag;
inst.minValue =
Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;
inst.maxValue =
Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;
inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5);
inst.isFinite = true;
inst.format = bag.format ?? null;
});
export function number(params?: string | core.$ZodNumberParams): ZodNumber {
return core._number(ZodNumber, params) as any;
}
// ZodNumberFormat
export interface ZodNumberFormat extends ZodNumber {
_zod: core.$ZodNumberFormatInternals;
}
export const ZodNumberFormat: core.$constructor<ZodNumberFormat> = /*@__PURE__*/ core.$constructor(
"ZodNumberFormat",
(inst, def) => {
core.$ZodNumberFormat.init(inst, def);
ZodNumber.init(inst, def);
}
);
// int
export interface ZodInt extends ZodNumberFormat {}
export function int(params?: string | core.$ZodCheckNumberFormatParams): ZodInt {
return core._int(ZodNumberFormat, params);
}
// float32
export interface ZodFloat32 extends ZodNumberFormat {}
export function float32(params?: string | core.$ZodCheckNumberFormatParams): ZodFloat32 {
return core._float32(ZodNumberFormat, params);
}
// float64
export interface ZodFloat64 extends ZodNumberFormat {}
export function float64(params?: string | core.$ZodCheckNumberFormatParams): ZodFloat64 {
return core._float64(ZodNumberFormat, params);
}
// int32
export interface ZodInt32 extends ZodNumberFormat {}
export function int32(params?: string | core.$ZodCheckNumberFormatParams): ZodInt32 {
return core._int32(ZodNumberFormat, params);
}
// uint32
export interface ZodUInt32 extends ZodNumberFormat {}
export function uint32(params?: string | core.$ZodCheckNumberFormatParams): ZodUInt32 {
return core._uint32(ZodNumberFormat, params);
}
// boolean
export interface _ZodBoolean<T extends core.$ZodBooleanInternals = core.$ZodBooleanInternals> extends _ZodType<T> {}
export interface ZodBoolean extends _ZodBoolean<core.$ZodBooleanInternals<boolean>> {}
export const ZodBoolean: core.$constructor<ZodBoolean> = /*@__PURE__*/ core.$constructor("ZodBoolean", (inst, def) => {
core.$ZodBoolean.init(inst, def);
ZodType.init(inst, def);
});
export function boolean(params?: string | core.$ZodBooleanParams): ZodBoolean {
return core._boolean(ZodBoolean, params) as any;
}
// bigint
export interface _ZodBigInt<T extends core.$ZodBigIntInternals = core.$ZodBigIntInternals> extends _ZodType<T> {
gte(value: bigint, params?: string | core.$ZodCheckGreaterThanParams): this;
/** Alias of `.gte()` */
min(value: bigint, params?: string | core.$ZodCheckGreaterThanParams): this;
gt(value: bigint, params?: string | core.$ZodCheckGreaterThanParams): this;
/** Alias of `.lte()` */
lte(value: bigint, params?: string | core.$ZodCheckLessThanParams): this;
max(value: bigint, params?: string | core.$ZodCheckLessThanParams): this;
lt(value: bigint, params?: string | core.$ZodCheckLessThanParams): this;
positive(params?: string | core.$ZodCheckGreaterThanParams): this;
negative(params?: string | core.$ZodCheckLessThanParams): this;
nonpositive(params?: string | core.$ZodCheckLessThanParams): this;
nonnegative(params?: string | core.$ZodCheckGreaterThanParams): this;
multipleOf(value: bigint, params?: string | core.$ZodCheckMultipleOfParams): this;
minValue: bigint | null;
maxValue: bigint | null;
format: string | null;
}
export interface ZodBigInt extends _ZodBigInt<core.$ZodBigIntInternals<bigint>> {}
export const ZodBigInt: core.$constructor<ZodBigInt> = /*@__PURE__*/ core.$constructor("ZodBigInt", (inst, def) => {
core.$ZodBigInt.init(inst, def);
ZodType.init(inst, def);
inst.gte = (value, params) => inst.check(checks.gte(value, params));
inst.min = (value, params) => inst.check(checks.gte(value, params));
inst.gt = (value, params) => inst.check(checks.gt(value, params));
inst.gte = (value, params) => inst.check(checks.gte(value, params));
inst.min = (value, params) => inst.check(checks.gte(value, params));
inst.lt = (value, params) => inst.check(checks.lt(value, params));
inst.lte = (value, params) => inst.check(checks.lte(value, params));
inst.max = (value, params) => inst.check(checks.lte(value, params));
inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));
inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));
inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));
inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));
inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));
const bag = inst._zod.bag;
inst.minValue = bag.minimum ?? null;
inst.maxValue = bag.maximum ?? null;
inst.format = bag.format ?? null;
});
export function bigint(params?: string | core.$ZodBigIntParams): ZodBigInt {
return core._bigint(ZodBigInt, params) as any;
}
// bigint formats
// ZodBigIntFormat
export interface ZodBigIntFormat extends ZodBigInt {
_zod: core.$ZodBigIntFormatInternals;
}
export const ZodBigIntFormat: core.$constructor<ZodBigIntFormat> = /*@__PURE__*/ core.$constructor(
"ZodBigIntFormat",
(inst, def) => {
core.$ZodBigIntFormat.init(inst, def);
ZodBigInt.init(inst, def);
}
);
// int64
export function int64(params?: string | core.$ZodBigIntFormatParams): ZodBigIntFormat {
return core._int64(ZodBigIntFormat, params);
}
// uint64
export function uint64(params?: string | core.$ZodBigIntFormatParams): ZodBigIntFormat {
return core._uint64(ZodBigIntFormat, params);
}
// symbol
export interface ZodSymbol extends _ZodType<core.$ZodSymbolInternals> {}
export const ZodSymbol: core.$constructor<ZodSymbol> = /*@__PURE__*/ core.$constructor("ZodSymbol", (inst, def) => {
core.$ZodSymbol.init(inst, def);
ZodType.init(inst, def);
});
export function symbol(params?: string | core.$ZodSymbolParams): ZodSymbol {
return core._symbol(ZodSymbol, params);
}
// ZodUndefined
export interface ZodUndefined extends _ZodType<core.$ZodUndefinedInternals> {}
export const ZodUndefined: core.$constructor<ZodUndefined> = /*@__PURE__*/ core.$constructor(
"ZodUndefined",
(inst, def) => {
core.$ZodUndefined.init(inst, def);
ZodType.init(inst, def);
}
);
function _undefined(params?: string | core.$ZodUndefinedParams): ZodUndefined {
return core._undefined(ZodUndefined, params);
}
export { _undefined as undefined };
// ZodNull
export interface ZodNull extends _ZodType<core.$ZodNullInternals> {}
export const ZodNull: core.$constructor<ZodNull> = /*@__PURE__*/ core.$constructor("ZodNull", (inst, def) => {
core.$ZodNull.init(inst, def);
ZodType.init(inst, def);
});
function _null(params?: string | core.$ZodNullParams): ZodNull {
return core._null(ZodNull, params);
}
export { _null as null };
// ZodAny
export interface ZodAny extends _ZodType<core.$ZodAnyInternals> {}
export const ZodAny: core.$constructor<ZodAny> = /*@__PURE__*/ core.$constructor("ZodAny", (inst, def) => {
core.$ZodAny.init(inst, def);
ZodType.init(inst, def);
});
export function any(): ZodAny {
return core._any(ZodAny);
}
// ZodUnknown
export interface ZodUnknown extends _ZodType<core.$ZodUnknownInternals> {}
export const ZodUnknown: core.$constructor<ZodUnknown> = /*@__PURE__*/ core.$constructor("ZodUnknown", (inst, def) => {
core.$ZodUnknown.init(inst, def);
ZodType.init(inst, def);
});
export function unknown(): ZodUnknown {
return core._unknown(ZodUnknown);
}
// ZodNever
export interface ZodNever extends _ZodType<core.$ZodNeverInternals> {}
export const ZodNever: core.$constructor<ZodNever> = /*@__PURE__*/ core.$constructor("ZodNever", (inst, def) => {
core.$ZodNever.init(inst, def);
ZodType.init(inst, def);
});
export function never(params?: string | core.$ZodNeverParams): ZodNever {
return core._never(ZodNever, params);
}
// ZodVoid
export interface ZodVoid extends _ZodType<core.$ZodVoidInternals> {}
export const ZodVoid: core.$constructor<ZodVoid> = /*@__PURE__*/ core.$constructor("ZodVoid", (inst, def) => {
core.$ZodVoid.init(inst, def);
ZodType.init(inst, def);
});
function _void(params?: string | core.$ZodVoidParams): ZodVoid {
return core._void(ZodVoid, params);
}
export { _void as void };
// ZodDate
export interface _ZodDate<T extends core.$ZodDateInternals = core.$ZodDateInternals> extends _ZodType<T> {
min(value: number | Date, params?: string | core.$ZodCheckGreaterThanParams): this;
max(value: number | Date, params?: string | core.$ZodCheckLessThanParams): this;
/** @deprecated Not recommended. */
minDate: Date | null;
/** @deprecated Not recommended. */
maxDate: Date | null;
}
export interface ZodDate extends _ZodDate<core.$ZodDateInternals<Date>> {}
export const ZodDate: core.$constructor<ZodDate> = /*@__PURE__*/ core.$constructor("ZodDate", (inst, def) => {
core.$ZodDate.init(inst, def);
ZodType.init(inst, def);
inst.min = (value, params) => inst.check(checks.gte(value, params));
inst.max = (value, params) => inst.check(checks.lte(value, params));
const c = inst._zod.bag;
inst.minDate = c.minimum ? new Date(c.minimum) : null;
inst.maxDate = c.maximum ? new Date(c.maximum) : null;
});
export function date(params?: string | core.$ZodDateParams): ZodDate {
return core._date(ZodDate, params);
}
// ZodArray
export interface ZodArray<T extends core.SomeType = core.$ZodType>
extends _ZodType<core.$ZodArrayInternals<T>>,
core.$ZodArray<T> {
element: T;
min(minLength: number, params?: string | core.$ZodCheckMinLengthParams): this;
nonempty(params?: string | core.$ZodCheckMinLengthParams): this;
max(maxLength: number, params?: string | core.$ZodCheckMaxLengthParams): this;
length(len: number, params?: string | core.$ZodCheckLengthEqualsParams): this;
unwrap(): T;
}
export const ZodArray: core.$constructor<ZodArray> = /*@__PURE__*/ core.$constructor("ZodArray", (inst, def) => {
core.$ZodArray.init(inst, def);
ZodType.init(inst, def);
inst.element = def.element as any;
inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));
inst.nonempty = (params) => inst.check(checks.minLength(1, params));
inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));
inst.length = (len, params) => inst.check(checks.length(len, params));
inst.unwrap = () => inst.element;
});
export function array<T extends core.SomeType>(element: T, params?: string | core.$ZodArrayParams): ZodArray<T> {
return core._array(ZodArray, element as any, params) as any;
}
// .keyof
export function keyof<T extends ZodObject>(schema: T): ZodLiteral<Exclude<keyof T["_zod"]["output"], symbol>> {
const shape = schema._zod.def.shape;
return literal(Object.keys(shape)) as any;
}
// ZodObject
export interface ZodObject<
/** @ts-ignore Cast variance */
out Shape extends core.$ZodShape = core.$ZodLooseShape,
out Config extends core.$ZodObjectConfig = core.$strip,
> extends _ZodType<core.$ZodObjectInternals<Shape, Config>>,
core.$ZodObject<Shape, Config> {
shape: Shape;
keyof(): ZodEnum<util.ToEnum<keyof Shape & string>>;
/** Define a schema to validate all unrecognized keys. This overrides the existing strict/loose behavior. */
catchall<T extends core.SomeType>(schema: T): ZodObject<Shape, core.$catchall<T>>;
/** @deprecated Use `z.looseObject()` or `.loose()` instead. */
passthrough(): ZodObject<Shape, core.$loose>;
/** Consider `z.looseObject(A.shape)` instead */
loose(): ZodObject<Shape, core.$loose>;
/** Consider `z.strictObject(A.shape)` instead */
strict(): ZodObject<Shape, core.$strict>;
/** This is the default behavior. This method call is likely unnecessary. */
strip(): ZodObject<Shape, core.$strip>;
extend<U extends core.$ZodLooseShape & Partial<Record<keyof Shape, core.SomeType>>>(
shape: U
): ZodObject<util.Extend<Shape, U>, Config>;
/**
* @deprecated Use [`A.extend(B.shape)`](https://zod.dev/api?id=extend) instead.
*/
merge<U extends ZodObject>(other: U): ZodObject<util.Extend<Shape, U["shape"]>, U["_zod"]["config"]>;
pick<M extends util.Mask<keyof Shape>>(
mask: M
): ZodObject<util.Flatten<Pick<Shape, Extract<keyof Shape, keyof M>>>, Config>;
omit<M extends util.Mask<keyof Shape>>(
mask: M
): ZodObject<util.Flatten<Omit<Shape, Extract<keyof Shape, keyof M>>>, Config>;
partial(): ZodObject<
{
[k in keyof Shape]: ZodOptional<Shape[k]>;
},
Config
>;
partial<M extends util.Mask<keyof Shape>>(
mask: M
): ZodObject<
{
[k in keyof Shape]: k extends keyof M
? // Shape[k] extends OptionalInSchema
// ? Shape[k]
// :
ZodOptional<Shape[k]>
: Shape[k];
},
Config
>;
// required
required(): ZodObject<
{
[k in keyof Shape]: ZodNonOptional<Shape[k]>;
},
Config
>;
required<M extends util.Mask<keyof Shape>>(
mask: M
): ZodObject<
{
[k in keyof Shape]: k extends keyof M ? ZodNonOptional<Shape[k]> : Shape[k];
},
Config
>;
}
export const ZodObject: core.$constructor<ZodObject> = /*@__PURE__*/ core.$constructor("ZodObject", (inst, def) => {
core.$ZodObject.init(inst, def);
ZodType.init(inst, def);
util.defineLazy(inst, "shape", () => def.shape);
inst.keyof = () => _enum(Object.keys(inst._zod.def.shape)) as any;
inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall as any as core.$ZodType }) as any;
inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });
// inst.nonstrict = () => inst.clone({ ...inst._zod.def, catchall: api.unknown() });
inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });
inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });
inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });
inst.extend = (incoming: any) => {
return util.extend(inst, incoming);
};
inst.merge = (other) => util.merge(inst, other);
inst.pick = (mask) => util.pick(inst, mask);
inst.omit = (mask) => util.omit(inst, mask);
inst.partial = (...args: any[]) => util.partial(ZodOptional, inst, args[0] as object);
inst.required = (...args: any[]) => util.required(ZodNonOptional, inst, args[0] as object);
});
export function object<T extends core.$ZodLooseShape = Partial<Record<never, core.SomeType>>>(
shape?: T,
params?: string | core.$ZodObjectParams
): ZodObject<util.Writeable<T>, core.$strip> {
const def: core.$ZodObjectDef = {
type: "object",
get shape() {
util.assignProp(this, "shape", { ...shape });
return this.shape;
},
...util.normalizeParams(params),
};
return new ZodObject(def) as any;
}
// strictObject
export function strictObject<T extends core.$ZodLooseShape>(
shape: T,
params?: string | core.$ZodObjectParams
): ZodObject<T, core.$strict> {
return new ZodObject({
type: "object",
get shape() {
util.assignProp(this, "shape", { ...shape });
return this.shape;
},
catchall: never(),
...util.normalizeParams(params),
}) as any;
}
// looseObject
export function looseObject<T extends core.$ZodLooseShape>(
shape: T,
params?: string | core.$ZodObjectParams
): ZodObject<T, core.$loose> {
return new ZodObject({
type: "object",
get shape() {
util.assignProp(this, "shape", { ...shape });
return this.shape;
},
catchall: unknown(),
...util.normalizeParams(params),
}) as any;
}
// ZodUnion
export interface ZodUnion<T extends readonly core.SomeType[] = readonly core.$ZodType[]>
extends _ZodType<core.$ZodUnionInternals<T>>,
core.$ZodUnion<T> {
options: T;
}
export const ZodUnion: core.$constructor<ZodUnion> = /*@__PURE__*/ core.$constructor("ZodUnion", (inst, def) => {
core.$ZodUnion.init(inst, def);
ZodType.init(inst, def);
inst.options = def.options;
});
export function union<const T extends readonly core.SomeType[]>(
options: T,
params?: string | core.$ZodUnionParams
): ZodUnion<T> {
return new ZodUnion({
type: "union",
options: options as any as core.$ZodType[],
...util.normalizeParams(params),
}) as any;
}
// ZodDiscriminatedUnion
export interface ZodDiscriminatedUnion<Options extends readonly core.SomeType[] = readonly core.$ZodType[]>
extends ZodUnion<Options>,
core.$ZodDiscriminatedUnion<Options> {
_zod: core.$ZodDiscriminatedUnionInternals<Options>;
}
export const ZodDiscriminatedUnion: core.$constructor<ZodDiscriminatedUnion> = /*@__PURE__*/ core.$constructor(
"ZodDiscriminatedUnion",
(inst, def) => {
ZodUnion.init(inst, def);
core.$ZodDiscriminatedUnion.init(inst, def);
}
);
export function discriminatedUnion<
Types extends readonly [core.$ZodTypeDiscriminable, ...core.$ZodTypeDiscriminable[]],
>(
discriminator: string,
options: Types,
params?: string | core.$ZodDiscriminatedUnionParams
): ZodDiscriminatedUnion<Types> {
// const [options, params] = args;
return new ZodDiscriminatedUnion({
type: "union",
options,
discriminator,
...util.normalizeParams(params),
}) as any;
}
// ZodIntersection
export interface ZodIntersection<A extends core.SomeType = core.$ZodType, B extends core.SomeType = core.$ZodType>
extends _ZodType<core.$ZodIntersectionInternals<A, B>>,
core.$ZodIntersection<A, B> {}
export const ZodIntersection: core.$constructor<ZodIntersection> = /*@__PURE__*/ core.$constructor(
"ZodIntersection",
(inst, def) => {
core.$ZodIntersection.init(inst, def);
ZodType.init(inst, def);
}
);
export function intersection<T extends core.SomeType, U extends core.SomeType>(
left: T,
right: U
): ZodIntersection<T, U> {
return new ZodIntersection({
type: "intersection",
left: left as any as core.$ZodType,
right: right as any as core.$ZodType,
}) as any;
}
// ZodTuple
export interface ZodTuple<
T extends util.TupleItems = readonly core.$ZodType[],
Rest extends core.SomeType | null = core.$ZodType | null,
> extends _ZodType<core.$ZodTupleInternals<T, Rest>>,
core.$ZodTuple<T, Rest> {
rest<Rest extends core.SomeType = core.$ZodType>(rest: Rest): ZodTuple<T, Rest>;
}
export const ZodTuple: core.$constructor<ZodTuple> = /*@__PURE__*/ core.$constructor("ZodTuple", (inst, def) => {
core.$ZodTuple.init(inst, def);
ZodType.init(inst, def);
inst.rest = (rest) =>
inst.clone({
...inst._zod.def,
rest: rest as any as core.$ZodType,
}) as any;
});
export function tuple<T extends readonly [core.SomeType, ...core.SomeType[]]>(
items: T,
params?: string | core.$ZodTupleParams
): ZodTuple<T, null>;
export function tuple<T extends readonly [core.SomeType, ...core.SomeType[]], Rest extends core.SomeType>(
items: T,
rest: Rest,
params?: string | core.$ZodTupleParams
): ZodTuple<T, Rest>;
export function tuple(items: [], params?: string | core.$ZodTupleParams): ZodTuple<[], null>;
export function tuple(
items: core.SomeType[],
_paramsOrRest?: string | core.$ZodTupleParams | core.SomeType,
_params?: string | core.$ZodTupleParams
) {
const hasRest = _paramsOrRest instanceof core.$ZodType;
const params = hasRest ? _params : _paramsOrRest;
const rest = hasRest ? _paramsOrRest : null;
return new ZodTuple({
type: "tuple",
items: items as any as core.$ZodType[],
rest,
...util.normalizeParams(params),
});
}
// ZodRecord
export interface ZodRecord<
Key extends core.$ZodRecordKey = core.$ZodRecordKey,
Value extends core.SomeType = core.$ZodType,
> extends _ZodType<core.$ZodRecordInternals<Key, Value>>,
core.$ZodRecord<Key, Value> {
keyType: Key;
valueType: Value;
}
export const ZodRecord: core.$constructor<ZodRecord> = /*@__PURE__*/ core.$constructor("ZodRecord", (inst, def) => {
core.$ZodRecord.init(inst, def);
ZodType.init(inst, def);
inst.keyType = def.keyType;
inst.valueType = def.valueType;
});
export function record<Key extends core.$ZodRecordKey, Value extends core.SomeType>(
keyType: Key,
valueType: Value,
params?: string | core