UNPKG

@zod/mini

Version:

TypeScript-first schema declaration and validation library with static type inference

761 lines (760 loc) 24.7 kB
import * as core from "@zod/core"; import * as util from "@zod/core/util"; import * as parse from "./parse.js"; export * as coerce from "./coerce.js"; export * as iso from "./iso.js"; export const ZodMiniType = /*@__PURE__*/ core.$constructor("ZodMiniType", (inst, def) => { if (!inst._zod) throw new Error("Uninitialized schema in mixin ZodMiniType."); core.$ZodType.init(inst, def); inst.def = def; inst.parse = (data, params) => parse.parse(inst, data, params); inst.safeParse = (data, params) => parse.safeParse(inst, data, params); inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params); inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params); inst.check = (...checks) => { return inst.clone({ ...def, checks: [ ...(def.checks ?? []), ...checks.map((ch) => (typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" } } } : ch)), ], }); }; inst.clone = (_def) => core.clone(inst, _def ?? def); inst.brand = () => inst; inst.register = ((reg, meta) => { reg.add(inst, meta); return inst; }); }); export const ZodMiniString = /*@__PURE__*/ core.$constructor("ZodMiniString", (inst, def) => { core.$ZodString.init(inst, def); ZodMiniType.init(inst, def); }); export function string(params) { return core._string(ZodMiniString, params); } export const ZodMiniStringFormat = /*@__PURE__*/ core.$constructor("ZodMiniStringFormat", (inst, def) => { core.$ZodStringFormat.init(inst, def); ZodMiniString.init(inst, def); }); export const ZodMiniEmail = /*@__PURE__*/ core.$constructor("ZodMiniEmail", (inst, def) => { core.$ZodEmail.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function email(params) { return core._email(ZodMiniEmail, params); } export const ZodMiniGUID = /*@__PURE__*/ core.$constructor("ZodMiniGUID", (inst, def) => { core.$ZodGUID.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function guid(params) { return core._guid(ZodMiniGUID, params); } export const ZodMiniUUID = /*@__PURE__*/ core.$constructor("ZodMiniUUID", (inst, def) => { core.$ZodUUID.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function uuid(params) { return core._uuid(ZodMiniUUID, params); } export function uuidv4(params) { return core._uuidv4(ZodMiniUUID, params); } export function uuidv6(params) { return core._uuidv6(ZodMiniUUID, params); } export function uuidv7(params) { return core._uuidv7(ZodMiniUUID, params); } export const ZodMiniURL = /*@__PURE__*/ core.$constructor("ZodMiniURL", (inst, def) => { core.$ZodURL.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function url(params) { return core._url(ZodMiniURL, params); } export const ZodMiniEmoji = /*@__PURE__*/ core.$constructor("ZodMiniEmoji", (inst, def) => { core.$ZodEmoji.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function emoji(params) { return core._emoji(ZodMiniEmoji, params); } export const ZodMiniNanoID = /*@__PURE__*/ core.$constructor("ZodMiniNanoID", (inst, def) => { core.$ZodNanoID.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function nanoid(params) { return core._nanoid(ZodMiniNanoID, params); } export const ZodMiniCUID = /*@__PURE__*/ core.$constructor("ZodMiniCUID", (inst, def) => { core.$ZodCUID.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function cuid(params) { return core._cuid(ZodMiniCUID, params); } export const ZodMiniCUID2 = /*@__PURE__*/ core.$constructor("ZodMiniCUID2", (inst, def) => { core.$ZodCUID2.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function cuid2(params) { return core._cuid2(ZodMiniCUID2, params); } export const ZodMiniULID = /*@__PURE__*/ core.$constructor("ZodMiniULID", (inst, def) => { core.$ZodULID.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function ulid(params) { return core._ulid(ZodMiniULID, params); } export const ZodMiniXID = /*@__PURE__*/ core.$constructor("ZodMiniXID", (inst, def) => { core.$ZodXID.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function xid(params) { return core._xid(ZodMiniXID, params); } export const ZodMiniKSUID = /*@__PURE__*/ core.$constructor("ZodMiniKSUID", (inst, def) => { core.$ZodKSUID.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function ksuid(params) { return core._ksuid(ZodMiniKSUID, params); } export const ZodMiniIPv4 = /*@__PURE__*/ core.$constructor("ZodMiniIPv4", (inst, def) => { core.$ZodIPv4.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function ipv4(params) { return core._ipv4(ZodMiniIPv4, params); } export const ZodMiniIPv6 = /*@__PURE__*/ core.$constructor("ZodMiniIPv6", (inst, def) => { core.$ZodIPv6.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function ipv6(params) { return core._ipv6(ZodMiniIPv6, params); } export const ZodMiniBase64 = /*@__PURE__*/ core.$constructor("ZodMiniBase64", (inst, def) => { core.$ZodBase64.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function base64(params) { return core._base64(ZodMiniBase64, params); } export const ZodMiniE164 = /*@__PURE__*/ core.$constructor("ZodMiniE164", (inst, def) => { core.$ZodE164.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function e164(params) { return core._e164(ZodMiniE164, params); } export const ZodMiniJWT = /*@__PURE__*/ core.$constructor("ZodMiniJWT", (inst, def) => { core.$ZodJWT.init(inst, def); ZodMiniStringFormat.init(inst, def); }); export function jwt(params) { return core._jwt(ZodMiniJWT, params); } export const ZodMiniNumber = /*@__PURE__*/ core.$constructor("ZodMiniNumber", (inst, def) => { core.$ZodNumber.init(inst, def); ZodMiniType.init(inst, def); }); export function number(params) { return core._number(ZodMiniNumber, params); } export const ZodMiniNumberFormat = /*@__PURE__*/ core.$constructor("ZodMiniNumberFormat", (inst, def) => { core.$ZodNumberFormat.init(inst, def); ZodMiniType.init(inst, def); }); // int export function int(params) { return core._int(ZodMiniNumberFormat, params); } // float32 export function float32(params) { return core._float32(ZodMiniNumberFormat, params); } // float64 export function float64(params) { return core._float64(ZodMiniNumberFormat, params); } // int32 export function int32(params) { return core._int32(ZodMiniNumberFormat, params); } // uint32 export function uint32(params) { return core._uint32(ZodMiniNumberFormat, params); } export const ZodMiniBoolean = /*@__PURE__*/ core.$constructor("ZodMiniBoolean", (inst, def) => { core.$ZodBoolean.init(inst, def); ZodMiniType.init(inst, def); }); export function boolean(params) { return core._boolean(ZodMiniBoolean, params); } export const ZodMiniBigInt = /*@__PURE__*/ core.$constructor("ZodMiniBigInt", (inst, def) => { core.$ZodBigInt.init(inst, def); ZodMiniType.init(inst, def); }); export function bigint(params) { return core._bigint(ZodMiniBigInt, params); } export const ZodMiniBigIntFormat = /*@__PURE__*/ core.$constructor("ZodMiniBigIntFormat", (inst, def) => { core.$ZodBigIntFormat.init(inst, def); ZodMiniBigInt.init(inst, def); }); // int64 export function int64(params) { return core._int64(ZodMiniBigIntFormat, params); } // uint64 export function uint64(params) { return core._uint64(ZodMiniBigIntFormat, params); } export const ZodMiniSymbol = /*@__PURE__*/ core.$constructor("ZodMiniSymbol", (inst, def) => { core.$ZodSymbol.init(inst, def); ZodMiniType.init(inst, def); }); export function symbol(params) { return core._symbol(ZodMiniSymbol, params); } export const ZodMiniUndefined = /*@__PURE__*/ core.$constructor("ZodMiniUndefined", (inst, def) => { core.$ZodUndefined.init(inst, def); ZodMiniType.init(inst, def); }); function _undefined(params) { return core._undefined(ZodMiniUndefined, params); } export { _undefined as undefined }; export const ZodMiniNull = /*@__PURE__*/ core.$constructor("ZodMiniNull", (inst, def) => { core.$ZodNull.init(inst, def); ZodMiniType.init(inst, def); }); function _null(params) { return core._null(ZodMiniNull, params); } export { _null as null }; export const ZodMiniAny = /*@__PURE__*/ core.$constructor("ZodMiniAny", (inst, def) => { core.$ZodAny.init(inst, def); ZodMiniType.init(inst, def); }); export function any(params) { return core._any(ZodMiniAny, params); } export const ZodMiniUnknown = /*@__PURE__*/ core.$constructor("ZodMiniUnknown", (inst, def) => { core.$ZodUnknown.init(inst, def); ZodMiniType.init(inst, def); }); export function unknown(params) { return core._unknown(ZodMiniUnknown, params); } export const ZodMiniNever = /*@__PURE__*/ core.$constructor("ZodMiniNever", (inst, def) => { core.$ZodNever.init(inst, def); ZodMiniType.init(inst, def); }); export function never(params) { return core._never(ZodMiniNever, params); } export const ZodMiniVoid = /*@__PURE__*/ core.$constructor("ZodMiniVoid", (inst, def) => { core.$ZodVoid.init(inst, def); ZodMiniType.init(inst, def); }); function _void(params) { return core._void(ZodMiniVoid, params); } export { _void as void }; export const ZodMiniDate = /*@__PURE__*/ core.$constructor("ZodMiniDate", (inst, def) => { core.$ZodDate.init(inst, def); ZodMiniType.init(inst, def); }); export function date(params) { return core._date(ZodMiniDate, params); } export const ZodMiniArray = /*@__PURE__*/ core.$constructor("ZodMiniArray", (inst, def) => { core.$ZodArray.init(inst, def); ZodMiniType.init(inst, def); }); export function array(element, params) { return new ZodMiniArray({ type: "array", element, // get element() { // return element; // }, ...util.normalizeParams(params), }); } export const ZodMiniObjectLike = /*@__PURE__*/ core.$constructor("ZodMiniObjectLike", (inst, def) => { core.$ZodObjectLike.init(inst, def); ZodMiniType.init(inst, def); }); export function keyof(schema) { const shape = schema._zod.def.type === "interface" ? util.cleanInterfaceShape(schema._zod.def.shape).shape : schema._zod.def.shape; return literal(Object.keys(shape)); } export const ZodMiniInterface = /*@__PURE__*/ core.$constructor("ZodMiniInterface", (inst, def) => { core.$ZodInterface.init(inst, def); ZodMiniType.init(inst, def); }); function _interface(shape, params, Class = ZodMiniInterface) { const cleaned = util.cached(() => util.cleanInterfaceShape(shape)); const def = { type: "interface", get shape() { const _shape = cleaned.value.shape; util.assignProp(this, "shape", _shape); return _shape; // return cleaned.value.shape; }, get optional() { return cleaned.value.optional; }, ...util.normalizeParams(params), }; return new Class(def); } export { _interface as interface }; // strictInterface export function strictInterface(shape, params) { const cleaned = util.cached(() => util.cleanInterfaceShape(shape)); const def = { type: "interface", get shape() { const _shape = cleaned.value.shape; util.assignProp(this, "shape", _shape); return _shape; // return cleaned.value.shape; }, get optional() { return cleaned.value.optional; }, catchall: never(), ...util.normalizeParams(params), }; return new ZodMiniInterface(def); } // looseInterface export function looseInterface(shape, params) { const cleaned = util.cached(() => util.cleanInterfaceShape(shape)); const def = { type: "interface", get optional() { return cleaned.value.optional; }, get shape() { // return cleaned.value.shape; const _shape = cleaned.value.shape; util.assignProp(this, "shape", _shape); return _shape; }, catchall: unknown(), ...util.normalizeParams(params), }; return new ZodMiniInterface(def); } export const ZodMiniObject = /*@__PURE__*/ core.$constructor("ZodMiniObject", (inst, def) => { core.$ZodObject.init(inst, def); ZodMiniType.init(inst, def); }); export function object(shape, params) { const def = { type: "object", shape: shape ?? {}, get optional() { return util.optionalObjectKeys(shape ?? {}); }, ...util.normalizeParams(params), }; return new ZodMiniObject(def); } // strictObject export function strictObject(shape, params) { return new ZodMiniObject({ type: "object", shape: shape, get optional() { return util.optionalObjectKeys(shape); }, catchall: never(), ...util.normalizeParams(params), }); } // looseObject export function looseObject(shape, params) { return new ZodMiniObject({ type: "object", shape: shape, get optional() { return util.optionalObjectKeys(shape); }, catchall: unknown(), ...util.normalizeParams(params), }); } export function extend(schema, shape) { // console.log({ schema, shape }); if (shape instanceof core.$ZodType) return util.mergeObjectLike(schema, shape); if (schema instanceof ZodMiniInterface) { return util.mergeObjectLike(schema, _interface(shape)); } if (schema instanceof ZodMiniObject) return util.mergeObjectLike(schema, object(shape)); return util.extend(schema, shape); } export function merge(a, b) { return util.mergeObjectLike(a, b); } export function pick(schema, mask) { return util.pick(schema, mask); } export function omit(schema, mask) { return util.omit(schema, mask); } export function partial(schema, mask) { return util.partialObjectLike(ZodMiniOptional, schema, mask); } export function required(schema, mask) { return util.requiredObjectLike(ZodMiniNonOptional, schema, mask); } export const ZodMiniUnion = /*@__PURE__*/ core.$constructor("ZodMiniUnion", (inst, def) => { core.$ZodUnion.init(inst, def); ZodMiniType.init(inst, def); }); export function union(options, params) { return new ZodMiniUnion({ type: "union", options, ...util.normalizeParams(params), }); } export const ZodMiniDiscriminatedUnion = /*@__PURE__*/ core.$constructor("ZodMiniDiscriminatedUnion", (inst, def) => { core.$ZodDiscriminatedUnion.init(inst, def); ZodMiniType.init(inst, def); }); export function discriminatedUnion(options, params) { return new ZodMiniDiscriminatedUnion({ type: "union", options, ...util.normalizeParams(params), }); } export const ZodMiniIntersection = /*@__PURE__*/ core.$constructor("ZodMiniIntersection", (inst, def) => { core.$ZodIntersection.init(inst, def); ZodMiniType.init(inst, def); }); export function intersection(left, right, params) { return new ZodMiniIntersection({ type: "intersection", left, right, ...util.normalizeParams(params), }); } export const ZodMiniTuple = /*@__PURE__*/ core.$constructor("ZodMiniTuple", (inst, def) => { core.$ZodTuple.init(inst, def); ZodMiniType.init(inst, def); }); export function tuple(items, _paramsOrRest, _params) { const hasRest = _paramsOrRest instanceof core.$ZodType; const params = hasRest ? _params : _paramsOrRest; const rest = hasRest ? _paramsOrRest : null; return new ZodMiniTuple({ type: "tuple", items, rest, ...util.normalizeParams(params), }); } export const ZodMiniRecord = /*@__PURE__*/ core.$constructor("ZodMiniRecord", (inst, def) => { core.$ZodRecord.init(inst, def); ZodMiniType.init(inst, def); }); export function record(keyType, valueType, params) { return new ZodMiniRecord({ type: "record", keyType, valueType, ...util.normalizeParams(params), }); } export const ZodMiniMap = /*@__PURE__*/ core.$constructor("ZodMiniMap", (inst, def) => { core.$ZodMap.init(inst, def); ZodMiniType.init(inst, def); }); export function map(keyType, valueType, params) { return new ZodMiniMap({ type: "map", keyType, valueType, ...util.normalizeParams(params), }); } export const ZodMiniSet = /*@__PURE__*/ core.$constructor("ZodMiniSet", (inst, def) => { core.$ZodSet.init(inst, def); ZodMiniType.init(inst, def); }); export function set(valueType, params) { return new ZodMiniSet({ type: "set", valueType, ...util.normalizeParams(params), }); } export const ZodMiniEnum = /*@__PURE__*/ core.$constructor("ZodMiniEnum", (inst, def) => { core.$ZodEnum.init(inst, def); ZodMiniType.init(inst, def); }); function _enum(values, params) { const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values; return new ZodMiniEnum({ type: "enum", entries, ...util.normalizeParams(params), }); } export { _enum as enum }; /** @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(entries, params) { return new ZodMiniEnum({ type: "enum", entries, ...util.normalizeParams(params), }); } export const ZodMiniLiteral = /*@__PURE__*/ core.$constructor("ZodMiniLiteral", (inst, def) => { core.$ZodLiteral.init(inst, def); ZodMiniType.init(inst, def); }); export function literal(value, params) { return new ZodMiniLiteral({ type: "literal", values: Array.isArray(value) ? value : [value], ...util.normalizeParams(params), }); } export const ZodMiniFile = /*@__PURE__*/ core.$constructor("ZodMiniFile", (inst, def) => { core.$ZodFile.init(inst, def); ZodMiniType.init(inst, def); }); export function file(params) { return core._file(ZodMiniFile, params); } export const ZodMiniTransform = /*@__PURE__*/ core.$constructor("ZodMiniTransform", (inst, def) => { core.$ZodTransform.init(inst, def); ZodMiniType.init(inst, def); }); export function transform(fn, params) { return new ZodMiniTransform({ type: "transform", transform: fn, ...util.normalizeParams(params), }); } export const ZodMiniOptional = /*@__PURE__*/ core.$constructor("ZodMiniOptional", (inst, def) => { core.$ZodOptional.init(inst, def); ZodMiniType.init(inst, def); }); export function optional(innerType, params) { return new ZodMiniOptional({ type: "optional", innerType, ...util.normalizeParams(params), }); } export const ZodMiniNullable = /*@__PURE__*/ core.$constructor("ZodMiniNullable", (inst, def) => { core.$ZodNullable.init(inst, def); ZodMiniType.init(inst, def); }); export function nullable(innerType, params) { return new ZodMiniNullable({ type: "nullable", innerType, ...util.normalizeParams(params), }); } // nullish export function nullish(innerType) { return optional(nullable(innerType)); } export const ZodMiniDefault = /*@__PURE__*/ core.$constructor("ZodMiniDefault", (inst, def) => { core.$ZodDefault.init(inst, def); ZodMiniType.init(inst, def); }); export function _default(innerType, defaultValue, params) { return new ZodMiniDefault({ type: "default", defaultValue: (typeof defaultValue === "function" ? defaultValue : () => defaultValue), innerType, ...util.normalizeParams(params), }); } export const ZodMiniNonOptional = /*@__PURE__*/ core.$constructor("ZodMiniNonOptional", (inst, def) => { core.$ZodNonOptional.init(inst, def); ZodMiniType.init(inst, def); }); export function nonoptional(innerType, params) { return new ZodMiniNonOptional({ type: "nonoptional", innerType, ...util.normalizeParams(params), }); } export const ZodMiniSuccess = /*@__PURE__*/ core.$constructor("ZodMiniSuccess", (inst, def) => { core.$ZodSuccess.init(inst, def); ZodMiniType.init(inst, def); }); export function success(innerType, params) { return new ZodMiniSuccess({ type: "success", innerType, ...util.normalizeParams(params), }); } export const ZodMiniCatch = /*@__PURE__*/ core.$constructor("ZodMiniCatch", (inst, def) => { core.$ZodCatch.init(inst, def); ZodMiniType.init(inst, def); }); function _catch(innerType, catchValue, params) { return new ZodMiniCatch({ type: "catch", innerType, catchValue: (typeof catchValue === "function" ? catchValue : () => catchValue), ...util.normalizeParams(params), }); } export { _catch as catch }; export const ZodMiniNaN = /*@__PURE__*/ core.$constructor("ZodMiniNaN", (inst, def) => { core.$ZodNaN.init(inst, def); ZodMiniType.init(inst, def); }); export function nan(params) { return core._nan(ZodMiniNaN, params); } export const ZodMiniPipe = /*@__PURE__*/ core.$constructor("ZodMiniPipe", (inst, def) => { core.$ZodPipe.init(inst, def); ZodMiniType.init(inst, def); }); export function pipe(in_, out, params) { return new ZodMiniPipe({ type: "pipe", in: in_, out, ...util.normalizeParams(params), }); } export const ZodMiniReadonly = /*@__PURE__*/ core.$constructor("ZodMiniReadonly", (inst, def) => { core.$ZodReadonly.init(inst, def); ZodMiniType.init(inst, def); }); export function readonly(innerType, params) { return new ZodMiniReadonly({ type: "readonly", innerType, ...util.normalizeParams(params), }); } export const ZodMiniTemplateLiteral = /*@__PURE__*/ core.$constructor("ZodMiniTemplateLiteral", (inst, def) => { core.$ZodTemplateLiteral.init(inst, def); ZodMiniType.init(inst, def); }); export function templateLiteral(parts, params) { return new ZodMiniTemplateLiteral({ type: "template_literal", parts, ...util.normalizeParams(params), }); } export const ZodMiniLazy = /*@__PURE__*/ core.$constructor("ZodMiniLazy", (inst, def) => { core.$ZodLazy.init(inst, def); ZodMiniType.init(inst, def); }); export function _lazy(getter) { return new ZodMiniLazy({ type: "lazy", getter, }); } export const ZodMiniPromise = /*@__PURE__*/ core.$constructor("ZodMiniPromise", (inst, def) => { core.$ZodPromise.init(inst, def); ZodMiniType.init(inst, def); }); export function promise(innerType, params) { return new ZodMiniPromise({ type: "promise", innerType, ...util.normalizeParams(params), }); } export const ZodMiniCustom = /*@__PURE__*/ core.$constructor("ZodMiniCustom", (inst, def) => { core.$ZodCustom.init(inst, def); ZodMiniType.init(inst, def); }); // custom checks export function check(fn, params) { const ch = new core.$ZodCheck({ check: "custom", ...util.normalizeParams(params), }); ch._zod.check = fn; return ch; } // ZodCustom export function _custom(fn, _params, Class) { const params = util.normalizeParams(_params); const schema = new Class({ type: "custom", check: "custom", fn: fn, ...params, }); return schema; } // refine export function refine(fn, _params = {}) { return _custom(fn, _params, ZodMiniCustom); } // custom schema export function custom(fn, _params) { return _custom(fn ?? (() => true), _params, ZodMiniCustom); } // instanceof class Class { constructor(..._args) { } } function _instanceof(cls, params = { error: `Input not instance of ${cls.name}`, }) { return custom((data) => data instanceof cls, params); } export { _instanceof as instanceof }; export function lazy(getter) { return util.createTransparentProxy(getter); } // stringbool export const stringbool = /* @__PURE__ */ core._stringbool.bind(null, { Pipe: ZodMiniPipe, Boolean: ZodMiniBoolean, Unknown: ZodMiniUnknown, }); export function json() { const jsonSchema = lazy(() => { return union([string(), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]); }); return jsonSchema; }