zod
Version:
TypeScript-first schema declaration and validation library with static type inference
1,629 lines (1,498 loc) • 49.2 kB
text/typescript
import * as checks from "./checks.js";
import type * as core from "./core.js";
import type * as errors from "./errors.js";
import * as schemas from "./schemas.js";
import * as util from "./util.js";
export type Params<
T extends schemas.$ZodType | checks.$ZodCheck,
IssueTypes extends errors.$ZodIssueBase,
OmitKeys extends keyof T["_zod"]["def"] = never,
> = util.Flatten<
Partial<
util.EmptyToNever<
Omit<T["_zod"]["def"], OmitKeys> &
([IssueTypes] extends [never]
? {} // unknown
: {
error?: string | errors.$ZodErrorMap<IssueTypes> | undefined;
/** @deprecated This parameter is deprecated. Use `error` instead. */
message?: string | undefined; // supported in Zod 3
})
>
>
>;
export type TypeParams<
T extends schemas.$ZodType = schemas.$ZodType & { _isst: never },
AlsoOmit extends Exclude<keyof T["_zod"]["def"], "type" | "checks" | "error"> = never,
> = Params<T, NonNullable<T["_zod"]["isst"]>, "type" | "checks" | "error" | AlsoOmit>;
// strips types that are not exposed in the public factory
// incl. `error`, `check`
export type CheckParams<
T extends checks.$ZodCheck = checks.$ZodCheck, // & { _issc: never },
AlsoOmit extends Exclude<keyof T["_zod"]["def"], "check" | "error"> = never,
> = Params<T, NonNullable<T["_zod"]["issc"]>, "check" | "error" | AlsoOmit>;
// strips types that are not exposed in the public factory
// incl. `type`, `checks`, `error`, `check`, `format`
export type StringFormatParams<
T extends schemas.$ZodStringFormat = schemas.$ZodStringFormat,
AlsoOmit extends Exclude<keyof T["_zod"]["def"], "type" | "coerce" | "checks" | "error" | "check" | "format"> = never,
> = Params<
T,
NonNullable<T["_zod"]["isst"] | T["_zod"]["issc"]>,
"type" | "coerce" | "checks" | "error" | "check" | "format" | AlsoOmit
>;
export type CheckStringFormatParams<
T extends schemas.$ZodStringFormat = schemas.$ZodStringFormat,
AlsoOmit extends Exclude<keyof T["_zod"]["def"], "type" | "coerce" | "checks" | "error" | "check" | "format"> = never,
> = Params<T, NonNullable<T["_zod"]["issc"]>, "type" | "coerce" | "checks" | "error" | "check" | "format" | AlsoOmit>;
export type CheckTypeParams<
T extends schemas.$ZodType & checks.$ZodCheck = schemas.$ZodType & checks.$ZodCheck,
AlsoOmit extends Exclude<keyof T["_zod"]["def"], "type" | "checks" | "error" | "check"> = never,
> = Params<T, NonNullable<T["_zod"]["isst"] | T["_zod"]["issc"]>, "type" | "checks" | "error" | "check" | AlsoOmit>;
// String
export type $ZodStringParams = TypeParams<schemas.$ZodString<string>, "coerce">;
export function _string<T extends schemas.$ZodString>(
Class: util.SchemaClass<T>,
params?: string | $ZodStringParams
): T {
return new Class({
type: "string",
...util.normalizeParams(params),
});
}
export function _coercedString<T extends schemas.$ZodString>(
Class: util.SchemaClass<T>,
params?: string | $ZodStringParams
): T {
return new Class({
type: "string",
coerce: true,
...util.normalizeParams(params),
});
}
export type $ZodStringFormatParams = CheckTypeParams<
schemas.$ZodStringFormat,
"format" | "coerce" | "when" | "pattern"
>;
export type $ZodCheckStringFormatParams = CheckParams<checks.$ZodCheckStringFormat, "format">;
// custom format
// Email
export type $ZodEmailParams = StringFormatParams<schemas.$ZodEmail, "when">;
export type $ZodCheckEmailParams = CheckStringFormatParams<schemas.$ZodEmail, "when">;
export function _email<T extends schemas.$ZodEmail>(
Class: util.SchemaClass<T>,
params?: string | $ZodEmailParams | $ZodCheckEmailParams
): T {
return new Class({
type: "string",
format: "email",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// GUID
export type $ZodGUIDParams = StringFormatParams<schemas.$ZodGUID, "pattern" | "when">;
export type $ZodCheckGUIDParams = CheckStringFormatParams<schemas.$ZodGUID, "pattern" | "when">;
export function _guid<T extends schemas.$ZodGUID>(
Class: util.SchemaClass<T>,
params?: string | $ZodGUIDParams | $ZodCheckGUIDParams
): T {
return new Class({
type: "string",
format: "guid",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// UUID
export type $ZodUUIDParams = StringFormatParams<schemas.$ZodUUID, "pattern" | "when">;
export type $ZodCheckUUIDParams = CheckStringFormatParams<schemas.$ZodUUID, "pattern" | "when">;
export function _uuid<T extends schemas.$ZodUUID>(
Class: util.SchemaClass<T>,
params?: string | $ZodUUIDParams | $ZodCheckUUIDParams
): T {
return new Class({
type: "string",
format: "uuid",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// UUIDv4
export type $ZodUUIDv4Params = StringFormatParams<schemas.$ZodUUID, "pattern" | "when">;
export type $ZodCheckUUIDv4Params = CheckStringFormatParams<schemas.$ZodUUID, "pattern" | "when">;
export function _uuidv4<T extends schemas.$ZodUUID>(
Class: util.SchemaClass<T>,
params?: string | $ZodUUIDv4Params | $ZodCheckUUIDv4Params
): T {
return new Class({
type: "string",
format: "uuid",
check: "string_format",
abort: false,
version: "v4",
...util.normalizeParams(params),
});
}
// UUIDv6
export type $ZodUUIDv6Params = StringFormatParams<schemas.$ZodUUID, "pattern" | "when">;
export type $ZodCheckUUIDv6Params = CheckStringFormatParams<schemas.$ZodUUID, "pattern" | "when">;
export function _uuidv6<T extends schemas.$ZodUUID>(
Class: util.SchemaClass<T>,
params?: string | $ZodUUIDv6Params | $ZodCheckUUIDv6Params
): T {
return new Class({
type: "string",
format: "uuid",
check: "string_format",
abort: false,
version: "v6",
...util.normalizeParams(params),
});
}
// UUIDv7
export type $ZodUUIDv7Params = StringFormatParams<schemas.$ZodUUID, "pattern" | "when">;
export type $ZodCheckUUIDv7Params = CheckStringFormatParams<schemas.$ZodUUID, "pattern" | "when">;
export function _uuidv7<T extends schemas.$ZodUUID>(
Class: util.SchemaClass<T>,
params?: string | $ZodUUIDv7Params | $ZodCheckUUIDv7Params
): T {
return new Class({
type: "string",
format: "uuid",
check: "string_format",
abort: false,
version: "v7",
...util.normalizeParams(params),
});
}
// URL
export type $ZodURLParams = StringFormatParams<schemas.$ZodURL, "when">;
export type $ZodCheckURLParams = CheckStringFormatParams<schemas.$ZodURL, "when">;
export function _url<T extends schemas.$ZodURL>(
Class: util.SchemaClass<T>,
params?: string | $ZodURLParams | $ZodCheckURLParams
): T {
return new Class({
type: "string",
format: "url",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// Emoji
export type $ZodEmojiParams = StringFormatParams<schemas.$ZodEmoji, "when">;
export type $ZodCheckEmojiParams = CheckStringFormatParams<schemas.$ZodEmoji, "when">;
export function _emoji<T extends schemas.$ZodEmoji>(
Class: util.SchemaClass<T>,
params?: string | $ZodEmojiParams | $ZodCheckEmojiParams
): T {
return new Class({
type: "string",
format: "emoji",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// NanoID
export type $ZodNanoIDParams = StringFormatParams<schemas.$ZodNanoID, "when">;
export type $ZodCheckNanoIDParams = CheckStringFormatParams<schemas.$ZodNanoID, "when">;
export function _nanoid<T extends schemas.$ZodNanoID>(
Class: util.SchemaClass<T>,
params?: string | $ZodNanoIDParams | $ZodCheckNanoIDParams
): T {
return new Class({
type: "string",
format: "nanoid",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// CUID
export type $ZodCUIDParams = StringFormatParams<schemas.$ZodCUID, "when">;
export type $ZodCheckCUIDParams = CheckStringFormatParams<schemas.$ZodCUID, "when">;
export function _cuid<T extends schemas.$ZodCUID>(
Class: util.SchemaClass<T>,
params?: string | $ZodCUIDParams | $ZodCheckCUIDParams
): T {
return new Class({
type: "string",
format: "cuid",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// CUID2
export type $ZodCUID2Params = StringFormatParams<schemas.$ZodCUID2, "when">;
export type $ZodCheckCUID2Params = CheckStringFormatParams<schemas.$ZodCUID2, "when">;
export function _cuid2<T extends schemas.$ZodCUID2>(
Class: util.SchemaClass<T>,
params?: string | $ZodCUID2Params | $ZodCheckCUID2Params
): T {
return new Class({
type: "string",
format: "cuid2",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// ULID
export type $ZodULIDParams = StringFormatParams<schemas.$ZodULID, "when">;
export type $ZodCheckULIDParams = CheckStringFormatParams<schemas.$ZodULID, "when">;
export function _ulid<T extends schemas.$ZodULID>(
Class: util.SchemaClass<T>,
params?: string | $ZodULIDParams | $ZodCheckULIDParams
): T {
return new Class({
type: "string",
format: "ulid",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// XID
export type $ZodXIDParams = StringFormatParams<schemas.$ZodXID, "when">;
export type $ZodCheckXIDParams = CheckStringFormatParams<schemas.$ZodXID, "when">;
export function _xid<T extends schemas.$ZodXID>(
Class: util.SchemaClass<T>,
params?: string | $ZodXIDParams | $ZodCheckXIDParams
): T {
return new Class({
type: "string",
format: "xid",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// KSUID
export type $ZodKSUIDParams = StringFormatParams<schemas.$ZodKSUID, "when">;
export type $ZodCheckKSUIDParams = CheckStringFormatParams<schemas.$ZodKSUID, "when">;
export function _ksuid<T extends schemas.$ZodKSUID>(
Class: util.SchemaClass<T>,
params?: string | $ZodKSUIDParams | $ZodCheckKSUIDParams
): T {
return new Class({
type: "string",
format: "ksuid",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// IPv4
export type $ZodIPv4Params = StringFormatParams<schemas.$ZodIPv4, "pattern" | "when">;
export type $ZodCheckIPv4Params = CheckStringFormatParams<schemas.$ZodIPv4, "pattern" | "when">;
export function _ipv4<T extends schemas.$ZodIPv4>(
Class: util.SchemaClass<T>,
params?: string | $ZodIPv4Params | $ZodCheckIPv4Params
): T {
return new Class({
type: "string",
format: "ipv4",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// IPv6
export type $ZodIPv6Params = StringFormatParams<schemas.$ZodIPv6, "pattern" | "when">;
export type $ZodCheckIPv6Params = CheckStringFormatParams<schemas.$ZodIPv6, "pattern" | "when">;
export function _ipv6<T extends schemas.$ZodIPv6>(
Class: util.SchemaClass<T>,
params?: string | $ZodIPv6Params | $ZodCheckIPv6Params
): T {
return new Class({
type: "string",
format: "ipv6",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// CIDRv4
export type $ZodCIDRv4Params = StringFormatParams<schemas.$ZodCIDRv4, "pattern" | "when">;
export type $ZodCheckCIDRv4Params = CheckStringFormatParams<schemas.$ZodCIDRv4, "pattern" | "when">;
export function _cidrv4<T extends schemas.$ZodCIDRv4>(
Class: util.SchemaClass<T>,
params?: string | $ZodCIDRv4Params | $ZodCheckCIDRv4Params
): T {
return new Class({
type: "string",
format: "cidrv4",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// CIDRv6
export type $ZodCIDRv6Params = StringFormatParams<schemas.$ZodCIDRv6, "pattern" | "when">;
export type $ZodCheckCIDRv6Params = CheckStringFormatParams<schemas.$ZodCIDRv6, "pattern" | "when">;
export function _cidrv6<T extends schemas.$ZodCIDRv6>(
Class: util.SchemaClass<T>,
params?: string | $ZodCIDRv6Params | $ZodCheckCIDRv6Params
): T {
return new Class({
type: "string",
format: "cidrv6",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// Base64
export type $ZodBase64Params = StringFormatParams<schemas.$ZodBase64, "pattern" | "when">;
export type $ZodCheckBase64Params = CheckStringFormatParams<schemas.$ZodBase64, "pattern" | "when">;
export function _base64<T extends schemas.$ZodBase64>(
Class: util.SchemaClass<T>,
params?: string | $ZodBase64Params | $ZodCheckBase64Params
): T {
return new Class({
type: "string",
format: "base64",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// base64url
export type $ZodBase64URLParams = StringFormatParams<schemas.$ZodBase64URL, "pattern" | "when">;
export type $ZodCheckBase64URLParams = CheckStringFormatParams<schemas.$ZodBase64URL, "pattern" | "when">;
export function _base64url<T extends schemas.$ZodBase64URL>(
Class: util.SchemaClass<T>,
params?: string | $ZodBase64URLParams | $ZodCheckBase64URLParams
): T {
return new Class({
type: "string",
format: "base64url",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// E164
export type $ZodE164Params = StringFormatParams<schemas.$ZodE164, "when">;
export type $ZodCheckE164Params = CheckStringFormatParams<schemas.$ZodE164, "when">;
export function _e164<T extends schemas.$ZodE164>(
Class: util.SchemaClass<T>,
params?: string | $ZodE164Params | $ZodCheckE164Params
): T {
return new Class({
type: "string",
format: "e164",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
// JWT
export type $ZodJWTParams = StringFormatParams<schemas.$ZodJWT, "pattern" | "when">;
export type $ZodCheckJWTParams = CheckStringFormatParams<schemas.$ZodJWT, "pattern" | "when">;
export function _jwt<T extends schemas.$ZodJWT>(
Class: util.SchemaClass<T>,
params?: string | $ZodJWTParams | $ZodCheckJWTParams
): T {
return new Class({
type: "string",
format: "jwt",
check: "string_format",
abort: false,
...util.normalizeParams(params),
});
}
export const TimePrecision = {
Any: null,
Minute: -1,
Second: 0,
Millisecond: 3,
Microsecond: 6,
} as const;
// ISODateTime
export type $ZodISODateTimeParams = StringFormatParams<schemas.$ZodISODateTime, "pattern" | "when">;
export type $ZodCheckISODateTimeParams = CheckStringFormatParams<schemas.$ZodISODateTime, "pattern" | "when">;
export function _isoDateTime<T extends schemas.$ZodISODateTime>(
Class: util.SchemaClass<T>,
params?: string | $ZodISODateTimeParams | $ZodCheckISODateTimeParams
): T {
return new Class({
type: "string",
format: "datetime",
check: "string_format",
offset: false,
local: false,
precision: null,
...util.normalizeParams(params),
});
}
// ISODate
export type $ZodISODateParams = StringFormatParams<schemas.$ZodISODate, "pattern" | "when">;
export type $ZodCheckISODateParams = CheckStringFormatParams<schemas.$ZodISODate, "pattern" | "when">;
export function _isoDate<T extends schemas.$ZodISODate>(
Class: util.SchemaClass<T>,
params?: string | $ZodISODateParams | $ZodCheckISODateParams
): T {
return new Class({
type: "string",
format: "date",
check: "string_format",
...util.normalizeParams(params),
});
}
// ISOTime
export type $ZodISOTimeParams = StringFormatParams<schemas.$ZodISOTime, "pattern" | "when">;
export type $ZodCheckISOTimeParams = CheckStringFormatParams<schemas.$ZodISOTime, "pattern" | "when">;
export function _isoTime<T extends schemas.$ZodISOTime>(
Class: util.SchemaClass<T>,
params?: string | $ZodISOTimeParams | $ZodCheckISOTimeParams
): T {
return new Class({
type: "string",
format: "time",
check: "string_format",
precision: null,
...util.normalizeParams(params),
});
}
// ISODuration
export type $ZodISODurationParams = StringFormatParams<schemas.$ZodISODuration, "when">;
export type $ZodCheckISODurationParams = CheckStringFormatParams<schemas.$ZodISODuration, "when">;
export function _isoDuration<T extends schemas.$ZodISODuration>(
Class: util.SchemaClass<T>,
params?: string | $ZodISODurationParams | $ZodCheckISODurationParams
): T {
return new Class({
type: "string",
format: "duration",
check: "string_format",
...util.normalizeParams(params),
});
}
// Number
export type $ZodNumberParams = TypeParams<schemas.$ZodNumber<number>, "coerce">;
export type $ZodNumberFormatParams = CheckTypeParams<schemas.$ZodNumberFormat, "format" | "coerce">;
export type $ZodCheckNumberFormatParams = CheckParams<checks.$ZodCheckNumberFormat, "format" | "when">;
export function _number<T extends schemas.$ZodNumber>(
Class: util.SchemaClass<T>,
params?: string | $ZodNumberParams
): T {
return new Class({
type: "number",
checks: [],
...util.normalizeParams(params),
});
}
export function _coercedNumber<T extends schemas.$ZodNumber>(
Class: util.SchemaClass<T>,
params?: string | $ZodNumberParams
): T {
return new Class({
type: "number",
coerce: true,
checks: [],
...util.normalizeParams(params),
});
}
export function _int<T extends schemas.$ZodNumberFormat>(
Class: util.SchemaClass<T>,
params?: string | $ZodCheckNumberFormatParams
): T {
return new Class({
type: "number",
check: "number_format",
abort: false,
format: "safeint",
...util.normalizeParams(params),
});
}
export function _float32<T extends schemas.$ZodNumberFormat>(
Class: util.SchemaClass<T>,
params?: string | $ZodCheckNumberFormatParams
): T {
return new Class({
type: "number",
check: "number_format",
abort: false,
format: "float32",
...util.normalizeParams(params),
});
}
export function _float64<T extends schemas.$ZodNumberFormat>(
Class: util.SchemaClass<T>,
params?: string | $ZodCheckNumberFormatParams
): T {
return new Class({
type: "number",
check: "number_format",
abort: false,
format: "float64",
...util.normalizeParams(params),
});
}
export function _int32<T extends schemas.$ZodNumberFormat>(
Class: util.SchemaClass<T>,
params?: string | $ZodCheckNumberFormatParams
): T {
return new Class({
type: "number",
check: "number_format",
abort: false,
format: "int32",
...util.normalizeParams(params),
});
}
export function _uint32<T extends schemas.$ZodNumberFormat>(
Class: util.SchemaClass<T>,
params?: string | $ZodCheckNumberFormatParams
): T {
return new Class({
type: "number",
check: "number_format",
abort: false,
format: "uint32",
...util.normalizeParams(params),
});
}
// Boolean
export type $ZodBooleanParams = TypeParams<schemas.$ZodBoolean<boolean>, "coerce">;
export function _boolean<T extends schemas.$ZodBoolean>(
Class: util.SchemaClass<T>,
params?: string | $ZodBooleanParams
): T {
return new Class({
type: "boolean",
...util.normalizeParams(params),
});
}
export function _coercedBoolean<T extends schemas.$ZodBoolean>(
Class: util.SchemaClass<T>,
params?: string | $ZodBooleanParams
): T {
return new Class({
type: "boolean",
coerce: true,
...util.normalizeParams(params),
});
}
// BigInt
export type $ZodBigIntParams = TypeParams<schemas.$ZodBigInt<bigint>>;
export type $ZodBigIntFormatParams = CheckTypeParams<schemas.$ZodBigIntFormat, "format" | "coerce">;
export type $ZodCheckBigIntFormatParams = CheckParams<checks.$ZodCheckBigIntFormat, "format" | "when">;
export function _bigint<T extends schemas.$ZodBigInt>(
Class: util.SchemaClass<T>,
params?: string | $ZodBigIntParams
): T {
return new Class({
type: "bigint",
...util.normalizeParams(params),
});
}
export function _coercedBigint<T extends schemas.$ZodBigInt>(
Class: util.SchemaClass<T>,
params?: string | $ZodBigIntParams
): T {
return new Class({
type: "bigint",
coerce: true,
...util.normalizeParams(params),
});
}
export function _int64<T extends schemas.$ZodBigIntFormat>(
Class: util.SchemaClass<T>,
params?: string | $ZodBigIntFormatParams
): T {
return new Class({
type: "bigint",
check: "bigint_format",
abort: false,
format: "int64",
...util.normalizeParams(params),
});
}
export function _uint64<T extends schemas.$ZodBigIntFormat>(
Class: util.SchemaClass<T>,
params?: string | $ZodBigIntFormatParams
): T {
return new Class({
type: "bigint",
check: "bigint_format",
abort: false,
format: "uint64",
...util.normalizeParams(params),
});
}
// Symbol
export type $ZodSymbolParams = TypeParams<schemas.$ZodSymbol>;
export function _symbol<T extends schemas.$ZodSymbol>(
Class: util.SchemaClass<T>,
params?: string | $ZodSymbolParams
): T {
return new Class({
type: "symbol",
...util.normalizeParams(params),
});
}
// Undefined
export type $ZodUndefinedParams = TypeParams<schemas.$ZodUndefined>;
export function _undefined<T extends schemas.$ZodUndefined>(
Class: util.SchemaClass<T>,
params?: string | $ZodUndefinedParams
): T {
return new Class({
type: "undefined",
...util.normalizeParams(params),
});
}
// Null
export type $ZodNullParams = TypeParams<schemas.$ZodNull>;
export function _null<T extends schemas.$ZodNull>(Class: util.SchemaClass<T>, params?: string | $ZodNullParams): T {
return new Class({
type: "null",
...util.normalizeParams(params),
});
}
// Any
export type $ZodAnyParams = TypeParams<schemas.$ZodAny>;
export function _any<T extends schemas.$ZodAny>(Class: util.SchemaClass<T>): T {
return new Class({
type: "any",
});
}
// Unknown
export type $ZodUnknownParams = TypeParams<schemas.$ZodUnknown>;
export function _unknown<T extends schemas.$ZodUnknown>(Class: util.SchemaClass<T>): T {
return new Class({
type: "unknown",
});
}
// Never
export type $ZodNeverParams = TypeParams<schemas.$ZodNever>;
export function _never<T extends schemas.$ZodNever>(Class: util.SchemaClass<T>, params?: string | $ZodNeverParams): T {
return new Class({
type: "never",
...util.normalizeParams(params),
});
}
// Void
export type $ZodVoidParams = TypeParams<schemas.$ZodVoid>;
export function _void<T extends schemas.$ZodVoid>(Class: util.SchemaClass<T>, params?: string | $ZodVoidParams): T {
return new Class({
type: "void",
...util.normalizeParams(params),
});
}
// Date
export type $ZodDateParams = TypeParams<schemas.$ZodDate, "coerce">;
export function _date<T extends schemas.$ZodDate>(Class: util.SchemaClass<T>, params?: string | $ZodDateParams): T {
return new Class({
type: "date",
...util.normalizeParams(params),
});
}
export function _coercedDate<T extends schemas.$ZodDate>(
Class: util.SchemaClass<T>,
params?: string | $ZodDateParams
): T {
return new Class({
type: "date",
coerce: true,
...util.normalizeParams(params),
});
}
// NaN
export type $ZodNaNParams = TypeParams<schemas.$ZodNaN>;
export function _nan<T extends schemas.$ZodNaN>(Class: util.SchemaClass<T>, params?: string | $ZodNaNParams): T {
return new Class({
type: "nan",
...util.normalizeParams(params),
});
}
// export type $ZodCheckParams = CheckParams<checks.$ZodCheck, "abort" | "when">;
export type $ZodCheckLessThanParams = CheckParams<checks.$ZodCheckLessThan, "inclusive" | "value" | "when">;
export function _lt(
value: util.Numeric,
params?: string | $ZodCheckLessThanParams
): checks.$ZodCheckLessThan<util.Numeric> {
return new checks.$ZodCheckLessThan({
check: "less_than",
...util.normalizeParams(params),
value,
inclusive: false,
});
}
export function _lte(
value: util.Numeric,
params?: string | $ZodCheckLessThanParams
): checks.$ZodCheckLessThan<util.Numeric> {
return new checks.$ZodCheckLessThan({
check: "less_than",
...util.normalizeParams(params),
value,
inclusive: true,
});
}
export {
/** @deprecated Use `z.lte()` instead. */
_lte as _max,
};
// ZodCheckGreaterThan
export type $ZodCheckGreaterThanParams = CheckParams<checks.$ZodCheckGreaterThan, "inclusive" | "value" | "when">;
export function _gt(value: util.Numeric, params?: string | $ZodCheckGreaterThanParams): checks.$ZodCheckGreaterThan {
return new checks.$ZodCheckGreaterThan({
check: "greater_than",
...util.normalizeParams(params),
value,
inclusive: false,
});
}
export function _gte(value: util.Numeric, params?: string | $ZodCheckGreaterThanParams): checks.$ZodCheckGreaterThan {
return new checks.$ZodCheckGreaterThan({
check: "greater_than",
...util.normalizeParams(params),
value,
inclusive: true,
});
}
export {
/** @deprecated Use `z.gte()` instead. */
_gte as _min,
};
export function _positive(params?: string | $ZodCheckGreaterThanParams): checks.$ZodCheckGreaterThan {
return _gt(0, params);
}
// negative
export function _negative(params?: string | $ZodCheckLessThanParams): checks.$ZodCheckLessThan {
return _lt(0, params);
}
// nonpositive
export function _nonpositive(params?: string | $ZodCheckLessThanParams): checks.$ZodCheckLessThan {
return _lte(0, params);
}
// nonnegative
export function _nonnegative(params?: string | $ZodCheckGreaterThanParams): checks.$ZodCheckGreaterThan {
return _gte(0, params);
}
export type $ZodCheckMultipleOfParams = CheckParams<checks.$ZodCheckMultipleOf, "value" | "when">;
export function _multipleOf(
value: number | bigint,
params?: string | $ZodCheckMultipleOfParams
): checks.$ZodCheckMultipleOf {
return new checks.$ZodCheckMultipleOf({
check: "multiple_of",
...util.normalizeParams(params),
value,
});
}
export type $ZodCheckMaxSizeParams = CheckParams<checks.$ZodCheckMaxSize, "maximum" | "when">;
export function _maxSize(
maximum: number,
params?: string | $ZodCheckMaxSizeParams
): checks.$ZodCheckMaxSize<util.HasSize> {
return new checks.$ZodCheckMaxSize({
check: "max_size",
...util.normalizeParams(params),
maximum,
});
}
export type $ZodCheckMinSizeParams = CheckParams<checks.$ZodCheckMinSize, "minimum" | "when">;
export function _minSize(
minimum: number,
params?: string | $ZodCheckMinSizeParams
): checks.$ZodCheckMinSize<util.HasSize> {
return new checks.$ZodCheckMinSize({
check: "min_size",
...util.normalizeParams(params),
minimum,
});
}
export type $ZodCheckSizeEqualsParams = CheckParams<checks.$ZodCheckSizeEquals, "size" | "when">;
export function _size(
size: number,
params?: string | $ZodCheckSizeEqualsParams
): checks.$ZodCheckSizeEquals<util.HasSize> {
return new checks.$ZodCheckSizeEquals({
check: "size_equals",
...util.normalizeParams(params),
size,
});
}
export type $ZodCheckMaxLengthParams = CheckParams<checks.$ZodCheckMaxLength, "maximum" | "when">;
export function _maxLength(
maximum: number,
params?: string | $ZodCheckMaxLengthParams
): checks.$ZodCheckMaxLength<util.HasLength> {
const ch = new checks.$ZodCheckMaxLength({
check: "max_length",
...util.normalizeParams(params),
maximum,
});
return ch;
}
export type $ZodCheckMinLengthParams = CheckParams<checks.$ZodCheckMinLength, "minimum" | "when">;
export function _minLength(
minimum: number,
params?: string | $ZodCheckMinLengthParams
): checks.$ZodCheckMinLength<util.HasLength> {
return new checks.$ZodCheckMinLength({
check: "min_length",
...util.normalizeParams(params),
minimum,
});
}
export type $ZodCheckLengthEqualsParams = CheckParams<checks.$ZodCheckLengthEquals, "length" | "when">;
export function _length(
length: number,
params?: string | $ZodCheckLengthEqualsParams
): checks.$ZodCheckLengthEquals<util.HasLength> {
return new checks.$ZodCheckLengthEquals({
check: "length_equals",
...util.normalizeParams(params),
length,
});
}
export type $ZodCheckRegexParams = CheckParams<checks.$ZodCheckRegex, "format" | "pattern" | "when">;
export function _regex(pattern: RegExp, params?: string | $ZodCheckRegexParams): checks.$ZodCheckRegex {
return new checks.$ZodCheckRegex({
check: "string_format",
format: "regex",
...util.normalizeParams(params),
pattern,
});
}
export type $ZodCheckLowerCaseParams = CheckParams<checks.$ZodCheckLowerCase, "format" | "when">;
export function _lowercase(params?: string | $ZodCheckLowerCaseParams): checks.$ZodCheckLowerCase {
return new checks.$ZodCheckLowerCase({
check: "string_format",
format: "lowercase",
...util.normalizeParams(params),
});
}
export type $ZodCheckUpperCaseParams = CheckParams<checks.$ZodCheckUpperCase, "format" | "when">;
export function _uppercase(params?: string | $ZodCheckUpperCaseParams): checks.$ZodCheckUpperCase {
return new checks.$ZodCheckUpperCase({
check: "string_format",
format: "uppercase",
...util.normalizeParams(params),
});
}
export type $ZodCheckIncludesParams = CheckParams<checks.$ZodCheckIncludes, "includes" | "format" | "when" | "pattern">;
export function _includes(includes: string, params?: string | $ZodCheckIncludesParams): checks.$ZodCheckIncludes {
return new checks.$ZodCheckIncludes({
check: "string_format",
format: "includes",
...util.normalizeParams(params),
includes,
});
}
export type $ZodCheckStartsWithParams = CheckParams<
checks.$ZodCheckStartsWith,
"prefix" | "format" | "when" | "pattern"
>;
export function _startsWith(prefix: string, params?: string | $ZodCheckStartsWithParams): checks.$ZodCheckStartsWith {
return new checks.$ZodCheckStartsWith({
check: "string_format",
format: "starts_with",
...util.normalizeParams(params),
prefix,
});
}
export type $ZodCheckEndsWithParams = CheckParams<checks.$ZodCheckEndsWith, "suffix" | "format" | "pattern" | "when">;
export function _endsWith(suffix: string, params?: string | $ZodCheckEndsWithParams): checks.$ZodCheckEndsWith {
return new checks.$ZodCheckEndsWith({
check: "string_format",
format: "ends_with",
...util.normalizeParams(params),
suffix,
});
}
export type $ZodCheckPropertyParams = CheckParams<checks.$ZodCheckProperty, "property" | "schema" | "when">;
export function _property<K extends string, T extends schemas.$ZodType>(
property: K,
schema: T,
params?: string | $ZodCheckPropertyParams
): checks.$ZodCheckProperty<{ [k in K]: core.output<T> }> {
return new checks.$ZodCheckProperty({
check: "property",
property,
schema,
...util.normalizeParams(params),
});
}
export type $ZodCheckMimeTypeParams = CheckParams<checks.$ZodCheckMimeType, "mime" | "when">;
export function _mime(types: util.MimeTypes[], params?: string | $ZodCheckMimeTypeParams): checks.$ZodCheckMimeType {
return new checks.$ZodCheckMimeType({
check: "mime_type",
mime: types,
...util.normalizeParams(params),
});
}
export function _overwrite<T>(tx: (input: T) => T): checks.$ZodCheckOverwrite<T> {
return new checks.$ZodCheckOverwrite({
check: "overwrite",
tx,
}) as checks.$ZodCheckOverwrite<T>;
}
// normalize
export function _normalize(form?: "NFC" | "NFD" | "NFKC" | "NFKD" | (string & {})): checks.$ZodCheckOverwrite<string> {
return _overwrite((input) => input.normalize(form));
}
// trim
export function _trim(): checks.$ZodCheckOverwrite<string> {
return _overwrite((input) => input.trim());
}
// toLowerCase
export function _toLowerCase(): checks.$ZodCheckOverwrite<string> {
return _overwrite((input) => input.toLowerCase());
}
// toUpperCase
export function _toUpperCase(): checks.$ZodCheckOverwrite<string> {
return _overwrite((input) => input.toUpperCase());
}
/////// collections ///////
// Array
export type $ZodArrayParams = TypeParams<schemas.$ZodArray, "element">;
export function _array<T extends schemas.$ZodType>(
Class: util.SchemaClass<schemas.$ZodArray>,
element: T,
params?: string | $ZodArrayParams
): schemas.$ZodArray<T> {
return new Class({
type: "array",
element,
// get element() {
// return element;
// },
...util.normalizeParams(params),
}) as any;
}
export type $ZodObjectParams = TypeParams<schemas.$ZodObject, "shape" | "catchall">;
// ZodUnion
export type $ZodUnionParams = TypeParams<schemas.$ZodUnion, "options">;
export function _union<const T extends readonly schemas.$ZodObject[]>(
Class: util.SchemaClass<schemas.$ZodUnion>,
options: T,
params?: string | $ZodUnionParams
): schemas.$ZodUnion<T> {
return new Class({
type: "union",
options,
...util.normalizeParams(params),
}) as any;
}
// ZodDiscriminatedUnion
export interface $ZodTypeDiscriminableInternals extends schemas.$ZodTypeInternals {
propValues: util.PropValues;
}
export interface $ZodTypeDiscriminable extends schemas.$ZodType {
_zod: $ZodTypeDiscriminableInternals;
}
export type $ZodDiscriminatedUnionParams = TypeParams<schemas.$ZodDiscriminatedUnion, "options" | "discriminator">;
export function _discriminatedUnion<Types extends [$ZodTypeDiscriminable, ...$ZodTypeDiscriminable[]]>(
Class: util.SchemaClass<schemas.$ZodDiscriminatedUnion>,
discriminator: string,
options: Types,
params?: string | $ZodDiscriminatedUnionParams
): schemas.$ZodDiscriminatedUnion<Types> {
return new Class({
type: "union",
options,
discriminator,
...util.normalizeParams(params),
}) as any;
}
// ZodIntersection
export type $ZodIntersectionParams = TypeParams<schemas.$ZodIntersection, "left" | "right">;
export function _intersection<T extends schemas.$ZodObject, U extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodIntersection>,
left: T,
right: U
): schemas.$ZodIntersection<T, U> {
return new Class({
type: "intersection",
left,
right,
}) as any;
}
// ZodTuple
export type $ZodTupleParams = TypeParams<schemas.$ZodTuple, "items" | "rest">;
export function _tuple<T extends readonly [schemas.$ZodType, ...schemas.$ZodType[]]>(
Class: util.SchemaClass<schemas.$ZodTuple>,
items: T,
params?: string | $ZodTupleParams
): schemas.$ZodTuple<T, null>;
export function _tuple<T extends readonly [schemas.$ZodType, ...schemas.$ZodType[]], Rest extends schemas.$ZodType>(
Class: util.SchemaClass<schemas.$ZodTuple>,
items: T,
rest: Rest,
params?: string | $ZodTupleParams
): schemas.$ZodTuple<T, Rest>;
// export function _tuple(
// Class: util.SchemaClass<schemas.$ZodTuple>,
// items: [],
// params?: string | $ZodTupleParams
// ): schemas.$ZodTuple<[], null>;
export function _tuple(
Class: util.SchemaClass<schemas.$ZodTuple>,
items: schemas.$ZodType[],
_paramsOrRest?: string | $ZodTupleParams | schemas.$ZodType,
_params?: string | $ZodTupleParams
) {
const hasRest = _paramsOrRest instanceof schemas.$ZodType;
const params = hasRest ? _params : _paramsOrRest;
const rest = hasRest ? _paramsOrRest : null;
return new Class({
type: "tuple",
items,
rest,
...util.normalizeParams(params),
});
}
// ZodRecord
export type $ZodRecordParams = TypeParams<schemas.$ZodRecord, "keyType" | "valueType">;
export function _record<Key extends schemas.$ZodRecordKey, Value extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodRecord>,
keyType: Key,
valueType: Value,
params?: string | $ZodRecordParams
): schemas.$ZodRecord<Key, Value> {
return new Class({
type: "record",
keyType,
valueType,
...util.normalizeParams(params),
}) as any;
}
// ZodMap
export type $ZodMapParams = TypeParams<schemas.$ZodMap, "keyType" | "valueType">;
export function _map<Key extends schemas.$ZodObject, Value extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodMap>,
keyType: Key,
valueType: Value,
params?: string | $ZodMapParams
): schemas.$ZodMap<Key, Value> {
return new Class({
type: "map",
keyType,
valueType,
...util.normalizeParams(params),
}) as any;
}
// ZodSet
export type $ZodSetParams = TypeParams<schemas.$ZodSet, "valueType">;
export function _set<Value extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodSet>,
valueType: Value,
params?: string | $ZodSetParams
): schemas.$ZodSet<Value> {
return new Class({
type: "set",
valueType,
...util.normalizeParams(params),
}) as any;
}
// ZodEnum
export type $ZodEnumParams = TypeParams<schemas.$ZodEnum, "entries">;
export function _enum<const T extends string[]>(
Class: util.SchemaClass<schemas.$ZodEnum>,
values: T,
params?: string | $ZodEnumParams
): schemas.$ZodEnum<util.ToEnum<T[number]>>;
export function _enum<T extends util.EnumLike>(
Class: util.SchemaClass<schemas.$ZodEnum>,
entries: T,
params?: string | $ZodEnumParams
): schemas.$ZodEnum<T>;
export function _enum(Class: util.SchemaClass<schemas.$ZodEnum>, values: any, params?: string | $ZodEnumParams) {
const entries: any = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
// if (Array.isArray(values)) {
// for (const value of values) {
// entries[value] = value;
// }
// } else {
// Object.assign(entries, values);
// }
// const entries: util.EnumLike = {};
// for (const val of values) {
// entries[val] = val;
// }
return new Class({
type: "enum",
entries,
...util.normalizeParams(params),
}) as any;
}
/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.
*
* ```ts
* enum Colors { red, green, blue }
* z.enum(Colors);
* ```
*/
export function _nativeEnum<T extends util.EnumLike>(
Class: util.SchemaClass<schemas.$ZodEnum>,
entries: T,
params?: string | $ZodEnumParams
): schemas.$ZodEnum<T> {
return new Class({
type: "enum",
entries,
...util.normalizeParams(params),
}) as any;
}
// ZodLiteral
export type $ZodLiteralParams = TypeParams<schemas.$ZodLiteral, "values">;
export function _literal<const T extends Array<util.Literal>>(
Class: util.SchemaClass<schemas.$ZodLiteral>,
value: T,
params?: string | $ZodLiteralParams
): schemas.$ZodLiteral<T[number]>;
export function _literal<const T extends util.Literal>(
Class: util.SchemaClass<schemas.$ZodLiteral>,
value: T,
params?: string | $ZodLiteralParams
): schemas.$ZodLiteral<T>;
export function _literal(Class: util.SchemaClass<schemas.$ZodLiteral>, value: any, params: any) {
return new Class({
type: "literal",
values: Array.isArray(value) ? value : [value],
...util.normalizeParams(params),
});
}
// ZodFile
export type $ZodFileParams = TypeParams<schemas.$ZodFile>;
export function _file(Class: util.SchemaClass<schemas.$ZodFile>, params?: string | $ZodFileParams): schemas.$ZodFile {
return new Class({
type: "file",
...util.normalizeParams(params),
});
}
// ZodTransform
export type $ZodTransformParams = TypeParams<schemas.$ZodTransform, "transform">;
export function _transform<I = unknown, O = I>(
Class: util.SchemaClass<schemas.$ZodTransform>,
fn: (input: I, ctx?: schemas.ParsePayload) => O
): schemas.$ZodTransform<Awaited<O>, I> {
return new Class({
type: "transform",
transform: fn as any,
}) as any;
}
// ZodOptional
export type $ZodOptionalParams = TypeParams<schemas.$ZodOptional, "innerType">;
export function _optional<T extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodOptional>,
innerType: T
): schemas.$ZodOptional<T> {
return new Class({
type: "optional",
innerType,
}) as any;
}
// ZodNullable
export type $ZodNullableParams = TypeParams<schemas.$ZodNullable, "innerType">;
export function _nullable<T extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodNullable>,
innerType: T
): schemas.$ZodNullable<T> {
return new Class({
type: "nullable",
innerType,
}) as any;
}
// ZodDefault
export type $ZodDefaultParams = TypeParams<schemas.$ZodDefault, "innerType" | "defaultValue">;
export function _default<T extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodDefault>,
innerType: T,
defaultValue: util.NoUndefined<core.output<T>> | (() => util.NoUndefined<core.output<T>>)
): schemas.$ZodDefault<T> {
return new Class({
type: "default",
innerType,
get defaultValue() {
return typeof defaultValue === "function" ? (defaultValue as Function)() : defaultValue;
},
}) as any;
}
// ZodNonOptional
export type $ZodNonOptionalParams = TypeParams<schemas.$ZodNonOptional, "innerType">;
export function _nonoptional<T extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodNonOptional>,
innerType: T,
params?: string | $ZodNonOptionalParams
): schemas.$ZodNonOptional<T> {
return new Class({
type: "nonoptional",
innerType,
...util.normalizeParams(params),
}) as any;
}
// ZodSuccess
export type $ZodSuccessParams = TypeParams<schemas.$ZodSuccess, "innerType">;
export function _success<T extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodSuccess>,
innerType: T
): schemas.$ZodSuccess<T> {
return new Class({
type: "success",
innerType,
}) as any;
}
// ZodCatch
export type $ZodCatchParams = TypeParams<schemas.$ZodCatch, "innerType" | "catchValue">;
export function _catch<T extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodCatch>,
innerType: T,
catchValue: core.output<T> | ((ctx: schemas.$ZodCatchCtx) => core.output<T>)
): schemas.$ZodCatch<T> {
return new Class({
type: "catch",
innerType,
catchValue: (typeof catchValue === "function" ? catchValue : () => catchValue) as any,
}) as any;
}
// ZodPipe
export type $ZodPipeParams = TypeParams<schemas.$ZodPipe, "in" | "out">;
export function _pipe<
const A extends schemas.$ZodType,
B extends schemas.$ZodType<unknown, core.output<A>> = schemas.$ZodType<unknown, core.output<A>>,
>(
Class: util.SchemaClass<schemas.$ZodPipe>,
in_: A,
out: B | schemas.$ZodType<unknown, core.output<A>>
): schemas.$ZodPipe<A, B> {
return new Class({
type: "pipe",
in: in_,
out,
}) as any;
}
// ZodReadonly
export type $ZodReadonlyParams = TypeParams<schemas.$ZodReadonly, "innerType">;
export function _readonly<T extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodReadonly>,
innerType: T
): schemas.$ZodReadonly<T> {
return new Class({
type: "readonly",
innerType,
}) as any;
}
// ZodTemplateLiteral
export type $ZodTemplateLiteralParams = TypeParams<schemas.$ZodTemplateLiteral, "parts">;
export function _templateLiteral<const Parts extends schemas.$ZodTemplateLiteralPart[]>(
Class: util.SchemaClass<schemas.$ZodTemplateLiteral>,
parts: Parts,
params?: string | $ZodTemplateLiteralParams
): schemas.$ZodTemplateLiteral<schemas.$PartsToTemplateLiteral<Parts>> {
return new Class({
type: "template_literal",
parts,
...util.normalizeParams(params),
}) as any;
}
// ZodLazy
export type $ZodLazyParams = TypeParams<schemas.$ZodLazy, "getter">;
export function _lazy<T extends schemas.$ZodType>(
Class: util.SchemaClass<schemas.$ZodLazy>,
getter: () => T
): schemas.$ZodLazy<T> {
return new Class({
type: "lazy",
getter,
}) as any;
}
// ZodPromise
export type $ZodPromiseParams = TypeParams<schemas.$ZodPromise, "innerType">;
export function _promise<T extends schemas.$ZodObject>(
Class: util.SchemaClass<schemas.$ZodPromise>,
innerType: T
): schemas.$ZodPromise<T> {
return new Class({
type: "promise",
innerType,
}) as any;
}
// ZodCustom
export type $ZodCustomParams = CheckTypeParams<schemas.$ZodCustom, "fn">;
export function _custom<O = unknown, I = O>(
Class: util.SchemaClass<schemas.$ZodCustom>,
fn: (data: O) => unknown,
_params: string | $ZodCustomParams | undefined
): schemas.$ZodCustom<O, I> {
const norm = util.normalizeParams(_params);
norm.abort ??= true; // default to abort:false
const schema = new Class({
type: "custom",
check: "custom",
fn: fn as any,
...norm,
});
return schema as any;
}
// same as _custom but defaults to abort:false
export function _refine<O = unknown, I = O>(
Class: util.SchemaClass<schemas.$ZodCustom>,
fn: (data: O) => unknown,
_params: string | $ZodCustomParams | undefined
): schemas.$ZodCustom<O, I> {
const schema = new Class({
type: "custom",
check: "custom",
fn: fn as any,
...util.normalizeParams(_params),
});
return schema as any;
}
export type $ZodSuperRefineIssue<T extends errors.$ZodIssueBase = errors.$ZodIssue> = T extends any
? RawIssue<T>
: never;
type RawIssue<T extends errors.$ZodIssueBase> = T extends any
? util.Flatten<
util.MakePartial<T, "message" | "path"> & {
/** The schema or check that originated this issue. */
readonly inst?: schemas.$ZodType | checks.$ZodCheck;
/** If `true`, Zod will continue executing checks/refinements after this issue. */
readonly continue?: boolean | undefined;
} & Record<string, unknown>
>
: never;
export interface $RefinementCtx<T = unknown> extends schemas.ParsePayload<T> {
addIssue(arg: string | $ZodSuperRefineIssue): void;
}
export function _superRefine<T>(fn: (arg: T, payload: $RefinementCtx<T>) => void | Promise<void>): checks.$ZodCheck<T> {
const ch = _check<T>((payload) => {
(payload as $RefinementCtx).addIssue = (issue) => {
if (typeof issue === "string") {
payload.issues.push(util.issue(issue, payload.value, ch._zod.def));
} else {
// for Zod 3 backwards compatibility
const _issue: any = issue;
if (_issue.fatal) _issue.continue = false;
_issue.code ??= "custom";
_issue.input ??= payload.value;
_issue.inst ??= ch;
_issue.continue ??= !ch._zod.def.abort;
payload.issues.push(util.issue(_issue));
}
};
return fn(payload.value, payload as $RefinementCtx<T>);
});
return ch;
}
export function _check<O = unknown>(fn: schemas.CheckFn<O>, params?: string | $ZodCustomParams): checks.$ZodCheck<O> {
const ch = new checks.$ZodCheck({
check: "custom",
...util.normalizeParams(params),
});
ch._zod.check = fn;
return ch;
}
// export type $ZodCustomParams = CheckTypeParams<schemas.$ZodCustom, "fn">
///////// STRINGBOOL /////////
// stringbool
export interface $ZodStringBoolParams extends TypeParams {
truthy?: string[];
falsy?: string[];
/**
* Options: `"sensitive"`, `"insensitive"`
*
* @default `"insensitive"`
*/
case?: "sensitive" | "insensitive" | undefined;
}
export function _stringbool(
Classes: {
Pipe?: typeof schemas.$ZodPipe;
Boolean?: typeof schemas.$ZodBoolean;
Transform?: typeof schemas.$ZodTransform;
String?: typeof schemas.$ZodString;
},
_params?: string | $ZodStringBoolParams
): schemas.$ZodPipe<
schemas.$ZodPipe<schemas.$ZodString, schemas.$ZodTransform<boolean, string>>,
schemas.$ZodBoolean<boolean>
> {
const params = util.normalizeParams(_params);
let truthyArray = params.truthy ?? ["true", "1", "yes", "on", "y", "enabled"];
let falsyArray = params.falsy ?? ["false", "0", "no", "off", "n", "disabled"];
if (params.case !== "sensitive") {
truthyArray = truthyArray.map((v) => (typeof v === "string" ? v.toLowerCase() : v));
falsyArray = falsyArray.map((v) => (typeof v === "string" ? v.toLowerCase() : v));
}
const truthySet = new Set(truthyArray);
const falsySet = new Set(falsyArray);
const _Pipe = Classes.Pipe ?? schemas.$ZodPipe;
const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;
const _String = Classes.String ?? schemas.$ZodString;
const _Transform = Classes.Transform ?? schemas.$ZodTransform;
const tx = new _Transform({
type: "transform",
transform: (input, payload: schemas.ParsePayload<unknown>) => {
let data: string = input as string;
if (params.case !== "sensitive") data = data.toLowerCase();
if (truthySet.has(data)) {
return true;
} else if (falsySet.has(data)) {
return false;
} else {
payload.issues.push({
code: "invalid_value",
expected: "stringbool",
values: [...truthySet, ...falsySet],
input: payload.value,
inst: tx,
continue: false,
});
return {} as never;
}
},
error: params.error,
});
// params.error;
const innerPipe = new _Pipe({
type: "pipe",
in: new _String({ type: "string", error: params.error }),
out: tx,
error: params.error,
});
const outerPipe = new _Pipe({
type: "pipe",
in: innerPipe,
out: new _Boolean({
type: "boolean",
error: params.error,
}),
error: params.error,
});
return outerPipe as any;
}
export function _stringFormat<Format extends string>(
Class: typeof schemas.$ZodCustomStringFormat,
format: Format,
fnOrRegex: ((arg: string) => util.MaybeAsync<unknown>) | RegExp,
_params: string | $ZodStringFormatParams = {}
): schemas.$ZodCustomStringFormat<Format> {
const params = util.normalizeParams(_params);
const def: schemas.$ZodCustomStringFormatDef = {
...util.normalizeParams(_params),
check: "string_format",
type: "string",
format,
fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val),
...params,
};
if (fnOrRegex instanceof RegExp) {
def.pattern = fnOrRegex;
}
const inst = new Class(def);
return inst as any;
}