@zenstackhq/zod 3.4.0-beta.3 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +646 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +73 -7
- package/dist/index.d.ts +73 -7
- package/dist/index.js +637 -18
- package/dist/index.js.map +1 -1
- package/package.json +15 -7
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { FieldDef, GetModels, SchemaDef } from '@zenstackhq/orm/schema';\nimport { match, P } from 'ts-pattern';\nimport { z, ZodType } from 'zod';\nimport type { SelectSchema } from './types';\n\nexport function makeSelectSchema<Schema extends SchemaDef, Model extends GetModels<Schema>>(\n schema: Schema,\n model: Model,\n) {\n return z.strictObject(mapFields(schema, model)) as SelectSchema<Schema, typeof model>;\n}\n\nfunction mapFields<Schema extends SchemaDef>(schema: Schema, model: GetModels<Schema>): any {\n const modelDef = schema.models[model];\n if (!modelDef) {\n throw new Error(`Model ${model} not found in schema`);\n }\n const scalarFields = Object.entries(modelDef.fields).filter(([_, fieldDef]) => !fieldDef.relation);\n const result: Record<string, ZodType> = {};\n for (const [field, fieldDef] of scalarFields) {\n result[field] = makeScalarSchema(fieldDef);\n }\n return result;\n}\n\nfunction makeScalarSchema(fieldDef: FieldDef): ZodType {\n return match(fieldDef.type)\n .with('String', () => z.string())\n .with(P.union('Int', 'BigInt', 'Float', 'Decimal'), () => z.number())\n .with('Boolean', () => z.boolean())\n .with('DateTime', () => z.string().datetime())\n .otherwise(() => z.unknown());\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA;;;;;wBAAyB;AACzB,iBAA2B;AAGpB,SAASA,iBACZC,QACAC,OAAY;AAEZ,SAAOC,aAAEC,aAAaC,UAAUJ,QAAQC,KAAAA,CAAAA;AAC5C;AALgBF;AAOhB,SAASK,UAAoCJ,QAAgBC,OAAwB;AACjF,QAAMI,WAAWL,OAAOM,OAAOL,KAAAA;AAC/B,MAAI,CAACI,UAAU;AACX,UAAM,IAAIE,MAAM,SAASN,KAAAA,sBAA2B;EACxD;AACA,QAAMO,eAAeC,OAAOC,QAAQL,SAASM,MAAM,EAAEC,OAAO,CAAC,CAACC,GAAGC,QAAAA,MAAc,CAACA,SAASC,QAAQ;AACjG,QAAMC,SAAkC,CAAC;AACzC,aAAW,CAACC,OAAOH,QAAAA,KAAaN,cAAc;AAC1CQ,WAAOC,KAAAA,IAASC,iBAAiBJ,QAAAA;EACrC;AACA,SAAOE;AACX;AAXSZ;AAaT,SAASc,iBAAiBJ,UAAkB;AACxC,aAAOK,yBAAML,SAASM,IAAI,EACrBC,KAAK,UAAU,MAAMnB,aAAEoB,OAAM,CAAA,EAC7BD,KAAKE,oBAAEC,MAAM,OAAO,UAAU,SAAS,SAAA,GAAY,MAAMtB,aAAEuB,OAAM,CAAA,EACjEJ,KAAK,WAAW,MAAMnB,aAAEwB,QAAO,CAAA,EAC/BL,KAAK,YAAY,MAAMnB,aAAEoB,OAAM,EAAGK,SAAQ,CAAA,EAC1CC,UAAU,MAAM1B,aAAE2B,QAAO,CAAA;AAClC;AAPSX;","names":["makeSelectSchema","schema","model","z","strictObject","mapFields","modelDef","models","Error","scalarFields","Object","entries","fields","filter","_","fieldDef","relation","result","field","makeScalarSchema","match","type","with","string","P","union","number","boolean","datetime","otherwise","unknown"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/factory.ts","../src/error.ts","../src/utils.ts"],"sourcesContent":["export { createSchemaFactory } from './factory';\nexport * as ZodUtils from './utils';\n","import {\n ExpressionUtils,\n SchemaAccessor,\n type AttributeApplication,\n type FieldDef,\n type GetEnum,\n type GetEnums,\n type GetModels,\n type GetTypeDefs,\n type SchemaDef,\n} from '@zenstackhq/schema';\nimport Decimal from 'decimal.js';\nimport z from 'zod';\nimport { SchemaFactoryError } from './error';\nimport type {\n GetModelCreateFieldsShape,\n GetModelFieldsShape,\n GetModelUpdateFieldsShape,\n GetTypeDefFieldsShape,\n} from './types';\nimport {\n addBigIntValidation,\n addCustomValidation,\n addDecimalValidation,\n addNumberValidation,\n addStringValidation,\n} from './utils';\n\nexport function createSchemaFactory<Schema extends SchemaDef>(schema: Schema) {\n return new SchemaFactory(schema);\n}\n\nclass SchemaFactory<Schema extends SchemaDef> {\n private readonly schema: SchemaAccessor<Schema>;\n\n constructor(_schema: Schema) {\n this.schema = new SchemaAccessor(_schema);\n }\n\n makeModelSchema<Model extends GetModels<Schema>>(\n model: Model,\n ): z.ZodObject<GetModelFieldsShape<Schema, Model>, z.core.$strict> {\n const modelDef = this.schema.requireModel(model);\n const fields: Record<string, z.ZodType> = {};\n\n for (const [fieldName, fieldDef] of Object.entries(modelDef.fields)) {\n if (fieldDef.relation) {\n const relatedModelName = fieldDef.type;\n const lazySchema: z.ZodType = z.lazy(() => this.makeModelSchema(relatedModelName as GetModels<Schema>));\n // relation fields are always optional\n fields[fieldName] = this.applyDescription(\n this.applyCardinality(lazySchema, fieldDef).optional(),\n fieldDef.attributes,\n );\n } else {\n fields[fieldName] = this.applyDescription(this.makeScalarFieldSchema(fieldDef), fieldDef.attributes);\n }\n }\n\n const shape = z.strictObject(fields);\n return this.applyDescription(\n addCustomValidation(shape, modelDef.attributes),\n modelDef.attributes,\n ) as unknown as z.ZodObject<GetModelFieldsShape<Schema, Model>, z.core.$strict>;\n }\n\n makeModelCreateSchema<Model extends GetModels<Schema>>(\n model: Model,\n ): z.ZodObject<GetModelCreateFieldsShape<Schema, Model>, z.core.$strict> {\n const modelDef = this.schema.requireModel(model);\n const fields: Record<string, z.ZodType> = {};\n\n for (const [fieldName, fieldDef] of Object.entries(modelDef.fields)) {\n // exclude relation, computed, delegate discriminator fields\n if (fieldDef.relation || fieldDef.computed || fieldDef.isDiscriminator) {\n continue;\n }\n\n let fieldSchema = this.makeScalarFieldSchema(fieldDef);\n if (fieldDef.optional || fieldDef.default !== undefined || fieldDef.updatedAt) {\n fieldSchema = fieldSchema.optional();\n }\n fields[fieldName] = this.applyDescription(fieldSchema, fieldDef.attributes);\n }\n\n const shape = z.strictObject(fields);\n return this.applyDescription(\n addCustomValidation(shape, modelDef.attributes),\n modelDef.attributes,\n ) as unknown as z.ZodObject<GetModelCreateFieldsShape<Schema, Model>, z.core.$strict>;\n }\n\n makeModelUpdateSchema<Model extends GetModels<Schema>>(\n model: Model,\n ): z.ZodObject<GetModelUpdateFieldsShape<Schema, Model>, z.core.$strict> {\n const modelDef = this.schema.requireModel(model);\n const fields: Record<string, z.ZodType> = {};\n\n for (const [fieldName, fieldDef] of Object.entries(modelDef.fields)) {\n // exclude relation, computed, delegate discriminator fields\n if (fieldDef.relation || fieldDef.computed || fieldDef.isDiscriminator) {\n continue;\n }\n\n let fieldSchema = this.makeScalarFieldSchema(fieldDef);\n fieldSchema = fieldSchema.optional();\n fields[fieldName] = this.applyDescription(fieldSchema, fieldDef.attributes);\n }\n\n const shape = z.strictObject(fields);\n return this.applyDescription(\n addCustomValidation(shape, modelDef.attributes),\n modelDef.attributes,\n ) as unknown as z.ZodObject<GetModelUpdateFieldsShape<Schema, Model>, z.core.$strict>;\n }\n\n private makeScalarFieldSchema(fieldDef: FieldDef): z.ZodType {\n const { type, attributes } = fieldDef;\n\n // enum\n const enumDef = this.schema.getEnum(type);\n if (enumDef) {\n return this.applyCardinality(this.makeEnumSchema(type as GetEnums<Schema>), fieldDef);\n }\n\n // typedef\n const typedefDef = this.schema.getTypeDef(type);\n if (typedefDef) {\n return this.applyCardinality(this.makeTypeSchema(type as GetTypeDefs<Schema>), fieldDef);\n }\n\n let base: z.ZodType;\n switch (type) {\n case 'String':\n base = addStringValidation(z.string(), attributes);\n break;\n case 'Int':\n base = addNumberValidation(z.number().int(), attributes);\n break;\n case 'Float':\n base = addNumberValidation(z.number(), attributes);\n break;\n case 'Boolean':\n base = z.boolean();\n break;\n case 'BigInt':\n base = addBigIntValidation(z.bigint(), attributes);\n break;\n case 'Decimal':\n base = z.union([\n addNumberValidation(z.number(), attributes) as z.ZodNumber,\n addDecimalValidation(z.string(), attributes, true) as z.ZodString,\n addDecimalValidation(z.instanceof(Decimal), attributes, true),\n ]);\n break;\n case 'DateTime':\n base = z.union([z.date(), z.iso.datetime()]);\n break;\n case 'Bytes':\n base = z.instanceof(Uint8Array);\n break;\n case 'Json':\n base = this.makeJsonSchema();\n break;\n case 'Unsupported':\n base = z.unknown();\n break;\n default: {\n const _exhaustive: never = type as never;\n throw new SchemaFactoryError(`Unsupported field type: ${_exhaustive}`);\n }\n }\n\n return this.applyCardinality(base, fieldDef);\n }\n\n private makeJsonSchema(): z.ZodType {\n return z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.lazy(() => this.makeJsonSchema())),\n z.object({}).catchall(z.lazy(() => this.makeJsonSchema())),\n ]);\n }\n\n private applyCardinality(schema: z.ZodType, fieldDef: FieldDef): z.ZodType {\n let result = schema;\n if (fieldDef.array) {\n result = result.array();\n }\n if (fieldDef.optional) {\n result = result.nullable().optional();\n }\n return result;\n }\n\n makeTypeSchema<Type extends GetTypeDefs<Schema>>(\n type: Type,\n ): z.ZodObject<GetTypeDefFieldsShape<Schema, Type>, z.core.$strict> {\n const typeDef = this.schema.requireTypeDef(type);\n const fields: Record<string, z.ZodType> = {};\n\n for (const [fieldName, fieldDef] of Object.entries(typeDef.fields)) {\n fields[fieldName] = this.applyDescription(this.makeScalarFieldSchema(fieldDef), fieldDef.attributes);\n }\n\n const shape = z.strictObject(fields);\n return this.applyDescription(\n addCustomValidation(shape, typeDef.attributes),\n typeDef.attributes,\n ) as unknown as z.ZodObject<GetTypeDefFieldsShape<Schema, Type>, z.core.$strict>;\n }\n\n makeEnumSchema<Enum extends GetEnums<Schema>>(\n _enum: Enum,\n ): z.ZodEnum<{ [Key in keyof GetEnum<Schema, Enum>]: GetEnum<Schema, Enum>[Key] }> {\n const enumDef = this.schema.requireEnum(_enum);\n const schema = z.enum(Object.keys(enumDef.values) as [string, ...string[]]);\n return this.applyDescription(schema, enumDef.attributes) as unknown as z.ZodEnum<{\n [Key in keyof GetEnum<Schema, Enum>]: GetEnum<Schema, Enum>[Key];\n }>;\n }\n\n private getMetaDescription(attributes: readonly AttributeApplication[] | undefined): string | undefined {\n if (!attributes) return undefined;\n for (const attr of attributes) {\n if (attr.name !== '@meta' && attr.name !== '@@meta') continue;\n const nameExpr = attr.args?.[0]?.value;\n if (!nameExpr || ExpressionUtils.getLiteralValue(nameExpr) !== 'description') continue;\n const valueExpr = attr.args?.[1]?.value;\n if (valueExpr) {\n return ExpressionUtils.getLiteralValue(valueExpr) as string | undefined;\n }\n }\n return undefined;\n }\n\n private applyDescription<T extends z.ZodType>(\n schema: T,\n attributes: readonly AttributeApplication[] | undefined,\n ): T {\n const description = this.getMetaDescription(attributes);\n if (description) {\n return schema.meta({ description }) as T;\n }\n return schema;\n }\n}\n","/**\n * Error representing failures in Zod schema building.\n */\nexport class SchemaFactoryError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n","import {\n ExpressionUtils,\n type AttributeApplication,\n type BinaryExpression,\n type CallExpression,\n type Expression,\n type FieldExpression,\n type MemberExpression,\n type UnaryExpression,\n} from '@zenstackhq/schema';\nimport Decimal from 'decimal.js';\nimport { z } from 'zod';\nimport { SchemaFactoryError } from './error';\n\nfunction getArgValue<T extends string | number | boolean>(expr: Expression | undefined): T | undefined {\n if (!expr || !ExpressionUtils.isLiteral(expr)) {\n return undefined;\n }\n return expr.value as T;\n}\n\nexport function addStringValidation(\n schema: z.ZodString,\n attributes: readonly AttributeApplication[] | undefined,\n): z.ZodSchema {\n if (!attributes || attributes.length === 0) {\n return schema;\n }\n\n let result = schema;\n for (const attr of attributes) {\n switch (attr.name) {\n case '@length': {\n const min = getArgValue<number>(attr.args?.[0]?.value);\n if (min !== undefined) {\n result = result.min(min);\n }\n const max = getArgValue<number>(attr.args?.[1]?.value);\n if (max !== undefined) {\n result = result.max(max);\n }\n break;\n }\n case '@startsWith': {\n const value = getArgValue<string>(attr.args?.[0]?.value);\n if (value !== undefined) {\n result = result.startsWith(value);\n }\n break;\n }\n case '@endsWith': {\n const value = getArgValue<string>(attr.args?.[0]?.value);\n if (value !== undefined) {\n result = result.endsWith(value);\n }\n break;\n }\n case '@contains': {\n const value = getArgValue<string>(attr.args?.[0]?.value);\n if (value !== undefined) {\n result = result.includes(value);\n }\n break;\n }\n case '@regex': {\n const pattern = getArgValue<string>(attr.args?.[0]?.value);\n if (pattern !== undefined) {\n result = result.regex(new RegExp(pattern));\n }\n break;\n }\n case '@email':\n result = result.email();\n break;\n case '@datetime':\n result = result.datetime();\n break;\n case '@url':\n result = result.url();\n break;\n case '@trim':\n result = result.trim();\n break;\n case '@lower':\n result = result.toLowerCase();\n break;\n case '@upper':\n result = result.toUpperCase();\n break;\n }\n }\n return result;\n}\n\nexport function addNumberValidation(\n schema: z.ZodNumber,\n attributes: readonly AttributeApplication[] | undefined,\n): z.ZodSchema {\n if (!attributes || attributes.length === 0) {\n return schema;\n }\n\n let result = schema;\n for (const attr of attributes) {\n const val = getArgValue<number>(attr.args?.[0]?.value);\n if (val === undefined) {\n continue;\n }\n switch (attr.name) {\n case '@gt':\n result = result.gt(val);\n break;\n case '@gte':\n result = result.gte(val);\n break;\n case '@lt':\n result = result.lt(val);\n break;\n case '@lte':\n result = result.lte(val);\n break;\n }\n }\n return result;\n}\n\nexport function addBigIntValidation(\n schema: z.ZodBigInt,\n attributes: readonly AttributeApplication[] | undefined,\n): z.ZodSchema {\n if (!attributes || attributes.length === 0) {\n return schema;\n }\n\n let result = schema;\n for (const attr of attributes) {\n const val = getArgValue<number>(attr.args?.[0]?.value);\n if (val === undefined) {\n continue;\n }\n\n switch (attr.name) {\n case '@gt':\n result = result.gt(BigInt(val));\n break;\n case '@gte':\n result = result.gte(BigInt(val));\n break;\n case '@lt':\n result = result.lt(BigInt(val));\n break;\n case '@lte':\n result = result.lte(BigInt(val));\n break;\n }\n }\n return result;\n}\n\nexport function addDecimalValidation(\n schema: z.ZodType<Decimal> | z.ZodString,\n attributes: readonly AttributeApplication[] | undefined,\n addExtraValidation: boolean,\n): z.ZodSchema {\n let result: z.ZodSchema = schema;\n\n // parse string to Decimal\n if (schema instanceof z.ZodString) {\n result = schema\n .superRefine((v, ctx) => {\n try {\n new Decimal(v);\n } catch (err) {\n ctx.addIssue({\n code: 'custom',\n message: `Invalid decimal: ${err}`,\n });\n }\n })\n .transform((val) => new Decimal(val));\n }\n\n // add validations\n\n function refine(schema: z.ZodSchema, op: 'gt' | 'gte' | 'lt' | 'lte', value: number) {\n return schema.superRefine((v, ctx) => {\n const base = z.number();\n const { error } = base[op](value).safeParse((v as Decimal).toNumber());\n error?.issues.forEach((issue) => {\n if (op === 'gt' || op === 'gte') {\n ctx.addIssue({\n code: 'too_small',\n origin: 'number',\n minimum: value,\n type: 'decimal',\n inclusive: op === 'gte',\n message: issue.message,\n });\n } else {\n ctx.addIssue({\n code: 'too_big',\n origin: 'number',\n maximum: value,\n type: 'decimal',\n inclusive: op === 'lte',\n message: issue.message,\n });\n }\n });\n });\n }\n\n if (attributes && addExtraValidation) {\n for (const attr of attributes) {\n const val = getArgValue<number>(attr.args?.[0]?.value);\n if (val === undefined) {\n continue;\n }\n\n switch (attr.name) {\n case '@gt':\n result = refine(result, 'gt', val);\n break;\n case '@gte':\n result = refine(result, 'gte', val);\n break;\n case '@lt':\n result = refine(result, 'lt', val);\n break;\n case '@lte':\n result = refine(result, 'lte', val);\n break;\n }\n }\n }\n\n return result;\n}\n\nexport function addListValidation(\n schema: z.ZodArray<any>,\n attributes: readonly AttributeApplication[] | undefined,\n): z.ZodSchema {\n if (!attributes || attributes.length === 0) {\n return schema;\n }\n\n let result = schema;\n for (const attr of attributes) {\n if (attr.name === '@length') {\n const min = getArgValue<number>(attr.args?.[0]?.value);\n if (min !== undefined) {\n result = result.min(min);\n }\n const max = getArgValue<number>(attr.args?.[1]?.value);\n if (max !== undefined) {\n result = result.max(max);\n }\n }\n }\n return result;\n}\n\nexport function addCustomValidation(\n schema: z.ZodSchema,\n attributes: readonly AttributeApplication[] | undefined,\n): z.ZodSchema {\n const attrs = attributes?.filter((a) => a.name === '@@validate');\n if (!attrs || attrs.length === 0) {\n return schema;\n }\n\n let result = schema;\n for (const attr of attrs) {\n const expr = attr.args?.[0]?.value;\n if (!expr) {\n continue;\n }\n const message = getArgValue<string>(attr.args?.[1]?.value);\n const pathExpr = attr.args?.[2]?.value;\n let path: string[] | undefined = undefined;\n if (pathExpr && ExpressionUtils.isArray(pathExpr)) {\n path = pathExpr.items.map((e) => ExpressionUtils.getLiteralValue(e) as string);\n }\n result = applyValidation(result, expr, message, path);\n }\n return result;\n}\n\nfunction applyValidation(\n schema: z.ZodSchema,\n expr: Expression,\n message: string | undefined,\n path: string[] | undefined,\n) {\n const options: Parameters<typeof schema.refine>[1] = {};\n if (message) {\n options.error = message;\n }\n if (path) {\n options.path = path;\n }\n return schema.refine((data) => Boolean(evalExpression(data, expr)), options);\n}\n\nfunction evalExpression(data: any, expr: Expression): unknown {\n switch (expr.kind) {\n case 'literal':\n return expr.value;\n case 'array':\n return expr.items.map((item) => evalExpression(data, item));\n case 'field':\n return evalField(data, expr);\n case 'member':\n return evalMember(data, expr);\n case 'unary':\n return evalUnary(data, expr);\n case 'binary':\n return evalBinary(data, expr);\n case 'call':\n return evalCall(data, expr);\n case 'this':\n return data ?? null;\n case 'null':\n return null;\n case 'binding':\n throw new SchemaFactoryError('Binding expression is not supported in validation expressions');\n }\n}\n\nfunction evalField(data: any, e: FieldExpression) {\n return data?.[e.field] ?? null;\n}\n\nfunction evalUnary(data: any, expr: UnaryExpression) {\n const operand = evalExpression(data, expr.operand);\n switch (expr.op) {\n case '!':\n return !operand;\n default:\n throw new SchemaFactoryError(`Unsupported unary operator: ${expr.op}`);\n }\n}\n\nfunction evalBinary(data: any, expr: BinaryExpression) {\n const left = evalExpression(data, expr.left);\n const right = evalExpression(data, expr.right);\n switch (expr.op) {\n case '&&':\n return Boolean(left) && Boolean(right);\n case '||':\n return Boolean(left) || Boolean(right);\n case '==':\n return left == right;\n case '!=':\n return left != right;\n case '<':\n return (left as any) < (right as any);\n case '<=':\n return (left as any) <= (right as any);\n case '>':\n return (left as any) > (right as any);\n case '>=':\n return (left as any) >= (right as any);\n case '?':\n if (!Array.isArray(left)) {\n return false;\n }\n return left.some((item) => item === right);\n case '!':\n if (!Array.isArray(left)) {\n return false;\n }\n return left.every((item) => item === right);\n case '^':\n if (!Array.isArray(left)) {\n return false;\n }\n return !left.some((item) => item === right);\n case 'in':\n if (!Array.isArray(right)) {\n return false;\n }\n return right.includes(left);\n default:\n throw new SchemaFactoryError(`Unsupported binary operator: ${expr.op}`);\n }\n}\n\nfunction evalMember(data: any, expr: MemberExpression) {\n let result: any = evalExpression(data, expr.receiver);\n for (const member of expr.members) {\n if (!result || typeof result !== 'object') {\n return undefined;\n }\n result = result[member];\n }\n return result ?? null;\n}\n\nfunction evalCall(data: any, expr: CallExpression) {\n const f = expr.function;\n const fieldArg = expr.args?.[0] ? evalExpression(data, expr.args[0]) : undefined;\n\n switch (f) {\n // string functions\n case 'length': {\n if (fieldArg === undefined || fieldArg === null) {\n return false;\n }\n invariant(\n typeof fieldArg === 'string' || Array.isArray(fieldArg),\n `\"${f}\" first argument must be a string or a list`,\n );\n return fieldArg.length;\n }\n case 'startsWith':\n case 'endsWith':\n case 'contains': {\n if (fieldArg === undefined || fieldArg === null) {\n return false;\n }\n invariant(typeof fieldArg === 'string', `\"${f}\" first argument must be a string`);\n invariant(expr.args?.[1], `\"${f}\" requires a search argument`);\n\n const search = getArgValue<string>(expr.args?.[1])!;\n const caseInsensitive = getArgValue<boolean>(expr.args?.[2]) ?? false;\n\n const applyStringOp = (x: string, y: string) => {\n switch (f) {\n case 'startsWith':\n return x.startsWith(y);\n case 'endsWith':\n return x.endsWith(y);\n case 'contains':\n return x.includes(y);\n }\n };\n return caseInsensitive\n ? applyStringOp(fieldArg.toLowerCase(), search.toLowerCase())\n : applyStringOp(fieldArg, search);\n }\n case 'regex': {\n if (fieldArg === undefined || fieldArg === null) {\n return false;\n }\n invariant(typeof fieldArg === 'string', `\"${f}\" first argument must be a string`);\n const pattern = getArgValue<string>(expr.args?.[1])!;\n invariant(pattern !== undefined, `\"${f}\" requires a pattern argument`);\n return new RegExp(pattern).test(fieldArg);\n }\n case 'isEmail':\n case 'isUrl':\n case 'isDateTime': {\n if (fieldArg === undefined || fieldArg === null) {\n return false;\n }\n invariant(typeof fieldArg === 'string', `\"${f}\" first argument must be a string`);\n const fn = f === 'isEmail' ? ('email' as const) : f === 'isUrl' ? ('url' as const) : ('datetime' as const);\n return z.string()[fn]().safeParse(fieldArg).success;\n }\n // list functions\n case 'has':\n case 'hasEvery':\n case 'hasSome': {\n invariant(expr.args?.[1], `${f} requires a search argument`);\n if (fieldArg === undefined || fieldArg === null) {\n return false;\n }\n invariant(Array.isArray(fieldArg), `\"${f}\" first argument must be an array field`);\n\n const search = evalExpression(data, expr.args?.[1])!;\n if (f === 'has') {\n return fieldArg.some((item) => item === search);\n } else if (f === 'hasEvery') {\n invariant(Array.isArray(search), 'hasEvery second argument must be an array');\n return search.every((v) => fieldArg.some((item) => item === v));\n } else {\n invariant(Array.isArray(search), 'hasSome second argument must be an array');\n return search.some((v) => fieldArg.some((item) => item === v));\n }\n }\n case 'isEmpty': {\n if (fieldArg === undefined || fieldArg === null) {\n return false;\n }\n invariant(Array.isArray(fieldArg), `\"${f}\" first argument must be an array field`);\n return fieldArg.length === 0;\n }\n default:\n throw new SchemaFactoryError(`Unsupported function \"${f}\"`);\n }\n}\n\nfunction invariant(condition: unknown, message?: string): asserts condition {\n if (!condition) {\n throw new SchemaFactoryError(message ?? 'Invariant failed');\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,IAAAA,iBAUO;AACP,IAAAC,kBAAoB;AACpB,IAAAC,cAAc;;;ACTP,IAAMC,qBAAN,cAAiCC,MAAAA;EAHxC,OAGwCA;;;EACpC,YAAYC,SAAiB;AACzB,UAAMA,OAAAA;EACV;AACJ;;;ACPA;;;;;;;;;oBASO;AACP,qBAAoB;AACpB,iBAAkB;AAGlB,SAASC,YAAiDC,MAA4B;AAClF,MAAI,CAACA,QAAQ,CAACC,8BAAgBC,UAAUF,IAAAA,GAAO;AAC3C,WAAOG;EACX;AACA,SAAOH,KAAKI;AAChB;AALSL;AAOF,SAASM,oBACZC,QACAC,YAAuD;AAEvD,MAAI,CAACA,cAAcA,WAAWC,WAAW,GAAG;AACxC,WAAOF;EACX;AAEA,MAAIG,SAASH;AACb,aAAWI,QAAQH,YAAY;AAC3B,YAAQG,KAAKC,MAAI;MACb,KAAK,WAAW;AACZ,cAAMC,MAAMb,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAChD,YAAIQ,QAAQT,QAAW;AACnBM,mBAASA,OAAOG,IAAIA,GAAAA;QACxB;AACA,cAAME,MAAMf,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAChD,YAAIU,QAAQX,QAAW;AACnBM,mBAASA,OAAOK,IAAIA,GAAAA;QACxB;AACA;MACJ;MACA,KAAK,eAAe;AAChB,cAAMV,QAAQL,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAClD,YAAIA,UAAUD,QAAW;AACrBM,mBAASA,OAAOM,WAAWX,KAAAA;QAC/B;AACA;MACJ;MACA,KAAK,aAAa;AACd,cAAMA,QAAQL,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAClD,YAAIA,UAAUD,QAAW;AACrBM,mBAASA,OAAOO,SAASZ,KAAAA;QAC7B;AACA;MACJ;MACA,KAAK,aAAa;AACd,cAAMA,QAAQL,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAClD,YAAIA,UAAUD,QAAW;AACrBM,mBAASA,OAAOQ,SAASb,KAAAA;QAC7B;AACA;MACJ;MACA,KAAK,UAAU;AACX,cAAMc,UAAUnB,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AACpD,YAAIc,YAAYf,QAAW;AACvBM,mBAASA,OAAOU,MAAM,IAAIC,OAAOF,OAAAA,CAAAA;QACrC;AACA;MACJ;MACA,KAAK;AACDT,iBAASA,OAAOY,MAAK;AACrB;MACJ,KAAK;AACDZ,iBAASA,OAAOa,SAAQ;AACxB;MACJ,KAAK;AACDb,iBAASA,OAAOc,IAAG;AACnB;MACJ,KAAK;AACDd,iBAASA,OAAOe,KAAI;AACpB;MACJ,KAAK;AACDf,iBAASA,OAAOgB,YAAW;AAC3B;MACJ,KAAK;AACDhB,iBAASA,OAAOiB,YAAW;AAC3B;IACR;EACJ;AACA,SAAOjB;AACX;AAvEgBJ;AAyET,SAASsB,oBACZrB,QACAC,YAAuD;AAEvD,MAAI,CAACA,cAAcA,WAAWC,WAAW,GAAG;AACxC,WAAOF;EACX;AAEA,MAAIG,SAASH;AACb,aAAWI,QAAQH,YAAY;AAC3B,UAAMqB,MAAM7B,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAChD,QAAIwB,QAAQzB,QAAW;AACnB;IACJ;AACA,YAAQO,KAAKC,MAAI;MACb,KAAK;AACDF,iBAASA,OAAOoB,GAAGD,GAAAA;AACnB;MACJ,KAAK;AACDnB,iBAASA,OAAOqB,IAAIF,GAAAA;AACpB;MACJ,KAAK;AACDnB,iBAASA,OAAOsB,GAAGH,GAAAA;AACnB;MACJ,KAAK;AACDnB,iBAASA,OAAOuB,IAAIJ,GAAAA;AACpB;IACR;EACJ;AACA,SAAOnB;AACX;AA9BgBkB;AAgCT,SAASM,oBACZ3B,QACAC,YAAuD;AAEvD,MAAI,CAACA,cAAcA,WAAWC,WAAW,GAAG;AACxC,WAAOF;EACX;AAEA,MAAIG,SAASH;AACb,aAAWI,QAAQH,YAAY;AAC3B,UAAMqB,MAAM7B,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAChD,QAAIwB,QAAQzB,QAAW;AACnB;IACJ;AAEA,YAAQO,KAAKC,MAAI;MACb,KAAK;AACDF,iBAASA,OAAOoB,GAAGK,OAAON,GAAAA,CAAAA;AAC1B;MACJ,KAAK;AACDnB,iBAASA,OAAOqB,IAAII,OAAON,GAAAA,CAAAA;AAC3B;MACJ,KAAK;AACDnB,iBAASA,OAAOsB,GAAGG,OAAON,GAAAA,CAAAA;AAC1B;MACJ,KAAK;AACDnB,iBAASA,OAAOuB,IAAIE,OAAON,GAAAA,CAAAA;AAC3B;IACR;EACJ;AACA,SAAOnB;AACX;AA/BgBwB;AAiCT,SAASE,qBACZ7B,QACAC,YACA6B,oBAA2B;AAE3B,MAAI3B,SAAsBH;AAG1B,MAAIA,kBAAkB+B,aAAEC,WAAW;AAC/B7B,aAASH,OACJiC,YAAY,CAACC,GAAGC,QAAAA;AACb,UAAI;AACA,YAAIC,eAAAA,QAAQF,CAAAA;MAChB,SAASG,KAAK;AACVF,YAAIG,SAAS;UACTC,MAAM;UACNC,SAAS,oBAAoBH,GAAAA;QACjC,CAAA;MACJ;IACJ,CAAA,EACCI,UAAU,CAACnB,QAAQ,IAAIc,eAAAA,QAAQd,GAAAA,CAAAA;EACxC;AAIA,WAASoB,OAAO1C,SAAqB2C,IAAiC7C,OAAa;AAC/E,WAAOE,QAAOiC,YAAY,CAACC,GAAGC,QAAAA;AAC1B,YAAMS,OAAOb,aAAEc,OAAM;AACrB,YAAM,EAAEC,MAAK,IAAKF,KAAKD,EAAAA,EAAI7C,KAAAA,EAAOiD,UAAWb,EAAcc,SAAQ,CAAA;AACnEF,aAAOG,OAAOC,QAAQ,CAACC,UAAAA;AACnB,YAAIR,OAAO,QAAQA,OAAO,OAAO;AAC7BR,cAAIG,SAAS;YACTC,MAAM;YACNa,QAAQ;YACRC,SAASvD;YACTwD,MAAM;YACNC,WAAWZ,OAAO;YAClBH,SAASW,MAAMX;UACnB,CAAA;QACJ,OAAO;AACHL,cAAIG,SAAS;YACTC,MAAM;YACNa,QAAQ;YACRI,SAAS1D;YACTwD,MAAM;YACNC,WAAWZ,OAAO;YAClBH,SAASW,MAAMX;UACnB,CAAA;QACJ;MACJ,CAAA;IACJ,CAAA;EACJ;AA1BSE;AA4BT,MAAIzC,cAAc6B,oBAAoB;AAClC,eAAW1B,QAAQH,YAAY;AAC3B,YAAMqB,MAAM7B,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAChD,UAAIwB,QAAQzB,QAAW;AACnB;MACJ;AAEA,cAAQO,KAAKC,MAAI;QACb,KAAK;AACDF,mBAASuC,OAAOvC,QAAQ,MAAMmB,GAAAA;AAC9B;QACJ,KAAK;AACDnB,mBAASuC,OAAOvC,QAAQ,OAAOmB,GAAAA;AAC/B;QACJ,KAAK;AACDnB,mBAASuC,OAAOvC,QAAQ,MAAMmB,GAAAA;AAC9B;QACJ,KAAK;AACDnB,mBAASuC,OAAOvC,QAAQ,OAAOmB,GAAAA;AAC/B;MACR;IACJ;EACJ;AAEA,SAAOnB;AACX;AA9EgB0B;AAgFT,SAAS4B,kBACZzD,QACAC,YAAuD;AAEvD,MAAI,CAACA,cAAcA,WAAWC,WAAW,GAAG;AACxC,WAAOF;EACX;AAEA,MAAIG,SAASH;AACb,aAAWI,QAAQH,YAAY;AAC3B,QAAIG,KAAKC,SAAS,WAAW;AACzB,YAAMC,MAAMb,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAChD,UAAIQ,QAAQT,QAAW;AACnBM,iBAASA,OAAOG,IAAIA,GAAAA;MACxB;AACA,YAAME,MAAMf,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AAChD,UAAIU,QAAQX,QAAW;AACnBM,iBAASA,OAAOK,IAAIA,GAAAA;MACxB;IACJ;EACJ;AACA,SAAOL;AACX;AAtBgBsD;AAwBT,SAASC,oBACZ1D,QACAC,YAAuD;AAEvD,QAAM0D,QAAQ1D,YAAY2D,OAAO,CAACC,MAAMA,EAAExD,SAAS,YAAA;AACnD,MAAI,CAACsD,SAASA,MAAMzD,WAAW,GAAG;AAC9B,WAAOF;EACX;AAEA,MAAIG,SAASH;AACb,aAAWI,QAAQuD,OAAO;AACtB,UAAMjE,OAAOU,KAAKG,OAAO,CAAA,GAAIT;AAC7B,QAAI,CAACJ,MAAM;AACP;IACJ;AACA,UAAM8C,UAAU/C,YAAoBW,KAAKG,OAAO,CAAA,GAAIT,KAAAA;AACpD,UAAMgE,WAAW1D,KAAKG,OAAO,CAAA,GAAIT;AACjC,QAAIiE,OAA6BlE;AACjC,QAAIiE,YAAYnE,8BAAgBqE,QAAQF,QAAAA,GAAW;AAC/CC,aAAOD,SAASG,MAAMC,IAAI,CAACC,MAAMxE,8BAAgByE,gBAAgBD,CAAAA,CAAAA;IACrE;AACAhE,aAASkE,gBAAgBlE,QAAQT,MAAM8C,SAASuB,IAAAA;EACpD;AACA,SAAO5D;AACX;AAxBgBuD;AA0BhB,SAASW,gBACLrE,QACAN,MACA8C,SACAuB,MAA0B;AAE1B,QAAMO,UAA+C,CAAC;AACtD,MAAI9B,SAAS;AACT8B,YAAQxB,QAAQN;EACpB;AACA,MAAIuB,MAAM;AACNO,YAAQP,OAAOA;EACnB;AACA,SAAO/D,OAAO0C,OAAO,CAAC6B,SAASC,QAAQC,eAAeF,MAAM7E,IAAAA,CAAAA,GAAQ4E,OAAAA;AACxE;AAdSD;AAgBT,SAASI,eAAeF,MAAW7E,MAAgB;AAC/C,UAAQA,KAAKgF,MAAI;IACb,KAAK;AACD,aAAOhF,KAAKI;IAChB,KAAK;AACD,aAAOJ,KAAKuE,MAAMC,IAAI,CAACS,SAASF,eAAeF,MAAMI,IAAAA,CAAAA;IACzD,KAAK;AACD,aAAOC,UAAUL,MAAM7E,IAAAA;IAC3B,KAAK;AACD,aAAOmF,WAAWN,MAAM7E,IAAAA;IAC5B,KAAK;AACD,aAAOoF,UAAUP,MAAM7E,IAAAA;IAC3B,KAAK;AACD,aAAOqF,WAAWR,MAAM7E,IAAAA;IAC5B,KAAK;AACD,aAAOsF,SAAST,MAAM7E,IAAAA;IAC1B,KAAK;AACD,aAAO6E,QAAQ;IACnB,KAAK;AACD,aAAO;IACX,KAAK;AACD,YAAM,IAAIU,mBAAmB,+DAAA;EACrC;AACJ;AAvBSR;AAyBT,SAASG,UAAUL,MAAWJ,GAAkB;AAC5C,SAAOI,OAAOJ,EAAEe,KAAK,KAAK;AAC9B;AAFSN;AAIT,SAASE,UAAUP,MAAW7E,MAAqB;AAC/C,QAAMyF,UAAUV,eAAeF,MAAM7E,KAAKyF,OAAO;AACjD,UAAQzF,KAAKiD,IAAE;IACX,KAAK;AACD,aAAO,CAACwC;IACZ;AACI,YAAM,IAAIF,mBAAmB,+BAA+BvF,KAAKiD,EAAE,EAAE;EAC7E;AACJ;AARSmC;AAUT,SAASC,WAAWR,MAAW7E,MAAsB;AACjD,QAAM0F,OAAOX,eAAeF,MAAM7E,KAAK0F,IAAI;AAC3C,QAAMC,QAAQZ,eAAeF,MAAM7E,KAAK2F,KAAK;AAC7C,UAAQ3F,KAAKiD,IAAE;IACX,KAAK;AACD,aAAO6B,QAAQY,IAAAA,KAASZ,QAAQa,KAAAA;IACpC,KAAK;AACD,aAAOb,QAAQY,IAAAA,KAASZ,QAAQa,KAAAA;IACpC,KAAK;AACD,aAAOD,QAAQC;IACnB,KAAK;AACD,aAAOD,QAAQC;IACnB,KAAK;AACD,aAAQD,OAAgBC;IAC5B,KAAK;AACD,aAAQD,QAAiBC;IAC7B,KAAK;AACD,aAAQD,OAAgBC;IAC5B,KAAK;AACD,aAAQD,QAAiBC;IAC7B,KAAK;AACD,UAAI,CAACC,MAAMtB,QAAQoB,IAAAA,GAAO;AACtB,eAAO;MACX;AACA,aAAOA,KAAKG,KAAK,CAACZ,SAASA,SAASU,KAAAA;IACxC,KAAK;AACD,UAAI,CAACC,MAAMtB,QAAQoB,IAAAA,GAAO;AACtB,eAAO;MACX;AACA,aAAOA,KAAKI,MAAM,CAACb,SAASA,SAASU,KAAAA;IACzC,KAAK;AACD,UAAI,CAACC,MAAMtB,QAAQoB,IAAAA,GAAO;AACtB,eAAO;MACX;AACA,aAAO,CAACA,KAAKG,KAAK,CAACZ,SAASA,SAASU,KAAAA;IACzC,KAAK;AACD,UAAI,CAACC,MAAMtB,QAAQqB,KAAAA,GAAQ;AACvB,eAAO;MACX;AACA,aAAOA,MAAM1E,SAASyE,IAAAA;IAC1B;AACI,YAAM,IAAIH,mBAAmB,gCAAgCvF,KAAKiD,EAAE,EAAE;EAC9E;AACJ;AA3CSoC;AA6CT,SAASF,WAAWN,MAAW7E,MAAsB;AACjD,MAAIS,SAAcsE,eAAeF,MAAM7E,KAAK+F,QAAQ;AACpD,aAAWC,UAAUhG,KAAKiG,SAAS;AAC/B,QAAI,CAACxF,UAAU,OAAOA,WAAW,UAAU;AACvC,aAAON;IACX;AACAM,aAASA,OAAOuF,MAAAA;EACpB;AACA,SAAOvF,UAAU;AACrB;AATS0E;AAWT,SAASG,SAAST,MAAW7E,MAAoB;AAC7C,QAAMkG,IAAIlG,KAAKmG;AACf,QAAMC,WAAWpG,KAAKa,OAAO,CAAA,IAAKkE,eAAeF,MAAM7E,KAAKa,KAAK,CAAA,CAAE,IAAIV;AAEvE,UAAQ+F,GAAAA;;IAEJ,KAAK,UAAU;AACX,UAAIE,aAAajG,UAAaiG,aAAa,MAAM;AAC7C,eAAO;MACX;AACAC,gBACI,OAAOD,aAAa,YAAYR,MAAMtB,QAAQ8B,QAAAA,GAC9C,IAAIF,CAAAA,6CAA8C;AAEtD,aAAOE,SAAS5F;IACpB;IACA,KAAK;IACL,KAAK;IACL,KAAK,YAAY;AACb,UAAI4F,aAAajG,UAAaiG,aAAa,MAAM;AAC7C,eAAO;MACX;AACAC,gBAAU,OAAOD,aAAa,UAAU,IAAIF,CAAAA,mCAAoC;AAChFG,gBAAUrG,KAAKa,OAAO,CAAA,GAAI,IAAIqF,CAAAA,8BAA+B;AAE7D,YAAMI,SAASvG,YAAoBC,KAAKa,OAAO,CAAA,CAAE;AACjD,YAAM0F,kBAAkBxG,YAAqBC,KAAKa,OAAO,CAAA,CAAE,KAAK;AAEhE,YAAM2F,gBAAgB,wBAACC,GAAWC,MAAAA;AAC9B,gBAAQR,GAAAA;UACJ,KAAK;AACD,mBAAOO,EAAE1F,WAAW2F,CAAAA;UACxB,KAAK;AACD,mBAAOD,EAAEzF,SAAS0F,CAAAA;UACtB,KAAK;AACD,mBAAOD,EAAExF,SAASyF,CAAAA;QAC1B;MACJ,GATsB;AAUtB,aAAOH,kBACDC,cAAcJ,SAAS3E,YAAW,GAAI6E,OAAO7E,YAAW,CAAA,IACxD+E,cAAcJ,UAAUE,MAAAA;IAClC;IACA,KAAK,SAAS;AACV,UAAIF,aAAajG,UAAaiG,aAAa,MAAM;AAC7C,eAAO;MACX;AACAC,gBAAU,OAAOD,aAAa,UAAU,IAAIF,CAAAA,mCAAoC;AAChF,YAAMhF,UAAUnB,YAAoBC,KAAKa,OAAO,CAAA,CAAE;AAClDwF,gBAAUnF,YAAYf,QAAW,IAAI+F,CAAAA,+BAAgC;AACrE,aAAO,IAAI9E,OAAOF,OAAAA,EAASyF,KAAKP,QAAAA;IACpC;IACA,KAAK;IACL,KAAK;IACL,KAAK,cAAc;AACf,UAAIA,aAAajG,UAAaiG,aAAa,MAAM;AAC7C,eAAO;MACX;AACAC,gBAAU,OAAOD,aAAa,UAAU,IAAIF,CAAAA,mCAAoC;AAChF,YAAMU,KAAKV,MAAM,YAAa,UAAoBA,MAAM,UAAW,QAAmB;AACtF,aAAO7D,aAAEwE,OAAM,EAAGD,EAAAA,EAAG,EAAGvD,UAAU+C,QAAAA,EAAUU;IAChD;;IAEA,KAAK;IACL,KAAK;IACL,KAAK,WAAW;AACZT,gBAAUrG,KAAKa,OAAO,CAAA,GAAI,GAAGqF,CAAAA,6BAA8B;AAC3D,UAAIE,aAAajG,UAAaiG,aAAa,MAAM;AAC7C,eAAO;MACX;AACAC,gBAAUT,MAAMtB,QAAQ8B,QAAAA,GAAW,IAAIF,CAAAA,yCAA0C;AAEjF,YAAMI,SAASvB,eAAeF,MAAM7E,KAAKa,OAAO,CAAA,CAAE;AAClD,UAAIqF,MAAM,OAAO;AACb,eAAOE,SAASP,KAAK,CAACZ,SAASA,SAASqB,MAAAA;MAC5C,WAAWJ,MAAM,YAAY;AACzBG,kBAAUT,MAAMtB,QAAQgC,MAAAA,GAAS,2CAAA;AACjC,eAAOA,OAAOR,MAAM,CAACtD,MAAM4D,SAASP,KAAK,CAACZ,SAASA,SAASzC,CAAAA,CAAAA;MAChE,OAAO;AACH6D,kBAAUT,MAAMtB,QAAQgC,MAAAA,GAAS,0CAAA;AACjC,eAAOA,OAAOT,KAAK,CAACrD,MAAM4D,SAASP,KAAK,CAACZ,SAASA,SAASzC,CAAAA,CAAAA;MAC/D;IACJ;IACA,KAAK,WAAW;AACZ,UAAI4D,aAAajG,UAAaiG,aAAa,MAAM;AAC7C,eAAO;MACX;AACAC,gBAAUT,MAAMtB,QAAQ8B,QAAAA,GAAW,IAAIF,CAAAA,yCAA0C;AACjF,aAAOE,SAAS5F,WAAW;IAC/B;IACA;AACI,YAAM,IAAI+E,mBAAmB,yBAAyBW,CAAAA,GAAI;EAClE;AACJ;AA5FSZ;AA8FT,SAASe,UAAUU,WAAoBjE,SAAgB;AACnD,MAAI,CAACiE,WAAW;AACZ,UAAM,IAAIxB,mBAAmBzC,WAAW,kBAAA;EAC5C;AACJ;AAJSuD;;;AFldF,SAASW,oBAA8CC,QAAc;AACxE,SAAO,IAAIC,cAAcD,MAAAA;AAC7B;AAFgBD;AAIhB,IAAME,gBAAN,MAAMA,eAAAA;EAhCN,OAgCMA;;;EACeD;EAEjB,YAAYE,SAAiB;AACzB,SAAKF,SAAS,IAAIG,8BAAeD,OAAAA;EACrC;EAEAE,gBACIC,OAC+D;AAC/D,UAAMC,WAAW,KAAKN,OAAOO,aAAaF,KAAAA;AAC1C,UAAMG,SAAoC,CAAC;AAE3C,eAAW,CAACC,WAAWC,QAAAA,KAAaC,OAAOC,QAAQN,SAASE,MAAM,GAAG;AACjE,UAAIE,SAASG,UAAU;AACnB,cAAMC,mBAAmBJ,SAASK;AAClC,cAAMC,aAAwBC,YAAAA,QAAEC,KAAK,MAAM,KAAKd,gBAAgBU,gBAAAA,CAAAA;AAEhEN,eAAOC,SAAAA,IAAa,KAAKU,iBACrB,KAAKC,iBAAiBJ,YAAYN,QAAAA,EAAUW,SAAQ,GACpDX,SAASY,UAAU;MAE3B,OAAO;AACHd,eAAOC,SAAAA,IAAa,KAAKU,iBAAiB,KAAKI,sBAAsBb,QAAAA,GAAWA,SAASY,UAAU;MACvG;IACJ;AAEA,UAAME,QAAQP,YAAAA,QAAEQ,aAAajB,MAAAA;AAC7B,WAAO,KAAKW,iBACRO,oBAAoBF,OAAOlB,SAASgB,UAAU,GAC9ChB,SAASgB,UAAU;EAE3B;EAEAK,sBACItB,OACqE;AACrE,UAAMC,WAAW,KAAKN,OAAOO,aAAaF,KAAAA;AAC1C,UAAMG,SAAoC,CAAC;AAE3C,eAAW,CAACC,WAAWC,QAAAA,KAAaC,OAAOC,QAAQN,SAASE,MAAM,GAAG;AAEjE,UAAIE,SAASG,YAAYH,SAASkB,YAAYlB,SAASmB,iBAAiB;AACpE;MACJ;AAEA,UAAIC,cAAc,KAAKP,sBAAsBb,QAAAA;AAC7C,UAAIA,SAASW,YAAYX,SAASqB,YAAYC,UAAatB,SAASuB,WAAW;AAC3EH,sBAAcA,YAAYT,SAAQ;MACtC;AACAb,aAAOC,SAAAA,IAAa,KAAKU,iBAAiBW,aAAapB,SAASY,UAAU;IAC9E;AAEA,UAAME,QAAQP,YAAAA,QAAEQ,aAAajB,MAAAA;AAC7B,WAAO,KAAKW,iBACRO,oBAAoBF,OAAOlB,SAASgB,UAAU,GAC9ChB,SAASgB,UAAU;EAE3B;EAEAY,sBACI7B,OACqE;AACrE,UAAMC,WAAW,KAAKN,OAAOO,aAAaF,KAAAA;AAC1C,UAAMG,SAAoC,CAAC;AAE3C,eAAW,CAACC,WAAWC,QAAAA,KAAaC,OAAOC,QAAQN,SAASE,MAAM,GAAG;AAEjE,UAAIE,SAASG,YAAYH,SAASkB,YAAYlB,SAASmB,iBAAiB;AACpE;MACJ;AAEA,UAAIC,cAAc,KAAKP,sBAAsBb,QAAAA;AAC7CoB,oBAAcA,YAAYT,SAAQ;AAClCb,aAAOC,SAAAA,IAAa,KAAKU,iBAAiBW,aAAapB,SAASY,UAAU;IAC9E;AAEA,UAAME,QAAQP,YAAAA,QAAEQ,aAAajB,MAAAA;AAC7B,WAAO,KAAKW,iBACRO,oBAAoBF,OAAOlB,SAASgB,UAAU,GAC9ChB,SAASgB,UAAU;EAE3B;EAEQC,sBAAsBb,UAA+B;AACzD,UAAM,EAAEK,MAAMO,WAAU,IAAKZ;AAG7B,UAAMyB,UAAU,KAAKnC,OAAOoC,QAAQrB,IAAAA;AACpC,QAAIoB,SAAS;AACT,aAAO,KAAKf,iBAAiB,KAAKiB,eAAetB,IAAAA,GAA2BL,QAAAA;IAChF;AAGA,UAAM4B,aAAa,KAAKtC,OAAOuC,WAAWxB,IAAAA;AAC1C,QAAIuB,YAAY;AACZ,aAAO,KAAKlB,iBAAiB,KAAKoB,eAAezB,IAAAA,GAA8BL,QAAAA;IACnF;AAEA,QAAI+B;AACJ,YAAQ1B,MAAAA;MACJ,KAAK;AACD0B,eAAOC,oBAAoBzB,YAAAA,QAAE0B,OAAM,GAAIrB,UAAAA;AACvC;MACJ,KAAK;AACDmB,eAAOG,oBAAoB3B,YAAAA,QAAE4B,OAAM,EAAGC,IAAG,GAAIxB,UAAAA;AAC7C;MACJ,KAAK;AACDmB,eAAOG,oBAAoB3B,YAAAA,QAAE4B,OAAM,GAAIvB,UAAAA;AACvC;MACJ,KAAK;AACDmB,eAAOxB,YAAAA,QAAE8B,QAAO;AAChB;MACJ,KAAK;AACDN,eAAOO,oBAAoB/B,YAAAA,QAAEgC,OAAM,GAAI3B,UAAAA;AACvC;MACJ,KAAK;AACDmB,eAAOxB,YAAAA,QAAEiC,MAAM;UACXN,oBAAoB3B,YAAAA,QAAE4B,OAAM,GAAIvB,UAAAA;UAChC6B,qBAAqBlC,YAAAA,QAAE0B,OAAM,GAAIrB,YAAY,IAAA;UAC7C6B,qBAAqBlC,YAAAA,QAAEmC,WAAWC,gBAAAA,OAAAA,GAAU/B,YAAY,IAAA;SAC3D;AACD;MACJ,KAAK;AACDmB,eAAOxB,YAAAA,QAAEiC,MAAM;UAACjC,YAAAA,QAAEqC,KAAI;UAAIrC,YAAAA,QAAEsC,IAAIC,SAAQ;SAAG;AAC3C;MACJ,KAAK;AACDf,eAAOxB,YAAAA,QAAEmC,WAAWK,UAAAA;AACpB;MACJ,KAAK;AACDhB,eAAO,KAAKiB,eAAc;AAC1B;MACJ,KAAK;AACDjB,eAAOxB,YAAAA,QAAE0C,QAAO;AAChB;MACJ,SAAS;AACL,cAAMC,cAAqB7C;AAC3B,cAAM,IAAI8C,mBAAmB,2BAA2BD,WAAAA,EAAa;MACzE;IACJ;AAEA,WAAO,KAAKxC,iBAAiBqB,MAAM/B,QAAAA;EACvC;EAEQgD,iBAA4B;AAChC,WAAOzC,YAAAA,QAAEiC,MAAM;MACXjC,YAAAA,QAAE0B,OAAM;MACR1B,YAAAA,QAAE4B,OAAM;MACR5B,YAAAA,QAAE8B,QAAO;MACT9B,YAAAA,QAAE6C,KAAI;MACN7C,YAAAA,QAAE8C,MAAM9C,YAAAA,QAAEC,KAAK,MAAM,KAAKwC,eAAc,CAAA,CAAA;MACxCzC,YAAAA,QAAE+C,OAAO,CAAC,CAAA,EAAGC,SAAShD,YAAAA,QAAEC,KAAK,MAAM,KAAKwC,eAAc,CAAA,CAAA;KACzD;EACL;EAEQtC,iBAAiBpB,QAAmBU,UAA+B;AACvE,QAAIwD,SAASlE;AACb,QAAIU,SAASqD,OAAO;AAChBG,eAASA,OAAOH,MAAK;IACzB;AACA,QAAIrD,SAASW,UAAU;AACnB6C,eAASA,OAAOC,SAAQ,EAAG9C,SAAQ;IACvC;AACA,WAAO6C;EACX;EAEA1B,eACIzB,MACgE;AAChE,UAAMqD,UAAU,KAAKpE,OAAOqE,eAAetD,IAAAA;AAC3C,UAAMP,SAAoC,CAAC;AAE3C,eAAW,CAACC,WAAWC,QAAAA,KAAaC,OAAOC,QAAQwD,QAAQ5D,MAAM,GAAG;AAChEA,aAAOC,SAAAA,IAAa,KAAKU,iBAAiB,KAAKI,sBAAsBb,QAAAA,GAAWA,SAASY,UAAU;IACvG;AAEA,UAAME,QAAQP,YAAAA,QAAEQ,aAAajB,MAAAA;AAC7B,WAAO,KAAKW,iBACRO,oBAAoBF,OAAO4C,QAAQ9C,UAAU,GAC7C8C,QAAQ9C,UAAU;EAE1B;EAEAe,eACIiC,OAC+E;AAC/E,UAAMnC,UAAU,KAAKnC,OAAOuE,YAAYD,KAAAA;AACxC,UAAMtE,SAASiB,YAAAA,QAAEuD,KAAK7D,OAAO8D,KAAKtC,QAAQuC,MAAM,CAAA;AAChD,WAAO,KAAKvD,iBAAiBnB,QAAQmC,QAAQb,UAAU;EAG3D;EAEQqD,mBAAmBrD,YAA6E;AACpG,QAAI,CAACA,WAAY,QAAOU;AACxB,eAAW4C,QAAQtD,YAAY;AAC3B,UAAIsD,KAAKC,SAAS,WAAWD,KAAKC,SAAS,SAAU;AACrD,YAAMC,WAAWF,KAAKG,OAAO,CAAA,GAAIC;AACjC,UAAI,CAACF,YAAYG,+BAAgBC,gBAAgBJ,QAAAA,MAAc,cAAe;AAC9E,YAAMK,YAAYP,KAAKG,OAAO,CAAA,GAAIC;AAClC,UAAIG,WAAW;AACX,eAAOF,+BAAgBC,gBAAgBC,SAAAA;MAC3C;IACJ;AACA,WAAOnD;EACX;EAEQb,iBACJnB,QACAsB,YACC;AACD,UAAM8D,cAAc,KAAKT,mBAAmBrD,UAAAA;AAC5C,QAAI8D,aAAa;AACb,aAAOpF,OAAOqF,KAAK;QAAED;MAAY,CAAA;IACrC;AACA,WAAOpF;EACX;AACJ;","names":["import_schema","import_decimal","import_zod","SchemaFactoryError","Error","message","getArgValue","expr","ExpressionUtils","isLiteral","undefined","value","addStringValidation","schema","attributes","length","result","attr","name","min","args","max","startsWith","endsWith","includes","pattern","regex","RegExp","email","datetime","url","trim","toLowerCase","toUpperCase","addNumberValidation","val","gt","gte","lt","lte","addBigIntValidation","BigInt","addDecimalValidation","addExtraValidation","z","ZodString","superRefine","v","ctx","Decimal","err","addIssue","code","message","transform","refine","op","base","number","error","safeParse","toNumber","issues","forEach","issue","origin","minimum","type","inclusive","maximum","addListValidation","addCustomValidation","attrs","filter","a","pathExpr","path","isArray","items","map","e","getLiteralValue","applyValidation","options","data","Boolean","evalExpression","kind","item","evalField","evalMember","evalUnary","evalBinary","evalCall","SchemaFactoryError","field","operand","left","right","Array","some","every","receiver","member","members","f","function","fieldArg","invariant","search","caseInsensitive","applyStringOp","x","y","test","fn","string","success","condition","createSchemaFactory","schema","SchemaFactory","_schema","SchemaAccessor","makeModelSchema","model","modelDef","requireModel","fields","fieldName","fieldDef","Object","entries","relation","relatedModelName","type","lazySchema","z","lazy","applyDescription","applyCardinality","optional","attributes","makeScalarFieldSchema","shape","strictObject","addCustomValidation","makeModelCreateSchema","computed","isDiscriminator","fieldSchema","default","undefined","updatedAt","makeModelUpdateSchema","enumDef","getEnum","makeEnumSchema","typedefDef","getTypeDef","makeTypeSchema","base","addStringValidation","string","addNumberValidation","number","int","boolean","addBigIntValidation","bigint","union","addDecimalValidation","instanceof","Decimal","date","iso","datetime","Uint8Array","makeJsonSchema","unknown","_exhaustive","SchemaFactoryError","null","array","object","catchall","result","nullable","typeDef","requireTypeDef","_enum","requireEnum","enum","keys","values","getMetaDescription","attr","name","nameExpr","args","value","ExpressionUtils","getLiteralValue","valueExpr","description","meta"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,11 +1,77 @@
|
|
|
1
|
-
import { SchemaDef, GetModels,
|
|
2
|
-
import
|
|
1
|
+
import { SchemaDef, GetModels, GetModelFields, GetModelFieldType, GetEnums, GetEnum, GetTypeDefs, GetTypeDefFields, GetTypeDefFieldType, TypeDefFieldIsOptional, ModelFieldIsOptional, FieldIsRelation, FieldIsArray, FieldHasDefault, FieldIsComputed, FieldIsDelegateDiscriminator, AttributeApplication } from '@zenstackhq/schema';
|
|
2
|
+
import z, { z as z$1 } from 'zod';
|
|
3
|
+
import Decimal from 'decimal.js';
|
|
3
4
|
|
|
4
|
-
type
|
|
5
|
-
[
|
|
5
|
+
type GetModelFieldsShape<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
6
|
+
[Field in GetModelFields<Schema, Model> as FieldIsRelation<Schema, Model, Field> extends true ? never : Field]: ZodOptionalAndNullableIf<MapModelFieldToZod<Schema, Model, Field>, ModelFieldIsOptional<Schema, Model, Field>>;
|
|
7
|
+
} & {
|
|
8
|
+
[Field in GetModelFields<Schema, Model> as FieldIsRelation<Schema, Model, Field> extends true ? Field : never]: ZodNullableIf<z.ZodOptional<ZodArrayIf<z.ZodObject<GetModelFieldsShape<Schema, GetModelFieldType<Schema, Model, Field> extends GetModels<Schema> ? GetModelFieldType<Schema, Model, Field> : never>, z.core.$strict>, FieldIsArray<Schema, Model, Field>>>, ModelFieldIsOptional<Schema, Model, Field>>;
|
|
9
|
+
};
|
|
10
|
+
type GetModelCreateFieldsShape<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
11
|
+
[Field in GetModelFields<Schema, Model> as FieldIsRelation<Schema, Model, Field> extends true ? never : FieldIsComputed<Schema, Model, Field> extends true ? never : FieldIsDelegateDiscriminator<Schema, Model, Field> extends true ? never : Field]: ZodOptionalIf<ZodOptionalAndNullableIf<MapModelFieldToZod<Schema, Model, Field>, ModelFieldIsOptional<Schema, Model, Field>>, FieldHasDefault<Schema, Model, Field>>;
|
|
12
|
+
};
|
|
13
|
+
type GetModelUpdateFieldsShape<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
14
|
+
[Field in GetModelFields<Schema, Model> as FieldIsRelation<Schema, Model, Field> extends true ? never : FieldIsComputed<Schema, Model, Field> extends true ? never : FieldIsDelegateDiscriminator<Schema, Model, Field> extends true ? never : Field]: z.ZodOptional<ZodOptionalAndNullableIf<MapModelFieldToZod<Schema, Model, Field>, ModelFieldIsOptional<Schema, Model, Field>>>;
|
|
15
|
+
};
|
|
16
|
+
type GetTypeDefFieldsShape<Schema extends SchemaDef, Type extends GetTypeDefs<Schema>> = {
|
|
17
|
+
[Field in GetTypeDefFields<Schema, Type>]: ZodOptionalAndNullableIf<MapTypeDefFieldToZod<Schema, Type, Field>, TypeDefFieldIsOptional<Schema, Type, Field>>;
|
|
18
|
+
};
|
|
19
|
+
type FieldTypeZodMap = {
|
|
20
|
+
String: z.ZodString;
|
|
21
|
+
Int: z.ZodNumber;
|
|
22
|
+
BigInt: z.ZodBigInt;
|
|
23
|
+
Float: z.ZodNumber;
|
|
24
|
+
Decimal: z.ZodType<Decimal>;
|
|
25
|
+
Boolean: z.ZodBoolean;
|
|
26
|
+
DateTime: z.ZodType<Date>;
|
|
27
|
+
Bytes: z.ZodType<Uint8Array>;
|
|
28
|
+
Json: JsonZodType;
|
|
29
|
+
};
|
|
30
|
+
type MapModelFieldToZod<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetModelFields<Schema, Model>, FieldType = GetModelFieldType<Schema, Model, Field>> = MapFieldTypeToZod<Schema, FieldType>;
|
|
31
|
+
type MapTypeDefFieldToZod<Schema extends SchemaDef, Type extends GetTypeDefs<Schema>, Field extends GetTypeDefFields<Schema, Type>, FieldType = GetTypeDefFieldType<Schema, Type, Field>> = MapFieldTypeToZod<Schema, FieldType>;
|
|
32
|
+
type MapFieldTypeToZod<Schema extends SchemaDef, FieldType> = FieldType extends keyof FieldTypeZodMap ? FieldTypeZodMap[FieldType] : FieldType extends GetEnums<Schema> ? EnumZodType<Schema, FieldType> : FieldType extends GetTypeDefs<Schema> ? z.ZodObject<GetTypeDefFieldsShape<Schema, FieldType>, z.core.$strict> : z.ZodUnknown;
|
|
33
|
+
type JsonZodType = z.ZodObject<Record<string, z.ZodType>, z.core.$loose> | z.ZodArray<z.ZodType> | z.ZodString | z.ZodNumber | z.ZodBoolean | z.ZodNull;
|
|
34
|
+
type EnumZodType<Schema extends SchemaDef, EnumName extends GetEnums<Schema>> = z.ZodEnum<{
|
|
35
|
+
[Key in keyof GetEnum<Schema, EnumName>]: GetEnum<Schema, EnumName>[Key];
|
|
6
36
|
}>;
|
|
7
|
-
type
|
|
37
|
+
type ZodOptionalAndNullableIf<T extends z.ZodType, Condition extends boolean> = Condition extends true ? z.ZodOptional<z.ZodNullable<T>> : T;
|
|
38
|
+
type ZodOptionalIf<T extends z.ZodType, Condition extends boolean> = Condition extends true ? z.ZodOptional<T> : T;
|
|
39
|
+
type ZodNullableIf<T extends z.ZodType, Condition extends boolean> = Condition extends true ? z.ZodNullable<T> : T;
|
|
40
|
+
type ZodArrayIf<T extends z.ZodType, Condition extends boolean> = Condition extends true ? z.ZodArray<T> : T;
|
|
8
41
|
|
|
9
|
-
declare function
|
|
42
|
+
declare function createSchemaFactory<Schema extends SchemaDef>(schema: Schema): SchemaFactory<Schema>;
|
|
43
|
+
declare class SchemaFactory<Schema extends SchemaDef> {
|
|
44
|
+
private readonly schema;
|
|
45
|
+
constructor(_schema: Schema);
|
|
46
|
+
makeModelSchema<Model extends GetModels<Schema>>(model: Model): z.ZodObject<GetModelFieldsShape<Schema, Model>, z.core.$strict>;
|
|
47
|
+
makeModelCreateSchema<Model extends GetModels<Schema>>(model: Model): z.ZodObject<GetModelCreateFieldsShape<Schema, Model>, z.core.$strict>;
|
|
48
|
+
makeModelUpdateSchema<Model extends GetModels<Schema>>(model: Model): z.ZodObject<GetModelUpdateFieldsShape<Schema, Model>, z.core.$strict>;
|
|
49
|
+
private makeScalarFieldSchema;
|
|
50
|
+
private makeJsonSchema;
|
|
51
|
+
private applyCardinality;
|
|
52
|
+
makeTypeSchema<Type extends GetTypeDefs<Schema>>(type: Type): z.ZodObject<GetTypeDefFieldsShape<Schema, Type>, z.core.$strict>;
|
|
53
|
+
makeEnumSchema<Enum extends GetEnums<Schema>>(_enum: Enum): z.ZodEnum<{
|
|
54
|
+
[Key in keyof GetEnum<Schema, Enum>]: GetEnum<Schema, Enum>[Key];
|
|
55
|
+
}>;
|
|
56
|
+
private getMetaDescription;
|
|
57
|
+
private applyDescription;
|
|
58
|
+
}
|
|
10
59
|
|
|
11
|
-
|
|
60
|
+
declare function addStringValidation(schema: z$1.ZodString, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
61
|
+
declare function addNumberValidation(schema: z$1.ZodNumber, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
62
|
+
declare function addBigIntValidation(schema: z$1.ZodBigInt, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
63
|
+
declare function addDecimalValidation(schema: z$1.ZodType<Decimal> | z$1.ZodString, attributes: readonly AttributeApplication[] | undefined, addExtraValidation: boolean): z$1.ZodSchema;
|
|
64
|
+
declare function addListValidation(schema: z$1.ZodArray<any>, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
65
|
+
declare function addCustomValidation(schema: z$1.ZodSchema, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
66
|
+
|
|
67
|
+
declare const utils_addBigIntValidation: typeof addBigIntValidation;
|
|
68
|
+
declare const utils_addCustomValidation: typeof addCustomValidation;
|
|
69
|
+
declare const utils_addDecimalValidation: typeof addDecimalValidation;
|
|
70
|
+
declare const utils_addListValidation: typeof addListValidation;
|
|
71
|
+
declare const utils_addNumberValidation: typeof addNumberValidation;
|
|
72
|
+
declare const utils_addStringValidation: typeof addStringValidation;
|
|
73
|
+
declare namespace utils {
|
|
74
|
+
export { utils_addBigIntValidation as addBigIntValidation, utils_addCustomValidation as addCustomValidation, utils_addDecimalValidation as addDecimalValidation, utils_addListValidation as addListValidation, utils_addNumberValidation as addNumberValidation, utils_addStringValidation as addStringValidation };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { utils as ZodUtils, createSchemaFactory };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,77 @@
|
|
|
1
|
-
import { SchemaDef, GetModels,
|
|
2
|
-
import
|
|
1
|
+
import { SchemaDef, GetModels, GetModelFields, GetModelFieldType, GetEnums, GetEnum, GetTypeDefs, GetTypeDefFields, GetTypeDefFieldType, TypeDefFieldIsOptional, ModelFieldIsOptional, FieldIsRelation, FieldIsArray, FieldHasDefault, FieldIsComputed, FieldIsDelegateDiscriminator, AttributeApplication } from '@zenstackhq/schema';
|
|
2
|
+
import z, { z as z$1 } from 'zod';
|
|
3
|
+
import Decimal from 'decimal.js';
|
|
3
4
|
|
|
4
|
-
type
|
|
5
|
-
[
|
|
5
|
+
type GetModelFieldsShape<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
6
|
+
[Field in GetModelFields<Schema, Model> as FieldIsRelation<Schema, Model, Field> extends true ? never : Field]: ZodOptionalAndNullableIf<MapModelFieldToZod<Schema, Model, Field>, ModelFieldIsOptional<Schema, Model, Field>>;
|
|
7
|
+
} & {
|
|
8
|
+
[Field in GetModelFields<Schema, Model> as FieldIsRelation<Schema, Model, Field> extends true ? Field : never]: ZodNullableIf<z.ZodOptional<ZodArrayIf<z.ZodObject<GetModelFieldsShape<Schema, GetModelFieldType<Schema, Model, Field> extends GetModels<Schema> ? GetModelFieldType<Schema, Model, Field> : never>, z.core.$strict>, FieldIsArray<Schema, Model, Field>>>, ModelFieldIsOptional<Schema, Model, Field>>;
|
|
9
|
+
};
|
|
10
|
+
type GetModelCreateFieldsShape<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
11
|
+
[Field in GetModelFields<Schema, Model> as FieldIsRelation<Schema, Model, Field> extends true ? never : FieldIsComputed<Schema, Model, Field> extends true ? never : FieldIsDelegateDiscriminator<Schema, Model, Field> extends true ? never : Field]: ZodOptionalIf<ZodOptionalAndNullableIf<MapModelFieldToZod<Schema, Model, Field>, ModelFieldIsOptional<Schema, Model, Field>>, FieldHasDefault<Schema, Model, Field>>;
|
|
12
|
+
};
|
|
13
|
+
type GetModelUpdateFieldsShape<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
14
|
+
[Field in GetModelFields<Schema, Model> as FieldIsRelation<Schema, Model, Field> extends true ? never : FieldIsComputed<Schema, Model, Field> extends true ? never : FieldIsDelegateDiscriminator<Schema, Model, Field> extends true ? never : Field]: z.ZodOptional<ZodOptionalAndNullableIf<MapModelFieldToZod<Schema, Model, Field>, ModelFieldIsOptional<Schema, Model, Field>>>;
|
|
15
|
+
};
|
|
16
|
+
type GetTypeDefFieldsShape<Schema extends SchemaDef, Type extends GetTypeDefs<Schema>> = {
|
|
17
|
+
[Field in GetTypeDefFields<Schema, Type>]: ZodOptionalAndNullableIf<MapTypeDefFieldToZod<Schema, Type, Field>, TypeDefFieldIsOptional<Schema, Type, Field>>;
|
|
18
|
+
};
|
|
19
|
+
type FieldTypeZodMap = {
|
|
20
|
+
String: z.ZodString;
|
|
21
|
+
Int: z.ZodNumber;
|
|
22
|
+
BigInt: z.ZodBigInt;
|
|
23
|
+
Float: z.ZodNumber;
|
|
24
|
+
Decimal: z.ZodType<Decimal>;
|
|
25
|
+
Boolean: z.ZodBoolean;
|
|
26
|
+
DateTime: z.ZodType<Date>;
|
|
27
|
+
Bytes: z.ZodType<Uint8Array>;
|
|
28
|
+
Json: JsonZodType;
|
|
29
|
+
};
|
|
30
|
+
type MapModelFieldToZod<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetModelFields<Schema, Model>, FieldType = GetModelFieldType<Schema, Model, Field>> = MapFieldTypeToZod<Schema, FieldType>;
|
|
31
|
+
type MapTypeDefFieldToZod<Schema extends SchemaDef, Type extends GetTypeDefs<Schema>, Field extends GetTypeDefFields<Schema, Type>, FieldType = GetTypeDefFieldType<Schema, Type, Field>> = MapFieldTypeToZod<Schema, FieldType>;
|
|
32
|
+
type MapFieldTypeToZod<Schema extends SchemaDef, FieldType> = FieldType extends keyof FieldTypeZodMap ? FieldTypeZodMap[FieldType] : FieldType extends GetEnums<Schema> ? EnumZodType<Schema, FieldType> : FieldType extends GetTypeDefs<Schema> ? z.ZodObject<GetTypeDefFieldsShape<Schema, FieldType>, z.core.$strict> : z.ZodUnknown;
|
|
33
|
+
type JsonZodType = z.ZodObject<Record<string, z.ZodType>, z.core.$loose> | z.ZodArray<z.ZodType> | z.ZodString | z.ZodNumber | z.ZodBoolean | z.ZodNull;
|
|
34
|
+
type EnumZodType<Schema extends SchemaDef, EnumName extends GetEnums<Schema>> = z.ZodEnum<{
|
|
35
|
+
[Key in keyof GetEnum<Schema, EnumName>]: GetEnum<Schema, EnumName>[Key];
|
|
6
36
|
}>;
|
|
7
|
-
type
|
|
37
|
+
type ZodOptionalAndNullableIf<T extends z.ZodType, Condition extends boolean> = Condition extends true ? z.ZodOptional<z.ZodNullable<T>> : T;
|
|
38
|
+
type ZodOptionalIf<T extends z.ZodType, Condition extends boolean> = Condition extends true ? z.ZodOptional<T> : T;
|
|
39
|
+
type ZodNullableIf<T extends z.ZodType, Condition extends boolean> = Condition extends true ? z.ZodNullable<T> : T;
|
|
40
|
+
type ZodArrayIf<T extends z.ZodType, Condition extends boolean> = Condition extends true ? z.ZodArray<T> : T;
|
|
8
41
|
|
|
9
|
-
declare function
|
|
42
|
+
declare function createSchemaFactory<Schema extends SchemaDef>(schema: Schema): SchemaFactory<Schema>;
|
|
43
|
+
declare class SchemaFactory<Schema extends SchemaDef> {
|
|
44
|
+
private readonly schema;
|
|
45
|
+
constructor(_schema: Schema);
|
|
46
|
+
makeModelSchema<Model extends GetModels<Schema>>(model: Model): z.ZodObject<GetModelFieldsShape<Schema, Model>, z.core.$strict>;
|
|
47
|
+
makeModelCreateSchema<Model extends GetModels<Schema>>(model: Model): z.ZodObject<GetModelCreateFieldsShape<Schema, Model>, z.core.$strict>;
|
|
48
|
+
makeModelUpdateSchema<Model extends GetModels<Schema>>(model: Model): z.ZodObject<GetModelUpdateFieldsShape<Schema, Model>, z.core.$strict>;
|
|
49
|
+
private makeScalarFieldSchema;
|
|
50
|
+
private makeJsonSchema;
|
|
51
|
+
private applyCardinality;
|
|
52
|
+
makeTypeSchema<Type extends GetTypeDefs<Schema>>(type: Type): z.ZodObject<GetTypeDefFieldsShape<Schema, Type>, z.core.$strict>;
|
|
53
|
+
makeEnumSchema<Enum extends GetEnums<Schema>>(_enum: Enum): z.ZodEnum<{
|
|
54
|
+
[Key in keyof GetEnum<Schema, Enum>]: GetEnum<Schema, Enum>[Key];
|
|
55
|
+
}>;
|
|
56
|
+
private getMetaDescription;
|
|
57
|
+
private applyDescription;
|
|
58
|
+
}
|
|
10
59
|
|
|
11
|
-
|
|
60
|
+
declare function addStringValidation(schema: z$1.ZodString, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
61
|
+
declare function addNumberValidation(schema: z$1.ZodNumber, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
62
|
+
declare function addBigIntValidation(schema: z$1.ZodBigInt, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
63
|
+
declare function addDecimalValidation(schema: z$1.ZodType<Decimal> | z$1.ZodString, attributes: readonly AttributeApplication[] | undefined, addExtraValidation: boolean): z$1.ZodSchema;
|
|
64
|
+
declare function addListValidation(schema: z$1.ZodArray<any>, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
65
|
+
declare function addCustomValidation(schema: z$1.ZodSchema, attributes: readonly AttributeApplication[] | undefined): z$1.ZodSchema;
|
|
66
|
+
|
|
67
|
+
declare const utils_addBigIntValidation: typeof addBigIntValidation;
|
|
68
|
+
declare const utils_addCustomValidation: typeof addCustomValidation;
|
|
69
|
+
declare const utils_addDecimalValidation: typeof addDecimalValidation;
|
|
70
|
+
declare const utils_addListValidation: typeof addListValidation;
|
|
71
|
+
declare const utils_addNumberValidation: typeof addNumberValidation;
|
|
72
|
+
declare const utils_addStringValidation: typeof addStringValidation;
|
|
73
|
+
declare namespace utils {
|
|
74
|
+
export { utils_addBigIntValidation as addBigIntValidation, utils_addCustomValidation as addCustomValidation, utils_addDecimalValidation as addDecimalValidation, utils_addListValidation as addListValidation, utils_addNumberValidation as addNumberValidation, utils_addStringValidation as addStringValidation };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { utils as ZodUtils, createSchemaFactory };
|