zod
Version:
TypeScript-first schema declaration and validation library with static type inference
324 lines (265 loc) • 6.68 kB
text/typescript
///////////////////////////////////////////////////
//////////////// TYPES ///////////////////
///////////////////////////////////////////////////
export interface $ZSF {
$zsf: { version: number };
type: string;
// default value if not defined
default: unknown;
// fallback value if validation fails
fallback: unknown;
}
export interface $ZSFString extends $ZSF {
type: "string";
min_length?: number;
max_length?: number;
pattern?: string;
}
export type NumberTypes = "float32" | "int32" | "uint32" | "float64" | "int64" | "uint64" | "bigint" | "bigdecimal";
export interface $ZSFNumber extends $ZSF {
type: "number";
format?: NumberTypes;
minimum?: number;
maximum?: number;
multiple_of?: number;
}
export interface $ZSFBoolean extends $ZSF {
type: "boolean";
}
export interface $ZSFNull extends $ZSF {
type: "null";
}
export interface $ZSFUndefined extends $ZSF {
type: "undefined";
}
export interface $ZSFOptional<T extends $ZSF = $ZSF> extends $ZSF {
type: "optional";
inner: T;
}
export interface $ZSFNever extends $ZSF {
type: "never";
}
export interface $ZSFAny extends $ZSF {
type: "any";
}
/** Supports */
export interface $ZSFEnum<Elements extends { [k: string]: $ZSFLiteral } = { [k: string]: $ZSFLiteral }> extends $ZSF {
type: "enum";
elements: Elements;
}
export interface $ZSFArray<PrefixItems extends $ZSF[] = $ZSF[], Items extends $ZSF = $ZSF> extends $ZSF {
type: "array";
prefixItems: PrefixItems;
items: Items;
}
// type $ZSFObjectProperties = { [k: string]: $ZSF };
type $ZSFObjectProperties = Array<{
key: string;
value: $ZSF;
format?: "literal" | "pattern";
ordering?: number;
}>;
export interface $ZSFObject<Properties extends $ZSFObjectProperties = $ZSFObjectProperties> extends $ZSF {
type: "object";
properties: Properties;
}
// export interface $ZSFTuple<
// Items extends $ZSF[] = $ZSF[],
// Rest extends $ZSF = $ZSF,
// > extends $ZSF {
// type: "array";
// items: Items;
// rest: Rest;
// }
/** Supports arbitrary literal values */
export interface $ZSFLiteral<T extends $ZSF = $ZSF> extends $ZSF {
type: "literal";
schema: T;
value: unknown;
}
export interface $ZSFUnion<Elements extends $ZSF[] = $ZSF[]> extends $ZSF {
type: "union";
elements: Elements;
}
export interface $ZSFIntersection extends $ZSF {
type: "intersection";
elements: $ZSF[];
}
export interface $ZSFMap<K extends $ZSF = $ZSF, V extends $ZSF = $ZSF> extends $ZSF {
type: "map";
keys: K;
values: V;
}
export interface $ZSFConditional<If extends $ZSF, Then extends $ZSF, Else extends $ZSF> extends $ZSF {
type: "conditional";
if: If;
then: Then;
else: Else;
}
/////////////////////////////////////////////////
//////////////// CHECKS ////////////////
/////////////////////////////////////////////////
// export interface $ZSFCheckRegex {
// check: "regex";
// pattern: string;
// }
// export interface $ZSFCheckEmail {
// check: "email";
// }
// export interface $ZSFCheckURL {
// check: "url";
// }
// export interface $ZSFCheckEmoji {
// check: "emoji";
// }
// export interface $ZSFCheckUUID {
// check: "uuid";
// }
// export interface $ZSFCheckUUIDv4 {
// check: "uuidv4";
// }
// export interface $ZSFCheckUUIDv6 {
// check: "uuidv6";
// }
// export interface $ZSFCheckNanoid {
// check: "nanoid";
// }
// export interface $ZSFCheckGUID {
// check: "guid";
// }
// export interface $ZSFCheckCUID {
// check: "cuid";
// }
// export interface $ZSFCheckCUID2 {
// check: "cuid2";
// }
// export interface $ZSFCheckULID {
// check: "ulid";
// }
// export interface $ZSFCheckXID {
// check: "xid";
// }
// export interface $ZSFCheckKSUID {
// check: "ksuid";
// }
// export interface $ZSFCheckISODateTime {
// check: "datetime";
// precision?: number;
// local?: boolean;
// }
// export interface $ZSFCheckISODate {
// check: "date";
// }
// export interface $ZSFCheckISOTime {
// check: "time";
// precision?: number;
// local?: boolean;
// }
// export interface $ZSFCheckDuration {
// check: "duration";
// }
// export interface $ZSFCheckIP {
// check: "ip";
// }
// export interface $ZSFCheckIPv4 {
// check: "ipv4";
// }
// export interface $ZSFCheckIPv6 {
// check: "ipv6";
// }
// export interface $ZSFCheckBase64 {
// check: "base64";
// }
// export interface $ZSFCheckJWT {
// check: "jwt";
// }
// export interface $ZSFCheckJSONString {
// check: "json_string";
// }
// export interface $ZSFCheckPrefix {
// check: "prefix";
// prefix: string;
// }
// export interface $ZSFCheckSuffix {
// check: "suffix";
// suffix: string;
// }
// export interface $ZSFCheckIncludes {
// check: "includes";
// includes: string;
// }
// export interface $ZSFCheckMinSize {
// check: "min_size";
// minimum: number;
// }
// export interface $ZSFCheckMaxSize {
// check: "max_size";
// maximum: number;
// }
// export interface $ZSFCheckSizeEquals {
// check: "size_equals";
// size: number;
// }
// export interface $ZSFCheckLessThan {
// check: "less_than";
// maximum: number | bigint | Date;
// }
// export interface $ZSFCheckLessThanOrEqual {
// check: "less_than_or_equal";
// maximum: number | bigint | Date;
// }
// export interface $ZSFCheckGreaterThan {
// check: "greater_than";
// minimum: number | bigint | Date;
// }
// export interface $ZSFCheckGreaterThanOrEqual {
// check: "greater_than_or_equal";
// minimum: number | bigint | Date;
// }
// export interface $ZSFCheckEquals {
// check: "equals";
// value: number | bigint | Date;
// }
// export interface $ZSFCheckMultipleOf {
// check: "multiple_of";
// multipleOf: number;
// }
// export type $ZSFStringFormatChecks =
// | $ZSFCheckRegex
// | $ZSFCheckEmail
// | $ZSFCheckURL
// | $ZSFCheckEmoji
// | $ZSFCheckUUID
// | $ZSFCheckUUIDv4
// | $ZSFCheckUUIDv6
// | $ZSFCheckNanoid
// | $ZSFCheckGUID
// | $ZSFCheckCUID
// | $ZSFCheckCUID2
// | $ZSFCheckULID
// | $ZSFCheckXID
// | $ZSFCheckKSUID
// | $ZSFCheckISODateTime
// | $ZSFCheckISODate
// | $ZSFCheckISOTime
// | $ZSFCheckDuration
// | $ZSFCheckIP
// | $ZSFCheckIPv4
// | $ZSFCheckIPv6
// | $ZSFCheckBase64
// | $ZSFCheckJWT
// | $ZSFCheckJSONString
// | $ZSFCheckPrefix
// | $ZSFCheckSuffix
// | $ZSFCheckIncludes;
// export type $ZSFCheck =
// | $ZSFStringFormatChecks
// | $ZSFCheckMinSize
// | $ZSFCheckMaxSize
// | $ZSFCheckSizeEquals
// | $ZSFCheckLessThan
// | $ZSFCheckLessThanOrEqual
// | $ZSFCheckGreaterThan
// | $ZSFCheckGreaterThanOrEqual
// | $ZSFCheckEquals
// | $ZSFCheckMultipleOf;