@zenstackhq/zod 3.4.0-beta.4 → 3.4.1
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.js.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,SAASA,OAAOC,SAAS;AACzB,SAASC,SAAkB;AAGpB,SAASC,iBACZC,QACAC,OAAY;AAEZ,SAAOC,EAAEC,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,SAAOK,MAAML,SAASM,IAAI,EACrBC,KAAK,UAAU,MAAMnB,EAAEoB,OAAM,CAAA,EAC7BD,KAAKE,EAAEC,MAAM,OAAO,UAAU,SAAS,SAAA,GAAY,MAAMtB,EAAEuB,OAAM,CAAA,EACjEJ,KAAK,WAAW,MAAMnB,EAAEwB,QAAO,CAAA,EAC/BL,KAAK,YAAY,MAAMnB,EAAEoB,OAAM,EAAGK,SAAQ,CAAA,EAC1CC,UAAU,MAAM1B,EAAE2B,QAAO,CAAA;AAClC;AAPSX;","names":["match","P","z","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/factory.ts","../src/error.ts","../src/utils.ts"],"sourcesContent":["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":"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","names":["ExpressionUtils","SchemaAccessor","Decimal","z","SchemaFactoryError","Error","message","ExpressionUtils","Decimal","z","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/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenstackhq/zod",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.1",
|
|
4
4
|
"description": "ZenStack Zod integration",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"keywords": [
|
|
6
|
+
"keywords": [
|
|
7
|
+
"zenstack",
|
|
8
|
+
"zod"
|
|
9
|
+
],
|
|
7
10
|
"files": [
|
|
8
11
|
"dist"
|
|
9
12
|
],
|
|
@@ -22,19 +25,24 @@
|
|
|
22
25
|
}
|
|
23
26
|
},
|
|
24
27
|
"dependencies": {
|
|
25
|
-
"
|
|
26
|
-
"@zenstackhq/
|
|
28
|
+
"decimal.js": "^10.4.3",
|
|
29
|
+
"@zenstackhq/schema": "3.4.1"
|
|
27
30
|
},
|
|
28
31
|
"devDependencies": {
|
|
29
32
|
"zod": "^4.1.0",
|
|
30
|
-
"@zenstackhq/
|
|
31
|
-
"@zenstackhq/
|
|
33
|
+
"@zenstackhq/eslint-config": "3.4.1",
|
|
34
|
+
"@zenstackhq/vitest-config": "3.4.1",
|
|
35
|
+
"@zenstackhq/typescript-config": "3.4.1"
|
|
32
36
|
},
|
|
33
37
|
"peerDependencies": {
|
|
34
38
|
"zod": "^4.0.0"
|
|
35
39
|
},
|
|
36
40
|
"scripts": {
|
|
37
41
|
"build": "tsc --noEmit && tsup-node",
|
|
38
|
-
"
|
|
42
|
+
"watch": "tsup-node --watch",
|
|
43
|
+
"lint": "eslint src --ext ts",
|
|
44
|
+
"test": "vitest run",
|
|
45
|
+
"pack": "pnpm pack",
|
|
46
|
+
"test:generate": "tsx ../../scripts/test-generate.ts ."
|
|
39
47
|
}
|
|
40
48
|
}
|