import * as checks from "./checks.js"; import * as schemas from "./schemas.js"; import * as util from "./util.js"; export function _string(Class, params) { return new Class({ type: "string", ...util.normalizeParams(params), }); } export function _coercedString(Class, params) { return new Class({ type: "string", coerce: true, ...util.normalizeParams(params), }); } export function _email(Class, params) { return new Class({ type: "string", format: "email", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _guid(Class, params) { return new Class({ type: "string", format: "guid", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _uuid(Class, params) { return new Class({ type: "string", format: "uuid", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _uuidv4(Class, params) { return new Class({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v4", ...util.normalizeParams(params), }); } export function _uuidv6(Class, params) { return new Class({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v6", ...util.normalizeParams(params), }); } export function _uuidv7(Class, params) { return new Class({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v7", ...util.normalizeParams(params), }); } export function _url(Class, params) { return new Class({ type: "string", format: "url", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _emoji(Class, params) { return new Class({ type: "string", format: "emoji", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _nanoid(Class, params) { return new Class({ type: "string", format: "nanoid", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _cuid(Class, params) { return new Class({ type: "string", format: "cuid", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _cuid2(Class, params) { return new Class({ type: "string", format: "cuid2", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _ulid(Class, params) { return new Class({ type: "string", format: "ulid", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _xid(Class, params) { return new Class({ type: "string", format: "xid", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _ksuid(Class, params) { return new Class({ type: "string", format: "ksuid", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _ipv4(Class, params) { return new Class({ type: "string", format: "ipv4", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _ipv6(Class, params) { return new Class({ type: "string", format: "ipv6", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _cidrv4(Class, params) { return new Class({ type: "string", format: "cidrv4", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _cidrv6(Class, params) { return new Class({ type: "string", format: "cidrv6", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _base64(Class, params) { return new Class({ type: "string", format: "base64", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _base64url(Class, params) { return new Class({ type: "string", format: "base64url", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _e164(Class, params) { return new Class({ type: "string", format: "e164", check: "string_format", abort: false, ...util.normalizeParams(params), }); } export function _jwt(Class, params) { 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, }; export function _isoDateTime(Class, params) { return new Class({ type: "string", format: "datetime", check: "string_format", offset: false, local: false, precision: null, ...util.normalizeParams(params), }); } export function _isoDate(Class, params) { return new Class({ type: "string", format: "date", check: "string_format", ...util.normalizeParams(params), }); } export function _isoTime(Class, params) { return new Class({ type: "string", format: "time", check: "string_format", precision: null, ...util.normalizeParams(params), }); } export function _isoDuration(Class, params) { return new Class({ type: "string", format: "duration", check: "string_format", ...util.normalizeParams(params), }); } export function _number(Class, params) { return new Class({ type: "number", checks: [], ...util.normalizeParams(params), }); } export function _coercedNumber(Class, params) { return new Class({ type: "number", coerce: true, checks: [], ...util.normalizeParams(params), }); } export function _int(Class, params) { return new Class({ type: "number", check: "number_format", abort: false, format: "safeint", ...util.normalizeParams(params), }); } export function _float32(Class, params) { return new Class({ type: "number", check: "number_format", abort: false, format: "float32", ...util.normalizeParams(params), }); } export function _float64(Class, params) { return new Class({ type: "number", check: "number_format", abort: false, format: "float64", ...util.normalizeParams(params), }); } export function _int32(Class, params) { return new Class({ type: "number", check: "number_format", abort: false, format: "int32", ...util.normalizeParams(params), }); } export function _uint32(Class, params) { return new Class({ type: "number", check: "number_format", abort: false, format: "uint32", ...util.normalizeParams(params), }); } export function _boolean(Class, params) { return new Class({ type: "boolean", ...util.normalizeParams(params), }); } export function _coercedBoolean(Class, params) { return new Class({ type: "boolean", coerce: true, ...util.normalizeParams(params), }); } export function _bigint(Class, params) { return new Class({ type: "bigint", ...util.normalizeParams(params), }); } export function _coercedBigint(Class, params) { return new Class({ type: "bigint", coerce: true, ...util.normalizeParams(params), }); } export function _int64(Class, params) { return new Class({ type: "bigint", check: "bigint_format", abort: false, format: "int64", ...util.normalizeParams(params), }); } export function _uint64(Class, params) { return new Class({ type: "bigint", check: "bigint_format", abort: false, format: "uint64", ...util.normalizeParams(params), }); } export function _symbol(Class, params) { return new Class({ type: "symbol", ...util.normalizeParams(params), }); } export function _undefined(Class, params) { return new Class({ type: "undefined", ...util.normalizeParams(params), }); } export function _null(Class, params) { return new Class({ type: "null", ...util.normalizeParams(params), }); } export function _any(Class) { return new Class({ type: "any", }); } export function _unknown(Class) { return new Class({ type: "unknown", }); } export function _never(Class, params) { return new Class({ type: "never", ...util.normalizeParams(params), }); } export function _void(Class, params) { return new Class({ type: "void", ...util.normalizeParams(params), }); } export function _date(Class, params) { return new Class({ type: "date", ...util.normalizeParams(params), }); } export function _coercedDate(Class, params) { return new Class({ type: "date", coerce: true, ...util.normalizeParams(params), }); } export function _nan(Class, params) { return new Class({ type: "nan", ...util.normalizeParams(params), }); } export function _lt(value, params) { return new checks.$ZodCheckLessThan({ check: "less_than", ...util.normalizeParams(params), value, inclusive: false, }); } export function _lte(value, params) { return new checks.$ZodCheckLessThan({ check: "less_than", ...util.normalizeParams(params), value, inclusive: true, }); } export { /** @deprecated Use `z.lte()` instead. */ _lte as _max, }; export function _gt(value, params) { return new checks.$ZodCheckGreaterThan({ check: "greater_than", ...util.normalizeParams(params), value, inclusive: false, }); } export function _gte(value, params) { 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) { return _gt(0, params); } // negative export function _negative(params) { return _lt(0, params); } // nonpositive export function _nonpositive(params) { return _lte(0, params); } // nonnegative export function _nonnegative(params) { return _gte(0, params); } export function _multipleOf(value, params) { return new checks.$ZodCheckMultipleOf({ check: "multiple_of", ...util.normalizeParams(params), value, }); } export function _maxSize(maximum, params) { return new checks.$ZodCheckMaxSize({ check: "max_size", ...util.normalizeParams(params), maximum, }); } export function _minSize(minimum, params) { return new checks.$ZodCheckMinSize({ check: "min_size", ...util.normalizeParams(params), minimum, }); } export function _size(size, params) { return new checks.$ZodCheckSizeEquals({ check: "size_equals", ...util.normalizeParams(params), size, }); } export function _maxLength(maximum, params) { const ch = new checks.$ZodCheckMaxLength({ check: "max_length", ...util.normalizeParams(params), maximum, }); return ch; } export function _minLength(minimum, params) { return new checks.$ZodCheckMinLength({ check: "min_length", ...util.normalizeParams(params), minimum, }); } export function _length(length, params) { return new checks.$ZodCheckLengthEquals({ check: "length_equals", ...util.normalizeParams(params), length, }); } export function _regex(pattern, params) { return new checks.$ZodCheckRegex({ check: "string_format", format: "regex", ...util.normalizeParams(params), pattern, }); } export function _lowercase(params) { return new checks.$ZodCheckLowerCase({ check: "string_format", format: "lowercase", ...util.normalizeParams(params), }); } export function _uppercase(params) { return new checks.$ZodCheckUpperCase({ check: "string_format", format: "uppercase", ...util.normalizeParams(params), }); } export function _includes(includes, params) { return new checks.$ZodCheckIncludes({ check: "string_format", format: "includes", ...util.normalizeParams(params), includes, }); } export function _startsWith(prefix, params) { return new checks.$ZodCheckStartsWith({ check: "string_format", format: "starts_with", ...util.normalizeParams(params), prefix, }); } export function _endsWith(suffix, params) { return new checks.$ZodCheckEndsWith({ check: "string_format", format: "ends_with", ...util.normalizeParams(params), suffix, }); } export function _property(property, schema, params) { return new checks.$ZodCheckProperty({ check: "property", property, schema, ...util.normalizeParams(params), }); } export function _mime(types, params) { return new checks.$ZodCheckMimeType({ check: "mime_type", mime: types, ...util.normalizeParams(params), }); } export function _overwrite(tx) { return new checks.$ZodCheckOverwrite({ check: "overwrite", tx, }); } // normalize export function _normalize(form) { return _overwrite((input) => input.normalize(form)); } // trim export function _trim() { return _overwrite((input) => input.trim()); } // toLowerCase export function _toLowerCase() { return _overwrite((input) => input.toLowerCase()); } // toUpperCase export function _toUpperCase() { return _overwrite((input) => input.toUpperCase()); } export function _array(Class, element, params) { return new Class({ type: "array", element, // get element() { // return element; // }, ...util.normalizeParams(params), }); } export function _union(Class, options, params) { return new Class({ type: "union", options, ...util.normalizeParams(params), }); } export function _discriminatedUnion(Class, discriminator, options, params) { return new Class({ type: "union", options, discriminator, ...util.normalizeParams(params), }); } export function _intersection(Class, left, right) { return new Class({ type: "intersection", left, right, }); } // export function _tuple( // Class: util.SchemaClass, // items: [], // params?: string | $ZodTupleParams // ): schemas.$ZodTuple<[], null>; export function _tuple(Class, items, _paramsOrRest, _params) { 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), }); } export function _record(Class, keyType, valueType, params) { return new Class({ type: "record", keyType, valueType, ...util.normalizeParams(params), }); } export function _map(Class, keyType, valueType, params) { return new Class({ type: "map", keyType, valueType, ...util.normalizeParams(params), }); } export function _set(Class, valueType, params) { return new Class({ type: "set", valueType, ...util.normalizeParams(params), }); } export function _enum(Class, values, params) { const entries = 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), }); } /** @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(Class, entries, params) { return new Class({ type: "enum", entries, ...util.normalizeParams(params), }); } export function _literal(Class, value, params) { return new Class({ type: "literal", values: Array.isArray(value) ? value : [value], ...util.normalizeParams(params), }); } export function _file(Class, params) { return new Class({ type: "file", ...util.normalizeParams(params), }); } export function _transform(Class, fn) { return new Class({ type: "transform", transform: fn, }); } export function _optional(Class, innerType) { return new Class({ type: "optional", innerType, }); } export function _nullable(Class, innerType) { return new Class({ type: "nullable", innerType, }); } export function _default(Class, innerType, defaultValue) { return new Class({ type: "default", innerType, get defaultValue() { return typeof defaultValue === "function" ? defaultValue() : defaultValue; }, }); } export function _nonoptional(Class, innerType, params) { return new Class({ type: "nonoptional", innerType, ...util.normalizeParams(params), }); } export function _success(Class, innerType) { return new Class({ type: "success", innerType, }); } export function _catch(Class, innerType, catchValue) { return new Class({ type: "catch", innerType, catchValue: (typeof catchValue === "function" ? catchValue : () => catchValue), }); } export function _pipe(Class, in_, out) { return new Class({ type: "pipe", in: in_, out, }); } export function _readonly(Class, innerType) { return new Class({ type: "readonly", innerType, }); } export function _templateLiteral(Class, parts, params) { return new Class({ type: "template_literal", parts, ...util.normalizeParams(params), }); } export function _lazy(Class, getter) { return new Class({ type: "lazy", getter, }); } export function _promise(Class, innerType) { return new Class({ type: "promise", innerType, }); } export function _custom(Class, fn, _params) { const norm = util.normalizeParams(_params); norm.abort ?? (norm.abort = true); // default to abort:false const schema = new Class({ type: "custom", check: "custom", fn: fn, ...norm, }); return schema; } // same as _custom but defaults to abort:false export function _refine(Class, fn, _params) { const schema = new Class({ type: "custom", check: "custom", fn: fn, ...util.normalizeParams(_params), }); return schema; } export function _superRefine(fn) { const ch = _check((payload) => { payload.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 = issue; if (_issue.fatal) _issue.continue = false; _issue.code ?? (_issue.code = "custom"); _issue.input ?? (_issue.input = payload.value); _issue.inst ?? (_issue.inst = ch); _issue.continue ?? (_issue.continue = !ch._zod.def.abort); payload.issues.push(util.issue(_issue)); } }; return fn(payload.value, payload); }); return ch; } export function _check(fn, params) { const ch = new checks.$ZodCheck({ check: "custom", ...util.normalizeParams(params), }); ch._zod.check = fn; return ch; } export function _stringbool(Classes, _params) { 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) => { let data = input; 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 {}; } }, 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; } export function _stringFormat(Class, format, fnOrRegex, _params = {}) { const params = util.normalizeParams(_params); const def = { ...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; }