prisma-guard 1.17.0 → 1.18.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/guard.ts","../../src/shared/errors.ts","../../src/shared/scalar-base.ts","../../src/runtime/schema-builder.ts","../../src/runtime/zod-type-map.ts","../../src/shared/utils.ts","../../src/runtime/query-builder.ts","../../src/shared/constants.ts","../../src/shared/match-caller.ts","../../src/runtime/policy.ts","../../src/runtime/query-builder-where.ts","../../src/shared/deep-clone.ts","../../src/runtime/query-builder-forced.ts","../../src/runtime/query-builder-args.ts","../../src/runtime/query-builder-projection.ts","../../src/runtime/scope-extension.ts","../../src/runtime/model-guard.ts","../../src/runtime/model-guard-data.ts","../../src/runtime/model-guard-resolve.ts"],"sourcesContent":["import { ZodError } from \"zod\";\nimport type {\n TypeMap,\n GuardConfig,\n InputOpts,\n ModelOpts,\n QueryMethod,\n ShapeOrFn,\n QuerySchema,\n GuardLogger,\n} from \"../shared/types.js\";\nimport { ShapeError, PolicyError, formatZodError } from \"../shared/errors.js\";\nimport { createScalarBase } from \"../shared/scalar-base.js\";\nimport { createSchemaBuilder } from \"./schema-builder.js\";\nimport { createQueryBuilder } from \"./query-builder.js\";\nimport { createScopeExtension } from \"./scope-extension.js\";\nimport { createModelGuardExtension } from \"./model-guard.js\";\nimport { validateContext } from \"./policy.js\";\n\nexport function createGuard<\n TModels extends TypeMap = TypeMap,\n TRoots extends string = string,\n TModelExt = unknown,\n>(config: GuardConfig & { typeMap: TModels }) {\n type MName = Extract<keyof TModels, string>;\n\n const scalarBase = createScalarBase(\n config.guardConfig.strictDecimal ?? false,\n );\n\n const schemaBuilder = createSchemaBuilder(\n config.typeMap,\n config.zodChains,\n config.enumMap,\n scalarBase,\n config.zodDefaults ?? {},\n );\n const queryBuilder = createQueryBuilder(\n config.typeMap,\n config.enumMap,\n config.uniqueMap ?? {},\n scalarBase,\n );\n\n const log: GuardLogger = config.logger ?? {\n warn: (msg) => console.warn(msg),\n };\n const wrapZodErrors = config.wrapZodErrors ?? false;\n\n function rethrowZod(err: unknown): never {\n if (err instanceof ZodError) {\n throw new ShapeError(`Validation failed: ${formatZodError(err)}`, {\n cause: err,\n });\n }\n throw err;\n }\n\n return {\n input: (model: MName, opts: InputOpts) => {\n const result = schemaBuilder.buildInputSchema(model, opts);\n if (!wrapZodErrors) return result;\n return {\n schema: result.schema,\n parse(data: unknown): Record<string, unknown> {\n try {\n return result.parse(data);\n } catch (err) {\n rethrowZod(err);\n }\n },\n };\n },\n\n model: (model: MName, opts: ModelOpts) =>\n schemaBuilder.buildModelSchema(model, opts),\n\n query: <TCtx = unknown>(\n model: MName,\n method: QueryMethod,\n config_: ShapeOrFn<TCtx> | Record<string, ShapeOrFn<TCtx>>,\n ): QuerySchema<TCtx> => {\n const qs = queryBuilder.buildQuerySchema(model, method, config_);\n if (!wrapZodErrors) return qs;\n return {\n schemas: qs.schemas,\n parse(body: unknown, opts?: { ctx?: TCtx }): Record<string, unknown> {\n try {\n return qs.parse(body, opts);\n } catch (err) {\n rethrowZod(err);\n }\n },\n };\n },\n\n extension: <TCtx extends Record<string, unknown> = Record<string, unknown>>(\n contextFn?: () => TCtx,\n ) => {\n const effectiveContextFn = contextFn ?? (() => ({}) as TCtx);\n\n const scopeRoots = new Set<string>();\n for (const entries of Object.values(config.scopeMap)) {\n for (const entry of entries) {\n scopeRoots.add(entry.root);\n }\n }\n\n const scopeCtxFn = () => {\n const ctx = validateContext(effectiveContextFn());\n const scopeCtx: Partial<Record<TRoots, string | number | bigint>> = {};\n for (const key of Object.keys(ctx)) {\n if (!scopeRoots.has(key)) continue;\n const val = ctx[key];\n if (\n typeof val === \"string\" ||\n typeof val === \"number\" ||\n typeof val === \"bigint\"\n ) {\n scopeCtx[key as TRoots] = val;\n } else if (val !== null && val !== undefined) {\n throw new PolicyError(\n `prisma-guard: Scope root \"${key}\" has non-primitive value (${typeof val}). Only string, number, and bigint values are accepted for scope context.`,\n );\n }\n }\n return scopeCtx;\n };\n\n const scopeExt = createScopeExtension<TRoots>(\n config.scopeMap,\n scopeCtxFn,\n config.guardConfig,\n config.logger,\n );\n\n const modelGuardExt = createModelGuardExtension({\n typeMap: config.typeMap,\n enumMap: config.enumMap,\n zodChains: config.zodChains,\n zodDefaults: config.zodDefaults ?? {},\n uniqueMap: config.uniqueMap ?? {},\n scopeMap: config.scopeMap,\n guardConfig: config.guardConfig,\n contextFn: effectiveContextFn,\n wrapZodErrors,\n });\n\n return {\n name: \"prisma-guard\",\n model: modelGuardExt as unknown as TModelExt,\n query: scopeExt.query,\n };\n },\n };\n}\n","import type { ZodError } from 'zod'\n\nexport class PolicyError extends Error {\n readonly status = 403\n readonly code = 'POLICY_DENIED'\n constructor(message = 'Access denied', options?: ErrorOptions) {\n super(message, options)\n this.name = 'PolicyError'\n }\n}\n\nexport class ShapeError extends Error {\n readonly status = 400\n readonly code = 'SHAPE_INVALID'\n constructor(message: string, options?: ErrorOptions) {\n super(message, options)\n this.name = 'ShapeError'\n }\n}\n\nexport class CallerError extends Error {\n readonly status = 400\n readonly code = 'CALLER_UNKNOWN'\n constructor(message: string, options?: ErrorOptions) {\n super(message, options)\n this.name = 'CallerError'\n }\n}\n\nexport function formatZodError(err: ZodError): string {\n return err.issues.map(i => {\n const p = i.path.length > 0 ? `${i.path.join('.')}: ` : ''\n return `${p}${i.message}`\n }).join('; ')\n}","import { z } from \"zod\";\n\nexport type ScalarBaseMap = Record<string, () => z.ZodTypeAny>;\n\nfunction isJsonSafe(value: unknown): boolean {\n type Entry = { tag: \"visit\"; value: unknown } | { tag: \"exit\"; ref: object };\n\n const stack: Entry[] = [{ tag: \"visit\", value }];\n const ancestors = new Set<object>();\n\n while (stack.length > 0) {\n const entry = stack.pop()!;\n\n if (entry.tag === \"exit\") {\n ancestors.delete(entry.ref);\n continue;\n }\n\n const current = entry.value;\n\n if (current === undefined) return false;\n if (current === null) continue;\n\n switch (typeof current) {\n case \"string\":\n case \"boolean\":\n continue;\n case \"number\":\n if (!Number.isFinite(current)) return false;\n continue;\n case \"object\": {\n if (ancestors.has(current)) return false;\n ancestors.add(current);\n stack.push({ tag: \"exit\", ref: current });\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n stack.push({ tag: \"visit\", value: current[i] });\n }\n continue;\n }\n const proto = Object.getPrototypeOf(current);\n if (proto !== Object.prototype && proto !== null) return false;\n const values = Object.values(current as Record<string, unknown>);\n for (let i = 0; i < values.length; i++) {\n stack.push({ tag: \"visit\", value: values[i] });\n }\n continue;\n }\n default:\n return false;\n }\n }\n\n return true;\n}\n\nconst DECIMAL_REGEX = /^-?(\\d+\\.?\\d*|\\.\\d+)([eE]-?\\d+)?$/;\n\nconst decimalStringSchema = z\n .string()\n .refine((s) => DECIMAL_REGEX.test(s), \"Invalid decimal string\");\n\nconst decimalObjectSchema = z.custom<unknown>(\n (v) =>\n v !== null &&\n typeof v === \"object\" &&\n typeof (v as any).toFixed === \"function\" &&\n typeof (v as any).toNumber === \"function\",\n \"Expected Decimal-compatible object\",\n);\n\nfunction createDecimalFactory(strict: boolean): () => z.ZodTypeAny {\n if (strict) {\n return () => z.union([decimalStringSchema, decimalObjectSchema]);\n }\n return () => z.union([z.number(), decimalStringSchema, decimalObjectSchema]);\n}\n\nexport function createScalarBase(strictDecimal: boolean): ScalarBaseMap {\n return {\n String: () => z.string(),\n Int: () => z.number().int(),\n Float: () => z.number(),\n Decimal: createDecimalFactory(strictDecimal),\n BigInt: () =>\n z.union([\n z.bigint(),\n z\n .number()\n .int()\n .refine(\n (v) => v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER,\n \"Number exceeds safe integer range for BigInt conversion\",\n )\n .transform((v) => BigInt(v)),\n z\n .string()\n .regex(/^-?\\d+$/)\n .transform((v) => BigInt(v)),\n ]),\n Boolean: () => z.boolean(),\n DateTime: () =>\n z\n .union([z.date(), z.string().datetime({ offset: true })])\n .pipe(z.coerce.date()),\n Json: () =>\n z\n .unknown()\n .refine(\n isJsonSafe,\n \"Value must be JSON-serializable (no undefined, functions, symbols, class instances, NaN, Infinity, or circular references)\",\n ),\n Bytes: () =>\n z.union([z.string(), z.custom<unknown>((v) => v instanceof Uint8Array)]),\n };\n}\n\nexport const SCALAR_BASE: ScalarBaseMap = createScalarBase(false);\n\nexport function wrapWithInputCoercion(\n fieldType: string,\n isList: boolean,\n schema: z.ZodTypeAny,\n): z.ZodTypeAny {\n let itemCoercion: z.ZodTypeAny | null = null;\n\n switch (fieldType) {\n case \"String\":\n itemCoercion = z.union([z.string(), z.number().transform(String)]);\n break;\n case \"Int\":\n itemCoercion = z.union([\n z.number().int(),\n z\n .string()\n .regex(/^-?\\d+$/)\n .transform(Number),\n ]);\n break;\n case \"Float\":\n itemCoercion = z.union([\n z.number(),\n z\n .string()\n .regex(/^-?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/)\n .transform(Number),\n ]);\n break;\n default:\n return schema;\n }\n\n const coercion = isList ? z.array(itemCoercion) : itemCoercion;\n return coercion.pipe(schema);\n}\n","import { z } from \"zod\";\nimport type {\n TypeMap,\n EnumMap,\n ZodChains,\n ZodDefaults,\n InputOpts,\n ModelOpts,\n InputSchema,\n} from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport { createBaseType } from \"./zod-type-map.js\";\nimport {\n wrapWithInputCoercion,\n type ScalarBaseMap,\n} from \"../shared/scalar-base.js\";\nimport {\n schemaProducesValueForUndefined,\n isZodSchema,\n} from \"../shared/utils.js\";\n\nconst DEFAULT_MAX_CACHE = 500;\nconst DEFAULT_MAX_DEPTH = 5;\n\nfunction lruGet(\n cache: Map<string, z.ZodTypeAny>,\n key: string,\n): z.ZodTypeAny | undefined {\n const value = cache.get(key);\n if (value !== undefined) {\n cache.delete(key);\n cache.set(key, value);\n }\n return value;\n}\n\nfunction lruSet(\n cache: Map<string, z.ZodTypeAny>,\n key: string,\n value: z.ZodTypeAny,\n maxSize: number,\n): void {\n if (cache.has(key)) cache.delete(key);\n cache.set(key, value);\n if (cache.size > maxSize) {\n const oldest = cache.keys().next().value;\n if (oldest !== undefined) cache.delete(oldest);\n }\n}\n\nexport function createSchemaBuilder(\n typeMap: TypeMap,\n zodChains: ZodChains,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n zodDefaults: ZodDefaults,\n) {\n const chainCache = new Map<string, z.ZodTypeAny>();\n\n function buildFieldSchema(model: string, field: string): z.ZodTypeAny {\n const cacheKey = `${model}.${field}`;\n\n const cached = lruGet(chainCache, cacheKey);\n if (cached) return cached;\n\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldMeta = modelFields[field];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${field}\" on model \"${model}\"`);\n\n const base = createBaseType(fieldMeta, enumMap, scalarBase);\n\n let result = base;\n const chainFn = zodChains[model]?.[field];\n if (chainFn) {\n try {\n result = chainFn(base);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid @zod directive on ${model}.${field} (${fieldMeta.type}): ${err.message}`,\n { cause: err },\n );\n }\n }\n\n if (\n !fieldMeta.isEnum &&\n !fieldMeta.isRelation &&\n !fieldMeta.isUnsupported\n ) {\n result = wrapWithInputCoercion(fieldMeta.type, fieldMeta.isList, result);\n }\n\n lruSet(chainCache, cacheKey, result, DEFAULT_MAX_CACHE);\n return result;\n }\n\n function buildBaseFieldSchema(model: string, field: string): z.ZodTypeAny {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldMeta = modelFields[field];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${field}\" on model \"${model}\"`);\n\n return createBaseType(fieldMeta, enumMap, scalarBase);\n }\n\n function buildInputSchema(model: string, opts: InputOpts): InputSchema {\n if (opts.pick && opts.omit) {\n throw new ShapeError('InputOpts cannot define both \"pick\" and \"omit\"');\n }\n\n const mode = opts.mode ?? \"create\";\n const allowNull = opts.allowNull ?? true;\n\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const zodDefaultFields = zodDefaults[model];\n const zodDefaultSet = zodDefaultFields\n ? new Set(zodDefaultFields)\n : undefined;\n\n let fieldNames = Object.keys(modelFields).filter((name) => {\n const meta = modelFields[name];\n return !meta.isRelation && !meta.isUpdatedAt;\n });\n\n if (opts.pick) {\n for (const name of opts.pick) {\n if (!modelFields[name])\n throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`);\n if (modelFields[name].isRelation)\n throw new ShapeError(\n `Field \"${name}\" cannot be used in input schema (relation field)`,\n );\n if (modelFields[name].isUpdatedAt)\n throw new ShapeError(\n `Field \"${name}\" cannot be used in input schema (updatedAt field)`,\n );\n }\n fieldNames = fieldNames.filter((n) => opts.pick!.includes(n));\n } else if (opts.omit) {\n for (const name of opts.omit) {\n if (!modelFields[name])\n throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`);\n }\n fieldNames = fieldNames.filter((n) => !opts.omit!.includes(n));\n }\n\n const schemaMap: Record<string, z.ZodTypeAny> = {};\n\n for (const name of fieldNames) {\n const fieldMeta = modelFields[name];\n let fieldSchema: z.ZodTypeAny;\n let handlesUndefined: boolean;\n\n if (opts.refine?.[name]) {\n let refined: unknown;\n try {\n refined = opts.refine[name](buildBaseFieldSchema(model, name));\n } catch (err: any) {\n throw new ShapeError(\n `Refine function for \"${model}.${name}\" threw: ${err.message}`,\n { cause: err },\n );\n }\n if (!isZodSchema(refined)) {\n throw new ShapeError(\n `Refine function for \"${model}.${name}\" must return a Zod schema`,\n );\n }\n fieldSchema = refined;\n handlesUndefined = schemaProducesValueForUndefined(fieldSchema);\n } else {\n fieldSchema = buildFieldSchema(model, name);\n handlesUndefined =\n zodDefaultSet !== undefined && zodDefaultSet.has(name);\n }\n\n if (mode === \"create\") {\n if (!fieldMeta.isRequired) {\n if (handlesUndefined) {\n fieldSchema = allowNull ? fieldSchema.nullable() : fieldSchema;\n } else {\n fieldSchema = allowNull\n ? fieldSchema.nullable().optional()\n : fieldSchema.optional();\n }\n } else if (fieldMeta.hasDefault) {\n if (!handlesUndefined) {\n fieldSchema = fieldSchema.optional();\n }\n }\n } else {\n if (!fieldMeta.isRequired && allowNull) {\n fieldSchema = fieldSchema.nullable().optional();\n } else {\n fieldSchema = fieldSchema.optional();\n }\n }\n\n schemaMap[name] = fieldSchema;\n }\n\n let schema = z.object(schemaMap).strict();\n\n if (opts.partial) {\n schema = schema.partial() as any;\n }\n\n return {\n schema,\n parse(data: unknown): Record<string, unknown> {\n return schema.parse(data) as Record<string, unknown>;\n },\n };\n }\n\n function buildModelSchema(\n model: string,\n opts: ModelOpts,\n depth = 0,\n maxDepth?: number,\n ): z.ZodObject<any> {\n if (opts.pick && opts.omit) {\n throw new ShapeError('ModelOpts cannot define both \"pick\" and \"omit\"');\n }\n\n const effectiveMaxDepth = maxDepth ?? opts.maxDepth ?? DEFAULT_MAX_DEPTH;\n if (depth > effectiveMaxDepth) {\n throw new ShapeError(\n `Maximum include depth (${effectiveMaxDepth}) exceeded`,\n );\n }\n\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const includeKeys = new Set(Object.keys(opts.include ?? {}));\n\n if (opts.pick) {\n for (const name of opts.pick) {\n if (!modelFields[name])\n throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`);\n if (modelFields[name].isRelation && !includeKeys.has(name)) {\n throw new ShapeError(\n `Field \"${name}\" is a relation on model \"${model}\". Use include: { ${name}: ... } instead of pick.`,\n );\n }\n }\n }\n if (opts.omit) {\n for (const name of opts.omit) {\n if (!modelFields[name])\n throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`);\n }\n }\n\n let scalarNames = Object.keys(modelFields).filter((name) => {\n const meta = modelFields[name];\n return !meta.isRelation;\n });\n\n if (opts.pick) {\n scalarNames = scalarNames.filter((n) => opts.pick!.includes(n));\n } else if (opts.omit) {\n scalarNames = scalarNames.filter((n) => !opts.omit!.includes(n));\n }\n\n const schemaMap: Record<string, z.ZodTypeAny> = {};\n\n for (const name of scalarNames) {\n const fieldMeta = modelFields[name];\n let fieldSchema = createBaseType(fieldMeta, enumMap, scalarBase);\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable();\n }\n schemaMap[name] = fieldSchema;\n }\n\n for (const [relName, relOpts] of Object.entries(opts.include ?? {})) {\n const fieldMeta = modelFields[relName];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${relName}\" on model \"${model}\"`);\n if (!fieldMeta.isRelation)\n throw new ShapeError(\n `Field \"${relName}\" is not a relation on model \"${model}\"`,\n );\n\n const relatedModel = fieldMeta.type;\n if (!typeMap[relatedModel]) {\n throw new ShapeError(\n `Related model \"${relatedModel}\" not found in type map`,\n );\n }\n let relSchema: z.ZodTypeAny = buildModelSchema(\n relatedModel,\n relOpts,\n depth + 1,\n effectiveMaxDepth,\n );\n if (fieldMeta.isList) {\n relSchema = z.array(relSchema);\n } else if (!fieldMeta.isRequired) {\n relSchema = relSchema.nullable();\n }\n schemaMap[relName] = relSchema;\n }\n\n if (opts._count) {\n const listRelationNames = Object.keys(modelFields).filter(\n (n) => modelFields[n].isRelation && modelFields[n].isList,\n );\n\n if (opts._count === true) {\n const countFields: Record<string, z.ZodTypeAny> = {};\n for (const relName of listRelationNames) {\n countFields[relName] = z.number().int().min(0);\n }\n schemaMap[\"_count\"] = z.object(countFields);\n } else {\n const countFields: Record<string, z.ZodTypeAny> = {};\n for (const relName of Object.keys(opts._count)) {\n if (!modelFields[relName])\n throw new ShapeError(\n `Unknown field \"${relName}\" on model \"${model}\" in _count`,\n );\n if (!modelFields[relName].isRelation)\n throw new ShapeError(\n `Field \"${relName}\" is not a relation on model \"${model}\" in _count`,\n );\n if (!modelFields[relName].isList)\n throw new ShapeError(\n `Field \"${relName}\" is a to-one relation on model \"${model}\" in _count. Only to-many relations support _count.`,\n );\n countFields[relName] = z.number().int().min(0);\n }\n schemaMap[\"_count\"] = z.object(countFields);\n }\n }\n\n let schema = z.object(schemaMap);\n if (opts.strict) {\n schema = schema.strict() as any;\n }\n return schema;\n }\n\n return {\n buildFieldSchema,\n buildBaseFieldSchema,\n buildInputSchema,\n buildModelSchema,\n };\n}\n","import { z } from \"zod\";\nimport type { FieldMeta, EnumMap } from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport { coerceToArray } from \"../shared/utils.js\";\nimport {\n wrapWithInputCoercion,\n type ScalarBaseMap,\n} from \"../shared/scalar-base.js\";\n\nconst SCALAR_OPERATORS: Record<string, Set<string>> = {\n String: new Set([\n \"equals\",\n \"not\",\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"in\",\n \"notIn\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n ]),\n Int: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n Float: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n Decimal: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n BigInt: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n Boolean: new Set([\"equals\", \"not\"]),\n DateTime: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n Bytes: new Set([]),\n Json: new Set([\n \"equals\",\n \"not\",\n \"path\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ]),\n};\n\nconst SCALAR_LIST_OPERATORS = new Set([\n \"has\",\n \"hasEvery\",\n \"hasSome\",\n \"isEmpty\",\n \"equals\",\n]);\n\nconst ENUM_OPERATORS = new Set([\"equals\", \"not\", \"in\", \"notIn\"]);\n\nconst NUMERIC_TYPES = new Set([\"Int\", \"Float\", \"Decimal\", \"BigInt\"]);\nconst COMPARABLE_TYPES = new Set([\n \"Int\",\n \"Float\",\n \"Decimal\",\n \"BigInt\",\n \"String\",\n \"DateTime\",\n]);\n\nconst JSON_STRING_OPERATORS = new Set([\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n]);\n\nconst JSON_ARRAY_OPERATORS = new Set([\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n]);\n\nexport { NUMERIC_TYPES, COMPARABLE_TYPES };\n\nexport function getSupportedOperators(fieldMeta: FieldMeta): string[] {\n if (fieldMeta.isList) return [...SCALAR_LIST_OPERATORS];\n if (fieldMeta.isEnum) return [...ENUM_OPERATORS];\n const ops = SCALAR_OPERATORS[fieldMeta.type];\n if (!ops) return [];\n return [...ops];\n}\n\nexport function createBaseType(\n fieldMeta: FieldMeta,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n let base: z.ZodTypeAny;\n\n if (fieldMeta.isUnsupported) {\n base = z.unknown();\n } else if (fieldMeta.isEnum) {\n const values = enumMap[fieldMeta.type];\n if (!values || values.length === 0) {\n throw new ShapeError(`Unknown enum: ${fieldMeta.type}`);\n }\n base = z.enum(values as unknown as [string, ...string[]]);\n } else {\n const factory = scalarBase[fieldMeta.type];\n if (!factory) {\n throw new ShapeError(`Unknown scalar type: ${fieldMeta.type}`);\n }\n base = factory();\n }\n\n if (fieldMeta.isList) {\n base = z.array(base);\n }\n\n return base;\n}\n\nexport function createScalarListOperatorSchema(\n fieldMeta: FieldMeta,\n operator: string,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n if (!SCALAR_LIST_OPERATORS.has(operator)) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for scalar list fields`,\n );\n }\n\n if (operator === \"isEmpty\") {\n return z.boolean();\n }\n\n const itemMeta: FieldMeta = { ...fieldMeta, isList: false };\n const itemBase = createBaseType(itemMeta, enumMap, scalarBase);\n\n if (operator === \"has\") {\n return !fieldMeta.isRequired ? z.union([itemBase, z.null()]) : itemBase;\n }\n\n if (operator === \"equals\") {\n const arrSchema = z.array(itemBase);\n return fieldMeta.isRequired\n ? z.preprocess(coerceToArray, arrSchema)\n : z.union([z.preprocess(coerceToArray, arrSchema), z.null()]);\n }\n\n return z.preprocess(coerceToArray, z.array(itemBase));\n}\n\nfunction createJsonOperatorSchema(\n fieldMeta: FieldMeta,\n operator: string,\n): z.ZodTypeAny {\n const jsonValue = z.unknown();\n\n if (operator === \"equals\" || operator === \"not\") {\n return !fieldMeta.isRequired ? z.union([jsonValue, z.null()]) : jsonValue;\n }\n\n if (operator === \"path\") {\n return z.preprocess(coerceToArray, z.array(z.string()).min(1));\n }\n\n if (JSON_STRING_OPERATORS.has(operator)) {\n return z.string();\n }\n\n if (JSON_ARRAY_OPERATORS.has(operator)) {\n return jsonValue;\n }\n\n throw new ShapeError(\n `Operator \"${operator}\" not supported for Json fields`,\n );\n}\n\nexport function createOperatorSchema(\n fieldMeta: FieldMeta,\n operator: string,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n if (fieldMeta.isList) {\n return createScalarListOperatorSchema(\n fieldMeta,\n operator,\n enumMap,\n scalarBase,\n );\n }\n\n if (fieldMeta.isEnum) {\n const values = enumMap[fieldMeta.type];\n if (!values || values.length === 0) {\n throw new ShapeError(`Unknown enum: ${fieldMeta.type}`);\n }\n if (!ENUM_OPERATORS.has(operator)) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for enum fields`,\n );\n }\n const enumSchema = z.enum(values as unknown as [string, ...string[]]);\n if (operator === \"equals\" || operator === \"not\") {\n return !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n }\n const itemSchema = !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n return z.preprocess(coerceToArray, z.array(itemSchema));\n }\n\n if (fieldMeta.type === \"Json\") {\n const supportedOps = SCALAR_OPERATORS[\"Json\"];\n if (!supportedOps || !supportedOps.has(operator)) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for type \"Json\"`,\n );\n }\n return createJsonOperatorSchema(fieldMeta, operator);\n }\n\n const supportedOps = SCALAR_OPERATORS[fieldMeta.type];\n if (!supportedOps) {\n throw new ShapeError(`Unknown scalar type for operator: ${fieldMeta.type}`);\n }\n if (supportedOps.size === 0) {\n throw new ShapeError(\n `Type \"${fieldMeta.type}\" does not support filter operators`,\n );\n }\n if (!supportedOps.has(operator)) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for type \"${fieldMeta.type}\"`,\n );\n }\n\n const factory = scalarBase[fieldMeta.type];\n if (!factory) {\n throw new ShapeError(`Unknown scalar type: ${fieldMeta.type}`);\n }\n\n const scalar = factory();\n const coerced = wrapWithInputCoercion(fieldMeta.type, false, scalar);\n\n if (operator === \"equals\" || operator === \"not\") {\n return !fieldMeta.isRequired ? z.union([coerced, z.null()]) : coerced;\n }\n if (operator === \"in\" || operator === \"notIn\") {\n const itemSchema = !fieldMeta.isRequired\n ? z.union([coerced, z.null()])\n : coerced;\n return z.preprocess(coerceToArray, z.array(itemSchema));\n }\n return coerced;\n}","import { z } from 'zod'\n\nexport function isPlainObject(v: unknown): v is Record<string, unknown> {\n if (typeof v !== 'object' || v === null || Array.isArray(v)) return false\n const proto = Object.getPrototypeOf(v)\n return proto === Object.prototype || proto === null\n}\n\nexport function schemaProducesValueForUndefined(schema: z.ZodTypeAny): boolean {\n const result = schema.safeParse(undefined)\n return result.success && result.data !== undefined\n}\n\nexport function isZodSchema(value: unknown): value is z.ZodTypeAny {\n if (value == null || typeof value !== 'object') return false\n const v = value as Record<string, unknown>\n return typeof v.parse === 'function' && typeof v.optional === 'function'\n}\n\nexport function coerceToArray(value: unknown): unknown {\n if (Array.isArray(value)) return value\n if (value === null || value === undefined) return value\n if (typeof value !== 'object') return value\n const keys = Object.keys(value as Record<string, unknown>)\n if (keys.length === 0) return []\n const allNumeric = keys.every((k) => /^\\d+$/.test(k))\n if (!allNumeric) return value\n const sorted = keys.map(Number).sort((a, b) => a - b)\n const obj = value as Record<string, unknown>\n const result: unknown[] = []\n for (const idx of sorted) {\n result.push(obj[String(idx)])\n }\n return result\n}","import { z } from \"zod\";\nimport type {\n TypeMap,\n EnumMap,\n UniqueMap,\n QueryMethod,\n ShapeConfig,\n ShapeOrFn,\n QuerySchema,\n NestedSelectArgs,\n OrderByFieldConfig,\n} from \"../shared/types.js\";\nimport { ShapeError, CallerError } from \"../shared/errors.js\";\nimport { SHAPE_CONFIG_KEYS, GUARD_SHAPE_KEYS } from \"../shared/constants.js\";\nimport { matchCallerPattern } from \"../shared/match-caller.js\";\nimport { isPlainObject, coerceToArray } from \"../shared/utils.js\";\nimport { requireContext } from \"./policy.js\";\nimport { createWhereBuilder } from \"./query-builder-where.js\";\nimport { createArgsBuilder } from \"./query-builder-args.js\";\nimport { createProjectionBuilder } from \"./query-builder-projection.js\";\nimport {\n applyBuiltShape,\n EMPTY_WHERE_FORCED,\n validateUniqueEquality,\n} from \"./query-builder-forced.js\";\nimport type {\n BuiltShape,\n ForcedTree,\n WhereForced,\n} from \"./query-builder-forced.js\";\nimport type { WhereBuiltResult } from \"./query-builder-where.js\";\nimport type {\n BuiltIncludeResult,\n BuiltSelectResult,\n} from \"./query-builder-projection.js\";\nimport type { ScalarBaseMap } from \"../shared/scalar-base.js\";\n\nconst METHOD_ALLOWED_ARGS: Record<QueryMethod, Set<string>> = {\n findMany: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findFirst: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findFirstOrThrow: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findUnique: new Set([\"where\", \"include\", \"select\"]),\n findUniqueOrThrow: new Set([\"where\", \"include\", \"select\"]),\n count: new Set([\"where\", \"select\", \"cursor\", \"orderBy\", \"skip\", \"take\"]),\n aggregate: new Set([\n \"where\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"_count\",\n \"_avg\",\n \"_sum\",\n \"_min\",\n \"_max\",\n ]),\n groupBy: new Set([\n \"where\",\n \"by\",\n \"having\",\n \"_count\",\n \"_avg\",\n \"_sum\",\n \"_min\",\n \"_max\",\n \"orderBy\",\n \"take\",\n \"skip\",\n ]),\n};\n\nconst UNIQUE_WHERE_METHODS: Set<QueryMethod> = new Set([\n \"findUnique\",\n \"findUniqueOrThrow\",\n]);\n\nexport function createQueryBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n uniqueMap: UniqueMap,\n scalarBase: ScalarBaseMap,\n) {\n const whereBuilder = createWhereBuilder(typeMap, enumMap, scalarBase);\n const argsBuilder = createArgsBuilder(\n typeMap,\n enumMap,\n uniqueMap,\n scalarBase,\n );\n const projectionBuilder = createProjectionBuilder(typeMap, enumMap, {\n buildWhereSchema: whereBuilder.buildWhereSchema,\n buildOrderBySchema: argsBuilder.buildOrderBySchema,\n buildCursorSchema: argsBuilder.buildCursorSchema,\n buildTakeSchema: argsBuilder.buildTakeSchema,\n });\n\n function isShapeConfig(obj: unknown): obj is ShapeConfig {\n if (!isPlainObject(obj)) return false;\n const keys = Object.keys(obj);\n return keys.length === 0 || keys.every((k) => SHAPE_CONFIG_KEYS.has(k));\n }\n\n function validateShapeArgs(method: QueryMethod, shape: ShapeConfig): void {\n const allowed = METHOD_ALLOWED_ARGS[method];\n for (const key of Object.keys(shape)) {\n if (!SHAPE_CONFIG_KEYS.has(key))\n throw new ShapeError(`Unknown shape config key \"${key}\"`);\n if (!allowed.has(key))\n throw new ShapeError(`Arg \"${key}\" not allowed for method \"${method}\"`);\n }\n if (UNIQUE_WHERE_METHODS.has(method) && !shape.where) {\n throw new ShapeError(`${method} shape must define \"where\"`);\n }\n if (method === \"groupBy\" && !shape.by)\n throw new ShapeError('groupBy shape must define \"by\"');\n if (method === \"groupBy\" && (shape.include || shape.select)) {\n throw new ShapeError('groupBy does not support \"include\" or \"select\"');\n }\n if (method === \"aggregate\" && (shape.include || shape.select)) {\n throw new ShapeError('aggregate does not support \"include\" or \"select\"');\n }\n if (method === \"count\" && shape.include)\n throw new ShapeError('count does not support \"include\"');\n if (\n method === \"groupBy\" &&\n shape.orderBy &&\n (shape.orderBy as unknown) !== true\n ) {\n const bySet = new Set(shape.by);\n for (const fieldName of Object.keys(shape.orderBy)) {\n if (fieldName === \"_count\") continue;\n if (!bySet.has(fieldName)) {\n throw new ShapeError(\n `orderBy field \"${fieldName}\" must be included in \"by\" for groupBy`,\n );\n }\n }\n }\n if (method === \"groupBy\" && shape.having) {\n const bySet = new Set(shape.by);\n for (const fieldName of Object.keys(shape.having)) {\n if (!bySet.has(fieldName)) {\n throw new ShapeError(\n `having field \"${fieldName}\" must be included in \"by\" for groupBy`,\n );\n }\n }\n }\n }\n\n function validateUniqueWhere(\n model: string,\n method: QueryMethod,\n shape: ShapeConfig,\n ): void {\n if (!UNIQUE_WHERE_METHODS.has(method)) return;\n if (!shape.where) return;\n validateUniqueEquality(model, shape.where, method, uniqueMap, typeMap);\n }\n\n function resolveAndValidateShape(\n shapeOrFn: ShapeOrFn<any>,\n ctx?: any,\n ): ShapeConfig {\n if (typeof shapeOrFn === \"function\") {\n requireContext(ctx, \"shape function\");\n const result = shapeOrFn(ctx);\n if (!isPlainObject(result)) {\n throw new ShapeError(\n \"Dynamic shape function must return a plain object\",\n );\n }\n return result as ShapeConfig;\n }\n return shapeOrFn as ShapeConfig;\n }\n\n function buildShapeZodSchema(\n model: string,\n method: QueryMethod,\n shape: ShapeConfig,\n ): BuiltShape {\n validateShapeArgs(method, shape);\n validateUniqueWhere(model, method, shape);\n\n const schemaFields: Record<string, z.ZodTypeAny> = {};\n let forcedWhere: WhereForced = EMPTY_WHERE_FORCED;\n let forcedOnlyWhereKeys = new Set<string>();\n let forcedIncludeTree: Record<string, ForcedTree> = {};\n let forcedSelectTree: Record<string, ForcedTree> = {};\n let forcedIncludeCountWhere: Record<string, WhereForced> = {};\n let forcedSelectCountWhere: Record<string, WhereForced> = {};\n\n if (shape.where) {\n const { schema, forced, forcedOnlyKeys } = whereBuilder.buildWhereSchema(\n model,\n shape.where,\n );\n if (schema) schemaFields[\"where\"] = schema;\n forcedWhere = forced;\n forcedOnlyWhereKeys = forcedOnlyKeys;\n }\n\n if (shape.include) {\n const result = projectionBuilder.buildIncludeSchema(model, shape.include);\n schemaFields[\"include\"] = result.schema;\n forcedIncludeTree = result.forcedTree;\n forcedIncludeCountWhere = result.forcedCountWhere;\n }\n\n if (shape.select) {\n if (method === \"count\") {\n schemaFields[\"select\"] = argsBuilder.buildCountSelectSchema(\n model,\n shape.select as Record<string, true>,\n );\n } else {\n const result = projectionBuilder.buildSelectSchema(model, shape.select);\n schemaFields[\"select\"] = result.schema;\n forcedSelectTree = result.forcedTree;\n forcedSelectCountWhere = result.forcedCountWhere;\n }\n }\n\n if (shape.orderBy) {\n if (method === \"groupBy\" && shape.by) {\n const sortEnum = z.enum([\"asc\", \"desc\"]);\n const bySet = new Set(shape.by);\n\n if ((shape.orderBy as unknown) === true) {\n const groupByOrderFields: Record<string, z.ZodTypeAny> = {};\n for (const field of shape.by) {\n groupByOrderFields[field] = sortEnum.optional();\n }\n groupByOrderFields[\"_count\"] = sortEnum.optional();\n const fieldKeys = Object.keys(groupByOrderFields);\n const singleSchema = z\n .object(groupByOrderFields)\n .strict()\n .refine(\n (v) =>\n fieldKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: \"orderBy must specify at least one field\" },\n );\n schemaFields[\"orderBy\"] = z\n .union([singleSchema, z.preprocess(coerceToArray, z.array(singleSchema).min(1))])\n .optional();\n } else {\n const groupByOrderFields: Record<string, z.ZodTypeAny> = {};\n\n for (const [fieldName, config] of Object.entries(shape.orderBy)) {\n if (fieldName === \"_count\") {\n if (config === true) {\n groupByOrderFields[\"_count\"] = sortEnum.optional();\n } else if (typeof config === \"object\" && config !== null) {\n const countFields: Record<string, z.ZodTypeAny> = {};\n for (const countField of Object.keys(config)) {\n if (!bySet.has(countField)) {\n throw new ShapeError(\n `orderBy _count field \"${countField}\" must be included in \"by\" for groupBy`,\n );\n }\n countFields[countField] = sortEnum.optional();\n }\n const countKeys = Object.keys(countFields);\n groupByOrderFields[\"_count\"] = z\n .object(countFields)\n .strict()\n .refine(\n (v) =>\n countKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n {\n message: \"orderBy._count must specify at least one field\",\n },\n )\n .optional();\n }\n continue;\n }\n\n if (!bySet.has(fieldName)) {\n throw new ShapeError(\n `orderBy field \"${fieldName}\" must be included in \"by\" for groupBy`,\n );\n }\n groupByOrderFields[fieldName] = sortEnum.optional();\n }\n\n const fieldKeys = Object.keys(groupByOrderFields);\n const singleSchema = z\n .object(groupByOrderFields)\n .strict()\n .refine(\n (v) =>\n fieldKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: \"orderBy must specify at least one field\" },\n );\n schemaFields[\"orderBy\"] = z\n .union([singleSchema, z.preprocess(coerceToArray, z.array(singleSchema).min(1))])\n .optional();\n }\n } else {\n schemaFields[\"orderBy\"] = argsBuilder.buildOrderBySchema(\n model,\n shape.orderBy as Record<string, OrderByFieldConfig>,\n );\n }\n }\n\n if (shape.cursor)\n schemaFields[\"cursor\"] = argsBuilder.buildCursorSchema(\n model,\n shape.cursor,\n );\n if (shape.take)\n schemaFields[\"take\"] = argsBuilder.buildTakeSchema(shape.take);\n if (shape.skip !== undefined) {\n if (shape.skip !== true) {\n throw new ShapeError('Shape config \"skip\" must be true');\n }\n schemaFields[\"skip\"] = z.number().int().min(0).optional();\n }\n if (shape.distinct)\n schemaFields[\"distinct\"] = argsBuilder.buildDistinctSchema(\n model,\n shape.distinct,\n );\n if (shape._count)\n schemaFields[\"_count\"] = argsBuilder.buildCountFieldSchema(\n model,\n shape._count,\n \"_count\",\n );\n if (shape._avg)\n schemaFields[\"_avg\"] = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_avg\",\n shape._avg,\n );\n if (shape._sum)\n schemaFields[\"_sum\"] = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_sum\",\n shape._sum,\n );\n if (shape._min)\n schemaFields[\"_min\"] = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_min\",\n shape._min,\n );\n if (shape._max)\n schemaFields[\"_max\"] = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_max\",\n shape._max,\n );\n if (shape.by)\n schemaFields[\"by\"] = argsBuilder.buildBySchema(model, shape.by);\n if (shape.having)\n schemaFields[\"having\"] = argsBuilder.buildHavingSchema(\n model,\n shape.having,\n );\n\n return {\n zodSchema: z.object(schemaFields).strict(),\n forcedWhere,\n forcedOnlyWhereKeys,\n forcedIncludeTree,\n forcedSelectTree,\n forcedIncludeCountWhere,\n forcedSelectCountWhere,\n };\n }\n\n function matchCaller<TCtx>(\n shapes: Record<string, ShapeOrFn<TCtx>>,\n caller: string,\n ): { key: string; shape: ShapeOrFn<TCtx> } | null {\n const matched = matchCallerPattern(Object.keys(shapes), caller);\n if (!matched) return null;\n return { key: matched, shape: shapes[matched] };\n }\n\n function buildQuerySchema<TCtx>(\n model: string,\n method: QueryMethod,\n config: ShapeOrFn<TCtx> | Record<string, ShapeOrFn<TCtx>>,\n ): QuerySchema<TCtx> {\n const isSingle = typeof config === \"function\" || isShapeConfig(config);\n const builtCache = new Map<string, BuiltShape>();\n\n if (isSingle && typeof config !== \"function\") {\n builtCache.set(\n \"_default\",\n buildShapeZodSchema(model, method, config as ShapeConfig),\n );\n }\n\n if (!isSingle) {\n for (const key of Object.keys(config as Record<string, unknown>)) {\n if (SHAPE_CONFIG_KEYS.has(key)) {\n throw new ShapeError(\n `Caller key \"${key}\" collides with reserved shape config key. Rename the caller path.`,\n );\n }\n }\n for (const [key, shapeOrFn] of Object.entries(\n config as Record<string, ShapeOrFn<TCtx>>,\n )) {\n if (typeof shapeOrFn !== \"function\") {\n builtCache.set(\n key,\n buildShapeZodSchema(model, method, shapeOrFn as ShapeConfig),\n );\n }\n }\n }\n\n const isUnique = UNIQUE_WHERE_METHODS.has(method);\n\n return {\n schemas: Object.fromEntries(\n [...builtCache.entries()].map(([k, v]) => [k, v.zodSchema]),\n ),\n parse(\n body: unknown,\n opts?: { ctx?: TCtx; caller?: string },\n ): Record<string, unknown> {\n const normalizedBody = body === undefined || body === null ? {} : body;\n let built: BuiltShape;\n\n if (isSingle) {\n if (typeof config === \"function\") {\n const resolved = resolveAndValidateShape(config, opts?.ctx);\n built = buildShapeZodSchema(model, method, resolved);\n } else {\n built = builtCache.get(\"_default\")!;\n }\n } else {\n if (!isPlainObject(normalizedBody))\n throw new ShapeError(\"Request body must be an object\");\n\n if (\"caller\" in (normalizedBody as Record<string, unknown>)) {\n throw new CallerError(\n \"Pass caller via opts.caller, not in the request body.\",\n );\n }\n\n const caller = opts?.caller;\n if (typeof caller !== \"string\") {\n const allowed = Object.keys(\n config as Record<string, ShapeOrFn<TCtx>>,\n );\n throw new CallerError(\n `Missing caller. This query uses named shape routing with keys: ${allowed.map((k) => `\"${k}\"`).join(\", \")}. ` +\n `Provide caller via opts.caller.`,\n );\n }\n\n const matched = matchCaller(\n config as Record<string, ShapeOrFn<TCtx>>,\n caller,\n );\n if (!matched) {\n const allowed = Object.keys(\n config as Record<string, ShapeOrFn<TCtx>>,\n );\n throw new CallerError(\n `Unknown caller: \"${caller}\". Allowed: ${allowed.map((k) => `\"${k}\"`).join(\", \")}`,\n );\n }\n\n if (typeof matched.shape === \"function\") {\n const resolved = resolveAndValidateShape(matched.shape, opts?.ctx);\n built = buildShapeZodSchema(model, method, resolved);\n } else {\n built = builtCache.get(matched.key)!;\n }\n }\n\n return applyBuiltShape(built, normalizedBody, isUnique);\n },\n };\n }\n\n return {\n buildQuerySchema,\n buildShapeZodSchema,\n buildWhereSchema: whereBuilder.buildWhereSchema,\n buildIncludeSchema: projectionBuilder.buildIncludeSchema,\n buildSelectSchema: projectionBuilder.buildSelectSchema,\n };\n}","export const SHAPE_CONFIG_KEYS = new Set([\n 'where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip',\n 'distinct', 'having', '_count', '_avg', '_sum', '_min', '_max', 'by',\n])\n\nexport const GUARD_SHAPE_KEYS = new Set([\n 'data', 'create', 'update', ...SHAPE_CONFIG_KEYS,\n])\n\nexport const COMBINATOR_KEYS = new Set(['AND', 'OR', 'NOT'])\n\nexport const TO_MANY_RELATION_OPS = new Set(['some', 'every', 'none'])\nexport const TO_ONE_RELATION_OPS = new Set(['is', 'isNot'])\nexport const ALL_RELATION_OPS = new Set([...TO_MANY_RELATION_OPS, ...TO_ONE_RELATION_OPS])\n\nexport function toDelegateKey(modelName: string): string {\n return modelName[0].toLowerCase() + modelName.slice(1)\n}\n\nconst FORCED_MARKER = Symbol.for('prisma-guard.forced')\n\nexport function isForcedValue(v: unknown): v is { value: unknown } {\n return v !== null && typeof v === 'object' && (v as any)[FORCED_MARKER] === true\n}\n\nexport function force<T>(value: T): { value: T } {\n const wrapper: any = { value }\n wrapper[FORCED_MARKER] = true\n return wrapper\n}\n\nconst UNSUPPORTED_MARKER = Symbol.for('prisma-guard.unsupported')\n\nexport function isUnsupportedMarker(v: unknown): boolean {\n return v !== null && typeof v === 'object' && (v as any)[UNSUPPORTED_MARKER] === true\n}\n\nexport function unsupported(): { __brand: 'unsupported' } {\n const marker: any = {}\n marker[UNSUPPORTED_MARKER] = true\n return marker\n}","import { CallerError } from './errors.js'\n\nexport function matchCallerPattern(\n patterns: string[],\n caller: string,\n): string | null {\n if (patterns.includes(caller)) return caller\n\n const matches: string[] = []\n\n for (const pattern of patterns) {\n if (!pattern.includes(':')) continue\n const patternParts = pattern.split('/')\n const callerParts = caller.split('/')\n if (patternParts.length !== callerParts.length) continue\n\n let ok = true\n for (let i = 0; i < patternParts.length; i++) {\n if (patternParts[i].startsWith(':')) continue\n if (patternParts[i] !== callerParts[i]) {\n ok = false\n break\n }\n }\n if (ok) matches.push(pattern)\n }\n\n if (matches.length === 0) return null\n if (matches.length > 1) {\n throw new CallerError(\n `Ambiguous caller \"${caller}\" matches multiple patterns: ${matches.map(p => `\"${p}\"`).join(', ')}`,\n )\n }\n return matches[0]\n}","import { PolicyError } from '../shared/errors.js'\nimport { isPlainObject } from '../shared/utils.js'\n\nexport function requireContext(ctx: unknown, label: string): asserts ctx {\n if (ctx === undefined || ctx === null) {\n throw new PolicyError(`Context required for ${label}`)\n }\n}\n\nexport function validateContext(ctx: unknown): Record<string, unknown> {\n if (ctx === null || ctx === undefined) {\n throw new PolicyError(\n `guard.extension() context function must return a plain object, got ${String(ctx)}`,\n )\n }\n if (!isPlainObject(ctx)) {\n throw new PolicyError(\n `guard.extension() context function must return a plain object, got ${Array.isArray(ctx) ? 'array' : typeof ctx}`,\n )\n }\n return ctx\n}","import { z } from \"zod\";\nimport type { TypeMap, EnumMap, FieldMeta } from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport {\n COMBINATOR_KEYS,\n TO_MANY_RELATION_OPS,\n TO_ONE_RELATION_OPS,\n} from \"../shared/constants.js\";\nimport { isForcedValue } from \"../shared/constants.js\";\nimport { createOperatorSchema } from \"./zod-type-map.js\";\nimport { isPlainObject, coerceToArray } from \"../shared/utils.js\";\nimport type { WhereForced } from \"./query-builder-forced.js\";\nimport { hasWhereForced, mergeWhereForced } from \"./query-builder-forced.js\";\nimport type { ScalarBaseMap } from \"../shared/scalar-base.js\";\n\nconst UNSUPPORTED_WHERE_TYPES = new Set([\"Bytes\"]);\nconst STRING_MODE_OPS = new Set([\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"equals\",\n]);\nconst JSON_STRING_MODE_OPS = new Set([\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n]);\nconst MAX_WHERE_DEPTH = 10;\n\nexport interface WhereBuiltResult {\n schema: z.ZodTypeAny | null;\n forced: WhereForced;\n forcedOnlyKeys: Set<string>;\n}\n\nfunction safeStringify(v: unknown): string {\n if (typeof v === \"bigint\") return `${v}n`;\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n\nfunction forcedValuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n if (typeof a === \"bigint\") return a === b;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n if (typeof a !== \"object\") return false;\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) return false;\n if (a.length !== (b as unknown[]).length) return false;\n return a.every((v, i) => forcedValuesEqual(v, (b as unknown[])[i]));\n }\n if (!isPlainObject(a) || !isPlainObject(b)) return false;\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((k) => k in b && forcedValuesEqual(a[k], b[k]));\n}\n\nfunction mergeScalarConditions(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): void {\n for (const [field, ops] of Object.entries(source)) {\n const existing = target[field];\n\n if (existing === undefined) {\n target[field] = ops;\n continue;\n }\n\n if (field === \"NOT\") {\n const existingArr = Array.isArray(existing) ? existing : [existing];\n const sourceArr = Array.isArray(ops) ? ops : [ops];\n target[field] = [...existingArr, ...sourceArr];\n continue;\n }\n\n if (isPlainObject(existing) && isPlainObject(ops)) {\n for (const [op, val] of Object.entries(ops as Record<string, unknown>)) {\n if (op in (existing as Record<string, unknown>)) {\n const existingVal = (existing as Record<string, unknown>)[op];\n if (!forcedValuesEqual(existingVal, val)) {\n throw new ShapeError(\n `Conflicting forced where values for \"${field}.${op}\": ` +\n `shape defines both ${safeStringify(existingVal)} and ${safeStringify(val)}`,\n );\n }\n }\n }\n Object.assign(existing, ops);\n continue;\n }\n\n if (!forcedValuesEqual(existing, ops)) {\n throw new ShapeError(`Conflicting forced where values for \"${field}\"`);\n }\n }\n}\n\nfunction mergeRelationForcedMaps(\n target: Record<string, Record<string, WhereForced>>,\n source: Record<string, Record<string, WhereForced>>,\n): void {\n for (const [relName, ops] of Object.entries(source)) {\n if (!target[relName]) {\n target[relName] = ops;\n continue;\n }\n for (const [op, forced] of Object.entries(ops)) {\n if (!target[relName][op]) {\n target[relName][op] = forced;\n } else {\n mergeScalarConditions(\n target[relName][op].conditions,\n forced.conditions,\n );\n mergeRelationForcedMaps(\n target[relName][op].relations,\n forced.relations,\n );\n }\n }\n }\n}\n\nfunction isModeCompatibleOp(fieldType: string, op: string): boolean {\n if (fieldType === \"String\") return STRING_MODE_OPS.has(op);\n if (fieldType === \"Json\") return JSON_STRING_MODE_OPS.has(op);\n return false;\n}\n\nexport function createWhereBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n) {\n function buildWhereSchema(\n model: string,\n whereConfig: Record<string, unknown>,\n depth?: number,\n ): WhereBuiltResult {\n const currentDepth = depth ?? 0;\n if (currentDepth > MAX_WHERE_DEPTH) {\n throw new ShapeError(\n `Where schema for model \"${model}\" exceeds maximum nesting depth (${MAX_WHERE_DEPTH}). Check for circular relation references in the shape.`,\n );\n }\n\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n const scalarConditions: Record<string, unknown> = {};\n const relationForced: Record<string, Record<string, WhereForced>> = {};\n\n for (const [key, value] of Object.entries(whereConfig)) {\n if (COMBINATOR_KEYS.has(key)) {\n processCombinator(\n key as \"AND\" | \"OR\" | \"NOT\",\n value,\n model,\n fieldSchemas,\n scalarConditions,\n relationForced,\n currentDepth,\n );\n continue;\n }\n\n const fieldMeta = modelFields[key];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${key}\" on model \"${model}\"`);\n\n if (fieldMeta.isRelation) {\n processRelationFilter(\n key,\n value,\n fieldMeta,\n model,\n fieldSchemas,\n relationForced,\n currentDepth,\n );\n continue;\n }\n\n if (UNSUPPORTED_WHERE_TYPES.has(fieldMeta.type) && !fieldMeta.isList) {\n throw new ShapeError(\n `${fieldMeta.type} field \"${key}\" cannot be used in where filters`,\n );\n }\n\n processScalarField(\n key,\n value,\n model,\n fieldMeta,\n fieldSchemas,\n scalarConditions,\n );\n }\n\n const schema =\n Object.keys(fieldSchemas).length > 0\n ? z.object(fieldSchemas).strict().optional()\n : null;\n\n const forcedOnlyKeys = new Set<string>();\n for (const key of Object.keys(whereConfig)) {\n if (COMBINATOR_KEYS.has(key)) continue;\n if (!(key in fieldSchemas)) {\n forcedOnlyKeys.add(key);\n }\n }\n\n return {\n schema,\n forced: {\n conditions: scalarConditions,\n relations: relationForced,\n },\n forcedOnlyKeys,\n };\n }\n\n function processCombinator(\n key: \"AND\" | \"OR\" | \"NOT\",\n value: unknown,\n model: string,\n fieldSchemas: Record<string, z.ZodTypeAny>,\n parentConditions: Record<string, unknown>,\n parentRelations: Record<string, Record<string, WhereForced>>,\n depth: number,\n ): void {\n if (!isPlainObject(value)) {\n throw new ShapeError(\n `\"${key}\" in where shape must be an object defining allowed fields`,\n );\n }\n\n const result = buildWhereSchema(model, value, depth + 1);\n\n if (!result.schema && !hasWhereForced(result.forced)) {\n throw new ShapeError(\n `Empty \"${key}\" combinator in where shape for model \"${model}\". Define at least one field.`,\n );\n }\n\n if (result.schema) {\n let elementSchema: z.ZodTypeAny = result.schema;\n\n if (!hasWhereForced(result.forced)) {\n elementSchema = result.schema.refine(\n (v: any) =>\n v !== undefined &&\n v !== null &&\n Object.keys(v).some((k) => v[k] !== undefined),\n { message: `\"${key}\" member must specify at least one condition` },\n );\n }\n\n if (key === \"NOT\") {\n fieldSchemas[key] = z\n .union([\n elementSchema,\n z.preprocess(coerceToArray, z.array(elementSchema).min(1)),\n ])\n .optional();\n } else {\n fieldSchemas[key] = z\n .preprocess(coerceToArray, z.array(elementSchema).min(1))\n .optional();\n }\n }\n\n if (hasWhereForced(result.forced)) {\n if (key === \"AND\" || key === \"OR\") {\n mergeScalarConditions(parentConditions, result.forced.conditions);\n mergeRelationForcedMaps(parentRelations, result.forced.relations);\n } else {\n const notWhere = mergeWhereForced(undefined, result.forced);\n if (Object.keys(notWhere).length > 0) {\n const existing = parentConditions[key];\n if (existing) {\n parentConditions[key] = Array.isArray(existing)\n ? [...existing, notWhere]\n : [existing, notWhere];\n } else {\n parentConditions[key] = notWhere;\n }\n }\n }\n }\n }\n\n function processRelationFilter(\n key: string,\n value: unknown,\n fieldMeta: FieldMeta,\n model: string,\n fieldSchemas: Record<string, z.ZodTypeAny>,\n parentRelations: Record<string, Record<string, WhereForced>>,\n depth: number,\n ): void {\n if (!isPlainObject(value)) {\n throw new ShapeError(\n `Relation filter for \"${key}\" must be an object with operators (some, every, none, is, isNot)`,\n );\n }\n\n const allowedOps = fieldMeta.isList\n ? TO_MANY_RELATION_OPS\n : TO_ONE_RELATION_OPS;\n\n if (Object.keys(value).length === 0) {\n throw new ShapeError(\n `Empty relation filter for \"${key}\" on model \"${model}\". Define at least one operator: ${[...allowedOps].join(\", \")}`,\n );\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n const opForced: Record<string, WhereForced> = {};\n let hasClientOps = false;\n\n for (const [op, opValue] of Object.entries(value)) {\n if (!allowedOps.has(op)) {\n const allowed = [...allowedOps].join(\", \");\n throw new ShapeError(\n `Operator \"${op}\" not supported for ${fieldMeta.isList ? \"to-many\" : \"to-one\"} relation \"${key}\". Allowed: ${allowed}`,\n );\n }\n\n if (!isPlainObject(opValue)) {\n throw new ShapeError(\n `Relation filter operator \"${op}\" on \"${key}\" must be an object defining nested where fields`,\n );\n }\n\n const nested = buildWhereSchema(fieldMeta.type, opValue, depth + 1);\n\n if (!nested.schema && !hasWhereForced(nested.forced)) {\n throw new ShapeError(\n `Empty nested where for relation \"${key}.${op}\" on model \"${model}\". Define at least one field.`,\n );\n }\n\n if (nested.schema) {\n if (!hasWhereForced(nested.forced)) {\n opSchemas[op] = nested.schema.refine(\n (v: any) => v === undefined || Object.keys(v).length > 0,\n {\n message: `Relation filter \"${key}.${op}\" requires at least one condition`,\n },\n );\n } else {\n opSchemas[op] = nested.schema;\n }\n hasClientOps = true;\n }\n\n if (hasWhereForced(nested.forced)) {\n opForced[op] = nested.forced;\n }\n }\n\n if (!hasClientOps && Object.keys(opForced).length === 0) {\n throw new ShapeError(\n `Relation filter for \"${key}\" on model \"${model}\" produced no conditions. Define at least one nested field in the operator shape.`,\n );\n }\n\n if (hasClientOps) {\n const clientOpKeys = Object.keys(opSchemas);\n const opObjSchema = z.object(opSchemas).strict();\n\n if (Object.keys(opForced).length === 0) {\n fieldSchemas[key] = opObjSchema\n .refine(\n (v) =>\n clientOpKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: `At least one relation operator required for \"${key}\"` },\n )\n .optional();\n } else {\n fieldSchemas[key] = opObjSchema.optional();\n }\n }\n\n if (Object.keys(opForced).length > 0) {\n parentRelations[key] = opForced;\n }\n }\n\n function processScalarField(\n fieldName: string,\n operators: unknown,\n model: string,\n fieldMeta: FieldMeta,\n fieldSchemas: Record<string, z.ZodTypeAny>,\n scalarConditions: Record<string, unknown>,\n ): void {\n if (!isPlainObject(operators)) {\n throw new ShapeError(\n `Where config for scalar field \"${fieldName}\" on model \"${model}\" must be an object of operators`,\n );\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n const fieldForced: Record<string, unknown> = {};\n let hasClientOps = false;\n let hasModeCompatibleOp = false;\n const clientOpKeys: string[] = [];\n let modeConfigValue: unknown = undefined;\n let hasModeConfig = false;\n\n for (const [op, opValue] of Object.entries(operators)) {\n if (op === \"mode\") {\n hasModeConfig = true;\n modeConfigValue = opValue;\n continue;\n }\n\n if (opValue === true) {\n opSchemas[op] = createOperatorSchema(\n fieldMeta,\n op,\n enumMap,\n scalarBase,\n ).optional();\n hasClientOps = true;\n clientOpKeys.push(op);\n if (!fieldMeta.isList && isModeCompatibleOp(fieldMeta.type, op)) {\n hasModeCompatibleOp = true;\n }\n } else {\n const actualOpValue = isForcedValue(opValue) ? opValue.value : opValue;\n const opSchema = createOperatorSchema(\n fieldMeta,\n op,\n enumMap,\n scalarBase,\n );\n let parsed: unknown;\n try {\n parsed = opSchema.parse(actualOpValue);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced value for \"${model}.${fieldName}.${op}\": ${err.message}`,\n );\n }\n fieldForced[op] = parsed;\n if (!fieldMeta.isList && isModeCompatibleOp(fieldMeta.type, op)) {\n hasModeCompatibleOp = true;\n }\n }\n }\n\n if (!hasClientOps && Object.keys(fieldForced).length === 0) {\n if (hasModeConfig) {\n throw new ShapeError(\n `Where field \"${fieldName}\" on model \"${model}\" has \"mode\" but no operators. Add at least one compatible operator.`,\n );\n }\n throw new ShapeError(\n `Empty operator config for where field \"${fieldName}\" on model \"${model}\". Define at least one operator.`,\n );\n }\n\n if (hasModeConfig) {\n if (!hasModeCompatibleOp) {\n throw new ShapeError(\n `\"mode\" on where field \"${fieldName}\" on model \"${model}\" requires a compatible operator (String: contains, startsWith, endsWith, equals; Json: string_contains, string_starts_with, string_ends_with)`,\n );\n }\n if (modeConfigValue === true) {\n opSchemas[\"mode\"] = z.enum([\"default\", \"insensitive\"]).optional();\n } else {\n const actualModeValue = isForcedValue(modeConfigValue)\n ? modeConfigValue.value\n : modeConfigValue;\n const modeSchema = z.enum([\"default\", \"insensitive\"]);\n let parsed: unknown;\n try {\n parsed = modeSchema.parse(actualModeValue);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced value for \"${model}.${fieldName}.mode\": ${err.message}`,\n );\n }\n fieldForced[\"mode\"] = parsed;\n }\n } else if (hasModeCompatibleOp) {\n opSchemas[\"mode\"] = z.enum([\"default\", \"insensitive\"]).optional();\n }\n\n if (hasClientOps) {\n const opObj = z.object(opSchemas).strict();\n const refined = opObj.refine(\n (v) =>\n clientOpKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n {\n message: `At least one operator required for where field \"${fieldName}\"`,\n },\n );\n\n if (\"equals\" in opSchemas && fieldMeta.type !== \"Json\") {\n const equalsBase = createOperatorSchema(\n fieldMeta,\n \"equals\",\n enumMap,\n scalarBase,\n );\n fieldSchemas[fieldName] = z.union([refined, equalsBase]).optional();\n } else {\n fieldSchemas[fieldName] = refined.optional();\n }\n }\n\n if (Object.keys(fieldForced).length > 0) {\n scalarConditions[fieldName] = fieldForced;\n }\n }\n\n return { buildWhereSchema };\n}","export function deepClone<T>(value: T): T {\n if (value === null || value === undefined) return value\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n return value\n case 'object': {\n if (value instanceof Date) return new Date(value.getTime()) as T\n if (value instanceof Uint8Array) return value.slice() as T\n if (Array.isArray(value)) return value.map(deepClone) as T\n const proto = Object.getPrototypeOf(value)\n if (proto !== Object.prototype && proto !== null) return value\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = deepClone(v)\n }\n return result as T\n }\n default:\n return value\n }\n}","import { z } from 'zod'\nimport type { UniqueMap } from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.js'\nimport { isPlainObject } from '../shared/utils.js'\nimport { deepClone } from '../shared/deep-clone.js'\n\nexport interface WhereForced {\n conditions: Record<string, unknown>\n relations: Record<string, Record<string, WhereForced>>\n}\n\nexport const EMPTY_WHERE_FORCED: WhereForced = { conditions: {}, relations: {} }\n\nexport function hasWhereForced(f: WhereForced): boolean {\n return Object.keys(f.conditions).length > 0 || Object.keys(f.relations).length > 0\n}\n\nexport interface ForcedTree {\n where?: WhereForced\n include?: Record<string, ForcedTree>\n select?: Record<string, ForcedTree>\n _countWhere?: Record<string, WhereForced>\n _countWherePlacement?: 'include' | 'select'\n}\n\nexport interface BuiltShape {\n zodSchema: z.ZodObject<any>\n forcedWhere: WhereForced\n forcedOnlyWhereKeys: Set<string>\n forcedIncludeTree: Record<string, ForcedTree>\n forcedSelectTree: Record<string, ForcedTree>\n forcedIncludeCountWhere: Record<string, WhereForced>\n forcedSelectCountWhere: Record<string, WhereForced>\n}\n\nexport function mergeWhereForced(\n where: Record<string, unknown> | undefined,\n forced: WhereForced,\n): Record<string, unknown> {\n if (!hasWhereForced(forced)) return where ?? {}\n\n let result: Record<string, unknown> = where ? deepClone(where) : {}\n\n for (const [relName, opMap] of Object.entries(forced.relations)) {\n if (!result[relName] || typeof result[relName] !== 'object') {\n result[relName] = {}\n }\n const relObj = result[relName] as Record<string, unknown>\n for (const [op, nestedForced] of Object.entries(opMap)) {\n relObj[op] = mergeWhereForced(\n relObj[op] as Record<string, unknown> | undefined,\n nestedForced,\n )\n }\n }\n\n if (Object.keys(forced.conditions).length > 0) {\n const scalarClone = deepClone(forced.conditions)\n if (Object.keys(result).length === 0) {\n result = scalarClone\n } else {\n result = { AND: [result, scalarClone] }\n }\n }\n\n return result\n}\n\nexport function mergeUniqueWhereForced(\n where: Record<string, unknown> | undefined,\n forced: WhereForced,\n): Record<string, unknown> {\n if (!hasWhereForced(forced)) return where ?? {}\n\n let result: Record<string, unknown> = where ? { ...where } : {}\n\n for (const [relName, opMap] of Object.entries(forced.relations)) {\n if (!result[relName] || typeof result[relName] !== 'object') {\n result[relName] = {}\n }\n const relObj = result[relName] as Record<string, unknown>\n for (const [op, nestedForced] of Object.entries(opMap)) {\n relObj[op] = mergeWhereForced(\n relObj[op] as Record<string, unknown> | undefined,\n nestedForced,\n )\n }\n }\n\n if (Object.keys(forced.conditions).length > 0) {\n const conditions = [deepClone(forced.conditions)]\n const existing = result.AND\n if (existing) {\n if (Array.isArray(existing)) {\n conditions.unshift(...existing)\n } else {\n conditions.unshift(existing as Record<string, unknown>)\n }\n }\n result.AND = conditions\n }\n\n return result\n}\n\nexport function applyBuiltShape(\n built: BuiltShape,\n body: unknown,\n isUniqueMethod: boolean,\n): Record<string, unknown> {\n let parseable = body\n const hasWhereInSchema = 'where' in built.zodSchema.shape\n\n if (isPlainObject(body)) {\n const bodyObj = body as Record<string, unknown>\n\n if ('select' in bodyObj && 'include' in bodyObj) {\n throw new ShapeError('Request cannot define both \"include\" and \"select\"')\n }\n\n if ('where' in bodyObj) {\n if (!hasWhereInSchema) {\n const { where: _, ...rest } = bodyObj\n parseable = rest\n } else if (built.forcedOnlyWhereKeys.size > 0 && isPlainObject(bodyObj.where)) {\n const where = { ...(bodyObj.where as Record<string, unknown>) }\n for (const key of built.forcedOnlyWhereKeys) {\n delete where[key]\n }\n if (Object.keys(where).length === 0 && hasWhereForced(built.forcedWhere)) {\n const { where: _, ...rest } = bodyObj\n parseable = rest\n } else {\n parseable = { ...bodyObj, where }\n }\n }\n }\n }\n\n const validated = built.zodSchema.parse(parseable) as Record<string, unknown>\n\n if (hasWhereForced(built.forcedWhere)) {\n validated.where = isUniqueMethod\n ? mergeUniqueWhereForced(\n validated.where as Record<string, unknown> | undefined,\n built.forcedWhere,\n )\n : mergeWhereForced(\n validated.where as Record<string, unknown> | undefined,\n built.forcedWhere,\n )\n }\n\n if (Object.keys(built.forcedIncludeTree).length > 0) {\n applyForcedTree(validated, 'include', built.forcedIncludeTree)\n }\n\n if (Object.keys(built.forcedSelectTree).length > 0) {\n applyForcedTree(validated, 'select', built.forcedSelectTree)\n }\n\n if (Object.keys(built.forcedIncludeCountWhere).length > 0) {\n const ic = validated.include as Record<string, unknown> | undefined\n if (ic) applyForcedCountWhere(ic, built.forcedIncludeCountWhere)\n }\n\n if (Object.keys(built.forcedSelectCountWhere).length > 0) {\n const sc = validated.select as Record<string, unknown> | undefined\n if (sc) applyForcedCountWhere(sc, built.forcedSelectCountWhere)\n }\n\n return validated\n}\n\nfunction buildCountForPlacement(\n countWhere: Record<string, WhereForced>,\n): Record<string, unknown> {\n const countSelect: Record<string, unknown> = {}\n for (const [countRel, countForced] of Object.entries(countWhere)) {\n countSelect[countRel] = { where: mergeWhereForced(undefined, countForced) }\n }\n return { _count: { select: countSelect } }\n}\n\nexport function applyForcedTree(\n validated: Record<string, unknown>,\n key: 'include' | 'select',\n tree: Record<string, ForcedTree>,\n): void {\n const container = validated[key] as Record<string, unknown> | undefined\n if (!container) return\n\n for (const [relName, forced] of Object.entries(tree)) {\n const relVal = container[relName]\n if (relVal === undefined) continue\n\n if (relVal === true) {\n const expanded: Record<string, unknown> = {}\n if (forced.where && hasWhereForced(forced.where)) {\n expanded.where = mergeWhereForced(undefined, forced.where)\n }\n if (forced.include) {\n expanded.include = buildForcedOnlyContainer(forced.include)\n applyForcedTree(expanded, 'include', forced.include)\n }\n if (forced.select) {\n expanded.select = buildForcedOnlyContainer(forced.select)\n applyForcedTree(expanded, 'select', forced.select)\n }\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? 'include'\n if (!expanded[placement]) expanded[placement] = {}\n const placementObj = expanded[placement] as Record<string, unknown>\n Object.assign(placementObj, buildCountForPlacement(forced._countWhere))\n }\n if (expanded.include && expanded.select) {\n throw new ShapeError(\n `Forced tree for relation \"${relName}\" produces both \"include\" and \"select\". Prisma does not allow both at the same level.`,\n )\n }\n container[relName] = Object.keys(expanded).length > 0 ? expanded : true\n continue\n }\n\n if (isPlainObject(relVal)) {\n const relObj = relVal as Record<string, unknown>\n if (forced.where && hasWhereForced(forced.where)) {\n relObj.where = mergeWhereForced(\n relObj.where as Record<string, unknown> | undefined,\n forced.where,\n )\n }\n if (forced.include) {\n if (!relObj.include) relObj.include = buildForcedOnlyContainer(forced.include)\n applyForcedTree(relObj, 'include', forced.include)\n }\n if (forced.select) {\n if (!relObj.select) relObj.select = buildForcedOnlyContainer(forced.select)\n applyForcedTree(relObj, 'select', forced.select)\n }\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? 'include'\n const projContainer = relObj[placement] as Record<string, unknown> | undefined\n if (projContainer) {\n applyForcedCountWhere(projContainer, forced._countWhere)\n }\n }\n if (relObj.include && relObj.select) {\n throw new ShapeError(\n `Relation \"${relName}\" has both \"include\" and \"select\" after forced tree merge. Prisma does not allow both at the same level.`,\n )\n }\n }\n }\n}\n\nexport function buildForcedOnlyContainer(\n tree: Record<string, ForcedTree>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [relName, forced] of Object.entries(tree)) {\n const nested: Record<string, unknown> = {}\n if (forced.where && hasWhereForced(forced.where)) {\n nested.where = mergeWhereForced(undefined, forced.where)\n }\n if (forced.include) nested.include = buildForcedOnlyContainer(forced.include)\n if (forced.select) nested.select = buildForcedOnlyContainer(forced.select)\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? 'include'\n if (!nested[placement]) nested[placement] = {}\n const placementObj = nested[placement] as Record<string, unknown>\n Object.assign(placementObj, buildCountForPlacement(forced._countWhere))\n }\n result[relName] = Object.keys(nested).length > 0 ? nested : true\n }\n return result\n}\n\nexport function applyForcedCountWhere(\n container: Record<string, unknown>,\n forcedCountWhere: Record<string, WhereForced>,\n): void {\n const countVal = container._count\n if (!countVal || countVal === true || !isPlainObject(countVal)) return\n const countObj = countVal as Record<string, unknown>\n const selectVal = countObj.select\n if (!selectVal || !isPlainObject(selectVal)) return\n const selectObj = selectVal as Record<string, unknown>\n\n for (const [relName, forced] of Object.entries(forcedCountWhere)) {\n const relVal = selectObj[relName]\n if (relVal === undefined) continue\n\n if (relVal === true) {\n selectObj[relName] = { where: mergeWhereForced(undefined, forced) }\n } else if (isPlainObject(relVal)) {\n const relObj = relVal as Record<string, unknown>\n relObj.where = mergeWhereForced(\n relObj.where as Record<string, unknown> | undefined,\n forced,\n )\n }\n }\n}\n\nexport function collectWhereFieldKeys(\n where: Record<string, unknown>,\n): Set<string> {\n const keys = new Set<string>()\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND') {\n const items = Array.isArray(value) ? value : [value]\n for (const item of items) {\n if (isPlainObject(item)) {\n for (const k of collectWhereFieldKeys(item)) keys.add(k)\n }\n }\n } else if (key !== 'OR' && key !== 'NOT') {\n keys.add(key)\n }\n }\n return keys\n}\n\nexport function validateResolvedUniqueWhere(\n model: string,\n where: Record<string, unknown>,\n method: string,\n uniqueMap: UniqueMap,\n): void {\n const constraints = uniqueMap[model]\n if (!constraints || constraints.length === 0) return\n\n const fieldKeys = collectWhereFieldKeys(where)\n const covered = constraints.some(constraint =>\n constraint.every(field => fieldKeys.has(field)),\n )\n\n if (!covered) {\n const constraintDesc = constraints.map(c => `(${c.join(', ')})`).join(' | ')\n throw new ShapeError(\n `${method} on model \"${model}\" requires resolved where to cover a unique constraint: ${constraintDesc}`,\n )\n }\n}\n\nfunction collectEqualityFields(\n where: Record<string, unknown>,\n model: string | undefined,\n typeMap?: Record<string, Record<string, { isRelation: boolean }>>,\n): Set<string> {\n const combinators = new Set(['AND', 'OR', 'NOT'])\n const fields = new Set<string>()\n\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND') {\n if (isPlainObject(value)) {\n for (const f of collectEqualityFields(value, model, typeMap)) {\n fields.add(f)\n }\n }\n continue\n }\n if (combinators.has(key)) continue\n if (typeMap && model && typeMap[model]?.[key]?.isRelation) continue\n if (!value || !isPlainObject(value)) continue\n if (Object.keys(value).every(op => op === 'equals')) {\n fields.add(key)\n }\n }\n\n return fields\n}\n\nexport function validateUniqueEquality(\n model: string,\n where: Record<string, unknown>,\n method: string,\n uniqueMap: UniqueMap,\n typeMap?: Record<string, Record<string, { isRelation: boolean }>>,\n): void {\n const constraints = uniqueMap[model]\n if (!constraints || constraints.length === 0) return\n\n const equalityFields = collectEqualityFields(where, model, typeMap)\n\n const valid = constraints.some(constraint =>\n constraint.every(field => equalityFields.has(field)),\n )\n\n if (!valid) {\n const constraintDesc = constraints.map(c => `(${c.join(', ')})`).join(' | ')\n throw new ShapeError(\n `${method} on model \"${model}\" requires where to cover a unique constraint with equality operators only: ${constraintDesc}`,\n )\n }\n}","import { z } from 'zod'\nimport type { TypeMap, EnumMap, UniqueMap, OrderByFieldConfig } from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.js'\nimport { createBaseType, getSupportedOperators, createOperatorSchema, NUMERIC_TYPES, COMPARABLE_TYPES } from './zod-type-map.js'\nimport { coerceToArray } from '../shared/utils.js'\nimport type { ScalarBaseMap } from '../shared/scalar-base.js'\n\nconst UNSUPPORTED_BY_TYPES = new Set(['Json', 'Bytes'])\n\nfunction requireConfigTrue(config: Record<string, unknown>, context: string): void {\n for (const [key, value] of Object.entries(config)) {\n if (value !== true) {\n throw new ShapeError(\n `Config value for \"${key}\" in ${context} must be true, got ${typeof value}`,\n )\n }\n }\n}\n\nexport function createArgsBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n uniqueMap: UniqueMap,\n scalarBase: ScalarBaseMap,\n) {\n const sortEnum = z.enum(['asc', 'desc'])\n const nullsEnum = z.enum(['first', 'last'])\n const sortWithNulls = z.object({ sort: sortEnum, nulls: nullsEnum.optional() }).strict()\n const scalarOrderSchema = z.union([sortEnum, sortWithNulls])\n\n function validateScalarOrderByField(\n fieldName: string,\n model: string,\n modelFields: Record<string, { type: string; isList: boolean; isRelation: boolean }>,\n ): void {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" in orderBy requires a nested config object, not true`)\n if (fieldMeta.type === 'Json') throw new ShapeError(`Json field \"${fieldName}\" cannot be used in orderBy`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in orderBy`)\n }\n\n function buildOrderBySchema(\n model: string,\n orderByConfig: Record<string, OrderByFieldConfig>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n\n for (const [fieldName, config] of Object.entries(orderByConfig)) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`)\n\n if (config === true) {\n validateScalarOrderByField(fieldName, model, modelFields)\n fieldSchemas[fieldName] = scalarOrderSchema.optional()\n continue\n }\n\n if (typeof config !== 'object' || config === null) {\n throw new ShapeError(`Invalid orderBy config for \"${fieldName}\" on model \"${model}\": expected true or a nested config object`)\n }\n\n if (!fieldMeta.isRelation) {\n throw new ShapeError(`Scalar field \"${fieldName}\" in orderBy does not accept nested config`)\n }\n\n if (Object.keys(config).length === 0) {\n throw new ShapeError(`Empty orderBy config for relation \"${fieldName}\" on model \"${model}\". Define at least one nested field.`)\n }\n\n if (fieldMeta.isList) {\n const relKeys = Object.keys(config)\n if (relKeys.length !== 1 || relKeys[0] !== '_count') {\n throw new ShapeError(`To-many relation \"${fieldName}\" in orderBy only supports { _count: true }`)\n }\n if (config._count !== true) {\n throw new ShapeError(`_count in orderBy for \"${fieldName}\" must be true`)\n }\n fieldSchemas[fieldName] = z.object({ _count: sortEnum }).strict().optional()\n continue\n }\n\n const relatedModel = fieldMeta.type\n const relatedFields = typeMap[relatedModel]\n if (!relatedFields) throw new ShapeError(`Related model \"${relatedModel}\" not found in type map`)\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {}\n for (const [nestedField, nestedVal] of Object.entries(config)) {\n if (nestedVal !== true) {\n throw new ShapeError(`Nested orderBy field \"${nestedField}\" on relation \"${fieldName}\" must be true`)\n }\n const nestedMeta = relatedFields[nestedField]\n if (!nestedMeta) throw new ShapeError(`Unknown field \"${nestedField}\" on model \"${relatedModel}\" in orderBy`)\n if (nestedMeta.isRelation) throw new ShapeError(`Nested relation \"${nestedField}\" in orderBy on \"${fieldName}\" is not supported`)\n if (nestedMeta.type === 'Json') throw new ShapeError(`Json field \"${nestedField}\" cannot be used in orderBy`)\n if (nestedMeta.isList) throw new ShapeError(`List field \"${nestedField}\" cannot be used in orderBy`)\n nestedSchemas[nestedField] = scalarOrderSchema.optional()\n }\n\n const nestedKeys = Object.keys(nestedSchemas)\n fieldSchemas[fieldName] = z.object(nestedSchemas).strict()\n .refine(\n (v) => nestedKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: `orderBy for relation \"${fieldName}\" must specify at least one field` },\n )\n .optional()\n }\n\n const fieldKeys = Object.keys(fieldSchemas)\n const singleSchema = z.object(fieldSchemas).strict().refine(\n (v) => fieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'orderBy must specify at least one field' },\n )\n return z.union([singleSchema, z.preprocess(coerceToArray, z.array(singleSchema).min(1))]).optional()\n }\n\n function buildTakeSchema(config: { max: number; default?: number }): z.ZodTypeAny {\n if (!Number.isFinite(config.max) || !Number.isInteger(config.max)) {\n throw new ShapeError(`take max must be a finite integer, got ${config.max}`)\n }\n if (config.max < 1) {\n throw new ShapeError(`take max must be at least 1, got ${config.max}`)\n }\n if (config.default !== undefined) {\n if (!Number.isFinite(config.default) || !Number.isInteger(config.default)) {\n throw new ShapeError(`take default must be a finite integer, got ${config.default}`)\n }\n if (config.default < 1) {\n throw new ShapeError(`take default must be at least 1, got ${config.default}`)\n }\n if (config.default > config.max) {\n throw new ShapeError('take default cannot exceed max')\n }\n return z.number().int().min(1).max(config.max).default(config.default)\n }\n return z.number().int().min(1).max(config.max).optional()\n }\n\n function buildCursorSchema(\n model: string,\n cursorConfig: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(cursorConfig, `cursor on model \"${model}\"`)\n\n const cursorFields = new Set(Object.keys(cursorConfig))\n const constraints = uniqueMap[model]\n if (constraints && constraints.length > 0) {\n const covered = constraints.some(constraint =>\n constraint.length === cursorFields.size &&\n constraint.every(field => cursorFields.has(field)),\n )\n if (!covered) {\n const constraintDesc = constraints.map(c => `(${c.join(', ')})`).join(' | ')\n throw new ShapeError(\n `cursor on model \"${model}\" must exactly match a unique constraint: ${constraintDesc}`,\n )\n }\n }\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(cursorConfig)) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in cursor`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in cursor`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in cursor`)\n fieldSchemas[fieldName] = createBaseType(fieldMeta, enumMap, scalarBase)\n }\n return z.object(fieldSchemas).strict().optional()\n }\n\n function buildDistinctSchema(\n model: string,\n distinctConfig: string[],\n ): z.ZodTypeAny {\n if (distinctConfig.length === 0) {\n throw new ShapeError('distinct must contain at least one field')\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n for (const fieldName of distinctConfig) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in distinct`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in distinct`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in distinct`)\n }\n\n const enumSchema = z.enum(distinctConfig as [string, ...string[]])\n return z.union([enumSchema, z.preprocess(coerceToArray, z.array(enumSchema).min(1))]).optional()\n }\n\n function buildBySchema(model: string, byConfig: string[]): z.ZodTypeAny {\n if (byConfig.length === 0) {\n throw new ShapeError('groupBy \"by\" must contain at least one field')\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n for (const fieldName of byConfig) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in by`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in by`)\n if (UNSUPPORTED_BY_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(`${fieldMeta.type} field \"${fieldName}\" cannot be used in by`)\n }\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in by`)\n }\n const enumSchema = z.enum(byConfig as [string, ...string[]])\n return z.union([enumSchema, z.preprocess(coerceToArray, z.array(enumSchema).min(1))])\n }\n\n function buildHavingSchema(\n model: string,\n havingConfig: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(havingConfig, `having on model \"${model}\"`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(havingConfig)) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in having`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in having`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in having`)\n\n const ops = getSupportedOperators(fieldMeta)\n if (ops.length === 0) {\n throw new ShapeError(`${fieldMeta.type} field \"${fieldName}\" cannot be used in having filters`)\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {}\n const opKeys: string[] = []\n for (const op of ops) {\n opSchemas[op] = createOperatorSchema(fieldMeta, op, enumMap, scalarBase).optional()\n opKeys.push(op)\n }\n if (fieldMeta.type === 'String' && !fieldMeta.isList) {\n opSchemas['mode'] = z.enum(['default', 'insensitive']).optional()\n }\n fieldSchemas[fieldName] = z.object(opSchemas).strict()\n .refine(\n (v) => opKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: `At least one operator required for having field \"${fieldName}\"` },\n )\n .optional()\n }\n\n const havingFieldKeys = Object.keys(fieldSchemas)\n return z.object(fieldSchemas).strict()\n .refine(\n (v) => havingFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'having must specify at least one field' },\n )\n .optional()\n }\n\n function buildAggregateFieldSchema(\n model: string,\n opName: string,\n fieldConfig: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(fieldConfig, `${opName} on model \"${model}\"`)\n\n const isNumericOnly = opName === '_avg' || opName === '_sum'\n const isComparableOnly = opName === '_min' || opName === '_max'\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(fieldConfig)) {\n if (fieldName === '_all' && opName === '_count') {\n fieldSchemas[fieldName] = z.literal(true).optional()\n continue\n }\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in ${opName}`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in ${opName}`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in ${opName}`)\n if (isNumericOnly && !NUMERIC_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(\n `Field \"${fieldName}\" (${fieldMeta.type}) cannot be used in ${opName}. Only numeric types (Int, Float, Decimal, BigInt) are supported.`,\n )\n }\n if (isComparableOnly && !COMPARABLE_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(\n `Field \"${fieldName}\" (${fieldMeta.type}) cannot be used in ${opName}. Only comparable types (Int, Float, Decimal, BigInt, String, DateTime) are supported.`,\n )\n }\n fieldSchemas[fieldName] = z.literal(true).optional()\n }\n\n const aggFieldKeys = Object.keys(fieldSchemas)\n return z.object(fieldSchemas).strict()\n .refine(\n (v) => aggFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: `${opName} must specify at least one field` },\n )\n .optional()\n }\n\n function buildCountFieldSchema(\n model: string,\n config: true | Record<string, true>,\n context: string,\n ): z.ZodTypeAny {\n if (config === true) {\n return z.literal(true).optional()\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(config, `${context} on model \"${model}\"`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(config)) {\n if (fieldName !== '_all') {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in ${context}`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in ${context}`)\n }\n fieldSchemas[fieldName] = z.literal(true).optional()\n }\n\n const countFieldKeys = Object.keys(fieldSchemas)\n return z.object(fieldSchemas).strict()\n .refine(\n (v) => countFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: `${context} must specify at least one field` },\n )\n .optional()\n }\n\n function buildCountSelectSchema(\n model: string,\n selectConfig: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(selectConfig, `count select on model \"${model}\"`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(selectConfig)) {\n if (fieldName === '_all') {\n fieldSchemas['_all'] = z.literal(true).optional()\n continue\n }\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in count select`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in count select`)\n fieldSchemas[fieldName] = z.literal(true).optional()\n }\n\n const countSelectKeys = Object.keys(fieldSchemas)\n return z.object(fieldSchemas).strict()\n .refine(\n (v) => countSelectKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'count select must specify at least one field' },\n )\n .optional()\n }\n\n return {\n buildOrderBySchema,\n buildTakeSchema,\n buildCursorSchema,\n buildDistinctSchema,\n buildBySchema,\n buildHavingSchema,\n buildAggregateFieldSchema,\n buildCountFieldSchema,\n buildCountSelectSchema,\n }\n}","import { z } from 'zod'\nimport type { TypeMap, EnumMap, UniqueMap, NestedIncludeArgs, NestedSelectArgs, OrderByFieldConfig } from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.js'\nimport { isPlainObject } from '../shared/utils.js'\nimport type { WhereForced, ForcedTree } from './query-builder-forced.js'\nimport { hasWhereForced } from './query-builder-forced.js'\nimport type { WhereBuiltResult } from './query-builder-where.js'\n\nconst KNOWN_NESTED_INCLUDE_KEYS = new Set([\n 'where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip',\n])\nconst KNOWN_NESTED_SELECT_KEYS = new Set([\n 'select', 'include', 'where', 'orderBy', 'cursor', 'take', 'skip',\n])\nconst KNOWN_COUNT_SELECT_ENTRY_KEYS = new Set(['where'])\nconst MAX_PROJECTION_DEPTH = 10\n\nexport interface BuiltIncludeResult {\n schema: z.ZodTypeAny\n forcedTree: Record<string, ForcedTree>\n forcedCountWhere: Record<string, WhereForced>\n}\n\nexport interface BuiltSelectResult {\n schema: z.ZodTypeAny\n forcedTree: Record<string, ForcedTree>\n forcedCountWhere: Record<string, WhereForced>\n}\n\ninterface ProjectionDeps {\n buildWhereSchema(model: string, config: Record<string, unknown>): WhereBuiltResult\n buildOrderBySchema(model: string, config: Record<string, OrderByFieldConfig>): z.ZodTypeAny\n buildCursorSchema(model: string, config: Record<string, true>): z.ZodTypeAny\n buildTakeSchema(config: { max: number; default?: number }): z.ZodTypeAny\n}\n\nfunction validateNestedKeys(\n keys: Iterable<string>,\n allowed: Set<string>,\n context: string,\n): void {\n for (const key of keys) {\n if (!allowed.has(key)) {\n throw new ShapeError(\n `Unknown key \"${key}\" in ${context}. Allowed: ${[...allowed].join(', ')}`,\n )\n }\n }\n}\n\nexport function createProjectionBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n deps: ProjectionDeps,\n) {\n function buildIncludeCountSchema(\n model: string,\n config: true | Record<string, unknown>,\n ): { schema: z.ZodTypeAny; forcedCountWhere: Record<string, WhereForced> } {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n if (config === true) {\n return { schema: z.literal(true).optional(), forcedCountWhere: {} }\n }\n\n if (!isPlainObject(config) || !('select' in config)) {\n throw new ShapeError(\n `Invalid _count config on model \"${model}\". Expected true or { select: { ... } }`,\n )\n }\n\n for (const key of Object.keys(config)) {\n if (key !== 'select') {\n throw new ShapeError(\n `Unknown key \"${key}\" in _count config on model \"${model}\". Only \"select\" is allowed.`,\n )\n }\n }\n\n if (!isPlainObject(config.select)) {\n throw new ShapeError(\n `Invalid _count.select on model \"${model}\". Expected a plain object with relation field keys.`,\n )\n }\n\n const selectObj = config.select as Record<string, true | Record<string, unknown>>\n\n if (Object.keys(selectObj).length === 0) {\n throw new ShapeError(\n `Empty _count.select on model \"${model}\". Define at least one relation field.`,\n )\n }\n\n const countSelectFields: Record<string, z.ZodTypeAny> = {}\n const forcedCountWhere: Record<string, WhereForced> = {}\n\n for (const [fieldName, fieldConfig] of Object.entries(selectObj)) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in _count.select`)\n if (!fieldMeta.isRelation) throw new ShapeError(`Field \"${fieldName}\" is not a relation on model \"${model}\" in _count.select`)\n if (!fieldMeta.isList) throw new ShapeError(`Field \"${fieldName}\" is a to-one relation on model \"${model}\" in _count.select. Only to-many relations support _count.`)\n\n if (fieldConfig === true) {\n countSelectFields[fieldName] = z.literal(true).optional()\n } else if (isPlainObject(fieldConfig)) {\n if (Object.keys(fieldConfig).length === 0) {\n throw new ShapeError(\n `Empty config for _count.select.${fieldName} on model \"${model}\". Use true or { where: { ... } }.`,\n )\n }\n validateNestedKeys(\n Object.keys(fieldConfig),\n KNOWN_COUNT_SELECT_ENTRY_KEYS,\n `_count.select.${fieldName} on model \"${model}\"`,\n )\n if (fieldConfig.where) {\n const relatedType = fieldMeta.type\n const { schema: whereSchema, forced } = deps.buildWhereSchema(\n relatedType,\n fieldConfig.where as Record<string, unknown>,\n )\n const nestedSchemas: Record<string, z.ZodTypeAny> = {}\n if (whereSchema) nestedSchemas['where'] = whereSchema\n const nestedObj = z.object(nestedSchemas).strict()\n countSelectFields[fieldName] = z.union([z.literal(true), nestedObj]).optional()\n\n if (hasWhereForced(forced)) {\n forcedCountWhere[fieldName] = forced\n }\n } else {\n countSelectFields[fieldName] = z.literal(true).optional()\n }\n } else {\n throw new ShapeError(\n `Invalid config for _count.select.${fieldName} on model \"${model}\". Expected true or { where: { ... } }`,\n )\n }\n }\n\n const countSelectKeys = Object.keys(countSelectFields)\n const selectSchema = z.object(countSelectFields).strict()\n .refine(\n (v) => countSelectKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: '_count.select must specify at least one field' },\n )\n return {\n schema: z.object({ select: selectSchema }).strict().optional(),\n forcedCountWhere,\n }\n }\n\n function buildIncludeSchema(\n model: string,\n includeConfig: Record<string, true | NestedIncludeArgs>,\n depth?: number,\n ): BuiltIncludeResult {\n const currentDepth = depth ?? 0\n if (currentDepth > MAX_PROJECTION_DEPTH) {\n throw new ShapeError(\n `Include schema for model \"${model}\" exceeds maximum nesting depth (${MAX_PROJECTION_DEPTH}). Check for circular relation references in the shape.`,\n )\n }\n\n if (Object.keys(includeConfig).length === 0) {\n throw new ShapeError(\n `Empty include config on model \"${model}\". Define at least one relation.`,\n )\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n const forcedTree: Record<string, ForcedTree> = {}\n let topLevelForcedCountWhere: Record<string, WhereForced> = {}\n\n for (const [relName, config] of Object.entries(includeConfig)) {\n if (relName === '_count') {\n const countResult = buildIncludeCountSchema(model, config as true | Record<string, unknown>)\n fieldSchemas['_count'] = countResult.schema\n topLevelForcedCountWhere = countResult.forcedCountWhere\n continue\n }\n\n const fieldMeta = modelFields[relName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${relName}\" on model \"${model}\"`)\n if (!fieldMeta.isRelation) throw new ShapeError(`Field \"${relName}\" is not a relation on model \"${model}\"`)\n\n if (config === true) {\n fieldSchemas[relName] = z.literal(true).optional()\n } else {\n validateNestedKeys(\n Object.keys(config),\n KNOWN_NESTED_INCLUDE_KEYS,\n `nested include for \"${relName}\" on model \"${model}\"`,\n )\n\n if (config.select && config.include) {\n throw new ShapeError(`Nested include for \"${relName}\" cannot define both \"select\" and \"include\".`)\n }\n\n if (!fieldMeta.isList) {\n if (config.where || config.orderBy || config.cursor || config.take || config.skip) {\n throw new ShapeError(\n `Relation \"${relName}\" on model \"${model}\" is to-one. Only \"include\" and \"select\" are supported for to-one nested reads, not where/orderBy/cursor/take/skip.`,\n )\n }\n }\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {}\n const relForced: ForcedTree = {}\n\n if (config.where) {\n const { schema: whereSchema, forced } = deps.buildWhereSchema(\n fieldMeta.type,\n config.where as Record<string, unknown>,\n )\n if (whereSchema) nestedSchemas['where'] = whereSchema\n if (hasWhereForced(forced)) relForced.where = forced\n }\n if (config.include) {\n const nested = buildIncludeSchema(fieldMeta.type, config.include, currentDepth + 1)\n nestedSchemas['include'] = nested.schema\n if (Object.keys(nested.forcedTree).length > 0) relForced.include = nested.forcedTree\n if (Object.keys(nested.forcedCountWhere).length > 0) {\n relForced._countWhere = nested.forcedCountWhere\n relForced._countWherePlacement = 'include'\n }\n }\n if (config.select) {\n const nested = buildSelectSchema(fieldMeta.type, config.select, currentDepth + 1)\n nestedSchemas['select'] = nested.schema\n if (Object.keys(nested.forcedTree).length > 0) relForced.select = nested.forcedTree\n if (Object.keys(nested.forcedCountWhere).length > 0) {\n relForced._countWhere = nested.forcedCountWhere\n relForced._countWherePlacement = 'select'\n }\n }\n if (config.orderBy) {\n nestedSchemas['orderBy'] = deps.buildOrderBySchema(fieldMeta.type, config.orderBy)\n }\n if (config.cursor) {\n nestedSchemas['cursor'] = deps.buildCursorSchema(fieldMeta.type, config.cursor)\n }\n if (config.take) {\n nestedSchemas['take'] = deps.buildTakeSchema(config.take)\n }\n if (config.skip) {\n nestedSchemas['skip'] = z.number().int().min(0).optional()\n }\n\n const nestedObj = z.object(nestedSchemas).strict()\n fieldSchemas[relName] = z.union([z.literal(true), nestedObj]).optional()\n\n if (Object.keys(relForced).length > 0) forcedTree[relName] = relForced\n }\n }\n\n const includeFieldKeys = Object.keys(fieldSchemas)\n const baseSchema = z.object(fieldSchemas).strict()\n const schema = includeFieldKeys.length > 0\n ? baseSchema.refine(\n (v) => includeFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'include must specify at least one field' },\n ).optional()\n : baseSchema.optional()\n\n return {\n schema,\n forcedTree,\n forcedCountWhere: topLevelForcedCountWhere,\n }\n }\n\n function buildSelectSchema(\n model: string,\n selectConfig: Record<string, true | NestedSelectArgs>,\n depth?: number,\n ): BuiltSelectResult {\n const currentDepth = depth ?? 0\n if (currentDepth > MAX_PROJECTION_DEPTH) {\n throw new ShapeError(\n `Select schema for model \"${model}\" exceeds maximum nesting depth (${MAX_PROJECTION_DEPTH}). Check for circular relation references in the shape.`,\n )\n }\n\n if (Object.keys(selectConfig).length === 0) {\n throw new ShapeError(\n `Empty select config on model \"${model}\". Define at least one field.`,\n )\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n const forcedTree: Record<string, ForcedTree> = {}\n let topLevelForcedCountWhere: Record<string, WhereForced> = {}\n\n for (const [fieldName, config] of Object.entries(selectConfig)) {\n if (fieldName === '_count') {\n const countResult = buildIncludeCountSchema(model, config as true | Record<string, unknown>)\n fieldSchemas['_count'] = countResult.schema\n topLevelForcedCountWhere = countResult.forcedCountWhere\n continue\n }\n\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`)\n\n if (config === true) {\n fieldSchemas[fieldName] = z.literal(true).optional()\n } else {\n if (!fieldMeta.isRelation) {\n throw new ShapeError(`Nested select args only valid for relations, not scalar \"${fieldName}\" on model \"${model}\"`)\n }\n\n validateNestedKeys(\n Object.keys(config),\n KNOWN_NESTED_SELECT_KEYS,\n `nested select for \"${fieldName}\" on model \"${model}\"`,\n )\n\n if (config.select && config.include) {\n throw new ShapeError(`Nested select for \"${fieldName}\" cannot define both \"select\" and \"include\".`)\n }\n\n if (!fieldMeta.isList) {\n if (config.where || config.orderBy || config.cursor || config.take || config.skip) {\n throw new ShapeError(\n `Relation \"${fieldName}\" on model \"${model}\" is to-one. Only \"select\" and \"include\" are supported for to-one nested reads, not where/orderBy/cursor/take/skip.`,\n )\n }\n }\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {}\n const relForced: ForcedTree = {}\n\n if (config.select) {\n const nested = buildSelectSchema(fieldMeta.type, config.select, currentDepth + 1)\n nestedSchemas['select'] = nested.schema\n if (Object.keys(nested.forcedTree).length > 0) relForced.select = nested.forcedTree\n if (Object.keys(nested.forcedCountWhere).length > 0) {\n relForced._countWhere = nested.forcedCountWhere\n relForced._countWherePlacement = 'select'\n }\n }\n if (config.include) {\n const nested = buildIncludeSchema(fieldMeta.type, config.include, currentDepth + 1)\n nestedSchemas['include'] = nested.schema\n if (Object.keys(nested.forcedTree).length > 0) relForced.include = nested.forcedTree\n if (Object.keys(nested.forcedCountWhere).length > 0) {\n relForced._countWhere = nested.forcedCountWhere\n relForced._countWherePlacement = 'include'\n }\n }\n if (config.where) {\n const { schema: whereSchema, forced } = deps.buildWhereSchema(\n fieldMeta.type,\n config.where as Record<string, unknown>,\n )\n if (whereSchema) nestedSchemas['where'] = whereSchema\n if (hasWhereForced(forced)) relForced.where = forced\n }\n if (config.orderBy) {\n nestedSchemas['orderBy'] = deps.buildOrderBySchema(fieldMeta.type, config.orderBy)\n }\n if (config.cursor) {\n nestedSchemas['cursor'] = deps.buildCursorSchema(fieldMeta.type, config.cursor)\n }\n if (config.take) {\n nestedSchemas['take'] = deps.buildTakeSchema(config.take)\n }\n if (config.skip) {\n nestedSchemas['skip'] = z.number().int().min(0).optional()\n }\n\n const nestedObj = z.object(nestedSchemas).strict()\n fieldSchemas[fieldName] = z.union([z.literal(true), nestedObj]).optional()\n\n if (Object.keys(relForced).length > 0) forcedTree[fieldName] = relForced\n }\n }\n\n const selectFieldKeys = Object.keys(fieldSchemas)\n const baseSchema = z.object(fieldSchemas).strict()\n const schema = selectFieldKeys.length > 0\n ? baseSchema.refine(\n (v) => selectFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'select must specify at least one field' },\n ).optional()\n : baseSchema.optional()\n\n return {\n schema,\n forcedTree,\n forcedCountWhere: topLevelForcedCountWhere,\n }\n }\n\n return { buildIncludeSchema, buildSelectSchema, buildIncludeCountSchema }\n}","import type { ScopeMap, GuardGeneratedConfig, GuardLogger } from '../shared/types.js'\nimport { PolicyError, ShapeError } from '../shared/errors.js'\n\nconst READ_OPS = new Set([\n 'findMany', 'findFirst',\n 'findFirstOrThrow',\n 'count',\n])\n\nconst AGGREGATE_OPS = new Set([\n 'aggregate', 'groupBy',\n])\n\nconst FIND_UNIQUE_OPS = new Set([\n 'findUnique', 'findUniqueOrThrow',\n])\n\nconst CREATE_OPS = new Set([\n 'create', 'createMany', 'createManyAndReturn',\n])\n\nconst UNIQUE_MUTATION_OPS = new Set([\n 'update', 'delete',\n])\n\nconst MULTI_MUTATION_OPS = new Set([\n 'updateMany', 'updateManyAndReturn', 'deleteMany',\n])\n\nfunction buildAndConditions(\n existingWhere: Record<string, unknown> | undefined,\n conditions: Record<string, unknown>[],\n): Record<string, unknown> {\n if (existingWhere) return { AND: [existingWhere, ...conditions] }\n if (conditions.length === 1) return conditions[0]\n return { AND: conditions }\n}\n\nfunction buildScopedUniqueWhere(\n existingWhere: Record<string, unknown> | undefined,\n conditions: Record<string, unknown>[],\n): Record<string, unknown> {\n if (!existingWhere) {\n return conditions.length === 1 ? conditions[0] : { AND: conditions }\n }\n const { AND: existingAnd, ...topLevel } = existingWhere\n const allConditions: unknown[] = []\n if (existingAnd !== undefined) {\n if (Array.isArray(existingAnd)) {\n allConditions.push(...existingAnd)\n } else {\n allConditions.push(existingAnd)\n }\n }\n allConditions.push(...conditions)\n return { ...topLevel, AND: allConditions }\n}\n\nfunction isComparableScopeValue(v: unknown): v is string | number | bigint {\n const t = typeof v\n return t === 'string' || t === 'number' || t === 'bigint'\n}\n\nfunction looseEqual(a: unknown, b: unknown, log?: GuardLogger, fk?: string): boolean {\n if (a === b) return true\n if (!isComparableScopeValue(a) || !isComparableScopeValue(b)) return false\n const eq = String(a) === String(b)\n if (eq && log && fk) {\n log.warn(\n `prisma-guard: Scope value for \"${fk}\" matched via type coercion (${typeof a} ${String(a)} vs ${typeof b} ${String(b)}). Consider normalizing types in the context function.`,\n )\n }\n return eq\n}\n\nfunction buildFkSelect(fks: string[]): Record<string, true> {\n const select: Record<string, true> = {}\n for (const fk of fks) select[fk] = true\n return select\n}\n\nfunction pickMissingFksFromResult(\n result: Record<string, unknown>,\n fks: string[],\n): string[] {\n const missing: string[] = []\n for (const fk of fks) {\n if (!(fk in result)) missing.push(fk)\n }\n return missing\n}\n\nfunction validateScopeValue(root: string, value: unknown): void {\n if (typeof value === 'string' && value.length === 0) {\n throw new PolicyError(\n `Empty string scope value for root \"${root}\". This is almost certainly a bug in the context function.`,\n )\n }\n if (typeof value === 'number' && !Number.isFinite(value)) {\n throw new PolicyError(\n `Invalid numeric scope value for root \"${root}\": ${value}. This is almost certainly a bug in the context function.`,\n )\n }\n}\n\nfunction enforceDataScope(\n data: Record<string, unknown>,\n scopes: readonly { readonly fk: string; readonly root: string; readonly relationName: string }[],\n overrides: Record<string, unknown>,\n log: GuardLogger,\n model: string,\n operation: string,\n onScopeRelationWrite: 'error' | 'warn' | 'strip',\n mode: 'create' | 'mutate',\n): void {\n for (const scope of scopes) {\n if (scope.fk in data) {\n log.warn(\n `prisma-guard: Scope FK \"${scope.fk}\" in ${operation} data for model \"${model}\" was overridden by scope context.`,\n )\n }\n if (scope.relationName in data) {\n if (onScopeRelationWrite === 'error') {\n throw new ShapeError(\n `Scope relation \"${scope.relationName}\" cannot be set directly in ${operation} data for model \"${model}\". The scope extension manages this relation automatically.`,\n )\n }\n if (onScopeRelationWrite === 'warn') {\n log.warn(\n `prisma-guard: Scope relation \"${scope.relationName}\" in ${operation} data for model \"${model}\" was removed by scope context.`,\n )\n }\n delete data[scope.relationName]\n }\n }\n if (mode === 'create') {\n Object.assign(data, overrides)\n } else {\n for (const scope of scopes) {\n delete data[scope.fk]\n }\n }\n}\n\nconst VALID_FIND_UNIQUE_MODES = new Set(['verify', 'reject'])\nconst VALID_ON_SCOPE_RELATION_WRITES = new Set(['error', 'warn', 'strip'])\n\nexport function createScopeExtension<TRoots extends string>(\n scopeMap: ScopeMap,\n contextFn: () => Partial<Record<TRoots, string | number | bigint>>,\n guardConfig: GuardGeneratedConfig,\n logger?: GuardLogger,\n) {\n const log: GuardLogger = logger ?? { warn: (msg) => console.warn(msg) }\n const findUniqueMode = guardConfig.findUniqueMode ?? 'reject'\n const onScopeRelationWrite = guardConfig.onScopeRelationWrite ?? 'error'\n\n if (!VALID_FIND_UNIQUE_MODES.has(findUniqueMode)) {\n throw new ShapeError(\n `prisma-guard: Invalid findUniqueMode \"${findUniqueMode}\". Allowed: ${[...VALID_FIND_UNIQUE_MODES].join(', ')}`,\n )\n }\n\n if (!VALID_ON_SCOPE_RELATION_WRITES.has(onScopeRelationWrite)) {\n throw new ShapeError(\n `prisma-guard: Invalid onScopeRelationWrite \"${onScopeRelationWrite}\". Allowed: ${[...VALID_ON_SCOPE_RELATION_WRITES].join(', ')}`,\n )\n }\n\n return {\n name: 'prisma-guard-scope',\n query: {\n $allOperations({ model, operation, args, query }: any) {\n if (!model || !scopeMap[model]) return query(args)\n\n const ctx = contextFn() as Partial<Record<string, string | number | bigint>>\n const scopes = scopeMap[model]\n\n const presentScopes = scopes.filter(s => ctx[s.root] != null)\n for (const s of presentScopes) {\n validateScopeValue(s.root, ctx[s.root])\n }\n\n const presentConditions = presentScopes.map(s => ({ [s.fk]: ctx[s.root] }))\n\n const missingRoots = scopes\n .filter(s => ctx[s.root] == null)\n .map(s => s.root)\n\n const isMutation = CREATE_OPS.has(operation) ||\n UNIQUE_MUTATION_OPS.has(operation) ||\n MULTI_MUTATION_OPS.has(operation) ||\n operation === 'upsert'\n\n if (missingRoots.length > 0) {\n if (isMutation || guardConfig.onMissingScopeContext === 'error') {\n throw new PolicyError(\n `Missing scope context for model \"${model}\": roots ${missingRoots.map(r => `\"${r}\"`).join(', ')} not provided. All scope roots must be present.`,\n )\n }\n if (guardConfig.onMissingScopeContext === 'warn') {\n log.warn(\n `prisma-guard: Missing scope context for model \"${model}\": roots ${missingRoots.map(r => `\"${r}\"`).join(', ')} not provided. Read proceeding with partial scope.`,\n )\n }\n if (presentConditions.length === 0) {\n return query(args)\n }\n }\n\n const conditions = presentConditions\n const overrides = Object.fromEntries(\n presentScopes.map(s => [s.fk, ctx[s.root]]),\n )\n\n const nextArgs = { ...args }\n\n if (operation === 'upsert') {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions)\n if (args.create !== undefined && args.create !== null) {\n if (typeof args.create !== 'object' || Array.isArray(args.create)) {\n throw new ShapeError(`upsert expects create to be an object`)\n }\n nextArgs.create = { ...args.create }\n enforceDataScope(nextArgs.create, scopes, overrides, log, model, operation, onScopeRelationWrite, 'create')\n }\n if (args.update !== undefined && args.update !== null) {\n if (typeof args.update !== 'object' || Array.isArray(args.update)) {\n throw new ShapeError(`upsert expects update to be an object`)\n }\n nextArgs.update = { ...args.update }\n enforceDataScope(nextArgs.update, scopes, overrides, log, model, operation, onScopeRelationWrite, 'mutate')\n }\n return query(nextArgs)\n }\n\n if (FIND_UNIQUE_OPS.has(operation)) {\n if (findUniqueMode === 'reject') {\n throw new PolicyError(\n `Scoped model \"${model}\" does not allow ${operation} via scope extension (findUniqueMode is \"reject\"). Use findFirst with explicit where conditions instead.`,\n )\n }\n return handleFindUnique(args, query, conditions, scopes, operation, log)\n }\n\n if (READ_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n return query(nextArgs)\n }\n\n if (AGGREGATE_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n if (operation === 'groupBy' && !nextArgs.by) {\n throw new ShapeError(\n `prisma-guard: groupBy on scoped model \"${model}\" requires \"by\" argument.`,\n )\n }\n return query(nextArgs)\n }\n\n if (CREATE_OPS.has(operation)) {\n if (args.data === undefined || args.data === null) {\n throw new ShapeError(`${operation} expects data`)\n }\n if (operation === 'createMany' || operation === 'createManyAndReturn') {\n if (!Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an array`)\n }\n if (args.data.length === 0) {\n throw new ShapeError(`${operation} received empty data array`)\n }\n nextArgs.data = args.data.map((d: any) => {\n const item = { ...d }\n enforceDataScope(item, scopes, overrides, log, model, operation, onScopeRelationWrite, 'create')\n return item\n })\n } else {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'create')\n }\n return query(nextArgs)\n }\n\n if (UNIQUE_MUTATION_OPS.has(operation)) {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions)\n if (args.data !== undefined && args.data !== null) {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'mutate')\n }\n return query(nextArgs)\n }\n\n if (MULTI_MUTATION_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n if (args.data !== undefined && args.data !== null) {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'mutate')\n }\n return query(nextArgs)\n }\n\n throw new ShapeError(\n `Unknown operation \"${operation}\" on scoped model \"${model}\". Update prisma-guard to handle this operation.`,\n )\n },\n },\n }\n}\n\nasync function handleFindUnique(\n args: any,\n query: (args: any) => Promise<any>,\n conditions: Record<string, unknown>[],\n scopes: readonly { readonly fk: string; readonly root: string; readonly relationName: string }[],\n operation: string,\n log: GuardLogger,\n): Promise<any> {\n const nextArgs = { ...args }\n const injectedFks: string[] = []\n const originalSelect = args?.select\n const fks = scopes.map(s => s.fk)\n\n if (originalSelect) {\n nextArgs.select = { ...originalSelect }\n for (const fk of fks) {\n if (!originalSelect[fk]) {\n nextArgs.select[fk] = true\n injectedFks.push(fk)\n }\n }\n }\n\n const result = await query(nextArgs)\n if (result === null) return result\n\n if (typeof result !== 'object' || result === null) {\n throw new ShapeError('findUnique result must be an object or null')\n }\n\n const resultObj = result as Record<string, unknown>\n\n let verifyObj: Record<string, unknown> = resultObj\n const missingFks = pickMissingFksFromResult(resultObj, fks)\n\n if (missingFks.length > 0) {\n const where = args?.where\n if (!where || typeof where !== 'object' || Array.isArray(where)) {\n throw new PolicyError(\n `prisma-guard: Cannot verify scope — missing FK fields (${missingFks.join(', ')}) and findUnique args.where is not a valid object.`,\n )\n }\n\n let verifyResult: any\n try {\n verifyResult = await query({ where, select: buildFkSelect(fks) })\n } catch (err: any) {\n throw new PolicyError(\n `prisma-guard: Scope verification query failed for findUnique: ${err?.message ?? String(err)}`,\n )\n }\n\n if (verifyResult === null) {\n throw new PolicyError('prisma-guard: Scope verification query returned null for an existing findUnique result')\n }\n if (typeof verifyResult !== 'object' || verifyResult === null) {\n throw new PolicyError('prisma-guard: Scope verification result must be an object')\n }\n\n verifyObj = verifyResult as Record<string, unknown>\n }\n\n for (const condition of conditions) {\n const [fk, value] = Object.entries(condition)[0]\n if (!(fk in verifyObj)) {\n throw new PolicyError(\n `prisma-guard: Cannot verify scope on \"${fk}\" — field not present in verification result. Ensure FK fields are selectable.`,\n )\n }\n if (!looseEqual(verifyObj[fk], value, log, fk)) {\n if (operation === 'findUniqueOrThrow') {\n throw new PolicyError('Record not accessible in current scope')\n }\n return null\n }\n }\n\n if (injectedFks.length > 0) {\n const cleaned: Record<string, unknown> = { ...resultObj }\n for (const fk of injectedFks) {\n delete cleaned[fk]\n }\n return cleaned\n }\n\n return result\n}","import { z } from \"zod\";\nimport type {\n TypeMap,\n EnumMap,\n ZodChains,\n ZodDefaults,\n UniqueMap,\n ScopeMap,\n GuardShape,\n GuardInput,\n QueryMethod,\n GuardedModel,\n GuardGeneratedConfig,\n NestedIncludeArgs,\n NestedSelectArgs,\n} from \"../shared/types.js\";\nimport { ShapeError, formatZodError } from \"../shared/errors.js\";\nimport {\n GUARD_SHAPE_KEYS,\n toDelegateKey,\n isForcedValue,\n} from \"../shared/constants.js\";\nimport { createSchemaBuilder } from \"./schema-builder.js\";\nimport { createQueryBuilder } from \"./query-builder.js\";\nimport {\n applyBuiltShape,\n applyForcedTree,\n applyForcedCountWhere,\n validateUniqueEquality,\n validateResolvedUniqueWhere,\n mergeWhereForced,\n mergeUniqueWhereForced,\n hasWhereForced,\n} from \"./query-builder-forced.js\";\nimport type {\n BuiltShape,\n ForcedTree,\n WhereForced,\n} from \"./query-builder-forced.js\";\nimport type { WhereBuiltResult } from \"./query-builder-where.js\";\nimport {\n buildDataSchema,\n validateCreateCompleteness,\n validateAndMergeData,\n hasDataRefines,\n validateMutationBodyKeys,\n validateMutationShapeKeys,\n ALLOWED_BODY_KEYS_CREATE,\n ALLOWED_BODY_KEYS_CREATE_PROJECTION,\n ALLOWED_BODY_KEYS_CREATE_MANY,\n ALLOWED_BODY_KEYS_CREATE_MANY_PROJECTION,\n ALLOWED_BODY_KEYS_UPDATE,\n ALLOWED_BODY_KEYS_UPDATE_PROJECTION,\n ALLOWED_BODY_KEYS_DELETE,\n ALLOWED_BODY_KEYS_DELETE_PROJECTION,\n ALLOWED_BODY_KEYS_UPSERT,\n VALID_SHAPE_KEYS_CREATE,\n VALID_SHAPE_KEYS_CREATE_PROJECTION,\n VALID_SHAPE_KEYS_UPDATE,\n VALID_SHAPE_KEYS_UPDATE_PROJECTION,\n VALID_SHAPE_KEYS_DELETE,\n VALID_SHAPE_KEYS_DELETE_PROJECTION,\n VALID_SHAPE_KEYS_UPSERT,\n} from \"./model-guard-data.js\";\nimport type { BuiltDataSchema } from \"./model-guard-data.js\";\nimport { resolveShape } from \"./model-guard-resolve.js\";\nimport { validateContext } from \"./policy.js\";\nimport { isPlainObject } from \"../shared/utils.js\";\nimport { createScalarBase } from \"../shared/scalar-base.js\";\n\nconst UNIQUE_MUTATION_METHODS = new Set([\"update\", \"delete\", \"upsert\"]);\nconst UNIQUE_READ_METHODS = new Set<string>([\n \"findUnique\",\n \"findUniqueOrThrow\",\n]);\n\nconst BULK_MUTATION_METHODS = new Set([\n \"updateMany\",\n \"updateManyAndReturn\",\n \"deleteMany\",\n]);\n\nconst PROJECTION_MUTATION_METHODS = new Set([\n \"create\",\n \"update\",\n \"upsert\",\n \"delete\",\n \"createManyAndReturn\",\n \"updateManyAndReturn\",\n]);\n\nconst BATCH_CREATE_METHODS = new Set([\"createMany\", \"createManyAndReturn\"]);\n\ninterface BuiltProjection {\n zodSchema: z.ZodObject<any>;\n forcedIncludeTree: Record<string, ForcedTree>;\n forcedSelectTree: Record<string, ForcedTree>;\n forcedIncludeCountWhere: Record<string, WhereForced>;\n forcedSelectCountWhere: Record<string, WhereForced>;\n}\n\nfunction buildDefaultSelectInput(\n config: Record<string, true | NestedSelectArgs>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(config)) {\n if (key === \"_count\") {\n result[key] = buildDefaultCountInput(\n value as true | Record<string, unknown>,\n );\n continue;\n }\n if (value === true) {\n result[key] = true;\n } else {\n const nested: Record<string, unknown> = {};\n if (value.select) nested.select = buildDefaultSelectInput(value.select);\n if (value.include)\n nested.include = buildDefaultIncludeInput(value.include);\n result[key] = Object.keys(nested).length > 0 ? nested : true;\n }\n }\n return result;\n}\n\nfunction buildDefaultIncludeInput(\n config: Record<string, true | NestedIncludeArgs>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(config)) {\n if (key === \"_count\") {\n result[key] = buildDefaultCountInput(\n value as true | Record<string, unknown>,\n );\n continue;\n }\n if (value === true) {\n result[key] = true;\n } else {\n const nested: Record<string, unknown> = {};\n if (value.include)\n nested.include = buildDefaultIncludeInput(value.include);\n if (value.select) nested.select = buildDefaultSelectInput(value.select);\n result[key] = Object.keys(nested).length > 0 ? nested : true;\n }\n }\n return result;\n}\n\nfunction buildDefaultCountInput(\n config: true | Record<string, unknown>,\n): unknown {\n if (config === true) return true;\n if (!isPlainObject(config) || !config.select || !isPlainObject(config.select))\n return true;\n const selectObj = config.select as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(selectObj)) {\n result[key] = true;\n }\n return { select: result };\n}\n\nfunction buildDefaultProjectionBody(\n shape: GuardShape,\n): Record<string, unknown> {\n if (shape.select) {\n return { select: buildDefaultSelectInput(shape.select) };\n }\n if (shape.include) {\n return { include: buildDefaultIncludeInput(shape.include) };\n }\n return {};\n}\n\nfunction applyClientProjectionOverrides(\n shapeDefault: Record<string, unknown>,\n clientProjection: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...shapeDefault };\n\n for (const [key, clientValue] of Object.entries(clientProjection)) {\n const defaultValue = result[key];\n\n if (defaultValue === undefined) {\n result[key] = clientValue;\n continue;\n }\n\n if (clientValue === true) {\n result[key] = true;\n continue;\n }\n\n if (isPlainObject(clientValue)) {\n if (!isPlainObject(defaultValue)) {\n result[key] = clientValue;\n continue;\n }\n\n const merged = { ...(defaultValue as Record<string, unknown>) };\n const clientObj = clientValue as Record<string, unknown>;\n\n for (const [argKey, argValue] of Object.entries(clientObj)) {\n const defaultArgValue = merged[argKey];\n\n if (\n (argKey === \"select\" || argKey === \"include\") &&\n isPlainObject(argValue) &&\n isPlainObject(defaultArgValue)\n ) {\n merged[argKey] = applyClientProjectionOverrides(\n defaultArgValue as Record<string, unknown>,\n argValue as Record<string, unknown>,\n );\n } else {\n merged[argKey] = argValue;\n }\n }\n\n result[key] = merged;\n }\n }\n\n return result;\n}\n\nfunction hasClientControlledValues(obj: Record<string, unknown>): boolean {\n for (const value of Object.values(obj)) {\n if (isForcedValue(value)) continue;\n if (value === true) return true;\n if (isPlainObject(value) && hasClientControlledValues(value)) return true;\n }\n return false;\n}\n\nfunction checkIncludeForClientArgs(\n config: Record<string, true | NestedIncludeArgs>,\n): boolean {\n for (const [key, value] of Object.entries(config)) {\n if (key === \"_count\") {\n if (\n value !== true &&\n isPlainObject(value) &&\n isPlainObject((value as Record<string, unknown>).select)\n ) {\n const selectObj = (value as Record<string, unknown>).select as Record<\n string,\n unknown\n >;\n for (const entryVal of Object.values(selectObj)) {\n if (\n isPlainObject(entryVal) &&\n (entryVal as Record<string, unknown>).where\n ) {\n const w = (entryVal as Record<string, unknown>).where;\n if (isPlainObject(w) && hasClientControlledValues(w)) return true;\n }\n }\n }\n continue;\n }\n if (value === true) continue;\n if (value.orderBy || value.cursor || value.take || value.skip) return true;\n if (\n value.where &&\n isPlainObject(value.where) &&\n hasClientControlledValues(value.where as Record<string, unknown>)\n )\n return true;\n if (value.include && checkIncludeForClientArgs(value.include)) return true;\n if (value.select && checkSelectForClientArgs(value.select)) return true;\n }\n return false;\n}\n\nfunction checkSelectForClientArgs(\n config: Record<string, true | NestedSelectArgs>,\n): boolean {\n for (const [key, value] of Object.entries(config)) {\n if (key === \"_count\") {\n if (\n value !== true &&\n isPlainObject(value) &&\n isPlainObject((value as Record<string, unknown>).select)\n ) {\n const selectObj = (value as Record<string, unknown>).select as Record<\n string,\n unknown\n >;\n for (const entryVal of Object.values(selectObj)) {\n if (\n isPlainObject(entryVal) &&\n (entryVal as Record<string, unknown>).where\n ) {\n const w = (entryVal as Record<string, unknown>).where;\n if (isPlainObject(w) && hasClientControlledValues(w)) return true;\n }\n }\n }\n continue;\n }\n if (value === true) continue;\n if (value.orderBy || value.cursor || value.take || value.skip) return true;\n if (\n value.where &&\n isPlainObject(value.where) &&\n hasClientControlledValues(value.where as Record<string, unknown>)\n )\n return true;\n if (value.select && checkSelectForClientArgs(value.select)) return true;\n if (value.include && checkIncludeForClientArgs(value.include)) return true;\n }\n return false;\n}\n\nfunction hasNestedClientControlledArgs(shape: GuardShape): boolean {\n if (shape.include) {\n if (checkIncludeForClientArgs(shape.include)) return true;\n }\n if (shape.select) {\n if (checkSelectForClientArgs(shape.select)) return true;\n }\n return false;\n}\n\nexport function createModelGuardExtension(config: {\n typeMap: TypeMap;\n enumMap: EnumMap;\n zodChains: ZodChains;\n zodDefaults: ZodDefaults;\n uniqueMap: UniqueMap;\n scopeMap: ScopeMap;\n guardConfig: GuardGeneratedConfig;\n contextFn: () => Record<string, unknown>;\n wrapZodErrors?: boolean;\n}) {\n const {\n typeMap,\n enumMap,\n zodChains,\n zodDefaults,\n uniqueMap,\n scopeMap,\n guardConfig,\n contextFn,\n } = config;\n const wrapZodErrors = config.wrapZodErrors ?? false;\n const enforceProjection = guardConfig.enforceProjection ?? false;\n const scalarBase = createScalarBase(guardConfig.strictDecimal ?? false);\n const schemaBuilder = createSchemaBuilder(\n typeMap,\n zodChains,\n enumMap,\n scalarBase,\n zodDefaults,\n );\n const queryBuilder = createQueryBuilder(\n typeMap,\n enumMap,\n uniqueMap,\n scalarBase,\n );\n\n const modelScopeFks = new Map<string, Set<string>>();\n for (const [model, entries] of Object.entries(scopeMap)) {\n const fks = new Set<string>();\n for (const entry of entries) fks.add(entry.fk);\n modelScopeFks.set(model, fks);\n }\n\n function maybeValidateUniqueWhere(\n modelName: string,\n shape: GuardShape,\n method: string,\n ): void {\n if (!UNIQUE_MUTATION_METHODS.has(method)) return;\n if (!shape.where) return;\n validateUniqueEquality(modelName, shape.where, method, uniqueMap, typeMap);\n }\n\n function createGuardedMethods(\n modelName: string,\n modelDelegate: Record<string, (args: any) => any>,\n input: GuardInput,\n explicitCaller: string | undefined,\n ) {\n function callDelegate(method: string, args: any): any {\n if (typeof modelDelegate[method] !== \"function\") {\n throw new ShapeError(\n `Method \"${method}\" is not available on this model`,\n );\n }\n return modelDelegate[method](args);\n }\n\n function resolveCaller(): string | undefined {\n if (explicitCaller !== undefined) return explicitCaller;\n const ctx = validateContext(contextFn());\n const c = ctx.caller;\n if (typeof c === \"string\") return c;\n return undefined;\n }\n\n const readShapeCache = new Map<string, BuiltShape>();\n const dataSchemaCache = new Map<string, BuiltDataSchema>();\n const whereBuiltCache = new Map<string, WhereBuiltResult>();\n const projectionCache = new Map<string, BuiltProjection>();\n\n function getReadShape(\n method: QueryMethod,\n queryShape: Record<string, unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): BuiltShape {\n if (!wasDynamic) {\n const cacheKey = `${method}\\0${matchedKey}`;\n const cached = readShapeCache.get(cacheKey);\n if (cached) return cached;\n const built = queryBuilder.buildShapeZodSchema(\n modelName,\n method,\n queryShape as any,\n );\n readShapeCache.set(cacheKey, built);\n return built;\n }\n return queryBuilder.buildShapeZodSchema(\n modelName,\n method,\n queryShape as any,\n );\n }\n\n function getDataSchema(\n mode: \"create\" | \"update\",\n dataConfig: Record<string, true | unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): BuiltDataSchema {\n if (!wasDynamic && !hasDataRefines(dataConfig)) {\n const cacheKey = `${mode}\\0${matchedKey}`;\n const cached = dataSchemaCache.get(cacheKey);\n if (cached) return cached;\n const built = buildDataSchema(\n modelName,\n dataConfig,\n mode,\n typeMap,\n schemaBuilder,\n zodDefaults,\n );\n dataSchemaCache.set(cacheKey, built);\n return built;\n }\n return buildDataSchema(\n modelName,\n dataConfig,\n mode,\n typeMap,\n schemaBuilder,\n zodDefaults,\n );\n }\n\n function getWhereBuilt(\n whereConfig: Record<string, unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): WhereBuiltResult {\n if (!wasDynamic) {\n const cached = whereBuiltCache.get(matchedKey);\n if (cached) return cached;\n const built = queryBuilder.buildWhereSchema(modelName, whereConfig);\n whereBuiltCache.set(matchedKey, built);\n return built;\n }\n return queryBuilder.buildWhereSchema(modelName, whereConfig);\n }\n\n function buildProjectionSchema(shape: GuardShape): BuiltProjection {\n const schemaFields: Record<string, z.ZodTypeAny> = {};\n let forcedIncludeTree: Record<string, ForcedTree> = {};\n let forcedSelectTree: Record<string, ForcedTree> = {};\n let forcedIncludeCountWhere: Record<string, WhereForced> = {};\n let forcedSelectCountWhere: Record<string, WhereForced> = {};\n\n if (shape.include) {\n const result = queryBuilder.buildIncludeSchema(\n modelName,\n shape.include as Record<string, true | NestedIncludeArgs>,\n );\n schemaFields[\"include\"] = result.schema;\n forcedIncludeTree = result.forcedTree;\n forcedIncludeCountWhere = result.forcedCountWhere;\n }\n\n if (shape.select) {\n const result = queryBuilder.buildSelectSchema(\n modelName,\n shape.select as Record<string, true | NestedSelectArgs>,\n );\n schemaFields[\"select\"] = result.schema;\n forcedSelectTree = result.forcedTree;\n forcedSelectCountWhere = result.forcedCountWhere;\n }\n\n return {\n zodSchema: z.object(schemaFields).strict(),\n forcedIncludeTree,\n forcedSelectTree,\n forcedIncludeCountWhere,\n forcedSelectCountWhere,\n };\n }\n\n function getProjection(\n shape: GuardShape,\n matchedKey: string,\n wasDynamic: boolean,\n ): BuiltProjection {\n if (!wasDynamic) {\n const cacheKey = `projection\\0${matchedKey}`;\n const cached = projectionCache.get(cacheKey);\n if (cached) return cached;\n const built = buildProjectionSchema(shape);\n projectionCache.set(cacheKey, built);\n return built;\n }\n return buildProjectionSchema(shape);\n }\n\n function resolveProjection(\n shape: GuardShape,\n parsed: Record<string, unknown>,\n method: string,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n const hasBodyProjection = \"select\" in parsed || \"include\" in parsed;\n const hasShapeProjection = !!shape.select || !!shape.include;\n\n if (hasBodyProjection && !hasShapeProjection) {\n throw new ShapeError(\n `Guard shape does not define \"select\" or \"include\" for ${method} return projection`,\n );\n }\n\n if (\"select\" in parsed && \"include\" in parsed) {\n throw new ShapeError(\n 'Request body cannot define both \"select\" and \"include\"',\n );\n }\n\n if (!hasShapeProjection) return {};\n\n if (!hasBodyProjection && !enforceProjection) return {};\n\n if (!hasBodyProjection && enforceProjection) {\n if (hasNestedClientControlledArgs(shape)) {\n throw new ShapeError(\n `Guard shape defines nested client-controlled projection args (orderBy/take/cursor/skip/where) ` +\n `but the client did not provide select/include in the ${method} body. ` +\n `With enforceProjection enabled, either always provide projection in the body ` +\n `or remove client-controlled nested args from the shape.`,\n );\n }\n }\n\n const projection = getProjection(shape, matchedKey, wasDynamic);\n\n let projectionBody: Record<string, unknown>;\n if (hasBodyProjection) {\n projectionBody = {};\n if (\"select\" in parsed) projectionBody.select = parsed.select;\n if (\"include\" in parsed) projectionBody.include = parsed.include;\n } else {\n projectionBody = buildDefaultProjectionBody(shape);\n }\n\n const validated = projection.zodSchema.parse(projectionBody) as Record<\n string,\n unknown\n >;\n\n if (Object.keys(projection.forcedIncludeTree).length > 0) {\n applyForcedTree(validated, \"include\", projection.forcedIncludeTree);\n }\n if (Object.keys(projection.forcedSelectTree).length > 0) {\n applyForcedTree(validated, \"select\", projection.forcedSelectTree);\n }\n if (Object.keys(projection.forcedIncludeCountWhere).length > 0) {\n const ic = validated.include as Record<string, unknown> | undefined;\n if (ic) applyForcedCountWhere(ic, projection.forcedIncludeCountWhere);\n }\n if (Object.keys(projection.forcedSelectCountWhere).length > 0) {\n const sc = validated.select as Record<string, unknown> | undefined;\n if (sc) applyForcedCountWhere(sc, projection.forcedSelectCountWhere);\n }\n\n return validated;\n }\n\n function buildWhereFromShape(\n shape: GuardShape,\n bodyWhere: unknown,\n preserveUnique: boolean,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n if (!shape.where) {\n if (bodyWhere !== undefined) {\n throw new ShapeError('Guard shape does not allow \"where\"');\n }\n return {};\n }\n\n const built = getWhereBuilt(shape.where, matchedKey, wasDynamic);\n let validatedWhere: Record<string, unknown> | undefined;\n\n if (built.schema) {\n let sanitizedWhere = bodyWhere;\n if (built.forcedOnlyKeys.size > 0 && isPlainObject(bodyWhere)) {\n const w = { ...(bodyWhere as Record<string, unknown>) };\n for (const key of built.forcedOnlyKeys) {\n delete w[key];\n }\n sanitizedWhere = w;\n }\n validatedWhere = built.schema.parse(sanitizedWhere) as\n | Record<string, unknown>\n | undefined;\n } else if (bodyWhere !== undefined) {\n if (\n bodyWhere === null ||\n !isPlainObject(bodyWhere) ||\n Object.keys(bodyWhere).length > 0\n ) {\n let hasOnlyForcedKeys = false;\n if (isPlainObject(bodyWhere) && built.forcedOnlyKeys.size > 0) {\n hasOnlyForcedKeys = Object.keys(bodyWhere).every((k) =>\n built.forcedOnlyKeys.has(k),\n );\n }\n if (!hasOnlyForcedKeys) {\n throw new ShapeError(\n \"Guard shape where contains only forced conditions. Client where input is not accepted.\",\n );\n }\n }\n }\n\n if (hasWhereForced(built.forced)) {\n return preserveUnique\n ? mergeUniqueWhereForced(validatedWhere, built.forced)\n : mergeWhereForced(validatedWhere, built.forced);\n }\n\n return validatedWhere ?? {};\n }\n\n function requireWhere(\n shape: GuardShape,\n bodyWhere: unknown,\n method: string,\n preserveUnique: boolean,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n const where = buildWhereFromShape(\n shape,\n bodyWhere,\n preserveUnique,\n matchedKey,\n wasDynamic,\n );\n if (Object.keys(where).length === 0) {\n throw new ShapeError(`${method} requires a where condition`);\n }\n return where;\n }\n\n function buildEffectiveReadBody(resolved: {\n body: Record<string, unknown>;\n shape: GuardShape;\n }): Record<string, unknown> {\n const hasShapeProjection =\n !!resolved.shape.select || !!resolved.shape.include;\n if (!hasShapeProjection) return resolved.body;\n\n const defaultProjection = buildDefaultProjectionBody(resolved.shape);\n const hasBodyProjection =\n \"select\" in resolved.body || \"include\" in resolved.body;\n\n if (!hasBodyProjection) {\n return { ...resolved.body, ...defaultProjection };\n }\n\n const merged: Record<string, unknown> = { ...resolved.body };\n\n if (\n \"select\" in resolved.body &&\n \"select\" in defaultProjection &&\n isPlainObject(resolved.body.select) &&\n isPlainObject(defaultProjection.select)\n ) {\n merged.select = applyClientProjectionOverrides(\n defaultProjection.select as Record<string, unknown>,\n resolved.body.select as Record<string, unknown>,\n );\n } else if (\n \"include\" in resolved.body &&\n \"include\" in defaultProjection &&\n isPlainObject(resolved.body.include) &&\n isPlainObject(defaultProjection.include)\n ) {\n merged.include = applyClientProjectionOverrides(\n defaultProjection.include as Record<string, unknown>,\n resolved.body.include as Record<string, unknown>,\n );\n }\n\n return merged;\n }\n\n function makeReadMethod(method: QueryMethod) {\n return (body?: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n if (resolved.shape.data) {\n throw new ShapeError(`Guard shape \"data\" is not valid for ${method}`);\n }\n const { data: _, ...queryShape } = resolved.shape;\n const built = getReadShape(\n method,\n queryShape,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n const isUnique = UNIQUE_READ_METHODS.has(method);\n\n const effectiveBody = buildEffectiveReadBody(resolved);\n\n const args = applyBuiltShape(built, effectiveBody, isUnique);\n if (isUnique && args.where) {\n validateResolvedUniqueWhere(\n modelName,\n args.where as Record<string, unknown>,\n method,\n uniqueMap,\n );\n }\n return callDelegate(method, args);\n };\n }\n\n function makeCreateMethod(method: string) {\n const isBatch = BATCH_CREATE_METHODS.has(method);\n const supportsProjection = PROJECTION_MUTATION_METHODS.has(method);\n let allowedBodyKeys: Set<string>;\n if (isBatch && supportsProjection) {\n allowedBodyKeys = ALLOWED_BODY_KEYS_CREATE_MANY_PROJECTION;\n } else if (isBatch) {\n allowedBodyKeys = ALLOWED_BODY_KEYS_CREATE_MANY;\n } else if (supportsProjection) {\n allowedBodyKeys = ALLOWED_BODY_KEYS_CREATE_PROJECTION;\n } else {\n allowedBodyKeys = ALLOWED_BODY_KEYS_CREATE;\n }\n const allowedShapeKeys = supportsProjection\n ? VALID_SHAPE_KEYS_CREATE_PROJECTION\n : VALID_SHAPE_KEYS_CREATE;\n\n return (body: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n if (!resolved.shape.data)\n throw new ShapeError(`Guard shape requires \"data\" for ${method}`);\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n const fks = modelScopeFks.get(modelName) ?? new Set<string>();\n validateCreateCompleteness(\n modelName,\n resolved.shape.data,\n typeMap,\n fks,\n zodDefaults,\n );\n const dataSchema = getDataSchema(\n \"create\",\n resolved.shape.data,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n\n let args: Record<string, unknown>;\n if (method === \"create\") {\n const data = validateAndMergeData(\n resolved.body.data,\n dataSchema,\n method,\n );\n args = { data };\n } else {\n if (!Array.isArray(resolved.body.data))\n throw new ShapeError(`${method} expects data to be an array`);\n if (resolved.body.data.length === 0)\n throw new ShapeError(`${method} received empty data array`);\n const data = resolved.body.data.map((item: unknown) =>\n validateAndMergeData(item, dataSchema, method),\n );\n args = { data };\n }\n\n if (isBatch && resolved.body.skipDuplicates !== undefined) {\n if (typeof resolved.body.skipDuplicates !== \"boolean\") {\n throw new ShapeError(`${method} skipDuplicates must be a boolean`);\n }\n args.skipDuplicates = resolved.body.skipDuplicates;\n }\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(\n resolved.shape,\n resolved.body,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n Object.assign(args, projectionArgs);\n }\n\n return callDelegate(method, args);\n };\n }\n\n function makeUpdateMethod(method: string) {\n const isUniqueWhere = method === \"update\";\n const isBulk = BULK_MUTATION_METHODS.has(method);\n const supportsProjection = PROJECTION_MUTATION_METHODS.has(method);\n const allowedBodyKeys = supportsProjection\n ? ALLOWED_BODY_KEYS_UPDATE_PROJECTION\n : ALLOWED_BODY_KEYS_UPDATE;\n const allowedShapeKeys = supportsProjection\n ? VALID_SHAPE_KEYS_UPDATE_PROJECTION\n : VALID_SHAPE_KEYS_UPDATE;\n\n return (body: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n if (!resolved.shape.data)\n throw new ShapeError(`Guard shape requires \"data\" for ${method}`);\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n if (isBulk && !resolved.shape.where) {\n throw new ShapeError(\n `Guard shape requires \"where\" for ${method} to prevent unconstrained bulk mutations`,\n );\n }\n maybeValidateUniqueWhere(modelName, resolved.shape, method);\n const dataSchema = getDataSchema(\n \"update\",\n resolved.shape.data,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n const data = validateAndMergeData(\n resolved.body.data,\n dataSchema,\n method,\n );\n const where = isUniqueWhere\n ? requireWhere(\n resolved.shape,\n resolved.body.where,\n method,\n true,\n resolved.matchedKey,\n resolved.wasDynamic,\n )\n : buildWhereFromShape(\n resolved.shape,\n resolved.body.where,\n false,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n if (isBulk && Object.keys(where).length === 0) {\n throw new ShapeError(\n `${method} requires at least one where condition`,\n );\n }\n if (isUniqueWhere) {\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap);\n }\n\n const args: Record<string, unknown> = { data, where };\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(\n resolved.shape,\n resolved.body,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n Object.assign(args, projectionArgs);\n }\n\n return callDelegate(method, args);\n };\n }\n\n function makeDeleteMethod(method: string) {\n const isUniqueWhere = method === \"delete\";\n const isBulk = BULK_MUTATION_METHODS.has(method);\n const supportsProjection = PROJECTION_MUTATION_METHODS.has(method);\n const allowedBodyKeys = supportsProjection\n ? ALLOWED_BODY_KEYS_DELETE_PROJECTION\n : ALLOWED_BODY_KEYS_DELETE;\n const allowedShapeKeys = supportsProjection\n ? VALID_SHAPE_KEYS_DELETE_PROJECTION\n : VALID_SHAPE_KEYS_DELETE;\n\n return (body: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n if (resolved.shape.data)\n throw new ShapeError(`Guard shape \"data\" is not valid for ${method}`);\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n if (isBulk && !resolved.shape.where) {\n throw new ShapeError(\n `Guard shape requires \"where\" for ${method} to prevent unconstrained bulk mutations`,\n );\n }\n maybeValidateUniqueWhere(modelName, resolved.shape, method);\n const where = isUniqueWhere\n ? requireWhere(\n resolved.shape,\n resolved.body.where,\n method,\n true,\n resolved.matchedKey,\n resolved.wasDynamic,\n )\n : buildWhereFromShape(\n resolved.shape,\n resolved.body.where,\n false,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n if (isBulk && Object.keys(where).length === 0) {\n throw new ShapeError(\n `${method} requires at least one where condition`,\n );\n }\n if (isUniqueWhere) {\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap);\n }\n\n const args: Record<string, unknown> = { where };\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(\n resolved.shape,\n resolved.body,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n Object.assign(args, projectionArgs);\n }\n\n return callDelegate(method, args);\n };\n }\n\n function makeUpsertMethod() {\n return (body: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n\n if (resolved.shape.data) {\n throw new ShapeError(\n 'Guard shape \"data\" is not valid for upsert. Use \"create\" and \"update\" instead.',\n );\n }\n if (!resolved.shape.create) {\n throw new ShapeError('Guard shape requires \"create\" for upsert');\n }\n if (!resolved.shape.update) {\n throw new ShapeError('Guard shape requires \"update\" for upsert');\n }\n if (!resolved.shape.where) {\n throw new ShapeError('Guard shape requires \"where\" for upsert');\n }\n\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n VALID_SHAPE_KEYS_UPSERT,\n \"upsert\",\n );\n validateMutationBodyKeys(\n resolved.body,\n ALLOWED_BODY_KEYS_UPSERT,\n \"upsert\",\n );\n\n maybeValidateUniqueWhere(modelName, resolved.shape, \"upsert\");\n\n const fks = modelScopeFks.get(modelName) ?? new Set<string>();\n validateCreateCompleteness(\n modelName,\n resolved.shape.create,\n typeMap,\n fks,\n zodDefaults,\n );\n\n const createDataSchema = getDataSchema(\n \"create\",\n resolved.shape.create,\n `upsert:create\\0${resolved.matchedKey}`,\n resolved.wasDynamic,\n );\n const createData = validateAndMergeData(\n resolved.body.create,\n createDataSchema,\n \"upsert (create)\",\n );\n\n const updateDataSchema = getDataSchema(\n \"update\",\n resolved.shape.update,\n `upsert:update\\0${resolved.matchedKey}`,\n resolved.wasDynamic,\n );\n const updateData = validateAndMergeData(\n resolved.body.update,\n updateDataSchema,\n \"upsert (update)\",\n );\n\n const where = requireWhere(\n resolved.shape,\n resolved.body.where,\n \"upsert\",\n true,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n validateResolvedUniqueWhere(modelName, where, \"upsert\", uniqueMap);\n\n const args: Record<string, unknown> = {\n where,\n create: createData,\n update: updateData,\n };\n\n const projectionArgs = resolveProjection(\n resolved.shape,\n resolved.body,\n \"upsert\",\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n Object.assign(args, projectionArgs);\n\n return callDelegate(\"upsert\", args);\n };\n }\n\n return {\n findMany: makeReadMethod(\"findMany\"),\n findFirst: makeReadMethod(\"findFirst\"),\n findFirstOrThrow: makeReadMethod(\"findFirstOrThrow\"),\n findUnique: makeReadMethod(\"findUnique\"),\n findUniqueOrThrow: makeReadMethod(\"findUniqueOrThrow\"),\n count: makeReadMethod(\"count\"),\n aggregate: makeReadMethod(\"aggregate\"),\n groupBy: makeReadMethod(\"groupBy\"),\n create: makeCreateMethod(\"create\"),\n createMany: makeCreateMethod(\"createMany\"),\n createManyAndReturn: makeCreateMethod(\"createManyAndReturn\"),\n update: makeUpdateMethod(\"update\"),\n updateMany: makeUpdateMethod(\"updateMany\"),\n updateManyAndReturn: makeUpdateMethod(\"updateManyAndReturn\"),\n upsert: makeUpsertMethod(),\n delete: makeDeleteMethod(\"delete\"),\n deleteMany: makeDeleteMethod(\"deleteMany\"),\n };\n }\n\n function wrapMethods(\n methods: Record<string, (body?: unknown) => any>,\n ): Record<string, (body?: unknown) => any> {\n const wrapped: Record<string, (body?: unknown) => any> = {};\n for (const [key, fn] of Object.entries(methods)) {\n wrapped[key] = (body?: unknown) => {\n try {\n return fn(body);\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new ShapeError(`Validation failed: ${formatZodError(err)}`, {\n cause: err,\n });\n }\n throw err;\n }\n };\n }\n return wrapped;\n }\n\n return {\n $allModels: {\n guard(this: any, input: GuardInput, caller?: string) {\n const modelName: string = this.$name;\n const delegateKey = toDelegateKey(modelName);\n const modelDelegate = this.$parent[delegateKey];\n if (!modelDelegate) {\n throw new ShapeError(\n `Could not resolve Prisma delegate for model \"${modelName}\" (key: \"${delegateKey}\")`,\n );\n }\n const methods = createGuardedMethods(\n modelName,\n modelDelegate,\n input,\n caller,\n );\n if (!wrapZodErrors) return methods;\n return wrapMethods(methods);\n },\n },\n };\n}\n","import { z } from \"zod\";\nimport type {\n TypeMap,\n ScopeMap,\n ZodDefaults,\n DataFieldRefine,\n} from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport { isForcedValue, isUnsupportedMarker } from \"../shared/constants.js\";\nimport { deepClone } from \"../shared/deep-clone.js\";\nimport type { createSchemaBuilder } from \"./schema-builder.js\";\nimport {\n schemaProducesValueForUndefined,\n isZodSchema,\n isPlainObject,\n coerceToArray,\n} from \"../shared/utils.js\";\n\nexport interface BuiltDataSchema {\n schema: z.ZodObject<any>;\n forced: Record<string, unknown>;\n}\n\nexport const ALLOWED_BODY_KEYS_CREATE = new Set([\"data\"]);\nexport const ALLOWED_BODY_KEYS_CREATE_PROJECTION = new Set([\n \"data\",\n \"select\",\n \"include\",\n]);\nexport const ALLOWED_BODY_KEYS_CREATE_MANY = new Set([\n \"data\",\n \"skipDuplicates\",\n]);\nexport const ALLOWED_BODY_KEYS_CREATE_MANY_PROJECTION = new Set([\n \"data\",\n \"select\",\n \"include\",\n \"skipDuplicates\",\n]);\nexport const ALLOWED_BODY_KEYS_UPDATE = new Set([\"data\", \"where\"]);\nexport const ALLOWED_BODY_KEYS_UPDATE_PROJECTION = new Set([\n \"data\",\n \"where\",\n \"select\",\n \"include\",\n]);\nexport const ALLOWED_BODY_KEYS_DELETE = new Set([\"where\"]);\nexport const ALLOWED_BODY_KEYS_DELETE_PROJECTION = new Set([\n \"where\",\n \"select\",\n \"include\",\n]);\nexport const ALLOWED_BODY_KEYS_UPSERT = new Set([\n \"where\",\n \"create\",\n \"update\",\n \"select\",\n \"include\",\n]);\n\nexport const VALID_SHAPE_KEYS_CREATE = new Set([\"data\"]);\nexport const VALID_SHAPE_KEYS_CREATE_PROJECTION = new Set([\n \"data\",\n \"select\",\n \"include\",\n]);\nexport const VALID_SHAPE_KEYS_UPDATE = new Set([\"data\", \"where\"]);\nexport const VALID_SHAPE_KEYS_UPDATE_PROJECTION = new Set([\n \"data\",\n \"where\",\n \"select\",\n \"include\",\n]);\nexport const VALID_SHAPE_KEYS_DELETE = new Set([\"where\"]);\nexport const VALID_SHAPE_KEYS_DELETE_PROJECTION = new Set([\n \"where\",\n \"select\",\n \"include\",\n]);\nexport const VALID_SHAPE_KEYS_UPSERT = new Set([\n \"where\",\n \"create\",\n \"update\",\n \"select\",\n \"include\",\n]);\n\nconst KNOWN_RELATION_WRITE_OPS = new Set([\n \"connect\",\n \"connectOrCreate\",\n \"create\",\n \"createMany\",\n \"disconnect\",\n \"delete\",\n \"set\",\n \"update\",\n \"updateMany\",\n \"upsert\",\n \"deleteMany\",\n]);\n\nexport function validateMutationBodyKeys(\n body: Record<string, unknown>,\n allowed: Set<string>,\n method: string,\n): void {\n for (const key of Object.keys(body)) {\n if (!allowed.has(key)) {\n throw new ShapeError(\n `Unexpected key \"${key}\" in ${method} body. Allowed keys: ${[...allowed].join(\", \")}`,\n );\n }\n }\n}\n\nexport function validateMutationShapeKeys(\n shape: Record<string, unknown>,\n allowed: Set<string>,\n method: string,\n): void {\n for (const key of Object.keys(shape)) {\n if (!allowed.has(key)) {\n throw new ShapeError(\n `Shape key \"${key}\" not valid for ${method}. Allowed: ${[...allowed].join(\", \")}`,\n );\n }\n }\n}\n\nexport function validateCreateCompleteness(\n modelName: string,\n dataConfig: Record<string, true | unknown>,\n typeMap: TypeMap,\n scopeFks: Set<string>,\n zodDefaults: ZodDefaults,\n): void {\n const modelFields = typeMap[modelName];\n if (!modelFields) return;\n\n const zodDefaultFields = zodDefaults[modelName];\n const zodDefaultSet = zodDefaultFields\n ? new Set(zodDefaultFields)\n : undefined;\n\n for (const [fieldName, meta] of Object.entries(modelFields)) {\n if (meta.isRelation) continue;\n if (meta.isUpdatedAt) continue;\n if (meta.hasDefault) continue;\n if (!meta.isRequired) continue;\n if (fieldName in dataConfig) continue;\n if (scopeFks.has(fieldName)) continue;\n if (zodDefaultSet && zodDefaultSet.has(fieldName)) continue;\n\n throw new ShapeError(\n `Required field \"${fieldName}\" on model \"${modelName}\" is missing from create data shape, has no default, and is not a scope FK`,\n );\n }\n}\n\nfunction buildWhereFieldsSchema(\n model: string,\n config: Record<string, true>,\n typeMap: TypeMap,\n schemaBuilder: ReturnType<typeof createSchemaBuilder>,\n): z.ZodObject<any> {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n const fieldKeys: string[] = [];\n for (const [fieldName, value] of Object.entries(config)) {\n if (value !== true)\n throw new ShapeError(\n `Field \"${fieldName}\" in connect/where config must be true`,\n );\n const meta = modelFields[fieldName];\n if (!meta)\n throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`);\n if (meta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in connect/where`,\n );\n fieldSchemas[fieldName] = schemaBuilder\n .buildFieldSchema(model, fieldName)\n .optional();\n fieldKeys.push(fieldName);\n }\n return z\n .object(fieldSchemas)\n .strict()\n .refine(\n (v) =>\n fieldKeys.some((k) => (v as Record<string, unknown>)[k] !== undefined),\n { message: `At least one field required in connect/where` },\n ) as unknown as z.ZodObject<any>;\n}\n\nfunction buildNestedDataSchema(\n model: string,\n config: Record<string, true>,\n typeMap: TypeMap,\n schemaBuilder: ReturnType<typeof createSchemaBuilder>,\n): z.ZodObject<any> {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n for (const [fieldName, value] of Object.entries(config)) {\n if (value !== true)\n throw new ShapeError(\n `Field \"${fieldName}\" in nested data config must be true`,\n );\n const meta = modelFields[fieldName];\n if (!meta)\n throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`);\n if (meta.isRelation)\n throw new ShapeError(\n `Nested relation writes inside nested data are not supported (\"${model}.${fieldName}\")`,\n );\n if (meta.isUpdatedAt)\n throw new ShapeError(\n `updatedAt field \"${fieldName}\" cannot be used in nested data`,\n );\n\n let fieldSchema = schemaBuilder.buildFieldSchema(model, fieldName);\n if (!meta.isRequired) {\n fieldSchema = fieldSchema.nullable().optional();\n } else if (meta.hasDefault) {\n fieldSchema = fieldSchema.optional();\n }\n fieldSchemas[fieldName] = fieldSchema;\n }\n return z.object(fieldSchemas).strict();\n}\n\nfunction buildRelationWriteSchema(\n model: string,\n fieldName: string,\n relatedModelName: string,\n isList: boolean,\n config: Record<string, unknown>,\n typeMap: TypeMap,\n schemaBuilder: ReturnType<typeof createSchemaBuilder>,\n): z.ZodTypeAny {\n const relatedFields = typeMap[relatedModelName];\n if (!relatedFields)\n throw new ShapeError(\n `Unknown related model \"${relatedModelName}\" for field \"${model}.${fieldName}\"`,\n );\n\n for (const key of Object.keys(config)) {\n if (!KNOWN_RELATION_WRITE_OPS.has(key)) {\n throw new ShapeError(\n `Unknown relation write operation \"${key}\" on \"${model}.${fieldName}\". Allowed: ${[...KNOWN_RELATION_WRITE_OPS].join(\", \")}`,\n );\n }\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n\n if (config.connect !== undefined) {\n if (!isPlainObject(config.connect)) {\n throw new ShapeError(\n `connect config on \"${model}.${fieldName}\" must be an object of field names`,\n );\n }\n const connectSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.connect as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"connect\"] = isList\n ? z\n .union([\n connectSchema,\n z.preprocess(coerceToArray, z.array(connectSchema)),\n ])\n .optional()\n : connectSchema.optional();\n }\n\n if (config.connectOrCreate !== undefined) {\n if (!isPlainObject(config.connectOrCreate)) {\n throw new ShapeError(\n `connectOrCreate config on \"${model}.${fieldName}\" must be an object with \"where\" and \"create\"`,\n );\n }\n const coc = config.connectOrCreate as Record<string, unknown>;\n if (!coc.where || !isPlainObject(coc.where)) {\n throw new ShapeError(\n `connectOrCreate on \"${model}.${fieldName}\" requires \"where\" object`,\n );\n }\n if (!coc.create || !isPlainObject(coc.create)) {\n throw new ShapeError(\n `connectOrCreate on \"${model}.${fieldName}\" requires \"create\" object`,\n );\n }\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n coc.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const createSchema = buildNestedDataSchema(\n relatedModelName,\n coc.create as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const cocSchema = z\n .object({ where: whereSchema, create: createSchema })\n .strict();\n opSchemas[\"connectOrCreate\"] = isList\n ? z\n .union([cocSchema, z.preprocess(coerceToArray, z.array(cocSchema))])\n .optional()\n : cocSchema.optional();\n }\n\n if (config.create !== undefined) {\n if (!isPlainObject(config.create)) {\n throw new ShapeError(\n `create config on \"${model}.${fieldName}\" must be an object of field names`,\n );\n }\n const createSchema = buildNestedDataSchema(\n relatedModelName,\n config.create as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"create\"] = isList\n ? z\n .union([\n createSchema,\n z.preprocess(coerceToArray, z.array(createSchema)),\n ])\n .optional()\n : createSchema.optional();\n }\n\n if (config.createMany !== undefined) {\n if (!isList) {\n throw new ShapeError(\n `createMany is only valid on to-many relations (\"${model}.${fieldName}\")`,\n );\n }\n if (!isPlainObject(config.createMany)) {\n throw new ShapeError(\n `createMany config on \"${model}.${fieldName}\" must be an object`,\n );\n }\n const cmConfig = config.createMany as Record<string, unknown>;\n if (!cmConfig.data || !isPlainObject(cmConfig.data)) {\n throw new ShapeError(\n `createMany on \"${model}.${fieldName}\" requires \"data\" object`,\n );\n }\n const dataSchema = buildNestedDataSchema(\n relatedModelName,\n cmConfig.data as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const cmSchemaFields: Record<string, z.ZodTypeAny> = {\n data: z.preprocess(coerceToArray, z.array(dataSchema)),\n };\n if (\"skipDuplicates\" in cmConfig) {\n cmSchemaFields[\"skipDuplicates\"] = z.boolean().optional();\n }\n opSchemas[\"createMany\"] = z.object(cmSchemaFields).strict().optional();\n }\n\n if (config.disconnect !== undefined) {\n if (config.disconnect === true) {\n if (isList) {\n throw new ShapeError(\n `disconnect on to-many relation \"${model}.${fieldName}\" requires field config, not true`,\n );\n }\n opSchemas[\"disconnect\"] = z.literal(true).optional();\n } else if (isPlainObject(config.disconnect)) {\n const disconnectSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.disconnect as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n if (isList) {\n opSchemas[\"disconnect\"] = z\n .union([\n disconnectSchema,\n z.preprocess(coerceToArray, z.array(disconnectSchema)),\n ])\n .optional();\n } else {\n opSchemas[\"disconnect\"] = z\n .union([z.literal(true), disconnectSchema])\n .optional();\n }\n } else {\n throw new ShapeError(\n `disconnect config on \"${model}.${fieldName}\" must be true (to-one) or an object of field names`,\n );\n }\n }\n\n if (config.delete !== undefined) {\n if (config.delete === true) {\n if (isList) {\n throw new ShapeError(\n `delete on to-many relation \"${model}.${fieldName}\" requires field config, not true`,\n );\n }\n opSchemas[\"delete\"] = z.literal(true).optional();\n } else if (isPlainObject(config.delete)) {\n const deleteSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.delete as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n if (isList) {\n opSchemas[\"delete\"] = z\n .union([\n deleteSchema,\n z.preprocess(coerceToArray, z.array(deleteSchema)),\n ])\n .optional();\n } else {\n opSchemas[\"delete\"] = z\n .union([z.literal(true), deleteSchema])\n .optional();\n }\n } else {\n throw new ShapeError(\n `delete config on \"${model}.${fieldName}\" must be true (to-one) or an object of field names`,\n );\n }\n }\n\n if (config.set !== undefined) {\n if (!isList) {\n throw new ShapeError(\n `set is only valid on to-many relations (\"${model}.${fieldName}\")`,\n );\n }\n if (!isPlainObject(config.set)) {\n throw new ShapeError(\n `set config on \"${model}.${fieldName}\" must be an object of field names`,\n );\n }\n const setSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.set as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"set\"] = z\n .preprocess(coerceToArray, z.array(setSchema))\n .optional();\n }\n\n if (config.update !== undefined) {\n if (!isPlainObject(config.update)) {\n throw new ShapeError(\n `update config on \"${model}.${fieldName}\" must be an object`,\n );\n }\n const updateConfig = config.update as Record<string, unknown>;\n if (isList) {\n if (!updateConfig.where || !isPlainObject(updateConfig.where)) {\n throw new ShapeError(\n `update on to-many \"${model}.${fieldName}\" requires \"where\" object`,\n );\n }\n if (!updateConfig.data || !isPlainObject(updateConfig.data)) {\n throw new ShapeError(\n `update on to-many \"${model}.${fieldName}\" requires \"data\" object`,\n );\n }\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n updateConfig.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const dataSchema = buildNestedDataSchema(\n relatedModelName,\n updateConfig.data as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const updateSchema = z\n .object({ where: whereSchema, data: dataSchema })\n .strict();\n opSchemas[\"update\"] = z\n .union([\n updateSchema,\n z.preprocess(coerceToArray, z.array(updateSchema)),\n ])\n .optional();\n } else {\n const dataSchema = buildNestedDataSchema(\n relatedModelName,\n updateConfig as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"update\"] = dataSchema.optional();\n }\n }\n\n if (config.upsert !== undefined) {\n if (!isPlainObject(config.upsert)) {\n throw new ShapeError(\n `upsert config on \"${model}.${fieldName}\" must be an object`,\n );\n }\n const upsertConfig = config.upsert as Record<string, unknown>;\n if (!upsertConfig.create || !isPlainObject(upsertConfig.create)) {\n throw new ShapeError(\n `upsert on \"${model}.${fieldName}\" requires \"create\" object`,\n );\n }\n if (!upsertConfig.update || !isPlainObject(upsertConfig.update)) {\n throw new ShapeError(\n `upsert on \"${model}.${fieldName}\" requires \"update\" object`,\n );\n }\n const createSchema = buildNestedDataSchema(\n relatedModelName,\n upsertConfig.create as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const updateSchema = buildNestedDataSchema(\n relatedModelName,\n upsertConfig.update as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n\n if (isList) {\n if (!upsertConfig.where || !isPlainObject(upsertConfig.where)) {\n throw new ShapeError(\n `upsert on to-many \"${model}.${fieldName}\" requires \"where\" object`,\n );\n }\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n upsertConfig.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const upsertSchema = z\n .object({\n where: whereSchema,\n create: createSchema,\n update: updateSchema,\n })\n .strict();\n opSchemas[\"upsert\"] = z\n .union([\n upsertSchema,\n z.preprocess(coerceToArray, z.array(upsertSchema)),\n ])\n .optional();\n } else {\n if (upsertConfig.where) {\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n upsertConfig.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const upsertSchema = z\n .object({\n where: whereSchema,\n create: createSchema,\n update: updateSchema,\n })\n .strict();\n opSchemas[\"upsert\"] = upsertSchema.optional();\n } else {\n const upsertSchema = z\n .object({ create: createSchema, update: updateSchema })\n .strict();\n opSchemas[\"upsert\"] = upsertSchema.optional();\n }\n }\n }\n\n if (config.updateMany !== undefined) {\n if (!isList) {\n throw new ShapeError(\n `updateMany is only valid on to-many relations (\"${model}.${fieldName}\")`,\n );\n }\n if (!isPlainObject(config.updateMany)) {\n throw new ShapeError(\n `updateMany config on \"${model}.${fieldName}\" must be an object`,\n );\n }\n const umConfig = config.updateMany as Record<string, unknown>;\n if (!umConfig.where || !isPlainObject(umConfig.where)) {\n throw new ShapeError(\n `updateMany on \"${model}.${fieldName}\" requires \"where\" object`,\n );\n }\n if (!umConfig.data || !isPlainObject(umConfig.data)) {\n throw new ShapeError(\n `updateMany on \"${model}.${fieldName}\" requires \"data\" object`,\n );\n }\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n umConfig.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const dataSchema = buildNestedDataSchema(\n relatedModelName,\n umConfig.data as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const umSchema = z\n .object({ where: whereSchema, data: dataSchema })\n .strict();\n opSchemas[\"updateMany\"] = z\n .union([umSchema, z.preprocess(coerceToArray, z.array(umSchema))])\n .optional();\n }\n\n if (config.deleteMany !== undefined) {\n if (!isList) {\n throw new ShapeError(\n `deleteMany is only valid on to-many relations (\"${model}.${fieldName}\")`,\n );\n }\n if (!isPlainObject(config.deleteMany)) {\n throw new ShapeError(\n `deleteMany config on \"${model}.${fieldName}\" must be an object of allowed filter fields`,\n );\n }\n const filterSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.deleteMany as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"deleteMany\"] = z\n .union([\n filterSchema,\n z.preprocess(coerceToArray, z.array(filterSchema)),\n z.object({}).strict(),\n ])\n .optional();\n }\n\n return z.object(opSchemas).strict();\n}\n\nexport function buildDataSchema(\n model: string,\n dataConfig: Record<string, true | unknown>,\n mode: \"create\" | \"update\",\n typeMap: TypeMap,\n schemaBuilder: ReturnType<typeof createSchemaBuilder>,\n zodDefaults: ZodDefaults,\n): BuiltDataSchema {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const zodDefaultFields = zodDefaults[model];\n const zodDefaultSet = zodDefaultFields\n ? new Set(zodDefaultFields)\n : undefined;\n\n const schemaMap: Record<string, z.ZodTypeAny> = {};\n const forced: Record<string, unknown> = {};\n\n for (const [fieldName, value] of Object.entries(dataConfig)) {\n const fieldMeta = modelFields[fieldName];\n\n if (!fieldMeta) {\n if (isUnsupportedMarker(value)) {\n schemaMap[fieldName] = z.unknown().optional();\n continue;\n }\n throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`);\n }\n\n if (fieldMeta.isRelation) {\n if (!isPlainObject(value)) {\n throw new ShapeError(\n `Relation field \"${fieldName}\" on model \"${model}\" requires a relation write config object`,\n );\n }\n schemaMap[fieldName] = buildRelationWriteSchema(\n model,\n fieldName,\n fieldMeta.type,\n fieldMeta.isList,\n value as Record<string, unknown>,\n typeMap,\n schemaBuilder,\n ).optional();\n continue;\n }\n\n if (fieldMeta.isUpdatedAt)\n throw new ShapeError(\n `updatedAt field \"${fieldName}\" cannot be used in data shape`,\n );\n\n if (typeof value === \"function\") {\n let baseSchema: z.ZodTypeAny = schemaBuilder.buildBaseFieldSchema(\n model,\n fieldName,\n );\n let refined: unknown;\n try {\n refined = (value as DataFieldRefine)(baseSchema);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid inline refine for \"${model}.${fieldName}\": ${err.message}`,\n { cause: err },\n );\n }\n\n if (!isZodSchema(refined)) {\n throw new ShapeError(\n `Inline refine for \"${model}.${fieldName}\" must return a Zod schema`,\n );\n }\n\n let fieldSchema: z.ZodTypeAny = refined;\n const handlesUndefined = schemaProducesValueForUndefined(fieldSchema);\n\n if (mode === \"create\") {\n if (!fieldMeta.isRequired) {\n fieldSchema = handlesUndefined\n ? fieldSchema.nullable()\n : fieldSchema.nullable().optional();\n } else if (fieldMeta.hasDefault) {\n if (!handlesUndefined) {\n fieldSchema = fieldSchema.optional();\n }\n }\n } else {\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable().optional();\n } else {\n fieldSchema = fieldSchema.optional();\n }\n }\n\n schemaMap[fieldName] = fieldSchema;\n } else if (value === true) {\n let fieldSchema: z.ZodTypeAny = schemaBuilder.buildFieldSchema(\n model,\n fieldName,\n );\n const isZodDefaultField =\n zodDefaultSet !== undefined && zodDefaultSet.has(fieldName);\n\n if (mode === \"create\") {\n if (!fieldMeta.isRequired) {\n fieldSchema = isZodDefaultField\n ? fieldSchema.nullable()\n : fieldSchema.nullable().optional();\n } else if (fieldMeta.hasDefault) {\n if (!isZodDefaultField) {\n fieldSchema = fieldSchema.optional();\n }\n }\n } else {\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable().optional();\n } else {\n fieldSchema = fieldSchema.optional();\n }\n }\n\n schemaMap[fieldName] = fieldSchema;\n } else {\n const actualValue = isForcedValue(value) ? value.value : value;\n let fieldSchema: z.ZodTypeAny = schemaBuilder.buildFieldSchema(\n model,\n fieldName,\n );\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable();\n }\n let parsed: unknown;\n try {\n parsed = fieldSchema.parse(actualValue);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced data value for \"${model}.${fieldName}\": ${err.message}`,\n );\n }\n forced[fieldName] = parsed;\n }\n }\n\n if (mode === \"create\" && zodDefaultFields) {\n for (const fieldName of zodDefaultFields) {\n if (fieldName in dataConfig) continue;\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta) continue;\n if (fieldMeta.isRelation) continue;\n if (fieldMeta.isUpdatedAt) continue;\n\n const fieldSchema = schemaBuilder.buildFieldSchema(model, fieldName);\n const result = fieldSchema.safeParse(undefined);\n if (result.success && result.data !== undefined) {\n forced[fieldName] = result.data;\n } else {\n throw new ShapeError(\n `Field \"${fieldName}\" on model \"${model}\" has @zod default/catch but its schema does not produce a value for undefined input`,\n );\n }\n }\n }\n\n return {\n schema: z.object(schemaMap).strict(),\n forced,\n };\n}\n\nexport function validateAndMergeData(\n bodyData: unknown,\n cached: BuiltDataSchema,\n method: string,\n): Record<string, unknown> {\n if (bodyData === undefined || bodyData === null) {\n throw new ShapeError(`${method} requires \"data\" in request body`);\n }\n const validated = cached.schema.parse(bodyData);\n return { ...validated, ...deepClone(cached.forced) };\n}\n\nexport function hasDataRefines(\n dataConfig: Record<string, true | unknown>,\n): boolean {\n for (const value of Object.values(dataConfig)) {\n if (typeof value === \"function\") return true;\n }\n return false;\n}\n","import type { GuardShape, GuardShapeOrFn, GuardInput } from '../shared/types.js'\nimport { ShapeError, CallerError } from '../shared/errors.js'\nimport { GUARD_SHAPE_KEYS } from '../shared/constants.js'\nimport { matchCallerPattern } from '../shared/match-caller.js'\nimport { isPlainObject } from '../shared/utils.js'\nimport { validateContext } from './policy.js'\n\nexport interface ResolvedShape {\n shape: GuardShape\n body: Record<string, unknown>\n matchedKey: string\n wasDynamic: boolean\n}\n\nfunction isGuardShape(obj: unknown): obj is GuardShape {\n if (!isPlainObject(obj)) return false\n const keys = Object.keys(obj)\n return keys.length === 0 || keys.every(k => GUARD_SHAPE_KEYS.has(k))\n}\n\nfunction isSingleShape(input: GuardInput): input is GuardShapeOrFn {\n return typeof input === 'function' || isGuardShape(input)\n}\n\nfunction requireBody(body: unknown): Record<string, unknown> {\n if (!isPlainObject(body)) throw new ShapeError('Request body must be an object')\n return body\n}\n\nexport function resolveDynamicShape(\n fn: (ctx: any) => GuardShape,\n contextFn: () => Record<string, unknown>,\n): GuardShape {\n const ctx = validateContext(contextFn())\n let result: unknown\n try {\n result = fn(ctx)\n } catch (err: any) {\n throw new ShapeError(\n `Dynamic shape function threw: ${err.message}`,\n { cause: err },\n )\n }\n if (!isPlainObject(result)) {\n throw new ShapeError('Dynamic shape function must return a plain object')\n }\n return result as GuardShape\n}\n\nexport function resolveShape(\n input: GuardInput,\n body: unknown,\n contextFn: () => Record<string, unknown>,\n caller: string | undefined,\n): ResolvedShape {\n if (isSingleShape(input)) {\n const wasDynamic = typeof input === 'function'\n const shape = wasDynamic\n ? resolveDynamicShape(input as (ctx: any) => GuardShape, contextFn)\n : input as GuardShape\n const parsed = body === undefined || body === null\n ? {}\n : requireBody(body)\n return { shape, body: parsed, matchedKey: '_default', wasDynamic }\n }\n\n const namedMap = input as Record<string, GuardShapeOrFn>\n\n for (const key of Object.keys(namedMap)) {\n if (GUARD_SHAPE_KEYS.has(key)) {\n throw new ShapeError(\n `Caller key \"${key}\" collides with reserved shape config key. Rename the caller path.`,\n )\n }\n const val = namedMap[key]\n if (typeof val !== 'function' && !isGuardShape(val)) {\n throw new ShapeError(\n `Named shape value for \"${key}\" must be a guard shape object or function`,\n )\n }\n }\n\n const parsed = body === undefined || body === null\n ? {}\n : requireBody(body)\n\n if ('caller' in parsed) {\n throw new CallerError(\n 'Pass caller as second argument to .guard() or via context function, not in the request body.',\n )\n }\n\n if (typeof caller !== 'string') {\n const patterns = Object.keys(namedMap)\n throw new CallerError(\n `Missing caller. This guard uses named shape routing with keys: ${patterns.map(k => `\"${k}\"`).join(', ')}. ` +\n `Provide caller as second argument to .guard() or set \"caller\" in the context function.`,\n )\n }\n\n const patterns = Object.keys(namedMap)\n const matched = matchCallerPattern(patterns, caller)\n if (!matched) {\n throw new CallerError(\n `Unknown caller: \"${caller}\". Allowed: ${patterns.map(k => `\"${k}\"`).join(', ')}`,\n )\n }\n\n const shapeOrFn = namedMap[matched]\n const wasDynamic = typeof shapeOrFn === 'function'\n const shape = wasDynamic\n ? resolveDynamicShape(shapeOrFn as (ctx: any) => GuardShape, contextFn)\n : shapeOrFn as GuardShape\n\n return { shape, body: parsed, matchedKey: matched, wasDynamic }\n}"],"mappings":"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","names":["z","z","z","supportedOps","z","z","z","z","z","z","z","z","z","z","z","z","wasDynamic","shape","parsed","patterns","z"]}
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/guard.ts","../../src/shared/errors.ts","../../src/shared/scalar-base.ts","../../src/runtime/schema-builder.ts","../../src/runtime/zod-type-map.ts","../../src/shared/utils.ts","../../src/runtime/query-builder.ts","../../src/shared/constants.ts","../../src/shared/match-caller.ts","../../src/runtime/policy.ts","../../src/runtime/query-builder-where.ts","../../src/shared/deep-clone.ts","../../src/runtime/query-builder-forced.ts","../../src/runtime/query-builder-args.ts","../../src/runtime/query-builder-projection.ts","../../src/runtime/scope-extension.ts","../../src/runtime/model-guard.ts","../../src/runtime/model-guard-data.ts","../../src/runtime/model-guard-resolve.ts"],"sourcesContent":["import { ZodError } from \"zod\";\nimport type {\n TypeMap,\n GuardConfig,\n InputOpts,\n ModelOpts,\n QueryMethod,\n ShapeOrFn,\n QuerySchema,\n GuardLogger,\n} from \"../shared/types.js\";\nimport { ShapeError, PolicyError, formatZodError } from \"../shared/errors.js\";\nimport { createScalarBase } from \"../shared/scalar-base.js\";\nimport { createSchemaBuilder } from \"./schema-builder.js\";\nimport { createQueryBuilder } from \"./query-builder.js\";\nimport { createScopeExtension } from \"./scope-extension.js\";\nimport { createModelGuardExtension } from \"./model-guard.js\";\nimport { validateContext } from \"./policy.js\";\n\nexport function createGuard<\n TModels extends TypeMap = TypeMap,\n TRoots extends string = string,\n TModelExt = unknown,\n>(config: GuardConfig & { typeMap: TModels }) {\n type MName = Extract<keyof TModels, string>;\n\n const scalarBase = createScalarBase(\n config.guardConfig.strictDecimal ?? false,\n );\n\n const schemaBuilder = createSchemaBuilder(\n config.typeMap,\n config.zodChains,\n config.enumMap,\n scalarBase,\n config.zodDefaults ?? {},\n );\n const queryBuilder = createQueryBuilder(\n config.typeMap,\n config.enumMap,\n config.uniqueMap ?? {},\n scalarBase,\n );\n\n const log: GuardLogger = config.logger ?? {\n warn: (msg) => console.warn(msg),\n };\n const wrapZodErrors = config.wrapZodErrors ?? false;\n\n function rethrowZod(err: unknown): never {\n if (err instanceof ZodError) {\n throw new ShapeError(`Validation failed: ${formatZodError(err)}`, {\n cause: err,\n });\n }\n throw err;\n }\n\n return {\n input: (model: MName, opts: InputOpts) => {\n const result = schemaBuilder.buildInputSchema(model, opts);\n if (!wrapZodErrors) return result;\n return {\n schema: result.schema,\n parse(data: unknown): Record<string, unknown> {\n try {\n return result.parse(data);\n } catch (err) {\n rethrowZod(err);\n }\n },\n };\n },\n\n model: (model: MName, opts: ModelOpts) =>\n schemaBuilder.buildModelSchema(model, opts),\n\n query: <TCtx = unknown>(\n model: MName,\n method: QueryMethod,\n config_: ShapeOrFn<TCtx> | Record<string, ShapeOrFn<TCtx>>,\n ): QuerySchema<TCtx> => {\n const qs = queryBuilder.buildQuerySchema(model, method, config_);\n if (!wrapZodErrors) return qs;\n return {\n schemas: qs.schemas,\n parse(body: unknown, opts?: { ctx?: TCtx }): Record<string, unknown> {\n try {\n return qs.parse(body, opts);\n } catch (err) {\n rethrowZod(err);\n }\n },\n };\n },\n\n extension: <TCtx extends Record<string, unknown> = Record<string, unknown>>(\n contextFn?: () => TCtx,\n ) => {\n const effectiveContextFn = contextFn ?? (() => ({}) as TCtx);\n\n const scopeRoots = new Set<string>();\n for (const entries of Object.values(config.scopeMap)) {\n for (const entry of entries) {\n scopeRoots.add(entry.root);\n }\n }\n\n const scopeCtxFn = () => {\n const ctx = validateContext(effectiveContextFn());\n const scopeCtx: Partial<Record<TRoots, string | number | bigint>> = {};\n for (const key of Object.keys(ctx)) {\n if (!scopeRoots.has(key)) continue;\n const val = ctx[key];\n if (\n typeof val === \"string\" ||\n typeof val === \"number\" ||\n typeof val === \"bigint\"\n ) {\n scopeCtx[key as TRoots] = val;\n } else if (val !== null && val !== undefined) {\n throw new PolicyError(\n `prisma-guard: Scope root \"${key}\" has non-primitive value (${typeof val}). Only string, number, and bigint values are accepted for scope context.`,\n );\n }\n }\n return scopeCtx;\n };\n\n const scopeExt = createScopeExtension<TRoots>(\n config.scopeMap,\n scopeCtxFn,\n config.guardConfig,\n config.logger,\n );\n\n const modelGuardExt = createModelGuardExtension({\n typeMap: config.typeMap,\n enumMap: config.enumMap,\n zodChains: config.zodChains,\n zodDefaults: config.zodDefaults ?? {},\n uniqueMap: config.uniqueMap ?? {},\n scopeMap: config.scopeMap,\n guardConfig: config.guardConfig,\n contextFn: effectiveContextFn,\n wrapZodErrors,\n });\n\n return {\n name: \"prisma-guard\",\n model: modelGuardExt as unknown as TModelExt,\n query: scopeExt.query,\n };\n },\n };\n}\n","import type { ZodError } from 'zod'\n\nexport class PolicyError extends Error {\n readonly status = 403\n readonly code = 'POLICY_DENIED'\n constructor(message = 'Access denied', options?: ErrorOptions) {\n super(message, options)\n this.name = 'PolicyError'\n }\n}\n\nexport class ShapeError extends Error {\n readonly status = 400\n readonly code = 'SHAPE_INVALID'\n constructor(message: string, options?: ErrorOptions) {\n super(message, options)\n this.name = 'ShapeError'\n }\n}\n\nexport class CallerError extends Error {\n readonly status = 400\n readonly code = 'CALLER_UNKNOWN'\n constructor(message: string, options?: ErrorOptions) {\n super(message, options)\n this.name = 'CallerError'\n }\n}\n\nexport function formatZodError(err: ZodError): string {\n return err.issues.map(i => {\n const p = i.path.length > 0 ? `${i.path.join('.')}: ` : ''\n return `${p}${i.message}`\n }).join('; ')\n}","import { z } from \"zod\";\n\nexport type ScalarBaseMap = Record<string, () => z.ZodTypeAny>;\n\nfunction isJsonSafe(value: unknown): boolean {\n type Entry = { tag: \"visit\"; value: unknown } | { tag: \"exit\"; ref: object };\n\n const stack: Entry[] = [{ tag: \"visit\", value }];\n const ancestors = new Set<object>();\n\n while (stack.length > 0) {\n const entry = stack.pop()!;\n\n if (entry.tag === \"exit\") {\n ancestors.delete(entry.ref);\n continue;\n }\n\n const current = entry.value;\n\n if (current === undefined) return false;\n if (current === null) continue;\n\n switch (typeof current) {\n case \"string\":\n case \"boolean\":\n continue;\n case \"number\":\n if (!Number.isFinite(current)) return false;\n continue;\n case \"object\": {\n if (ancestors.has(current)) return false;\n ancestors.add(current);\n stack.push({ tag: \"exit\", ref: current });\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n stack.push({ tag: \"visit\", value: current[i] });\n }\n continue;\n }\n const proto = Object.getPrototypeOf(current);\n if (proto !== Object.prototype && proto !== null) return false;\n const values = Object.values(current as Record<string, unknown>);\n for (let i = 0; i < values.length; i++) {\n stack.push({ tag: \"visit\", value: values[i] });\n }\n continue;\n }\n default:\n return false;\n }\n }\n\n return true;\n}\n\nconst DECIMAL_REGEX = /^-?(\\d+\\.?\\d*|\\.\\d+)([eE]-?\\d+)?$/;\n\nconst decimalStringSchema = z\n .string()\n .refine((s) => DECIMAL_REGEX.test(s), \"Invalid decimal string\");\n\nconst decimalObjectSchema = z.custom<unknown>(\n (v) =>\n v !== null &&\n typeof v === \"object\" &&\n typeof (v as any).toFixed === \"function\" &&\n typeof (v as any).toNumber === \"function\",\n \"Expected Decimal-compatible object\",\n);\n\nfunction createDecimalFactory(strict: boolean): () => z.ZodTypeAny {\n if (strict) {\n return () => z.union([decimalStringSchema, decimalObjectSchema]);\n }\n return () => z.union([z.number(), decimalStringSchema, decimalObjectSchema]);\n}\n\nexport function createScalarBase(strictDecimal: boolean): ScalarBaseMap {\n return {\n String: () => z.string(),\n Int: () => z.number().int(),\n Float: () => z.number(),\n Decimal: createDecimalFactory(strictDecimal),\n BigInt: () =>\n z.union([\n z.bigint(),\n z\n .number()\n .int()\n .refine(\n (v) => v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER,\n \"Number exceeds safe integer range for BigInt conversion\",\n )\n .transform((v) => BigInt(v)),\n z\n .string()\n .regex(/^-?\\d+$/)\n .transform((v) => BigInt(v)),\n ]),\n Boolean: () => z.boolean(),\n DateTime: () =>\n z\n .union([z.date(), z.string().datetime({ offset: true })])\n .pipe(z.coerce.date()),\n Json: () =>\n z\n .unknown()\n .refine(\n isJsonSafe,\n \"Value must be JSON-serializable (no undefined, functions, symbols, class instances, NaN, Infinity, or circular references)\",\n ),\n Bytes: () =>\n z.union([z.string(), z.custom<unknown>((v) => v instanceof Uint8Array)]),\n };\n}\n\nexport const SCALAR_BASE: ScalarBaseMap = createScalarBase(false);\n\nexport function wrapWithInputCoercion(\n fieldType: string,\n isList: boolean,\n schema: z.ZodTypeAny,\n): z.ZodTypeAny {\n let itemCoercion: z.ZodTypeAny | null = null;\n\n switch (fieldType) {\n case \"String\":\n itemCoercion = z.union([z.string(), z.number().transform(String)]);\n break;\n case \"Int\":\n itemCoercion = z.union([\n z.number().int(),\n z\n .string()\n .regex(/^-?\\d+$/)\n .transform(Number),\n ]);\n break;\n case \"Float\":\n itemCoercion = z.union([\n z.number(),\n z\n .string()\n .regex(/^-?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/)\n .transform(Number),\n ]);\n break;\n default:\n return schema;\n }\n\n const coercion = isList ? z.array(itemCoercion) : itemCoercion;\n return coercion.pipe(schema);\n}\n","import { z } from \"zod\";\nimport type {\n TypeMap,\n EnumMap,\n ZodChains,\n ZodDefaults,\n InputOpts,\n ModelOpts,\n InputSchema,\n} from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport { createBaseType } from \"./zod-type-map.js\";\nimport {\n wrapWithInputCoercion,\n type ScalarBaseMap,\n} from \"../shared/scalar-base.js\";\nimport {\n schemaProducesValueForUndefined,\n isZodSchema,\n} from \"../shared/utils.js\";\n\nconst DEFAULT_MAX_CACHE = 500;\nconst DEFAULT_MAX_DEPTH = 5;\n\nfunction lruGet(\n cache: Map<string, z.ZodTypeAny>,\n key: string,\n): z.ZodTypeAny | undefined {\n const value = cache.get(key);\n if (value !== undefined) {\n cache.delete(key);\n cache.set(key, value);\n }\n return value;\n}\n\nfunction lruSet(\n cache: Map<string, z.ZodTypeAny>,\n key: string,\n value: z.ZodTypeAny,\n maxSize: number,\n): void {\n if (cache.has(key)) cache.delete(key);\n cache.set(key, value);\n if (cache.size > maxSize) {\n const oldest = cache.keys().next().value;\n if (oldest !== undefined) cache.delete(oldest);\n }\n}\n\nexport function createSchemaBuilder(\n typeMap: TypeMap,\n zodChains: ZodChains,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n zodDefaults: ZodDefaults,\n) {\n const chainCache = new Map<string, z.ZodTypeAny>();\n\n function buildFieldSchema(model: string, field: string): z.ZodTypeAny {\n const cacheKey = `${model}.${field}`;\n\n const cached = lruGet(chainCache, cacheKey);\n if (cached) return cached;\n\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldMeta = modelFields[field];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${field}\" on model \"${model}\"`);\n\n const base = createBaseType(fieldMeta, enumMap, scalarBase);\n\n let result = base;\n const chainFn = zodChains[model]?.[field];\n if (chainFn) {\n try {\n result = chainFn(base);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid @zod directive on ${model}.${field} (${fieldMeta.type}): ${err.message}`,\n { cause: err },\n );\n }\n }\n\n if (\n !fieldMeta.isEnum &&\n !fieldMeta.isRelation &&\n !fieldMeta.isUnsupported\n ) {\n result = wrapWithInputCoercion(fieldMeta.type, fieldMeta.isList, result);\n }\n\n lruSet(chainCache, cacheKey, result, DEFAULT_MAX_CACHE);\n return result;\n }\n\n function buildBaseFieldSchema(model: string, field: string): z.ZodTypeAny {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldMeta = modelFields[field];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${field}\" on model \"${model}\"`);\n\n return createBaseType(fieldMeta, enumMap, scalarBase);\n }\n\n function buildInputSchema(model: string, opts: InputOpts): InputSchema {\n if (opts.pick && opts.omit) {\n throw new ShapeError('InputOpts cannot define both \"pick\" and \"omit\"');\n }\n\n const mode = opts.mode ?? \"create\";\n const allowNull = opts.allowNull ?? true;\n\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const zodDefaultFields = zodDefaults[model];\n const zodDefaultSet = zodDefaultFields\n ? new Set(zodDefaultFields)\n : undefined;\n\n let fieldNames = Object.keys(modelFields).filter((name) => {\n const meta = modelFields[name];\n return !meta.isRelation && !meta.isUpdatedAt;\n });\n\n if (opts.pick) {\n for (const name of opts.pick) {\n if (!modelFields[name])\n throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`);\n if (modelFields[name].isRelation)\n throw new ShapeError(\n `Field \"${name}\" cannot be used in input schema (relation field)`,\n );\n if (modelFields[name].isUpdatedAt)\n throw new ShapeError(\n `Field \"${name}\" cannot be used in input schema (updatedAt field)`,\n );\n }\n fieldNames = fieldNames.filter((n) => opts.pick!.includes(n));\n } else if (opts.omit) {\n for (const name of opts.omit) {\n if (!modelFields[name])\n throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`);\n }\n fieldNames = fieldNames.filter((n) => !opts.omit!.includes(n));\n }\n\n const schemaMap: Record<string, z.ZodTypeAny> = {};\n\n for (const name of fieldNames) {\n const fieldMeta = modelFields[name];\n let fieldSchema: z.ZodTypeAny;\n let handlesUndefined: boolean;\n\n if (opts.refine?.[name]) {\n let refined: unknown;\n try {\n refined = opts.refine[name](buildBaseFieldSchema(model, name));\n } catch (err: any) {\n throw new ShapeError(\n `Refine function for \"${model}.${name}\" threw: ${err.message}`,\n { cause: err },\n );\n }\n if (!isZodSchema(refined)) {\n throw new ShapeError(\n `Refine function for \"${model}.${name}\" must return a Zod schema`,\n );\n }\n fieldSchema = refined;\n handlesUndefined = schemaProducesValueForUndefined(fieldSchema);\n } else {\n fieldSchema = buildFieldSchema(model, name);\n handlesUndefined =\n zodDefaultSet !== undefined && zodDefaultSet.has(name);\n }\n\n if (mode === \"create\") {\n if (!fieldMeta.isRequired) {\n if (handlesUndefined) {\n fieldSchema = allowNull ? fieldSchema.nullable() : fieldSchema;\n } else {\n fieldSchema = allowNull\n ? fieldSchema.nullable().optional()\n : fieldSchema.optional();\n }\n } else if (fieldMeta.hasDefault) {\n if (!handlesUndefined) {\n fieldSchema = fieldSchema.optional();\n }\n }\n } else {\n if (!fieldMeta.isRequired && allowNull) {\n fieldSchema = fieldSchema.nullable().optional();\n } else {\n fieldSchema = fieldSchema.optional();\n }\n }\n\n schemaMap[name] = fieldSchema;\n }\n\n let schema = z.object(schemaMap).strict();\n\n if (opts.partial) {\n schema = schema.partial() as any;\n }\n\n return {\n schema,\n parse(data: unknown): Record<string, unknown> {\n return schema.parse(data) as Record<string, unknown>;\n },\n };\n }\n\n function buildModelSchema(\n model: string,\n opts: ModelOpts,\n depth = 0,\n maxDepth?: number,\n ): z.ZodObject<any> {\n if (opts.pick && opts.omit) {\n throw new ShapeError('ModelOpts cannot define both \"pick\" and \"omit\"');\n }\n\n const effectiveMaxDepth = maxDepth ?? opts.maxDepth ?? DEFAULT_MAX_DEPTH;\n if (depth > effectiveMaxDepth) {\n throw new ShapeError(\n `Maximum include depth (${effectiveMaxDepth}) exceeded`,\n );\n }\n\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const includeKeys = new Set(Object.keys(opts.include ?? {}));\n\n if (opts.pick) {\n for (const name of opts.pick) {\n if (!modelFields[name])\n throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`);\n if (modelFields[name].isRelation && !includeKeys.has(name)) {\n throw new ShapeError(\n `Field \"${name}\" is a relation on model \"${model}\". Use include: { ${name}: ... } instead of pick.`,\n );\n }\n }\n }\n if (opts.omit) {\n for (const name of opts.omit) {\n if (!modelFields[name])\n throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`);\n }\n }\n\n let scalarNames = Object.keys(modelFields).filter((name) => {\n const meta = modelFields[name];\n return !meta.isRelation;\n });\n\n if (opts.pick) {\n scalarNames = scalarNames.filter((n) => opts.pick!.includes(n));\n } else if (opts.omit) {\n scalarNames = scalarNames.filter((n) => !opts.omit!.includes(n));\n }\n\n const schemaMap: Record<string, z.ZodTypeAny> = {};\n\n for (const name of scalarNames) {\n const fieldMeta = modelFields[name];\n let fieldSchema = createBaseType(fieldMeta, enumMap, scalarBase);\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable();\n }\n schemaMap[name] = fieldSchema;\n }\n\n for (const [relName, relOpts] of Object.entries(opts.include ?? {})) {\n const fieldMeta = modelFields[relName];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${relName}\" on model \"${model}\"`);\n if (!fieldMeta.isRelation)\n throw new ShapeError(\n `Field \"${relName}\" is not a relation on model \"${model}\"`,\n );\n\n const relatedModel = fieldMeta.type;\n if (!typeMap[relatedModel]) {\n throw new ShapeError(\n `Related model \"${relatedModel}\" not found in type map`,\n );\n }\n let relSchema: z.ZodTypeAny = buildModelSchema(\n relatedModel,\n relOpts,\n depth + 1,\n effectiveMaxDepth,\n );\n if (fieldMeta.isList) {\n relSchema = z.array(relSchema);\n } else if (!fieldMeta.isRequired) {\n relSchema = relSchema.nullable();\n }\n schemaMap[relName] = relSchema;\n }\n\n if (opts._count) {\n const listRelationNames = Object.keys(modelFields).filter(\n (n) => modelFields[n].isRelation && modelFields[n].isList,\n );\n\n if (opts._count === true) {\n const countFields: Record<string, z.ZodTypeAny> = {};\n for (const relName of listRelationNames) {\n countFields[relName] = z.number().int().min(0);\n }\n schemaMap[\"_count\"] = z.object(countFields);\n } else {\n const countFields: Record<string, z.ZodTypeAny> = {};\n for (const relName of Object.keys(opts._count)) {\n if (!modelFields[relName])\n throw new ShapeError(\n `Unknown field \"${relName}\" on model \"${model}\" in _count`,\n );\n if (!modelFields[relName].isRelation)\n throw new ShapeError(\n `Field \"${relName}\" is not a relation on model \"${model}\" in _count`,\n );\n if (!modelFields[relName].isList)\n throw new ShapeError(\n `Field \"${relName}\" is a to-one relation on model \"${model}\" in _count. Only to-many relations support _count.`,\n );\n countFields[relName] = z.number().int().min(0);\n }\n schemaMap[\"_count\"] = z.object(countFields);\n }\n }\n\n let schema = z.object(schemaMap);\n if (opts.strict) {\n schema = schema.strict() as any;\n }\n return schema;\n }\n\n return {\n buildFieldSchema,\n buildBaseFieldSchema,\n buildInputSchema,\n buildModelSchema,\n };\n}\n","import { z } from \"zod\";\nimport type { FieldMeta, EnumMap } from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport { coerceToArray } from \"../shared/utils.js\";\nimport {\n wrapWithInputCoercion,\n type ScalarBaseMap,\n} from \"../shared/scalar-base.js\";\n\nconst SCALAR_OPERATORS: Record<string, Set<string>> = {\n String: new Set([\n \"equals\",\n \"not\",\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"in\",\n \"notIn\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n ]),\n Int: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n Float: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n Decimal: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n BigInt: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n Boolean: new Set([\"equals\", \"not\"]),\n DateTime: new Set([\"equals\", \"not\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"notIn\"]),\n Bytes: new Set([]),\n Json: new Set([\n \"equals\",\n \"not\",\n \"path\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ]),\n};\n\nconst SCALAR_LIST_OPERATORS = new Set([\n \"has\",\n \"hasEvery\",\n \"hasSome\",\n \"isEmpty\",\n \"equals\",\n]);\n\nconst ENUM_OPERATORS = new Set([\"equals\", \"not\", \"in\", \"notIn\"]);\n\nconst NUMERIC_TYPES = new Set([\"Int\", \"Float\", \"Decimal\", \"BigInt\"]);\nconst COMPARABLE_TYPES = new Set([\n \"Int\",\n \"Float\",\n \"Decimal\",\n \"BigInt\",\n \"String\",\n \"DateTime\",\n]);\n\nconst JSON_STRING_OPERATORS = new Set([\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n]);\n\nconst JSON_ARRAY_OPERATORS = new Set([\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n]);\n\nexport { NUMERIC_TYPES, COMPARABLE_TYPES };\n\nexport function getSupportedOperators(fieldMeta: FieldMeta): string[] {\n if (fieldMeta.isList) return [...SCALAR_LIST_OPERATORS];\n if (fieldMeta.isEnum) return [...ENUM_OPERATORS];\n const ops = SCALAR_OPERATORS[fieldMeta.type];\n if (!ops) return [];\n return [...ops];\n}\n\nexport function createBaseType(\n fieldMeta: FieldMeta,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n let base: z.ZodTypeAny;\n\n if (fieldMeta.isUnsupported) {\n base = z.unknown();\n } else if (fieldMeta.isEnum) {\n const values = enumMap[fieldMeta.type];\n if (!values || values.length === 0) {\n throw new ShapeError(`Unknown enum: ${fieldMeta.type}`);\n }\n base = z.enum(values as unknown as [string, ...string[]]);\n } else {\n const factory = scalarBase[fieldMeta.type];\n if (!factory) {\n throw new ShapeError(`Unknown scalar type: ${fieldMeta.type}`);\n }\n base = factory();\n }\n\n if (fieldMeta.isList) {\n base = z.array(base);\n }\n\n return base;\n}\n\nexport function createScalarListOperatorSchema(\n fieldMeta: FieldMeta,\n operator: string,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n if (!SCALAR_LIST_OPERATORS.has(operator)) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for scalar list fields`,\n );\n }\n\n if (operator === \"isEmpty\") {\n return z.boolean();\n }\n\n const itemMeta: FieldMeta = { ...fieldMeta, isList: false };\n const itemBase = createBaseType(itemMeta, enumMap, scalarBase);\n\n if (operator === \"has\") {\n return !fieldMeta.isRequired ? z.union([itemBase, z.null()]) : itemBase;\n }\n\n if (operator === \"equals\") {\n const arrSchema = z.array(itemBase);\n return fieldMeta.isRequired\n ? z.preprocess(coerceToArray, arrSchema)\n : z.union([z.preprocess(coerceToArray, arrSchema), z.null()]);\n }\n\n return z.preprocess(coerceToArray, z.array(itemBase));\n}\n\nfunction createJsonOperatorSchema(\n fieldMeta: FieldMeta,\n operator: string,\n): z.ZodTypeAny {\n const jsonValue = z.unknown();\n\n if (operator === \"equals\" || operator === \"not\") {\n return !fieldMeta.isRequired ? z.union([jsonValue, z.null()]) : jsonValue;\n }\n\n if (operator === \"path\") {\n return z.preprocess(coerceToArray, z.array(z.string()).min(1));\n }\n\n if (JSON_STRING_OPERATORS.has(operator)) {\n return z.string();\n }\n\n if (JSON_ARRAY_OPERATORS.has(operator)) {\n return jsonValue;\n }\n\n throw new ShapeError(\n `Operator \"${operator}\" not supported for Json fields`,\n );\n}\n\nexport function createOperatorSchema(\n fieldMeta: FieldMeta,\n operator: string,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n if (fieldMeta.isList) {\n return createScalarListOperatorSchema(\n fieldMeta,\n operator,\n enumMap,\n scalarBase,\n );\n }\n\n if (fieldMeta.isEnum) {\n const values = enumMap[fieldMeta.type];\n if (!values || values.length === 0) {\n throw new ShapeError(`Unknown enum: ${fieldMeta.type}`);\n }\n if (!ENUM_OPERATORS.has(operator)) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for enum fields`,\n );\n }\n const enumSchema = z.enum(values as unknown as [string, ...string[]]);\n if (operator === \"equals\" || operator === \"not\") {\n return !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n }\n const itemSchema = !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n return z.preprocess(coerceToArray, z.array(itemSchema));\n }\n\n if (fieldMeta.type === \"Json\") {\n const supportedOps = SCALAR_OPERATORS[\"Json\"];\n if (!supportedOps || !supportedOps.has(operator)) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for type \"Json\"`,\n );\n }\n return createJsonOperatorSchema(fieldMeta, operator);\n }\n\n const supportedOps = SCALAR_OPERATORS[fieldMeta.type];\n if (!supportedOps) {\n throw new ShapeError(`Unknown scalar type for operator: ${fieldMeta.type}`);\n }\n if (supportedOps.size === 0) {\n throw new ShapeError(\n `Type \"${fieldMeta.type}\" does not support filter operators`,\n );\n }\n if (!supportedOps.has(operator)) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for type \"${fieldMeta.type}\"`,\n );\n }\n\n const factory = scalarBase[fieldMeta.type];\n if (!factory) {\n throw new ShapeError(`Unknown scalar type: ${fieldMeta.type}`);\n }\n\n const scalar = factory();\n const coerced = wrapWithInputCoercion(fieldMeta.type, false, scalar);\n\n if (operator === \"equals\" || operator === \"not\") {\n return !fieldMeta.isRequired ? z.union([coerced, z.null()]) : coerced;\n }\n if (operator === \"in\" || operator === \"notIn\") {\n const itemSchema = !fieldMeta.isRequired\n ? z.union([coerced, z.null()])\n : coerced;\n return z.preprocess(coerceToArray, z.array(itemSchema));\n }\n return coerced;\n}","import { z } from 'zod'\n\nexport function isPlainObject(v: unknown): v is Record<string, unknown> {\n if (typeof v !== 'object' || v === null || Array.isArray(v)) return false\n const proto = Object.getPrototypeOf(v)\n return proto === Object.prototype || proto === null\n}\n\nexport function schemaProducesValueForUndefined(schema: z.ZodTypeAny): boolean {\n const result = schema.safeParse(undefined)\n return result.success && result.data !== undefined\n}\n\nexport function isZodSchema(value: unknown): value is z.ZodTypeAny {\n if (value == null || typeof value !== 'object') return false\n const v = value as Record<string, unknown>\n return typeof v.parse === 'function' && typeof v.optional === 'function'\n}\n\nexport function coerceToArray(value: unknown): unknown {\n if (Array.isArray(value)) return value\n if (value === null || value === undefined) return value\n if (typeof value !== 'object') return value\n const keys = Object.keys(value as Record<string, unknown>)\n if (keys.length === 0) return []\n const allNumeric = keys.every((k) => /^\\d+$/.test(k))\n if (!allNumeric) return value\n const sorted = keys.map(Number).sort((a, b) => a - b)\n const obj = value as Record<string, unknown>\n const result: unknown[] = []\n for (const idx of sorted) {\n result.push(obj[String(idx)])\n }\n return result\n}","import { z } from \"zod\";\nimport type {\n TypeMap,\n EnumMap,\n UniqueMap,\n QueryMethod,\n ShapeConfig,\n ShapeOrFn,\n QuerySchema,\n NestedSelectArgs,\n OrderByFieldConfig,\n} from \"../shared/types.js\";\nimport { ShapeError, CallerError } from \"../shared/errors.js\";\nimport { SHAPE_CONFIG_KEYS, GUARD_SHAPE_KEYS } from \"../shared/constants.js\";\nimport { matchCallerPattern } from \"../shared/match-caller.js\";\nimport { isPlainObject, coerceToArray } from \"../shared/utils.js\";\nimport { requireContext } from \"./policy.js\";\nimport { createWhereBuilder } from \"./query-builder-where.js\";\nimport { createArgsBuilder } from \"./query-builder-args.js\";\nimport { createProjectionBuilder } from \"./query-builder-projection.js\";\nimport {\n applyBuiltShape,\n EMPTY_WHERE_FORCED,\n validateUniqueEquality,\n} from \"./query-builder-forced.js\";\nimport type {\n BuiltShape,\n ForcedTree,\n WhereForced,\n} from \"./query-builder-forced.js\";\nimport type { WhereBuiltResult } from \"./query-builder-where.js\";\nimport type {\n BuiltIncludeResult,\n BuiltSelectResult,\n} from \"./query-builder-projection.js\";\nimport type { ScalarBaseMap } from \"../shared/scalar-base.js\";\n\nconst METHOD_ALLOWED_ARGS: Record<QueryMethod, Set<string>> = {\n findMany: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findFirst: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findFirstOrThrow: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findUnique: new Set([\"where\", \"include\", \"select\"]),\n findUniqueOrThrow: new Set([\"where\", \"include\", \"select\"]),\n count: new Set([\"where\", \"select\", \"cursor\", \"orderBy\", \"skip\", \"take\"]),\n aggregate: new Set([\n \"where\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"_count\",\n \"_avg\",\n \"_sum\",\n \"_min\",\n \"_max\",\n ]),\n groupBy: new Set([\n \"where\",\n \"by\",\n \"having\",\n \"_count\",\n \"_avg\",\n \"_sum\",\n \"_min\",\n \"_max\",\n \"orderBy\",\n \"take\",\n \"skip\",\n ]),\n};\n\nconst UNIQUE_WHERE_METHODS: Set<QueryMethod> = new Set([\n \"findUnique\",\n \"findUniqueOrThrow\",\n]);\n\nexport function createQueryBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n uniqueMap: UniqueMap,\n scalarBase: ScalarBaseMap,\n) {\n const whereBuilder = createWhereBuilder(typeMap, enumMap, scalarBase);\n const argsBuilder = createArgsBuilder(\n typeMap,\n enumMap,\n uniqueMap,\n scalarBase,\n );\n const projectionBuilder = createProjectionBuilder(typeMap, enumMap, {\n buildWhereSchema: whereBuilder.buildWhereSchema,\n buildOrderBySchema: argsBuilder.buildOrderBySchema,\n buildCursorSchema: argsBuilder.buildCursorSchema,\n buildTakeSchema: argsBuilder.buildTakeSchema,\n });\n\n function isShapeConfig(obj: unknown): obj is ShapeConfig {\n if (!isPlainObject(obj)) return false;\n const keys = Object.keys(obj);\n return keys.length === 0 || keys.every((k) => SHAPE_CONFIG_KEYS.has(k));\n }\n\n function validateShapeArgs(method: QueryMethod, shape: ShapeConfig): void {\n const allowed = METHOD_ALLOWED_ARGS[method];\n for (const key of Object.keys(shape)) {\n if (!SHAPE_CONFIG_KEYS.has(key))\n throw new ShapeError(`Unknown shape config key \"${key}\"`);\n if (!allowed.has(key))\n throw new ShapeError(`Arg \"${key}\" not allowed for method \"${method}\"`);\n }\n if (UNIQUE_WHERE_METHODS.has(method) && !shape.where) {\n throw new ShapeError(`${method} shape must define \"where\"`);\n }\n if (method === \"groupBy\" && !shape.by)\n throw new ShapeError('groupBy shape must define \"by\"');\n if (method === \"groupBy\" && (shape.include || shape.select)) {\n throw new ShapeError('groupBy does not support \"include\" or \"select\"');\n }\n if (method === \"aggregate\" && (shape.include || shape.select)) {\n throw new ShapeError('aggregate does not support \"include\" or \"select\"');\n }\n if (method === \"count\" && shape.include)\n throw new ShapeError('count does not support \"include\"');\n if (\n method === \"groupBy\" &&\n shape.orderBy &&\n (shape.orderBy as unknown) !== true\n ) {\n const bySet = new Set(shape.by);\n for (const fieldName of Object.keys(shape.orderBy)) {\n if (fieldName === \"_count\") continue;\n if (!bySet.has(fieldName)) {\n throw new ShapeError(\n `orderBy field \"${fieldName}\" must be included in \"by\" for groupBy`,\n );\n }\n }\n }\n if (method === \"groupBy\" && shape.having) {\n const bySet = new Set(shape.by);\n for (const fieldName of Object.keys(shape.having)) {\n if (!bySet.has(fieldName)) {\n throw new ShapeError(\n `having field \"${fieldName}\" must be included in \"by\" for groupBy`,\n );\n }\n }\n }\n }\n\n function validateUniqueWhere(\n model: string,\n method: QueryMethod,\n shape: ShapeConfig,\n ): void {\n if (!UNIQUE_WHERE_METHODS.has(method)) return;\n if (!shape.where) return;\n validateUniqueEquality(model, shape.where, method, uniqueMap, typeMap);\n }\n\n function resolveAndValidateShape(\n shapeOrFn: ShapeOrFn<any>,\n ctx?: any,\n ): ShapeConfig {\n if (typeof shapeOrFn === \"function\") {\n requireContext(ctx, \"shape function\");\n const result = shapeOrFn(ctx);\n if (!isPlainObject(result)) {\n throw new ShapeError(\n \"Dynamic shape function must return a plain object\",\n );\n }\n return result as ShapeConfig;\n }\n return shapeOrFn as ShapeConfig;\n }\n\n function buildShapeZodSchema(\n model: string,\n method: QueryMethod,\n shape: ShapeConfig,\n ): BuiltShape {\n validateShapeArgs(method, shape);\n validateUniqueWhere(model, method, shape);\n\n const schemaFields: Record<string, z.ZodTypeAny> = {};\n let forcedWhere: WhereForced = EMPTY_WHERE_FORCED;\n let forcedOnlyWhereKeys = new Set<string>();\n let forcedIncludeTree: Record<string, ForcedTree> = {};\n let forcedSelectTree: Record<string, ForcedTree> = {};\n let forcedIncludeCountWhere: Record<string, WhereForced> = {};\n let forcedSelectCountWhere: Record<string, WhereForced> = {};\n\n if (shape.where) {\n const { schema, forced, forcedOnlyKeys } = whereBuilder.buildWhereSchema(\n model,\n shape.where,\n );\n if (schema) schemaFields[\"where\"] = schema;\n forcedWhere = forced;\n forcedOnlyWhereKeys = forcedOnlyKeys;\n }\n\n if (shape.include) {\n const result = projectionBuilder.buildIncludeSchema(model, shape.include);\n schemaFields[\"include\"] = result.schema;\n forcedIncludeTree = result.forcedTree;\n forcedIncludeCountWhere = result.forcedCountWhere;\n }\n\n if (shape.select) {\n if (method === \"count\") {\n schemaFields[\"select\"] = argsBuilder.buildCountSelectSchema(\n model,\n shape.select as Record<string, true>,\n );\n } else {\n const result = projectionBuilder.buildSelectSchema(model, shape.select);\n schemaFields[\"select\"] = result.schema;\n forcedSelectTree = result.forcedTree;\n forcedSelectCountWhere = result.forcedCountWhere;\n }\n }\n\n if (shape.orderBy) {\n if (method === \"groupBy\" && shape.by) {\n const sortEnum = z.enum([\"asc\", \"desc\"]);\n const bySet = new Set(shape.by);\n\n if ((shape.orderBy as unknown) === true) {\n const groupByOrderFields: Record<string, z.ZodTypeAny> = {};\n for (const field of shape.by) {\n groupByOrderFields[field] = sortEnum.optional();\n }\n groupByOrderFields[\"_count\"] = sortEnum.optional();\n const fieldKeys = Object.keys(groupByOrderFields);\n const singleSchema = z\n .object(groupByOrderFields)\n .strict()\n .refine(\n (v) =>\n fieldKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: \"orderBy must specify at least one field\" },\n );\n schemaFields[\"orderBy\"] = z\n .union([singleSchema, z.preprocess(coerceToArray, z.array(singleSchema).min(1))])\n .optional();\n } else {\n const groupByOrderFields: Record<string, z.ZodTypeAny> = {};\n\n for (const [fieldName, config] of Object.entries(shape.orderBy)) {\n if (fieldName === \"_count\") {\n if (config === true) {\n groupByOrderFields[\"_count\"] = sortEnum.optional();\n } else if (typeof config === \"object\" && config !== null) {\n const countFields: Record<string, z.ZodTypeAny> = {};\n for (const countField of Object.keys(config)) {\n if (!bySet.has(countField)) {\n throw new ShapeError(\n `orderBy _count field \"${countField}\" must be included in \"by\" for groupBy`,\n );\n }\n countFields[countField] = sortEnum.optional();\n }\n const countKeys = Object.keys(countFields);\n groupByOrderFields[\"_count\"] = z\n .object(countFields)\n .strict()\n .refine(\n (v) =>\n countKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n {\n message: \"orderBy._count must specify at least one field\",\n },\n )\n .optional();\n }\n continue;\n }\n\n if (!bySet.has(fieldName)) {\n throw new ShapeError(\n `orderBy field \"${fieldName}\" must be included in \"by\" for groupBy`,\n );\n }\n groupByOrderFields[fieldName] = sortEnum.optional();\n }\n\n const fieldKeys = Object.keys(groupByOrderFields);\n const singleSchema = z\n .object(groupByOrderFields)\n .strict()\n .refine(\n (v) =>\n fieldKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: \"orderBy must specify at least one field\" },\n );\n schemaFields[\"orderBy\"] = z\n .union([singleSchema, z.preprocess(coerceToArray, z.array(singleSchema).min(1))])\n .optional();\n }\n } else {\n schemaFields[\"orderBy\"] = argsBuilder.buildOrderBySchema(\n model,\n shape.orderBy as Record<string, OrderByFieldConfig>,\n );\n }\n }\n\n if (shape.cursor)\n schemaFields[\"cursor\"] = argsBuilder.buildCursorSchema(\n model,\n shape.cursor,\n );\n if (shape.take)\n schemaFields[\"take\"] = argsBuilder.buildTakeSchema(shape.take);\n if (shape.skip !== undefined) {\n if (shape.skip !== true) {\n throw new ShapeError('Shape config \"skip\" must be true');\n }\n schemaFields[\"skip\"] = z.number().int().min(0).optional();\n }\n if (shape.distinct)\n schemaFields[\"distinct\"] = argsBuilder.buildDistinctSchema(\n model,\n shape.distinct,\n );\n if (shape._count)\n schemaFields[\"_count\"] = argsBuilder.buildCountFieldSchema(\n model,\n shape._count,\n \"_count\",\n );\n if (shape._avg)\n schemaFields[\"_avg\"] = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_avg\",\n shape._avg,\n );\n if (shape._sum)\n schemaFields[\"_sum\"] = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_sum\",\n shape._sum,\n );\n if (shape._min)\n schemaFields[\"_min\"] = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_min\",\n shape._min,\n );\n if (shape._max)\n schemaFields[\"_max\"] = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_max\",\n shape._max,\n );\n if (shape.by)\n schemaFields[\"by\"] = argsBuilder.buildBySchema(model, shape.by);\n if (shape.having)\n schemaFields[\"having\"] = argsBuilder.buildHavingSchema(\n model,\n shape.having,\n );\n\n return {\n zodSchema: z.object(schemaFields).strict(),\n forcedWhere,\n forcedOnlyWhereKeys,\n forcedIncludeTree,\n forcedSelectTree,\n forcedIncludeCountWhere,\n forcedSelectCountWhere,\n };\n }\n\n function matchCaller<TCtx>(\n shapes: Record<string, ShapeOrFn<TCtx>>,\n caller: string,\n ): { key: string; shape: ShapeOrFn<TCtx> } | null {\n const matched = matchCallerPattern(Object.keys(shapes), caller);\n if (!matched) return null;\n return { key: matched, shape: shapes[matched] };\n }\n\n function buildQuerySchema<TCtx>(\n model: string,\n method: QueryMethod,\n config: ShapeOrFn<TCtx> | Record<string, ShapeOrFn<TCtx>>,\n ): QuerySchema<TCtx> {\n const isSingle = typeof config === \"function\" || isShapeConfig(config);\n const builtCache = new Map<string, BuiltShape>();\n\n if (isSingle && typeof config !== \"function\") {\n builtCache.set(\n \"_default\",\n buildShapeZodSchema(model, method, config as ShapeConfig),\n );\n }\n\n if (!isSingle) {\n for (const key of Object.keys(config as Record<string, unknown>)) {\n if (SHAPE_CONFIG_KEYS.has(key)) {\n throw new ShapeError(\n `Caller key \"${key}\" collides with reserved shape config key. Rename the caller path.`,\n );\n }\n }\n for (const [key, shapeOrFn] of Object.entries(\n config as Record<string, ShapeOrFn<TCtx>>,\n )) {\n if (typeof shapeOrFn !== \"function\") {\n builtCache.set(\n key,\n buildShapeZodSchema(model, method, shapeOrFn as ShapeConfig),\n );\n }\n }\n }\n\n const isUnique = UNIQUE_WHERE_METHODS.has(method);\n\n return {\n schemas: Object.fromEntries(\n [...builtCache.entries()].map(([k, v]) => [k, v.zodSchema]),\n ),\n parse(\n body: unknown,\n opts?: { ctx?: TCtx; caller?: string },\n ): Record<string, unknown> {\n const normalizedBody = body === undefined || body === null ? {} : body;\n let built: BuiltShape;\n\n if (isSingle) {\n if (typeof config === \"function\") {\n const resolved = resolveAndValidateShape(config, opts?.ctx);\n built = buildShapeZodSchema(model, method, resolved);\n } else {\n built = builtCache.get(\"_default\")!;\n }\n } else {\n if (!isPlainObject(normalizedBody))\n throw new ShapeError(\"Request body must be an object\");\n\n if (\"caller\" in (normalizedBody as Record<string, unknown>)) {\n throw new CallerError(\n \"Pass caller via opts.caller, not in the request body.\",\n );\n }\n\n const caller = opts?.caller;\n if (typeof caller !== \"string\") {\n const allowed = Object.keys(\n config as Record<string, ShapeOrFn<TCtx>>,\n );\n throw new CallerError(\n `Missing caller. This query uses named shape routing with keys: ${allowed.map((k) => `\"${k}\"`).join(\", \")}. ` +\n `Provide caller via opts.caller.`,\n );\n }\n\n const matched = matchCaller(\n config as Record<string, ShapeOrFn<TCtx>>,\n caller,\n );\n if (!matched) {\n const allowed = Object.keys(\n config as Record<string, ShapeOrFn<TCtx>>,\n );\n throw new CallerError(\n `Unknown caller: \"${caller}\". Allowed: ${allowed.map((k) => `\"${k}\"`).join(\", \")}`,\n );\n }\n\n if (typeof matched.shape === \"function\") {\n const resolved = resolveAndValidateShape(matched.shape, opts?.ctx);\n built = buildShapeZodSchema(model, method, resolved);\n } else {\n built = builtCache.get(matched.key)!;\n }\n }\n\n return applyBuiltShape(built, normalizedBody, isUnique);\n },\n };\n }\n\n return {\n buildQuerySchema,\n buildShapeZodSchema,\n buildWhereSchema: whereBuilder.buildWhereSchema,\n buildIncludeSchema: projectionBuilder.buildIncludeSchema,\n buildSelectSchema: projectionBuilder.buildSelectSchema,\n };\n}","export const SHAPE_CONFIG_KEYS = new Set([\n 'where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip',\n 'distinct', 'having', '_count', '_avg', '_sum', '_min', '_max', 'by',\n])\n\nexport const GUARD_SHAPE_KEYS = new Set([\n 'data', 'create', 'update', ...SHAPE_CONFIG_KEYS,\n])\n\nexport const COMBINATOR_KEYS = new Set(['AND', 'OR', 'NOT'])\n\nexport const TO_MANY_RELATION_OPS = new Set(['some', 'every', 'none'])\nexport const TO_ONE_RELATION_OPS = new Set(['is', 'isNot'])\nexport const ALL_RELATION_OPS = new Set([...TO_MANY_RELATION_OPS, ...TO_ONE_RELATION_OPS])\n\nexport function toDelegateKey(modelName: string): string {\n return modelName[0].toLowerCase() + modelName.slice(1)\n}\n\nconst FORCED_MARKER = Symbol.for('prisma-guard.forced')\n\nexport function isForcedValue(v: unknown): v is { value: unknown } {\n return v !== null && typeof v === 'object' && (v as any)[FORCED_MARKER] === true\n}\n\nexport function force<T>(value: T): { value: T } {\n const wrapper: any = { value }\n wrapper[FORCED_MARKER] = true\n return wrapper\n}\n\nconst UNSUPPORTED_MARKER = Symbol.for('prisma-guard.unsupported')\n\nexport function isUnsupportedMarker(v: unknown): boolean {\n return v !== null && typeof v === 'object' && (v as any)[UNSUPPORTED_MARKER] === true\n}\n\nexport function unsupported(): { __brand: 'unsupported' } {\n const marker: any = {}\n marker[UNSUPPORTED_MARKER] = true\n return marker\n}","import { CallerError } from './errors.js'\n\nexport function matchCallerPattern(\n patterns: string[],\n caller: string,\n): string | null {\n if (patterns.includes(caller)) return caller\n\n const matches: string[] = []\n\n for (const pattern of patterns) {\n if (!pattern.includes(':')) continue\n const patternParts = pattern.split('/')\n const callerParts = caller.split('/')\n if (patternParts.length !== callerParts.length) continue\n\n let ok = true\n for (let i = 0; i < patternParts.length; i++) {\n if (patternParts[i].startsWith(':')) continue\n if (patternParts[i] !== callerParts[i]) {\n ok = false\n break\n }\n }\n if (ok) matches.push(pattern)\n }\n\n if (matches.length === 0) return null\n if (matches.length > 1) {\n throw new CallerError(\n `Ambiguous caller \"${caller}\" matches multiple patterns: ${matches.map(p => `\"${p}\"`).join(', ')}`,\n )\n }\n return matches[0]\n}","import { PolicyError } from '../shared/errors.js'\nimport { isPlainObject } from '../shared/utils.js'\n\nexport function requireContext(ctx: unknown, label: string): asserts ctx {\n if (ctx === undefined || ctx === null) {\n throw new PolicyError(`Context required for ${label}`)\n }\n}\n\nexport function validateContext(ctx: unknown): Record<string, unknown> {\n if (ctx === null || ctx === undefined) {\n throw new PolicyError(\n `guard.extension() context function must return a plain object, got ${String(ctx)}`,\n )\n }\n if (!isPlainObject(ctx)) {\n throw new PolicyError(\n `guard.extension() context function must return a plain object, got ${Array.isArray(ctx) ? 'array' : typeof ctx}`,\n )\n }\n return ctx\n}","import { z } from \"zod\";\nimport type { TypeMap, EnumMap, FieldMeta } from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport {\n COMBINATOR_KEYS,\n TO_MANY_RELATION_OPS,\n TO_ONE_RELATION_OPS,\n} from \"../shared/constants.js\";\nimport { isForcedValue } from \"../shared/constants.js\";\nimport { createOperatorSchema } from \"./zod-type-map.js\";\nimport { isPlainObject, coerceToArray } from \"../shared/utils.js\";\nimport type { WhereForced } from \"./query-builder-forced.js\";\nimport { hasWhereForced, mergeWhereForced } from \"./query-builder-forced.js\";\nimport type { ScalarBaseMap } from \"../shared/scalar-base.js\";\n\nconst UNSUPPORTED_WHERE_TYPES = new Set([\"Bytes\"]);\nconst STRING_MODE_OPS = new Set([\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"equals\",\n]);\nconst JSON_STRING_MODE_OPS = new Set([\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n]);\nconst MAX_WHERE_DEPTH = 10;\n\nexport interface WhereBuiltResult {\n schema: z.ZodTypeAny | null;\n forced: WhereForced;\n forcedOnlyKeys: Set<string>;\n}\n\nfunction safeStringify(v: unknown): string {\n if (typeof v === \"bigint\") return `${v}n`;\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n\nfunction forcedValuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n if (typeof a === \"bigint\") return a === b;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n if (typeof a !== \"object\") return false;\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) return false;\n if (a.length !== (b as unknown[]).length) return false;\n return a.every((v, i) => forcedValuesEqual(v, (b as unknown[])[i]));\n }\n if (!isPlainObject(a) || !isPlainObject(b)) return false;\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((k) => k in b && forcedValuesEqual(a[k], b[k]));\n}\n\nfunction mergeScalarConditions(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): void {\n for (const [field, ops] of Object.entries(source)) {\n const existing = target[field];\n\n if (existing === undefined) {\n target[field] = ops;\n continue;\n }\n\n if (field === \"NOT\") {\n const existingArr = Array.isArray(existing) ? existing : [existing];\n const sourceArr = Array.isArray(ops) ? ops : [ops];\n target[field] = [...existingArr, ...sourceArr];\n continue;\n }\n\n if (isPlainObject(existing) && isPlainObject(ops)) {\n for (const [op, val] of Object.entries(ops as Record<string, unknown>)) {\n if (op in (existing as Record<string, unknown>)) {\n const existingVal = (existing as Record<string, unknown>)[op];\n if (!forcedValuesEqual(existingVal, val)) {\n throw new ShapeError(\n `Conflicting forced where values for \"${field}.${op}\": ` +\n `shape defines both ${safeStringify(existingVal)} and ${safeStringify(val)}`,\n );\n }\n }\n }\n Object.assign(existing, ops);\n continue;\n }\n\n if (!forcedValuesEqual(existing, ops)) {\n throw new ShapeError(`Conflicting forced where values for \"${field}\"`);\n }\n }\n}\n\nfunction mergeRelationForcedMaps(\n target: Record<string, Record<string, WhereForced>>,\n source: Record<string, Record<string, WhereForced>>,\n): void {\n for (const [relName, ops] of Object.entries(source)) {\n if (!target[relName]) {\n target[relName] = ops;\n continue;\n }\n for (const [op, forced] of Object.entries(ops)) {\n if (!target[relName][op]) {\n target[relName][op] = forced;\n } else {\n mergeScalarConditions(\n target[relName][op].conditions,\n forced.conditions,\n );\n mergeRelationForcedMaps(\n target[relName][op].relations,\n forced.relations,\n );\n }\n }\n }\n}\n\nfunction isModeCompatibleOp(fieldType: string, op: string): boolean {\n if (fieldType === \"String\") return STRING_MODE_OPS.has(op);\n if (fieldType === \"Json\") return JSON_STRING_MODE_OPS.has(op);\n return false;\n}\n\nexport function createWhereBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n) {\n function buildWhereSchema(\n model: string,\n whereConfig: Record<string, unknown>,\n depth?: number,\n ): WhereBuiltResult {\n const currentDepth = depth ?? 0;\n if (currentDepth > MAX_WHERE_DEPTH) {\n throw new ShapeError(\n `Where schema for model \"${model}\" exceeds maximum nesting depth (${MAX_WHERE_DEPTH}). Check for circular relation references in the shape.`,\n );\n }\n\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n const scalarConditions: Record<string, unknown> = {};\n const relationForced: Record<string, Record<string, WhereForced>> = {};\n\n for (const [key, value] of Object.entries(whereConfig)) {\n if (COMBINATOR_KEYS.has(key)) {\n processCombinator(\n key as \"AND\" | \"OR\" | \"NOT\",\n value,\n model,\n fieldSchemas,\n scalarConditions,\n relationForced,\n currentDepth,\n );\n continue;\n }\n\n const fieldMeta = modelFields[key];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${key}\" on model \"${model}\"`);\n\n if (fieldMeta.isRelation) {\n processRelationFilter(\n key,\n value,\n fieldMeta,\n model,\n fieldSchemas,\n relationForced,\n currentDepth,\n );\n continue;\n }\n\n if (UNSUPPORTED_WHERE_TYPES.has(fieldMeta.type) && !fieldMeta.isList) {\n throw new ShapeError(\n `${fieldMeta.type} field \"${key}\" cannot be used in where filters`,\n );\n }\n\n processScalarField(\n key,\n value,\n model,\n fieldMeta,\n fieldSchemas,\n scalarConditions,\n );\n }\n\n const schema =\n Object.keys(fieldSchemas).length > 0\n ? z.object(fieldSchemas).strict().optional()\n : null;\n\n const forcedOnlyKeys = new Set<string>();\n for (const key of Object.keys(whereConfig)) {\n if (COMBINATOR_KEYS.has(key)) continue;\n if (!(key in fieldSchemas)) {\n forcedOnlyKeys.add(key);\n }\n }\n\n return {\n schema,\n forced: {\n conditions: scalarConditions,\n relations: relationForced,\n },\n forcedOnlyKeys,\n };\n }\n\n function processCombinator(\n key: \"AND\" | \"OR\" | \"NOT\",\n value: unknown,\n model: string,\n fieldSchemas: Record<string, z.ZodTypeAny>,\n parentConditions: Record<string, unknown>,\n parentRelations: Record<string, Record<string, WhereForced>>,\n depth: number,\n ): void {\n if (!isPlainObject(value)) {\n throw new ShapeError(\n `\"${key}\" in where shape must be an object defining allowed fields`,\n );\n }\n\n const result = buildWhereSchema(model, value, depth + 1);\n\n if (!result.schema && !hasWhereForced(result.forced)) {\n throw new ShapeError(\n `Empty \"${key}\" combinator in where shape for model \"${model}\". Define at least one field.`,\n );\n }\n\n if (result.schema) {\n let elementSchema: z.ZodTypeAny = result.schema;\n\n if (!hasWhereForced(result.forced)) {\n elementSchema = result.schema.refine(\n (v: any) =>\n v !== undefined &&\n v !== null &&\n Object.keys(v).some((k) => v[k] !== undefined),\n { message: `\"${key}\" member must specify at least one condition` },\n );\n }\n\n if (key === \"NOT\") {\n fieldSchemas[key] = z\n .union([\n elementSchema,\n z.preprocess(coerceToArray, z.array(elementSchema).min(1)),\n ])\n .optional();\n } else {\n fieldSchemas[key] = z\n .preprocess(coerceToArray, z.array(elementSchema).min(1))\n .optional();\n }\n }\n\n if (hasWhereForced(result.forced)) {\n if (key === \"AND\" || key === \"OR\") {\n mergeScalarConditions(parentConditions, result.forced.conditions);\n mergeRelationForcedMaps(parentRelations, result.forced.relations);\n } else {\n const notWhere = mergeWhereForced(undefined, result.forced);\n if (Object.keys(notWhere).length > 0) {\n const existing = parentConditions[key];\n if (existing) {\n parentConditions[key] = Array.isArray(existing)\n ? [...existing, notWhere]\n : [existing, notWhere];\n } else {\n parentConditions[key] = notWhere;\n }\n }\n }\n }\n }\n\n function processRelationFilter(\n key: string,\n value: unknown,\n fieldMeta: FieldMeta,\n model: string,\n fieldSchemas: Record<string, z.ZodTypeAny>,\n parentRelations: Record<string, Record<string, WhereForced>>,\n depth: number,\n ): void {\n if (!isPlainObject(value)) {\n throw new ShapeError(\n `Relation filter for \"${key}\" must be an object with operators (some, every, none, is, isNot)`,\n );\n }\n\n const allowedOps = fieldMeta.isList\n ? TO_MANY_RELATION_OPS\n : TO_ONE_RELATION_OPS;\n\n if (Object.keys(value).length === 0) {\n throw new ShapeError(\n `Empty relation filter for \"${key}\" on model \"${model}\". Define at least one operator: ${[...allowedOps].join(\", \")}`,\n );\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n const opForced: Record<string, WhereForced> = {};\n let hasClientOps = false;\n\n for (const [op, opValue] of Object.entries(value)) {\n if (!allowedOps.has(op)) {\n const allowed = [...allowedOps].join(\", \");\n throw new ShapeError(\n `Operator \"${op}\" not supported for ${fieldMeta.isList ? \"to-many\" : \"to-one\"} relation \"${key}\". Allowed: ${allowed}`,\n );\n }\n\n if (!isPlainObject(opValue)) {\n throw new ShapeError(\n `Relation filter operator \"${op}\" on \"${key}\" must be an object defining nested where fields`,\n );\n }\n\n const nested = buildWhereSchema(fieldMeta.type, opValue, depth + 1);\n\n if (!nested.schema && !hasWhereForced(nested.forced)) {\n throw new ShapeError(\n `Empty nested where for relation \"${key}.${op}\" on model \"${model}\". Define at least one field.`,\n );\n }\n\n if (nested.schema) {\n if (!hasWhereForced(nested.forced)) {\n opSchemas[op] = nested.schema.refine(\n (v: any) => v === undefined || Object.keys(v).length > 0,\n {\n message: `Relation filter \"${key}.${op}\" requires at least one condition`,\n },\n );\n } else {\n opSchemas[op] = nested.schema;\n }\n hasClientOps = true;\n }\n\n if (hasWhereForced(nested.forced)) {\n opForced[op] = nested.forced;\n }\n }\n\n if (!hasClientOps && Object.keys(opForced).length === 0) {\n throw new ShapeError(\n `Relation filter for \"${key}\" on model \"${model}\" produced no conditions. Define at least one nested field in the operator shape.`,\n );\n }\n\n if (hasClientOps) {\n const clientOpKeys = Object.keys(opSchemas);\n const opObjSchema = z.object(opSchemas).strict();\n\n if (Object.keys(opForced).length === 0) {\n fieldSchemas[key] = opObjSchema\n .refine(\n (v) =>\n clientOpKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: `At least one relation operator required for \"${key}\"` },\n )\n .optional();\n } else {\n fieldSchemas[key] = opObjSchema.optional();\n }\n }\n\n if (Object.keys(opForced).length > 0) {\n parentRelations[key] = opForced;\n }\n }\n\n function processScalarField(\n fieldName: string,\n operators: unknown,\n model: string,\n fieldMeta: FieldMeta,\n fieldSchemas: Record<string, z.ZodTypeAny>,\n scalarConditions: Record<string, unknown>,\n ): void {\n if (!isPlainObject(operators)) {\n throw new ShapeError(\n `Where config for scalar field \"${fieldName}\" on model \"${model}\" must be an object of operators`,\n );\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n const fieldForced: Record<string, unknown> = {};\n let hasClientOps = false;\n let hasModeCompatibleOp = false;\n const clientOpKeys: string[] = [];\n let modeConfigValue: unknown = undefined;\n let hasModeConfig = false;\n\n for (const [op, opValue] of Object.entries(operators)) {\n if (op === \"mode\") {\n hasModeConfig = true;\n modeConfigValue = opValue;\n continue;\n }\n\n if (opValue === true) {\n opSchemas[op] = createOperatorSchema(\n fieldMeta,\n op,\n enumMap,\n scalarBase,\n ).optional();\n hasClientOps = true;\n clientOpKeys.push(op);\n if (!fieldMeta.isList && isModeCompatibleOp(fieldMeta.type, op)) {\n hasModeCompatibleOp = true;\n }\n } else {\n const actualOpValue = isForcedValue(opValue) ? opValue.value : opValue;\n const opSchema = createOperatorSchema(\n fieldMeta,\n op,\n enumMap,\n scalarBase,\n );\n let parsed: unknown;\n try {\n parsed = opSchema.parse(actualOpValue);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced value for \"${model}.${fieldName}.${op}\": ${err.message}`,\n );\n }\n fieldForced[op] = parsed;\n if (!fieldMeta.isList && isModeCompatibleOp(fieldMeta.type, op)) {\n hasModeCompatibleOp = true;\n }\n }\n }\n\n if (!hasClientOps && Object.keys(fieldForced).length === 0) {\n if (hasModeConfig) {\n throw new ShapeError(\n `Where field \"${fieldName}\" on model \"${model}\" has \"mode\" but no operators. Add at least one compatible operator.`,\n );\n }\n throw new ShapeError(\n `Empty operator config for where field \"${fieldName}\" on model \"${model}\". Define at least one operator.`,\n );\n }\n\n if (hasModeConfig) {\n if (!hasModeCompatibleOp) {\n throw new ShapeError(\n `\"mode\" on where field \"${fieldName}\" on model \"${model}\" requires a compatible operator (String: contains, startsWith, endsWith, equals; Json: string_contains, string_starts_with, string_ends_with)`,\n );\n }\n if (modeConfigValue === true) {\n opSchemas[\"mode\"] = z.enum([\"default\", \"insensitive\"]).optional();\n } else {\n const actualModeValue = isForcedValue(modeConfigValue)\n ? modeConfigValue.value\n : modeConfigValue;\n const modeSchema = z.enum([\"default\", \"insensitive\"]);\n let parsed: unknown;\n try {\n parsed = modeSchema.parse(actualModeValue);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced value for \"${model}.${fieldName}.mode\": ${err.message}`,\n );\n }\n fieldForced[\"mode\"] = parsed;\n }\n } else if (hasModeCompatibleOp) {\n opSchemas[\"mode\"] = z.enum([\"default\", \"insensitive\"]).optional();\n }\n\n if (hasClientOps) {\n const opObj = z.object(opSchemas).strict();\n const refined = opObj.refine(\n (v) =>\n clientOpKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n {\n message: `At least one operator required for where field \"${fieldName}\"`,\n },\n );\n\n if (\"equals\" in opSchemas && fieldMeta.type !== \"Json\") {\n const equalsBase = createOperatorSchema(\n fieldMeta,\n \"equals\",\n enumMap,\n scalarBase,\n );\n fieldSchemas[fieldName] = z.union([refined, equalsBase]).optional();\n } else {\n fieldSchemas[fieldName] = refined.optional();\n }\n }\n\n if (Object.keys(fieldForced).length > 0) {\n scalarConditions[fieldName] = fieldForced;\n }\n }\n\n return { buildWhereSchema };\n}","export function deepClone<T>(value: T): T {\n if (value === null || value === undefined) return value\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n return value\n case 'object': {\n if (value instanceof Date) return new Date(value.getTime()) as T\n if (value instanceof Uint8Array) return value.slice() as T\n if (Array.isArray(value)) return value.map(deepClone) as T\n const proto = Object.getPrototypeOf(value)\n if (proto !== Object.prototype && proto !== null) return value\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = deepClone(v)\n }\n return result as T\n }\n default:\n return value\n }\n}","import { z } from 'zod'\nimport type { UniqueMap } from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.js'\nimport { isPlainObject } from '../shared/utils.js'\nimport { deepClone } from '../shared/deep-clone.js'\n\nexport interface WhereForced {\n conditions: Record<string, unknown>\n relations: Record<string, Record<string, WhereForced>>\n}\n\nexport const EMPTY_WHERE_FORCED: WhereForced = { conditions: {}, relations: {} }\n\nexport function hasWhereForced(f: WhereForced): boolean {\n return Object.keys(f.conditions).length > 0 || Object.keys(f.relations).length > 0\n}\n\nexport interface ForcedTree {\n where?: WhereForced\n include?: Record<string, ForcedTree>\n select?: Record<string, ForcedTree>\n _countWhere?: Record<string, WhereForced>\n _countWherePlacement?: 'include' | 'select'\n}\n\nexport interface BuiltShape {\n zodSchema: z.ZodObject<any>\n forcedWhere: WhereForced\n forcedOnlyWhereKeys: Set<string>\n forcedIncludeTree: Record<string, ForcedTree>\n forcedSelectTree: Record<string, ForcedTree>\n forcedIncludeCountWhere: Record<string, WhereForced>\n forcedSelectCountWhere: Record<string, WhereForced>\n}\n\nexport function mergeWhereForced(\n where: Record<string, unknown> | undefined,\n forced: WhereForced,\n): Record<string, unknown> {\n if (!hasWhereForced(forced)) return where ?? {}\n\n let result: Record<string, unknown> = where ? deepClone(where) : {}\n\n for (const [relName, opMap] of Object.entries(forced.relations)) {\n if (!result[relName] || typeof result[relName] !== 'object') {\n result[relName] = {}\n }\n const relObj = result[relName] as Record<string, unknown>\n for (const [op, nestedForced] of Object.entries(opMap)) {\n relObj[op] = mergeWhereForced(\n relObj[op] as Record<string, unknown> | undefined,\n nestedForced,\n )\n }\n }\n\n if (Object.keys(forced.conditions).length > 0) {\n const scalarClone = deepClone(forced.conditions)\n if (Object.keys(result).length === 0) {\n result = scalarClone\n } else {\n result = { AND: [result, scalarClone] }\n }\n }\n\n return result\n}\n\nexport function mergeUniqueWhereForced(\n where: Record<string, unknown> | undefined,\n forced: WhereForced,\n): Record<string, unknown> {\n if (!hasWhereForced(forced)) return where ?? {}\n\n let result: Record<string, unknown> = where ? { ...where } : {}\n\n for (const [relName, opMap] of Object.entries(forced.relations)) {\n if (!result[relName] || typeof result[relName] !== 'object') {\n result[relName] = {}\n }\n const relObj = result[relName] as Record<string, unknown>\n for (const [op, nestedForced] of Object.entries(opMap)) {\n relObj[op] = mergeWhereForced(\n relObj[op] as Record<string, unknown> | undefined,\n nestedForced,\n )\n }\n }\n\n if (Object.keys(forced.conditions).length > 0) {\n const conditions = [deepClone(forced.conditions)]\n const existing = result.AND\n if (existing) {\n if (Array.isArray(existing)) {\n conditions.unshift(...existing)\n } else {\n conditions.unshift(existing as Record<string, unknown>)\n }\n }\n result.AND = conditions\n }\n\n return result\n}\n\nexport function applyBuiltShape(\n built: BuiltShape,\n body: unknown,\n isUniqueMethod: boolean,\n): Record<string, unknown> {\n let parseable = body\n const hasWhereInSchema = 'where' in built.zodSchema.shape\n\n if (isPlainObject(body)) {\n const bodyObj = body as Record<string, unknown>\n\n if ('select' in bodyObj && 'include' in bodyObj) {\n throw new ShapeError('Request cannot define both \"include\" and \"select\"')\n }\n\n if ('where' in bodyObj) {\n if (!hasWhereInSchema) {\n const { where: _, ...rest } = bodyObj\n parseable = rest\n } else if (built.forcedOnlyWhereKeys.size > 0 && isPlainObject(bodyObj.where)) {\n const where = { ...(bodyObj.where as Record<string, unknown>) }\n for (const key of built.forcedOnlyWhereKeys) {\n delete where[key]\n }\n if (Object.keys(where).length === 0 && hasWhereForced(built.forcedWhere)) {\n const { where: _, ...rest } = bodyObj\n parseable = rest\n } else {\n parseable = { ...bodyObj, where }\n }\n }\n }\n }\n\n const validated = built.zodSchema.parse(parseable) as Record<string, unknown>\n\n if (hasWhereForced(built.forcedWhere)) {\n validated.where = isUniqueMethod\n ? mergeUniqueWhereForced(\n validated.where as Record<string, unknown> | undefined,\n built.forcedWhere,\n )\n : mergeWhereForced(\n validated.where as Record<string, unknown> | undefined,\n built.forcedWhere,\n )\n }\n\n if (Object.keys(built.forcedIncludeTree).length > 0) {\n applyForcedTree(validated, 'include', built.forcedIncludeTree)\n }\n\n if (Object.keys(built.forcedSelectTree).length > 0) {\n applyForcedTree(validated, 'select', built.forcedSelectTree)\n }\n\n if (Object.keys(built.forcedIncludeCountWhere).length > 0) {\n const ic = validated.include as Record<string, unknown> | undefined\n if (ic) applyForcedCountWhere(ic, built.forcedIncludeCountWhere)\n }\n\n if (Object.keys(built.forcedSelectCountWhere).length > 0) {\n const sc = validated.select as Record<string, unknown> | undefined\n if (sc) applyForcedCountWhere(sc, built.forcedSelectCountWhere)\n }\n\n return validated\n}\n\nfunction buildCountForPlacement(\n countWhere: Record<string, WhereForced>,\n): Record<string, unknown> {\n const countSelect: Record<string, unknown> = {}\n for (const [countRel, countForced] of Object.entries(countWhere)) {\n countSelect[countRel] = { where: mergeWhereForced(undefined, countForced) }\n }\n return { _count: { select: countSelect } }\n}\n\nexport function applyForcedTree(\n validated: Record<string, unknown>,\n key: 'include' | 'select',\n tree: Record<string, ForcedTree>,\n): void {\n const container = validated[key] as Record<string, unknown> | undefined\n if (!container) return\n\n for (const [relName, forced] of Object.entries(tree)) {\n const relVal = container[relName]\n if (relVal === undefined) continue\n\n if (relVal === true) {\n const expanded: Record<string, unknown> = {}\n if (forced.where && hasWhereForced(forced.where)) {\n expanded.where = mergeWhereForced(undefined, forced.where)\n }\n if (forced.include) {\n expanded.include = buildForcedOnlyContainer(forced.include)\n applyForcedTree(expanded, 'include', forced.include)\n }\n if (forced.select) {\n expanded.select = buildForcedOnlyContainer(forced.select)\n applyForcedTree(expanded, 'select', forced.select)\n }\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? 'include'\n if (!expanded[placement]) expanded[placement] = {}\n const placementObj = expanded[placement] as Record<string, unknown>\n Object.assign(placementObj, buildCountForPlacement(forced._countWhere))\n }\n if (expanded.include && expanded.select) {\n throw new ShapeError(\n `Forced tree for relation \"${relName}\" produces both \"include\" and \"select\". Prisma does not allow both at the same level.`,\n )\n }\n container[relName] = Object.keys(expanded).length > 0 ? expanded : true\n continue\n }\n\n if (isPlainObject(relVal)) {\n const relObj = relVal as Record<string, unknown>\n if (forced.where && hasWhereForced(forced.where)) {\n relObj.where = mergeWhereForced(\n relObj.where as Record<string, unknown> | undefined,\n forced.where,\n )\n }\n if (forced.include) {\n if (!relObj.include) relObj.include = buildForcedOnlyContainer(forced.include)\n applyForcedTree(relObj, 'include', forced.include)\n }\n if (forced.select) {\n if (!relObj.select) relObj.select = buildForcedOnlyContainer(forced.select)\n applyForcedTree(relObj, 'select', forced.select)\n }\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? 'include'\n const projContainer = relObj[placement] as Record<string, unknown> | undefined\n if (projContainer) {\n applyForcedCountWhere(projContainer, forced._countWhere)\n }\n }\n if (relObj.include && relObj.select) {\n throw new ShapeError(\n `Relation \"${relName}\" has both \"include\" and \"select\" after forced tree merge. Prisma does not allow both at the same level.`,\n )\n }\n }\n }\n}\n\nexport function buildForcedOnlyContainer(\n tree: Record<string, ForcedTree>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [relName, forced] of Object.entries(tree)) {\n const nested: Record<string, unknown> = {}\n if (forced.where && hasWhereForced(forced.where)) {\n nested.where = mergeWhereForced(undefined, forced.where)\n }\n if (forced.include) nested.include = buildForcedOnlyContainer(forced.include)\n if (forced.select) nested.select = buildForcedOnlyContainer(forced.select)\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? 'include'\n if (!nested[placement]) nested[placement] = {}\n const placementObj = nested[placement] as Record<string, unknown>\n Object.assign(placementObj, buildCountForPlacement(forced._countWhere))\n }\n result[relName] = Object.keys(nested).length > 0 ? nested : true\n }\n return result\n}\n\nexport function applyForcedCountWhere(\n container: Record<string, unknown>,\n forcedCountWhere: Record<string, WhereForced>,\n): void {\n const countVal = container._count\n if (!countVal || countVal === true || !isPlainObject(countVal)) return\n const countObj = countVal as Record<string, unknown>\n const selectVal = countObj.select\n if (!selectVal || !isPlainObject(selectVal)) return\n const selectObj = selectVal as Record<string, unknown>\n\n for (const [relName, forced] of Object.entries(forcedCountWhere)) {\n const relVal = selectObj[relName]\n if (relVal === undefined) continue\n\n if (relVal === true) {\n selectObj[relName] = { where: mergeWhereForced(undefined, forced) }\n } else if (isPlainObject(relVal)) {\n const relObj = relVal as Record<string, unknown>\n relObj.where = mergeWhereForced(\n relObj.where as Record<string, unknown> | undefined,\n forced,\n )\n }\n }\n}\n\nexport function collectWhereFieldKeys(\n where: Record<string, unknown>,\n): Set<string> {\n const keys = new Set<string>()\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND') {\n const items = Array.isArray(value) ? value : [value]\n for (const item of items) {\n if (isPlainObject(item)) {\n for (const k of collectWhereFieldKeys(item)) keys.add(k)\n }\n }\n } else if (key !== 'OR' && key !== 'NOT') {\n keys.add(key)\n }\n }\n return keys\n}\n\nexport function validateResolvedUniqueWhere(\n model: string,\n where: Record<string, unknown>,\n method: string,\n uniqueMap: UniqueMap,\n): void {\n const constraints = uniqueMap[model]\n if (!constraints || constraints.length === 0) return\n\n const fieldKeys = collectWhereFieldKeys(where)\n const covered = constraints.some(constraint =>\n constraint.every(field => fieldKeys.has(field)),\n )\n\n if (!covered) {\n const constraintDesc = constraints.map(c => `(${c.join(', ')})`).join(' | ')\n throw new ShapeError(\n `${method} on model \"${model}\" requires resolved where to cover a unique constraint: ${constraintDesc}`,\n )\n }\n}\n\nfunction collectEqualityFields(\n where: Record<string, unknown>,\n model: string | undefined,\n typeMap?: Record<string, Record<string, { isRelation: boolean }>>,\n): Set<string> {\n const combinators = new Set(['AND', 'OR', 'NOT'])\n const fields = new Set<string>()\n\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND') {\n if (isPlainObject(value)) {\n for (const f of collectEqualityFields(value, model, typeMap)) {\n fields.add(f)\n }\n }\n continue\n }\n if (combinators.has(key)) continue\n if (typeMap && model && typeMap[model]?.[key]?.isRelation) continue\n if (value !== null && value !== undefined && !isPlainObject(value) && !Array.isArray(value)) {\n fields.add(key)\n continue\n }\n if (!value || !isPlainObject(value)) continue\n if (Object.keys(value).every(op => op === 'equals')) {\n fields.add(key)\n }\n }\n\n return fields\n}\n\nexport function validateUniqueEquality(\n model: string,\n where: Record<string, unknown>,\n method: string,\n uniqueMap: UniqueMap,\n typeMap?: Record<string, Record<string, { isRelation: boolean }>>,\n): void {\n const constraints = uniqueMap[model]\n if (!constraints || constraints.length === 0) return\n\n const equalityFields = collectEqualityFields(where, model, typeMap)\n\n const valid = constraints.some(constraint =>\n constraint.every(field => equalityFields.has(field)),\n )\n\n if (!valid) {\n const constraintDesc = constraints.map(c => `(${c.join(', ')})`).join(' | ')\n throw new ShapeError(\n `${method} on model \"${model}\" requires where to cover a unique constraint with equality operators only: ${constraintDesc}`,\n )\n }\n}","import { z } from 'zod'\nimport type { TypeMap, EnumMap, UniqueMap, OrderByFieldConfig } from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.js'\nimport { createBaseType, getSupportedOperators, createOperatorSchema, NUMERIC_TYPES, COMPARABLE_TYPES } from './zod-type-map.js'\nimport { coerceToArray } from '../shared/utils.js'\nimport type { ScalarBaseMap } from '../shared/scalar-base.js'\n\nconst UNSUPPORTED_BY_TYPES = new Set(['Json', 'Bytes'])\n\nfunction requireConfigTrue(config: Record<string, unknown>, context: string): void {\n for (const [key, value] of Object.entries(config)) {\n if (value !== true) {\n throw new ShapeError(\n `Config value for \"${key}\" in ${context} must be true, got ${typeof value}`,\n )\n }\n }\n}\n\nexport function createArgsBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n uniqueMap: UniqueMap,\n scalarBase: ScalarBaseMap,\n) {\n const sortEnum = z.enum(['asc', 'desc'])\n const nullsEnum = z.enum(['first', 'last'])\n const sortWithNulls = z.object({ sort: sortEnum, nulls: nullsEnum.optional() }).strict()\n const scalarOrderSchema = z.union([sortEnum, sortWithNulls])\n\n function validateScalarOrderByField(\n fieldName: string,\n model: string,\n modelFields: Record<string, { type: string; isList: boolean; isRelation: boolean }>,\n ): void {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" in orderBy requires a nested config object, not true`)\n if (fieldMeta.type === 'Json') throw new ShapeError(`Json field \"${fieldName}\" cannot be used in orderBy`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in orderBy`)\n }\n\n function buildOrderBySchema(\n model: string,\n orderByConfig: Record<string, OrderByFieldConfig>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n\n for (const [fieldName, config] of Object.entries(orderByConfig)) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`)\n\n if (config === true) {\n validateScalarOrderByField(fieldName, model, modelFields)\n fieldSchemas[fieldName] = scalarOrderSchema.optional()\n continue\n }\n\n if (typeof config !== 'object' || config === null) {\n throw new ShapeError(`Invalid orderBy config for \"${fieldName}\" on model \"${model}\": expected true or a nested config object`)\n }\n\n if (!fieldMeta.isRelation) {\n throw new ShapeError(`Scalar field \"${fieldName}\" in orderBy does not accept nested config`)\n }\n\n if (Object.keys(config).length === 0) {\n throw new ShapeError(`Empty orderBy config for relation \"${fieldName}\" on model \"${model}\". Define at least one nested field.`)\n }\n\n if (fieldMeta.isList) {\n const relKeys = Object.keys(config)\n if (relKeys.length !== 1 || relKeys[0] !== '_count') {\n throw new ShapeError(`To-many relation \"${fieldName}\" in orderBy only supports { _count: true }`)\n }\n if (config._count !== true) {\n throw new ShapeError(`_count in orderBy for \"${fieldName}\" must be true`)\n }\n fieldSchemas[fieldName] = z.object({ _count: sortEnum }).strict().optional()\n continue\n }\n\n const relatedModel = fieldMeta.type\n const relatedFields = typeMap[relatedModel]\n if (!relatedFields) throw new ShapeError(`Related model \"${relatedModel}\" not found in type map`)\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {}\n for (const [nestedField, nestedVal] of Object.entries(config)) {\n if (nestedVal !== true) {\n throw new ShapeError(`Nested orderBy field \"${nestedField}\" on relation \"${fieldName}\" must be true`)\n }\n const nestedMeta = relatedFields[nestedField]\n if (!nestedMeta) throw new ShapeError(`Unknown field \"${nestedField}\" on model \"${relatedModel}\" in orderBy`)\n if (nestedMeta.isRelation) throw new ShapeError(`Nested relation \"${nestedField}\" in orderBy on \"${fieldName}\" is not supported`)\n if (nestedMeta.type === 'Json') throw new ShapeError(`Json field \"${nestedField}\" cannot be used in orderBy`)\n if (nestedMeta.isList) throw new ShapeError(`List field \"${nestedField}\" cannot be used in orderBy`)\n nestedSchemas[nestedField] = scalarOrderSchema.optional()\n }\n\n const nestedKeys = Object.keys(nestedSchemas)\n fieldSchemas[fieldName] = z.object(nestedSchemas).strict()\n .refine(\n (v) => nestedKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: `orderBy for relation \"${fieldName}\" must specify at least one field` },\n )\n .optional()\n }\n\n const fieldKeys = Object.keys(fieldSchemas)\n const singleSchema = z.object(fieldSchemas).strict().refine(\n (v) => fieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'orderBy must specify at least one field' },\n )\n return z.union([singleSchema, z.preprocess(coerceToArray, z.array(singleSchema).min(1))]).optional()\n }\n\n function buildTakeSchema(config: { max: number; default?: number }): z.ZodTypeAny {\n if (!Number.isFinite(config.max) || !Number.isInteger(config.max)) {\n throw new ShapeError(`take max must be a finite integer, got ${config.max}`)\n }\n if (config.max < 1) {\n throw new ShapeError(`take max must be at least 1, got ${config.max}`)\n }\n if (config.default !== undefined) {\n if (!Number.isFinite(config.default) || !Number.isInteger(config.default)) {\n throw new ShapeError(`take default must be a finite integer, got ${config.default}`)\n }\n if (config.default < 1) {\n throw new ShapeError(`take default must be at least 1, got ${config.default}`)\n }\n if (config.default > config.max) {\n throw new ShapeError('take default cannot exceed max')\n }\n return z.number().int().min(1).max(config.max).default(config.default)\n }\n return z.number().int().min(1).max(config.max).optional()\n }\n\n function buildCursorSchema(\n model: string,\n cursorConfig: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(cursorConfig, `cursor on model \"${model}\"`)\n\n const cursorFields = new Set(Object.keys(cursorConfig))\n const constraints = uniqueMap[model]\n if (constraints && constraints.length > 0) {\n const covered = constraints.some(constraint =>\n constraint.length === cursorFields.size &&\n constraint.every(field => cursorFields.has(field)),\n )\n if (!covered) {\n const constraintDesc = constraints.map(c => `(${c.join(', ')})`).join(' | ')\n throw new ShapeError(\n `cursor on model \"${model}\" must exactly match a unique constraint: ${constraintDesc}`,\n )\n }\n }\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(cursorConfig)) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in cursor`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in cursor`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in cursor`)\n fieldSchemas[fieldName] = createBaseType(fieldMeta, enumMap, scalarBase)\n }\n return z.object(fieldSchemas).strict().optional()\n }\n\n function buildDistinctSchema(\n model: string,\n distinctConfig: string[],\n ): z.ZodTypeAny {\n if (distinctConfig.length === 0) {\n throw new ShapeError('distinct must contain at least one field')\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n for (const fieldName of distinctConfig) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in distinct`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in distinct`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in distinct`)\n }\n\n const enumSchema = z.enum(distinctConfig as [string, ...string[]])\n return z.union([enumSchema, z.preprocess(coerceToArray, z.array(enumSchema).min(1))]).optional()\n }\n\n function buildBySchema(model: string, byConfig: string[]): z.ZodTypeAny {\n if (byConfig.length === 0) {\n throw new ShapeError('groupBy \"by\" must contain at least one field')\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n for (const fieldName of byConfig) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in by`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in by`)\n if (UNSUPPORTED_BY_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(`${fieldMeta.type} field \"${fieldName}\" cannot be used in by`)\n }\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in by`)\n }\n const enumSchema = z.enum(byConfig as [string, ...string[]])\n return z.union([enumSchema, z.preprocess(coerceToArray, z.array(enumSchema).min(1))])\n }\n\n function buildHavingSchema(\n model: string,\n havingConfig: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(havingConfig, `having on model \"${model}\"`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(havingConfig)) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in having`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in having`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in having`)\n\n const ops = getSupportedOperators(fieldMeta)\n if (ops.length === 0) {\n throw new ShapeError(`${fieldMeta.type} field \"${fieldName}\" cannot be used in having filters`)\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {}\n const opKeys: string[] = []\n for (const op of ops) {\n opSchemas[op] = createOperatorSchema(fieldMeta, op, enumMap, scalarBase).optional()\n opKeys.push(op)\n }\n if (fieldMeta.type === 'String' && !fieldMeta.isList) {\n opSchemas['mode'] = z.enum(['default', 'insensitive']).optional()\n }\n fieldSchemas[fieldName] = z.object(opSchemas).strict()\n .refine(\n (v) => opKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: `At least one operator required for having field \"${fieldName}\"` },\n )\n .optional()\n }\n\n const havingFieldKeys = Object.keys(fieldSchemas)\n return z.object(fieldSchemas).strict()\n .refine(\n (v) => havingFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'having must specify at least one field' },\n )\n .optional()\n }\n\n function buildAggregateFieldSchema(\n model: string,\n opName: string,\n fieldConfig: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(fieldConfig, `${opName} on model \"${model}\"`)\n\n const isNumericOnly = opName === '_avg' || opName === '_sum'\n const isComparableOnly = opName === '_min' || opName === '_max'\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(fieldConfig)) {\n if (fieldName === '_all' && opName === '_count') {\n fieldSchemas[fieldName] = z.literal(true).optional()\n continue\n }\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in ${opName}`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in ${opName}`)\n if (fieldMeta.isList) throw new ShapeError(`List field \"${fieldName}\" cannot be used in ${opName}`)\n if (isNumericOnly && !NUMERIC_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(\n `Field \"${fieldName}\" (${fieldMeta.type}) cannot be used in ${opName}. Only numeric types (Int, Float, Decimal, BigInt) are supported.`,\n )\n }\n if (isComparableOnly && !COMPARABLE_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(\n `Field \"${fieldName}\" (${fieldMeta.type}) cannot be used in ${opName}. Only comparable types (Int, Float, Decimal, BigInt, String, DateTime) are supported.`,\n )\n }\n fieldSchemas[fieldName] = z.literal(true).optional()\n }\n\n const aggFieldKeys = Object.keys(fieldSchemas)\n return z.object(fieldSchemas).strict()\n .refine(\n (v) => aggFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: `${opName} must specify at least one field` },\n )\n .optional()\n }\n\n function buildCountFieldSchema(\n model: string,\n config: true | Record<string, true>,\n context: string,\n ): z.ZodTypeAny {\n if (config === true) {\n return z.literal(true).optional()\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(config, `${context} on model \"${model}\"`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(config)) {\n if (fieldName !== '_all') {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in ${context}`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in ${context}`)\n }\n fieldSchemas[fieldName] = z.literal(true).optional()\n }\n\n const countFieldKeys = Object.keys(fieldSchemas)\n return z.object(fieldSchemas).strict()\n .refine(\n (v) => countFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: `${context} must specify at least one field` },\n )\n .optional()\n }\n\n function buildCountSelectSchema(\n model: string,\n selectConfig: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n requireConfigTrue(selectConfig, `count select on model \"${model}\"`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n for (const fieldName of Object.keys(selectConfig)) {\n if (fieldName === '_all') {\n fieldSchemas['_all'] = z.literal(true).optional()\n continue\n }\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in count select`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in count select`)\n fieldSchemas[fieldName] = z.literal(true).optional()\n }\n\n const countSelectKeys = Object.keys(fieldSchemas)\n return z.object(fieldSchemas).strict()\n .refine(\n (v) => countSelectKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'count select must specify at least one field' },\n )\n .optional()\n }\n\n return {\n buildOrderBySchema,\n buildTakeSchema,\n buildCursorSchema,\n buildDistinctSchema,\n buildBySchema,\n buildHavingSchema,\n buildAggregateFieldSchema,\n buildCountFieldSchema,\n buildCountSelectSchema,\n }\n}","import { z } from 'zod'\nimport type { TypeMap, EnumMap, UniqueMap, NestedIncludeArgs, NestedSelectArgs, OrderByFieldConfig } from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.js'\nimport { isPlainObject } from '../shared/utils.js'\nimport type { WhereForced, ForcedTree } from './query-builder-forced.js'\nimport { hasWhereForced } from './query-builder-forced.js'\nimport type { WhereBuiltResult } from './query-builder-where.js'\n\nconst KNOWN_NESTED_INCLUDE_KEYS = new Set([\n 'where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip',\n])\nconst KNOWN_NESTED_SELECT_KEYS = new Set([\n 'select', 'include', 'where', 'orderBy', 'cursor', 'take', 'skip',\n])\nconst KNOWN_COUNT_SELECT_ENTRY_KEYS = new Set(['where'])\nconst MAX_PROJECTION_DEPTH = 10\n\nexport interface BuiltIncludeResult {\n schema: z.ZodTypeAny\n forcedTree: Record<string, ForcedTree>\n forcedCountWhere: Record<string, WhereForced>\n}\n\nexport interface BuiltSelectResult {\n schema: z.ZodTypeAny\n forcedTree: Record<string, ForcedTree>\n forcedCountWhere: Record<string, WhereForced>\n}\n\ninterface ProjectionDeps {\n buildWhereSchema(model: string, config: Record<string, unknown>): WhereBuiltResult\n buildOrderBySchema(model: string, config: Record<string, OrderByFieldConfig>): z.ZodTypeAny\n buildCursorSchema(model: string, config: Record<string, true>): z.ZodTypeAny\n buildTakeSchema(config: { max: number; default?: number }): z.ZodTypeAny\n}\n\nfunction validateNestedKeys(\n keys: Iterable<string>,\n allowed: Set<string>,\n context: string,\n): void {\n for (const key of keys) {\n if (!allowed.has(key)) {\n throw new ShapeError(\n `Unknown key \"${key}\" in ${context}. Allowed: ${[...allowed].join(', ')}`,\n )\n }\n }\n}\n\nexport function createProjectionBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n deps: ProjectionDeps,\n) {\n function buildIncludeCountSchema(\n model: string,\n config: true | Record<string, unknown>,\n ): { schema: z.ZodTypeAny; forcedCountWhere: Record<string, WhereForced> } {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n if (config === true) {\n return { schema: z.literal(true).optional(), forcedCountWhere: {} }\n }\n\n if (!isPlainObject(config) || !('select' in config)) {\n throw new ShapeError(\n `Invalid _count config on model \"${model}\". Expected true or { select: { ... } }`,\n )\n }\n\n for (const key of Object.keys(config)) {\n if (key !== 'select') {\n throw new ShapeError(\n `Unknown key \"${key}\" in _count config on model \"${model}\". Only \"select\" is allowed.`,\n )\n }\n }\n\n if (!isPlainObject(config.select)) {\n throw new ShapeError(\n `Invalid _count.select on model \"${model}\". Expected a plain object with relation field keys.`,\n )\n }\n\n const selectObj = config.select as Record<string, true | Record<string, unknown>>\n\n if (Object.keys(selectObj).length === 0) {\n throw new ShapeError(\n `Empty _count.select on model \"${model}\". Define at least one relation field.`,\n )\n }\n\n const countSelectFields: Record<string, z.ZodTypeAny> = {}\n const forcedCountWhere: Record<string, WhereForced> = {}\n\n for (const [fieldName, fieldConfig] of Object.entries(selectObj)) {\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\" in _count.select`)\n if (!fieldMeta.isRelation) throw new ShapeError(`Field \"${fieldName}\" is not a relation on model \"${model}\" in _count.select`)\n if (!fieldMeta.isList) throw new ShapeError(`Field \"${fieldName}\" is a to-one relation on model \"${model}\" in _count.select. Only to-many relations support _count.`)\n\n if (fieldConfig === true) {\n countSelectFields[fieldName] = z.literal(true).optional()\n } else if (isPlainObject(fieldConfig)) {\n if (Object.keys(fieldConfig).length === 0) {\n throw new ShapeError(\n `Empty config for _count.select.${fieldName} on model \"${model}\". Use true or { where: { ... } }.`,\n )\n }\n validateNestedKeys(\n Object.keys(fieldConfig),\n KNOWN_COUNT_SELECT_ENTRY_KEYS,\n `_count.select.${fieldName} on model \"${model}\"`,\n )\n if (fieldConfig.where) {\n const relatedType = fieldMeta.type\n const { schema: whereSchema, forced } = deps.buildWhereSchema(\n relatedType,\n fieldConfig.where as Record<string, unknown>,\n )\n const nestedSchemas: Record<string, z.ZodTypeAny> = {}\n if (whereSchema) nestedSchemas['where'] = whereSchema\n const nestedObj = z.object(nestedSchemas).strict()\n countSelectFields[fieldName] = z.union([z.literal(true), nestedObj]).optional()\n\n if (hasWhereForced(forced)) {\n forcedCountWhere[fieldName] = forced\n }\n } else {\n countSelectFields[fieldName] = z.literal(true).optional()\n }\n } else {\n throw new ShapeError(\n `Invalid config for _count.select.${fieldName} on model \"${model}\". Expected true or { where: { ... } }`,\n )\n }\n }\n\n const countSelectKeys = Object.keys(countSelectFields)\n const selectSchema = z.object(countSelectFields).strict()\n .refine(\n (v) => countSelectKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: '_count.select must specify at least one field' },\n )\n return {\n schema: z.object({ select: selectSchema }).strict().optional(),\n forcedCountWhere,\n }\n }\n\n function buildIncludeSchema(\n model: string,\n includeConfig: Record<string, true | NestedIncludeArgs>,\n depth?: number,\n ): BuiltIncludeResult {\n const currentDepth = depth ?? 0\n if (currentDepth > MAX_PROJECTION_DEPTH) {\n throw new ShapeError(\n `Include schema for model \"${model}\" exceeds maximum nesting depth (${MAX_PROJECTION_DEPTH}). Check for circular relation references in the shape.`,\n )\n }\n\n if (Object.keys(includeConfig).length === 0) {\n throw new ShapeError(\n `Empty include config on model \"${model}\". Define at least one relation.`,\n )\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n const forcedTree: Record<string, ForcedTree> = {}\n let topLevelForcedCountWhere: Record<string, WhereForced> = {}\n\n for (const [relName, config] of Object.entries(includeConfig)) {\n if (relName === '_count') {\n const countResult = buildIncludeCountSchema(model, config as true | Record<string, unknown>)\n fieldSchemas['_count'] = countResult.schema\n topLevelForcedCountWhere = countResult.forcedCountWhere\n continue\n }\n\n const fieldMeta = modelFields[relName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${relName}\" on model \"${model}\"`)\n if (!fieldMeta.isRelation) throw new ShapeError(`Field \"${relName}\" is not a relation on model \"${model}\"`)\n\n if (config === true) {\n fieldSchemas[relName] = z.literal(true).optional()\n } else {\n validateNestedKeys(\n Object.keys(config),\n KNOWN_NESTED_INCLUDE_KEYS,\n `nested include for \"${relName}\" on model \"${model}\"`,\n )\n\n if (config.select && config.include) {\n throw new ShapeError(`Nested include for \"${relName}\" cannot define both \"select\" and \"include\".`)\n }\n\n if (!fieldMeta.isList) {\n if (config.where || config.orderBy || config.cursor || config.take || config.skip) {\n throw new ShapeError(\n `Relation \"${relName}\" on model \"${model}\" is to-one. Only \"include\" and \"select\" are supported for to-one nested reads, not where/orderBy/cursor/take/skip.`,\n )\n }\n }\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {}\n const relForced: ForcedTree = {}\n\n if (config.where) {\n const { schema: whereSchema, forced } = deps.buildWhereSchema(\n fieldMeta.type,\n config.where as Record<string, unknown>,\n )\n if (whereSchema) nestedSchemas['where'] = whereSchema\n if (hasWhereForced(forced)) relForced.where = forced\n }\n if (config.include) {\n const nested = buildIncludeSchema(fieldMeta.type, config.include, currentDepth + 1)\n nestedSchemas['include'] = nested.schema\n if (Object.keys(nested.forcedTree).length > 0) relForced.include = nested.forcedTree\n if (Object.keys(nested.forcedCountWhere).length > 0) {\n relForced._countWhere = nested.forcedCountWhere\n relForced._countWherePlacement = 'include'\n }\n }\n if (config.select) {\n const nested = buildSelectSchema(fieldMeta.type, config.select, currentDepth + 1)\n nestedSchemas['select'] = nested.schema\n if (Object.keys(nested.forcedTree).length > 0) relForced.select = nested.forcedTree\n if (Object.keys(nested.forcedCountWhere).length > 0) {\n relForced._countWhere = nested.forcedCountWhere\n relForced._countWherePlacement = 'select'\n }\n }\n if (config.orderBy) {\n nestedSchemas['orderBy'] = deps.buildOrderBySchema(fieldMeta.type, config.orderBy)\n }\n if (config.cursor) {\n nestedSchemas['cursor'] = deps.buildCursorSchema(fieldMeta.type, config.cursor)\n }\n if (config.take) {\n nestedSchemas['take'] = deps.buildTakeSchema(config.take)\n }\n if (config.skip) {\n nestedSchemas['skip'] = z.number().int().min(0).optional()\n }\n\n const nestedObj = z.object(nestedSchemas).strict()\n fieldSchemas[relName] = z.union([z.literal(true), nestedObj]).optional()\n\n if (Object.keys(relForced).length > 0) forcedTree[relName] = relForced\n }\n }\n\n const includeFieldKeys = Object.keys(fieldSchemas)\n const baseSchema = z.object(fieldSchemas).strict()\n const schema = includeFieldKeys.length > 0\n ? baseSchema.refine(\n (v) => includeFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'include must specify at least one field' },\n ).optional()\n : baseSchema.optional()\n\n return {\n schema,\n forcedTree,\n forcedCountWhere: topLevelForcedCountWhere,\n }\n }\n\n function buildSelectSchema(\n model: string,\n selectConfig: Record<string, true | NestedSelectArgs>,\n depth?: number,\n ): BuiltSelectResult {\n const currentDepth = depth ?? 0\n if (currentDepth > MAX_PROJECTION_DEPTH) {\n throw new ShapeError(\n `Select schema for model \"${model}\" exceeds maximum nesting depth (${MAX_PROJECTION_DEPTH}). Check for circular relation references in the shape.`,\n )\n }\n\n if (Object.keys(selectConfig).length === 0) {\n throw new ShapeError(\n `Empty select config on model \"${model}\". Define at least one field.`,\n )\n }\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {}\n const forcedTree: Record<string, ForcedTree> = {}\n let topLevelForcedCountWhere: Record<string, WhereForced> = {}\n\n for (const [fieldName, config] of Object.entries(selectConfig)) {\n if (fieldName === '_count') {\n const countResult = buildIncludeCountSchema(model, config as true | Record<string, unknown>)\n fieldSchemas['_count'] = countResult.schema\n topLevelForcedCountWhere = countResult.forcedCountWhere\n continue\n }\n\n const fieldMeta = modelFields[fieldName]\n if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`)\n\n if (config === true) {\n fieldSchemas[fieldName] = z.literal(true).optional()\n } else {\n if (!fieldMeta.isRelation) {\n throw new ShapeError(`Nested select args only valid for relations, not scalar \"${fieldName}\" on model \"${model}\"`)\n }\n\n validateNestedKeys(\n Object.keys(config),\n KNOWN_NESTED_SELECT_KEYS,\n `nested select for \"${fieldName}\" on model \"${model}\"`,\n )\n\n if (config.select && config.include) {\n throw new ShapeError(`Nested select for \"${fieldName}\" cannot define both \"select\" and \"include\".`)\n }\n\n if (!fieldMeta.isList) {\n if (config.where || config.orderBy || config.cursor || config.take || config.skip) {\n throw new ShapeError(\n `Relation \"${fieldName}\" on model \"${model}\" is to-one. Only \"select\" and \"include\" are supported for to-one nested reads, not where/orderBy/cursor/take/skip.`,\n )\n }\n }\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {}\n const relForced: ForcedTree = {}\n\n if (config.select) {\n const nested = buildSelectSchema(fieldMeta.type, config.select, currentDepth + 1)\n nestedSchemas['select'] = nested.schema\n if (Object.keys(nested.forcedTree).length > 0) relForced.select = nested.forcedTree\n if (Object.keys(nested.forcedCountWhere).length > 0) {\n relForced._countWhere = nested.forcedCountWhere\n relForced._countWherePlacement = 'select'\n }\n }\n if (config.include) {\n const nested = buildIncludeSchema(fieldMeta.type, config.include, currentDepth + 1)\n nestedSchemas['include'] = nested.schema\n if (Object.keys(nested.forcedTree).length > 0) relForced.include = nested.forcedTree\n if (Object.keys(nested.forcedCountWhere).length > 0) {\n relForced._countWhere = nested.forcedCountWhere\n relForced._countWherePlacement = 'include'\n }\n }\n if (config.where) {\n const { schema: whereSchema, forced } = deps.buildWhereSchema(\n fieldMeta.type,\n config.where as Record<string, unknown>,\n )\n if (whereSchema) nestedSchemas['where'] = whereSchema\n if (hasWhereForced(forced)) relForced.where = forced\n }\n if (config.orderBy) {\n nestedSchemas['orderBy'] = deps.buildOrderBySchema(fieldMeta.type, config.orderBy)\n }\n if (config.cursor) {\n nestedSchemas['cursor'] = deps.buildCursorSchema(fieldMeta.type, config.cursor)\n }\n if (config.take) {\n nestedSchemas['take'] = deps.buildTakeSchema(config.take)\n }\n if (config.skip) {\n nestedSchemas['skip'] = z.number().int().min(0).optional()\n }\n\n const nestedObj = z.object(nestedSchemas).strict()\n fieldSchemas[fieldName] = z.union([z.literal(true), nestedObj]).optional()\n\n if (Object.keys(relForced).length > 0) forcedTree[fieldName] = relForced\n }\n }\n\n const selectFieldKeys = Object.keys(fieldSchemas)\n const baseSchema = z.object(fieldSchemas).strict()\n const schema = selectFieldKeys.length > 0\n ? baseSchema.refine(\n (v) => selectFieldKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'select must specify at least one field' },\n ).optional()\n : baseSchema.optional()\n\n return {\n schema,\n forcedTree,\n forcedCountWhere: topLevelForcedCountWhere,\n }\n }\n\n return { buildIncludeSchema, buildSelectSchema, buildIncludeCountSchema }\n}","import type { ScopeMap, GuardGeneratedConfig, GuardLogger } from '../shared/types.js'\nimport { PolicyError, ShapeError } from '../shared/errors.js'\n\nconst READ_OPS = new Set([\n 'findMany', 'findFirst',\n 'findFirstOrThrow',\n 'count',\n])\n\nconst AGGREGATE_OPS = new Set([\n 'aggregate', 'groupBy',\n])\n\nconst FIND_UNIQUE_OPS = new Set([\n 'findUnique', 'findUniqueOrThrow',\n])\n\nconst CREATE_OPS = new Set([\n 'create', 'createMany', 'createManyAndReturn',\n])\n\nconst UNIQUE_MUTATION_OPS = new Set([\n 'update', 'delete',\n])\n\nconst MULTI_MUTATION_OPS = new Set([\n 'updateMany', 'updateManyAndReturn', 'deleteMany',\n])\n\nfunction buildAndConditions(\n existingWhere: Record<string, unknown> | undefined,\n conditions: Record<string, unknown>[],\n): Record<string, unknown> {\n if (existingWhere) return { AND: [existingWhere, ...conditions] }\n if (conditions.length === 1) return conditions[0]\n return { AND: conditions }\n}\n\nfunction buildScopedUniqueWhere(\n existingWhere: Record<string, unknown> | undefined,\n conditions: Record<string, unknown>[],\n): Record<string, unknown> {\n if (!existingWhere) {\n return conditions.length === 1 ? conditions[0] : { AND: conditions }\n }\n const { AND: existingAnd, ...topLevel } = existingWhere\n const allConditions: unknown[] = []\n if (existingAnd !== undefined) {\n if (Array.isArray(existingAnd)) {\n allConditions.push(...existingAnd)\n } else {\n allConditions.push(existingAnd)\n }\n }\n allConditions.push(...conditions)\n return { ...topLevel, AND: allConditions }\n}\n\nfunction isComparableScopeValue(v: unknown): v is string | number | bigint {\n const t = typeof v\n return t === 'string' || t === 'number' || t === 'bigint'\n}\n\nfunction looseEqual(a: unknown, b: unknown, log?: GuardLogger, fk?: string): boolean {\n if (a === b) return true\n if (!isComparableScopeValue(a) || !isComparableScopeValue(b)) return false\n const eq = String(a) === String(b)\n if (eq && log && fk) {\n log.warn(\n `prisma-guard: Scope value for \"${fk}\" matched via type coercion (${typeof a} ${String(a)} vs ${typeof b} ${String(b)}). Consider normalizing types in the context function.`,\n )\n }\n return eq\n}\n\nfunction buildFkSelect(fks: string[]): Record<string, true> {\n const select: Record<string, true> = {}\n for (const fk of fks) select[fk] = true\n return select\n}\n\nfunction pickMissingFksFromResult(\n result: Record<string, unknown>,\n fks: string[],\n): string[] {\n const missing: string[] = []\n for (const fk of fks) {\n if (!(fk in result)) missing.push(fk)\n }\n return missing\n}\n\nfunction validateScopeValue(root: string, value: unknown): void {\n if (typeof value === 'string' && value.length === 0) {\n throw new PolicyError(\n `Empty string scope value for root \"${root}\". This is almost certainly a bug in the context function.`,\n )\n }\n if (typeof value === 'number' && !Number.isFinite(value)) {\n throw new PolicyError(\n `Invalid numeric scope value for root \"${root}\": ${value}. This is almost certainly a bug in the context function.`,\n )\n }\n}\n\nfunction enforceDataScope(\n data: Record<string, unknown>,\n scopes: readonly { readonly fk: string; readonly root: string; readonly relationName: string }[],\n overrides: Record<string, unknown>,\n log: GuardLogger,\n model: string,\n operation: string,\n onScopeRelationWrite: 'error' | 'warn' | 'strip',\n mode: 'create' | 'mutate',\n): void {\n for (const scope of scopes) {\n if (scope.fk in data) {\n log.warn(\n `prisma-guard: Scope FK \"${scope.fk}\" in ${operation} data for model \"${model}\" was overridden by scope context.`,\n )\n }\n if (scope.relationName in data) {\n if (onScopeRelationWrite === 'error') {\n throw new ShapeError(\n `Scope relation \"${scope.relationName}\" cannot be set directly in ${operation} data for model \"${model}\". The scope extension manages this relation automatically.`,\n )\n }\n if (onScopeRelationWrite === 'warn') {\n log.warn(\n `prisma-guard: Scope relation \"${scope.relationName}\" in ${operation} data for model \"${model}\" was removed by scope context.`,\n )\n }\n delete data[scope.relationName]\n }\n }\n if (mode === 'create') {\n Object.assign(data, overrides)\n } else {\n for (const scope of scopes) {\n delete data[scope.fk]\n }\n }\n}\n\nconst VALID_FIND_UNIQUE_MODES = new Set(['verify', 'reject'])\nconst VALID_ON_SCOPE_RELATION_WRITES = new Set(['error', 'warn', 'strip'])\n\nexport function createScopeExtension<TRoots extends string>(\n scopeMap: ScopeMap,\n contextFn: () => Partial<Record<TRoots, string | number | bigint>>,\n guardConfig: GuardGeneratedConfig,\n logger?: GuardLogger,\n) {\n const log: GuardLogger = logger ?? { warn: (msg) => console.warn(msg) }\n const findUniqueMode = guardConfig.findUniqueMode ?? 'reject'\n const onScopeRelationWrite = guardConfig.onScopeRelationWrite ?? 'error'\n\n if (!VALID_FIND_UNIQUE_MODES.has(findUniqueMode)) {\n throw new ShapeError(\n `prisma-guard: Invalid findUniqueMode \"${findUniqueMode}\". Allowed: ${[...VALID_FIND_UNIQUE_MODES].join(', ')}`,\n )\n }\n\n if (!VALID_ON_SCOPE_RELATION_WRITES.has(onScopeRelationWrite)) {\n throw new ShapeError(\n `prisma-guard: Invalid onScopeRelationWrite \"${onScopeRelationWrite}\". Allowed: ${[...VALID_ON_SCOPE_RELATION_WRITES].join(', ')}`,\n )\n }\n\n return {\n name: 'prisma-guard-scope',\n query: {\n $allOperations({ model, operation, args, query }: any) {\n if (!model || !scopeMap[model]) return query(args)\n\n const ctx = contextFn() as Partial<Record<string, string | number | bigint>>\n const scopes = scopeMap[model]\n\n const presentScopes = scopes.filter(s => ctx[s.root] != null)\n for (const s of presentScopes) {\n validateScopeValue(s.root, ctx[s.root])\n }\n\n const presentConditions = presentScopes.map(s => ({ [s.fk]: ctx[s.root] }))\n\n const missingRoots = scopes\n .filter(s => ctx[s.root] == null)\n .map(s => s.root)\n\n const isMutation = CREATE_OPS.has(operation) ||\n UNIQUE_MUTATION_OPS.has(operation) ||\n MULTI_MUTATION_OPS.has(operation) ||\n operation === 'upsert'\n\n if (missingRoots.length > 0) {\n if (isMutation || guardConfig.onMissingScopeContext === 'error') {\n throw new PolicyError(\n `Missing scope context for model \"${model}\": roots ${missingRoots.map(r => `\"${r}\"`).join(', ')} not provided. All scope roots must be present.`,\n )\n }\n if (guardConfig.onMissingScopeContext === 'warn') {\n log.warn(\n `prisma-guard: Missing scope context for model \"${model}\": roots ${missingRoots.map(r => `\"${r}\"`).join(', ')} not provided. Read proceeding with partial scope.`,\n )\n }\n if (presentConditions.length === 0) {\n return query(args)\n }\n }\n\n const conditions = presentConditions\n const overrides = Object.fromEntries(\n presentScopes.map(s => [s.fk, ctx[s.root]]),\n )\n\n const nextArgs = { ...args }\n\n if (operation === 'upsert') {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions)\n if (args.create !== undefined && args.create !== null) {\n if (typeof args.create !== 'object' || Array.isArray(args.create)) {\n throw new ShapeError(`upsert expects create to be an object`)\n }\n nextArgs.create = { ...args.create }\n enforceDataScope(nextArgs.create, scopes, overrides, log, model, operation, onScopeRelationWrite, 'create')\n }\n if (args.update !== undefined && args.update !== null) {\n if (typeof args.update !== 'object' || Array.isArray(args.update)) {\n throw new ShapeError(`upsert expects update to be an object`)\n }\n nextArgs.update = { ...args.update }\n enforceDataScope(nextArgs.update, scopes, overrides, log, model, operation, onScopeRelationWrite, 'mutate')\n }\n return query(nextArgs)\n }\n\n if (FIND_UNIQUE_OPS.has(operation)) {\n if (findUniqueMode === 'reject') {\n throw new PolicyError(\n `Scoped model \"${model}\" does not allow ${operation} via scope extension (findUniqueMode is \"reject\"). Use findFirst with explicit where conditions instead.`,\n )\n }\n return handleFindUnique(args, query, conditions, scopes, operation, log)\n }\n\n if (READ_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n return query(nextArgs)\n }\n\n if (AGGREGATE_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n if (operation === 'groupBy' && !nextArgs.by) {\n throw new ShapeError(\n `prisma-guard: groupBy on scoped model \"${model}\" requires \"by\" argument.`,\n )\n }\n return query(nextArgs)\n }\n\n if (CREATE_OPS.has(operation)) {\n if (args.data === undefined || args.data === null) {\n throw new ShapeError(`${operation} expects data`)\n }\n if (operation === 'createMany' || operation === 'createManyAndReturn') {\n if (!Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an array`)\n }\n if (args.data.length === 0) {\n throw new ShapeError(`${operation} received empty data array`)\n }\n nextArgs.data = args.data.map((d: any) => {\n const item = { ...d }\n enforceDataScope(item, scopes, overrides, log, model, operation, onScopeRelationWrite, 'create')\n return item\n })\n } else {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'create')\n }\n return query(nextArgs)\n }\n\n if (UNIQUE_MUTATION_OPS.has(operation)) {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions)\n if (args.data !== undefined && args.data !== null) {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'mutate')\n }\n return query(nextArgs)\n }\n\n if (MULTI_MUTATION_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n if (args.data !== undefined && args.data !== null) {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'mutate')\n }\n return query(nextArgs)\n }\n\n throw new ShapeError(\n `Unknown operation \"${operation}\" on scoped model \"${model}\". Update prisma-guard to handle this operation.`,\n )\n },\n },\n }\n}\n\nasync function handleFindUnique(\n args: any,\n query: (args: any) => Promise<any>,\n conditions: Record<string, unknown>[],\n scopes: readonly { readonly fk: string; readonly root: string; readonly relationName: string }[],\n operation: string,\n log: GuardLogger,\n): Promise<any> {\n const nextArgs = { ...args }\n const injectedFks: string[] = []\n const originalSelect = args?.select\n const fks = scopes.map(s => s.fk)\n\n if (originalSelect) {\n nextArgs.select = { ...originalSelect }\n for (const fk of fks) {\n if (!originalSelect[fk]) {\n nextArgs.select[fk] = true\n injectedFks.push(fk)\n }\n }\n }\n\n const result = await query(nextArgs)\n if (result === null) return result\n\n if (typeof result !== 'object' || result === null) {\n throw new ShapeError('findUnique result must be an object or null')\n }\n\n const resultObj = result as Record<string, unknown>\n\n let verifyObj: Record<string, unknown> = resultObj\n const missingFks = pickMissingFksFromResult(resultObj, fks)\n\n if (missingFks.length > 0) {\n const where = args?.where\n if (!where || typeof where !== 'object' || Array.isArray(where)) {\n throw new PolicyError(\n `prisma-guard: Cannot verify scope — missing FK fields (${missingFks.join(', ')}) and findUnique args.where is not a valid object.`,\n )\n }\n\n let verifyResult: any\n try {\n verifyResult = await query({ where, select: buildFkSelect(fks) })\n } catch (err: any) {\n throw new PolicyError(\n `prisma-guard: Scope verification query failed for findUnique: ${err?.message ?? String(err)}`,\n )\n }\n\n if (verifyResult === null) {\n throw new PolicyError('prisma-guard: Scope verification query returned null for an existing findUnique result')\n }\n if (typeof verifyResult !== 'object' || verifyResult === null) {\n throw new PolicyError('prisma-guard: Scope verification result must be an object')\n }\n\n verifyObj = verifyResult as Record<string, unknown>\n }\n\n for (const condition of conditions) {\n const [fk, value] = Object.entries(condition)[0]\n if (!(fk in verifyObj)) {\n throw new PolicyError(\n `prisma-guard: Cannot verify scope on \"${fk}\" — field not present in verification result. Ensure FK fields are selectable.`,\n )\n }\n if (!looseEqual(verifyObj[fk], value, log, fk)) {\n if (operation === 'findUniqueOrThrow') {\n throw new PolicyError('Record not accessible in current scope')\n }\n return null\n }\n }\n\n if (injectedFks.length > 0) {\n const cleaned: Record<string, unknown> = { ...resultObj }\n for (const fk of injectedFks) {\n delete cleaned[fk]\n }\n return cleaned\n }\n\n return result\n}","import { z } from \"zod\";\nimport type {\n TypeMap,\n EnumMap,\n ZodChains,\n ZodDefaults,\n UniqueMap,\n ScopeMap,\n GuardShape,\n GuardInput,\n QueryMethod,\n GuardedModel,\n GuardGeneratedConfig,\n NestedIncludeArgs,\n NestedSelectArgs,\n} from \"../shared/types.js\";\nimport { ShapeError, formatZodError } from \"../shared/errors.js\";\nimport {\n GUARD_SHAPE_KEYS,\n toDelegateKey,\n isForcedValue,\n} from \"../shared/constants.js\";\nimport { createSchemaBuilder } from \"./schema-builder.js\";\nimport { createQueryBuilder } from \"./query-builder.js\";\nimport {\n applyBuiltShape,\n applyForcedTree,\n applyForcedCountWhere,\n validateUniqueEquality,\n validateResolvedUniqueWhere,\n mergeWhereForced,\n mergeUniqueWhereForced,\n hasWhereForced,\n} from \"./query-builder-forced.js\";\nimport type {\n BuiltShape,\n ForcedTree,\n WhereForced,\n} from \"./query-builder-forced.js\";\nimport type { WhereBuiltResult } from \"./query-builder-where.js\";\nimport {\n buildDataSchema,\n validateCreateCompleteness,\n validateAndMergeData,\n hasDataRefines,\n validateMutationBodyKeys,\n validateMutationShapeKeys,\n ALLOWED_BODY_KEYS_CREATE,\n ALLOWED_BODY_KEYS_CREATE_PROJECTION,\n ALLOWED_BODY_KEYS_CREATE_MANY,\n ALLOWED_BODY_KEYS_CREATE_MANY_PROJECTION,\n ALLOWED_BODY_KEYS_UPDATE,\n ALLOWED_BODY_KEYS_UPDATE_PROJECTION,\n ALLOWED_BODY_KEYS_DELETE,\n ALLOWED_BODY_KEYS_DELETE_PROJECTION,\n ALLOWED_BODY_KEYS_UPSERT,\n VALID_SHAPE_KEYS_CREATE,\n VALID_SHAPE_KEYS_CREATE_PROJECTION,\n VALID_SHAPE_KEYS_UPDATE,\n VALID_SHAPE_KEYS_UPDATE_PROJECTION,\n VALID_SHAPE_KEYS_DELETE,\n VALID_SHAPE_KEYS_DELETE_PROJECTION,\n VALID_SHAPE_KEYS_UPSERT,\n} from \"./model-guard-data.js\";\nimport type { BuiltDataSchema } from \"./model-guard-data.js\";\nimport { resolveShape } from \"./model-guard-resolve.js\";\nimport { validateContext } from \"./policy.js\";\nimport { isPlainObject } from \"../shared/utils.js\";\nimport { createScalarBase } from \"../shared/scalar-base.js\";\n\nconst UNIQUE_MUTATION_METHODS = new Set([\"update\", \"delete\", \"upsert\"]);\nconst UNIQUE_READ_METHODS = new Set<string>([\n \"findUnique\",\n \"findUniqueOrThrow\",\n]);\n\nconst BULK_MUTATION_METHODS = new Set([\n \"updateMany\",\n \"updateManyAndReturn\",\n \"deleteMany\",\n]);\n\nconst PROJECTION_MUTATION_METHODS = new Set([\n \"create\",\n \"update\",\n \"upsert\",\n \"delete\",\n \"createManyAndReturn\",\n \"updateManyAndReturn\",\n]);\n\nconst BATCH_CREATE_METHODS = new Set([\"createMany\", \"createManyAndReturn\"]);\n\ninterface BuiltProjection {\n zodSchema: z.ZodObject<any>;\n forcedIncludeTree: Record<string, ForcedTree>;\n forcedSelectTree: Record<string, ForcedTree>;\n forcedIncludeCountWhere: Record<string, WhereForced>;\n forcedSelectCountWhere: Record<string, WhereForced>;\n}\n\nfunction normalizeUniqueWhere(where: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(where)) {\n if (\n key !== 'AND' &&\n key !== 'OR' &&\n key !== 'NOT' &&\n isPlainObject(value) &&\n 'equals' in value &&\n Object.keys(value).length === 1\n ) {\n result[key] = value.equals;\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction buildDefaultSelectInput(\n config: Record<string, true | NestedSelectArgs>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(config)) {\n if (key === \"_count\") {\n result[key] = buildDefaultCountInput(\n value as true | Record<string, unknown>,\n );\n continue;\n }\n if (value === true) {\n result[key] = true;\n } else {\n const nested: Record<string, unknown> = {};\n if (value.select) nested.select = buildDefaultSelectInput(value.select);\n if (value.include)\n nested.include = buildDefaultIncludeInput(value.include);\n result[key] = Object.keys(nested).length > 0 ? nested : true;\n }\n }\n return result;\n}\n\nfunction buildDefaultIncludeInput(\n config: Record<string, true | NestedIncludeArgs>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(config)) {\n if (key === \"_count\") {\n result[key] = buildDefaultCountInput(\n value as true | Record<string, unknown>,\n );\n continue;\n }\n if (value === true) {\n result[key] = true;\n } else {\n const nested: Record<string, unknown> = {};\n if (value.include)\n nested.include = buildDefaultIncludeInput(value.include);\n if (value.select) nested.select = buildDefaultSelectInput(value.select);\n result[key] = Object.keys(nested).length > 0 ? nested : true;\n }\n }\n return result;\n}\n\nfunction buildDefaultCountInput(\n config: true | Record<string, unknown>,\n): unknown {\n if (config === true) return true;\n if (!isPlainObject(config) || !config.select || !isPlainObject(config.select))\n return true;\n const selectObj = config.select as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(selectObj)) {\n result[key] = true;\n }\n return { select: result };\n}\n\nfunction buildDefaultProjectionBody(\n shape: GuardShape,\n): Record<string, unknown> {\n if (shape.select) {\n return { select: buildDefaultSelectInput(shape.select) };\n }\n if (shape.include) {\n return { include: buildDefaultIncludeInput(shape.include) };\n }\n return {};\n}\n\nfunction applyClientProjectionOverrides(\n shapeDefault: Record<string, unknown>,\n clientProjection: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...shapeDefault };\n\n for (const [key, clientValue] of Object.entries(clientProjection)) {\n const defaultValue = result[key];\n\n if (defaultValue === undefined) {\n result[key] = clientValue;\n continue;\n }\n\n if (clientValue === true) {\n result[key] = true;\n continue;\n }\n\n if (isPlainObject(clientValue)) {\n if (!isPlainObject(defaultValue)) {\n result[key] = clientValue;\n continue;\n }\n\n const merged = { ...(defaultValue as Record<string, unknown>) };\n const clientObj = clientValue as Record<string, unknown>;\n\n for (const [argKey, argValue] of Object.entries(clientObj)) {\n const defaultArgValue = merged[argKey];\n\n if (\n (argKey === \"select\" || argKey === \"include\") &&\n isPlainObject(argValue) &&\n isPlainObject(defaultArgValue)\n ) {\n merged[argKey] = applyClientProjectionOverrides(\n defaultArgValue as Record<string, unknown>,\n argValue as Record<string, unknown>,\n );\n } else {\n merged[argKey] = argValue;\n }\n }\n\n result[key] = merged;\n }\n }\n\n return result;\n}\n\nfunction hasClientControlledValues(obj: Record<string, unknown>): boolean {\n for (const value of Object.values(obj)) {\n if (isForcedValue(value)) continue;\n if (value === true) return true;\n if (isPlainObject(value) && hasClientControlledValues(value)) return true;\n }\n return false;\n}\n\nfunction checkIncludeForClientArgs(\n config: Record<string, true | NestedIncludeArgs>,\n): boolean {\n for (const [key, value] of Object.entries(config)) {\n if (key === \"_count\") {\n if (\n value !== true &&\n isPlainObject(value) &&\n isPlainObject((value as Record<string, unknown>).select)\n ) {\n const selectObj = (value as Record<string, unknown>).select as Record<\n string,\n unknown\n >;\n for (const entryVal of Object.values(selectObj)) {\n if (\n isPlainObject(entryVal) &&\n (entryVal as Record<string, unknown>).where\n ) {\n const w = (entryVal as Record<string, unknown>).where;\n if (isPlainObject(w) && hasClientControlledValues(w)) return true;\n }\n }\n }\n continue;\n }\n if (value === true) continue;\n if (value.orderBy || value.cursor || value.take || value.skip) return true;\n if (\n value.where &&\n isPlainObject(value.where) &&\n hasClientControlledValues(value.where as Record<string, unknown>)\n )\n return true;\n if (value.include && checkIncludeForClientArgs(value.include)) return true;\n if (value.select && checkSelectForClientArgs(value.select)) return true;\n }\n return false;\n}\n\nfunction checkSelectForClientArgs(\n config: Record<string, true | NestedSelectArgs>,\n): boolean {\n for (const [key, value] of Object.entries(config)) {\n if (key === \"_count\") {\n if (\n value !== true &&\n isPlainObject(value) &&\n isPlainObject((value as Record<string, unknown>).select)\n ) {\n const selectObj = (value as Record<string, unknown>).select as Record<\n string,\n unknown\n >;\n for (const entryVal of Object.values(selectObj)) {\n if (\n isPlainObject(entryVal) &&\n (entryVal as Record<string, unknown>).where\n ) {\n const w = (entryVal as Record<string, unknown>).where;\n if (isPlainObject(w) && hasClientControlledValues(w)) return true;\n }\n }\n }\n continue;\n }\n if (value === true) continue;\n if (value.orderBy || value.cursor || value.take || value.skip) return true;\n if (\n value.where &&\n isPlainObject(value.where) &&\n hasClientControlledValues(value.where as Record<string, unknown>)\n )\n return true;\n if (value.select && checkSelectForClientArgs(value.select)) return true;\n if (value.include && checkIncludeForClientArgs(value.include)) return true;\n }\n return false;\n}\n\nfunction hasNestedClientControlledArgs(shape: GuardShape): boolean {\n if (shape.include) {\n if (checkIncludeForClientArgs(shape.include)) return true;\n }\n if (shape.select) {\n if (checkSelectForClientArgs(shape.select)) return true;\n }\n return false;\n}\n\nexport function createModelGuardExtension(config: {\n typeMap: TypeMap;\n enumMap: EnumMap;\n zodChains: ZodChains;\n zodDefaults: ZodDefaults;\n uniqueMap: UniqueMap;\n scopeMap: ScopeMap;\n guardConfig: GuardGeneratedConfig;\n contextFn: () => Record<string, unknown>;\n wrapZodErrors?: boolean;\n}) {\n const {\n typeMap,\n enumMap,\n zodChains,\n zodDefaults,\n uniqueMap,\n scopeMap,\n guardConfig,\n contextFn,\n } = config;\n const wrapZodErrors = config.wrapZodErrors ?? false;\n const enforceProjection = guardConfig.enforceProjection ?? false;\n const scalarBase = createScalarBase(guardConfig.strictDecimal ?? false);\n const schemaBuilder = createSchemaBuilder(\n typeMap,\n zodChains,\n enumMap,\n scalarBase,\n zodDefaults,\n );\n const queryBuilder = createQueryBuilder(\n typeMap,\n enumMap,\n uniqueMap,\n scalarBase,\n );\n\n const modelScopeFks = new Map<string, Set<string>>();\n for (const [model, entries] of Object.entries(scopeMap)) {\n const fks = new Set<string>();\n for (const entry of entries) fks.add(entry.fk);\n modelScopeFks.set(model, fks);\n }\n\n function maybeValidateUniqueWhere(\n modelName: string,\n shape: GuardShape,\n method: string,\n ): void {\n if (!UNIQUE_MUTATION_METHODS.has(method)) return;\n if (!shape.where) return;\n validateUniqueEquality(modelName, shape.where, method, uniqueMap, typeMap);\n }\n\n function createGuardedMethods(\n modelName: string,\n modelDelegate: Record<string, (args: any) => any>,\n input: GuardInput,\n explicitCaller: string | undefined,\n ) {\n function callDelegate(method: string, args: any): any {\n if (typeof modelDelegate[method] !== \"function\") {\n throw new ShapeError(\n `Method \"${method}\" is not available on this model`,\n );\n }\n return modelDelegate[method](args);\n }\n\n function resolveCaller(): string | undefined {\n if (explicitCaller !== undefined) return explicitCaller;\n const ctx = validateContext(contextFn());\n const c = ctx.caller;\n if (typeof c === \"string\") return c;\n return undefined;\n }\n\n const readShapeCache = new Map<string, BuiltShape>();\n const dataSchemaCache = new Map<string, BuiltDataSchema>();\n const whereBuiltCache = new Map<string, WhereBuiltResult>();\n const projectionCache = new Map<string, BuiltProjection>();\n\n function getReadShape(\n method: QueryMethod,\n queryShape: Record<string, unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): BuiltShape {\n if (!wasDynamic) {\n const cacheKey = `${method}\\0${matchedKey}`;\n const cached = readShapeCache.get(cacheKey);\n if (cached) return cached;\n const built = queryBuilder.buildShapeZodSchema(\n modelName,\n method,\n queryShape as any,\n );\n readShapeCache.set(cacheKey, built);\n return built;\n }\n return queryBuilder.buildShapeZodSchema(\n modelName,\n method,\n queryShape as any,\n );\n }\n\n function getDataSchema(\n mode: \"create\" | \"update\",\n dataConfig: Record<string, true | unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): BuiltDataSchema {\n if (!wasDynamic && !hasDataRefines(dataConfig)) {\n const cacheKey = `${mode}\\0${matchedKey}`;\n const cached = dataSchemaCache.get(cacheKey);\n if (cached) return cached;\n const built = buildDataSchema(\n modelName,\n dataConfig,\n mode,\n typeMap,\n schemaBuilder,\n zodDefaults,\n );\n dataSchemaCache.set(cacheKey, built);\n return built;\n }\n return buildDataSchema(\n modelName,\n dataConfig,\n mode,\n typeMap,\n schemaBuilder,\n zodDefaults,\n );\n }\n\n function getWhereBuilt(\n whereConfig: Record<string, unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): WhereBuiltResult {\n if (!wasDynamic) {\n const cached = whereBuiltCache.get(matchedKey);\n if (cached) return cached;\n const built = queryBuilder.buildWhereSchema(modelName, whereConfig);\n whereBuiltCache.set(matchedKey, built);\n return built;\n }\n return queryBuilder.buildWhereSchema(modelName, whereConfig);\n }\n\n function buildProjectionSchema(shape: GuardShape): BuiltProjection {\n const schemaFields: Record<string, z.ZodTypeAny> = {};\n let forcedIncludeTree: Record<string, ForcedTree> = {};\n let forcedSelectTree: Record<string, ForcedTree> = {};\n let forcedIncludeCountWhere: Record<string, WhereForced> = {};\n let forcedSelectCountWhere: Record<string, WhereForced> = {};\n\n if (shape.include) {\n const result = queryBuilder.buildIncludeSchema(\n modelName,\n shape.include as Record<string, true | NestedIncludeArgs>,\n );\n schemaFields[\"include\"] = result.schema;\n forcedIncludeTree = result.forcedTree;\n forcedIncludeCountWhere = result.forcedCountWhere;\n }\n\n if (shape.select) {\n const result = queryBuilder.buildSelectSchema(\n modelName,\n shape.select as Record<string, true | NestedSelectArgs>,\n );\n schemaFields[\"select\"] = result.schema;\n forcedSelectTree = result.forcedTree;\n forcedSelectCountWhere = result.forcedCountWhere;\n }\n\n return {\n zodSchema: z.object(schemaFields).strict(),\n forcedIncludeTree,\n forcedSelectTree,\n forcedIncludeCountWhere,\n forcedSelectCountWhere,\n };\n }\n\n function getProjection(\n shape: GuardShape,\n matchedKey: string,\n wasDynamic: boolean,\n ): BuiltProjection {\n if (!wasDynamic) {\n const cacheKey = `projection\\0${matchedKey}`;\n const cached = projectionCache.get(cacheKey);\n if (cached) return cached;\n const built = buildProjectionSchema(shape);\n projectionCache.set(cacheKey, built);\n return built;\n }\n return buildProjectionSchema(shape);\n }\n\n function resolveProjection(\n shape: GuardShape,\n parsed: Record<string, unknown>,\n method: string,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n const hasBodyProjection = \"select\" in parsed || \"include\" in parsed;\n const hasShapeProjection = !!shape.select || !!shape.include;\n\n if (hasBodyProjection && !hasShapeProjection) {\n throw new ShapeError(\n `Guard shape does not define \"select\" or \"include\" for ${method} return projection`,\n );\n }\n\n if (\"select\" in parsed && \"include\" in parsed) {\n throw new ShapeError(\n 'Request body cannot define both \"select\" and \"include\"',\n );\n }\n\n if (!hasShapeProjection) return {};\n\n if (!hasBodyProjection && !enforceProjection) return {};\n\n if (!hasBodyProjection && enforceProjection) {\n if (hasNestedClientControlledArgs(shape)) {\n throw new ShapeError(\n `Guard shape defines nested client-controlled projection args (orderBy/take/cursor/skip/where) ` +\n `but the client did not provide select/include in the ${method} body. ` +\n `With enforceProjection enabled, either always provide projection in the body ` +\n `or remove client-controlled nested args from the shape.`,\n );\n }\n }\n\n const projection = getProjection(shape, matchedKey, wasDynamic);\n\n let projectionBody: Record<string, unknown>;\n if (hasBodyProjection) {\n projectionBody = {};\n if (\"select\" in parsed) projectionBody.select = parsed.select;\n if (\"include\" in parsed) projectionBody.include = parsed.include;\n } else {\n projectionBody = buildDefaultProjectionBody(shape);\n }\n\n const validated = projection.zodSchema.parse(projectionBody) as Record<\n string,\n unknown\n >;\n\n if (Object.keys(projection.forcedIncludeTree).length > 0) {\n applyForcedTree(validated, \"include\", projection.forcedIncludeTree);\n }\n if (Object.keys(projection.forcedSelectTree).length > 0) {\n applyForcedTree(validated, \"select\", projection.forcedSelectTree);\n }\n if (Object.keys(projection.forcedIncludeCountWhere).length > 0) {\n const ic = validated.include as Record<string, unknown> | undefined;\n if (ic) applyForcedCountWhere(ic, projection.forcedIncludeCountWhere);\n }\n if (Object.keys(projection.forcedSelectCountWhere).length > 0) {\n const sc = validated.select as Record<string, unknown> | undefined;\n if (sc) applyForcedCountWhere(sc, projection.forcedSelectCountWhere);\n }\n\n return validated;\n }\n\n function buildWhereFromShape(\n shape: GuardShape,\n bodyWhere: unknown,\n preserveUnique: boolean,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n if (!shape.where) {\n if (bodyWhere !== undefined) {\n throw new ShapeError('Guard shape does not allow \"where\"');\n }\n return {};\n }\n\n const built = getWhereBuilt(shape.where, matchedKey, wasDynamic);\n let validatedWhere: Record<string, unknown> | undefined;\n\n if (built.schema) {\n let sanitizedWhere = bodyWhere;\n if (built.forcedOnlyKeys.size > 0 && isPlainObject(bodyWhere)) {\n const w = { ...(bodyWhere as Record<string, unknown>) };\n for (const key of built.forcedOnlyKeys) {\n delete w[key];\n }\n sanitizedWhere = w;\n }\n validatedWhere = built.schema.parse(sanitizedWhere) as\n | Record<string, unknown>\n | undefined;\n } else if (bodyWhere !== undefined) {\n if (\n bodyWhere === null ||\n !isPlainObject(bodyWhere) ||\n Object.keys(bodyWhere).length > 0\n ) {\n let hasOnlyForcedKeys = false;\n if (isPlainObject(bodyWhere) && built.forcedOnlyKeys.size > 0) {\n hasOnlyForcedKeys = Object.keys(bodyWhere).every((k) =>\n built.forcedOnlyKeys.has(k),\n );\n }\n if (!hasOnlyForcedKeys) {\n throw new ShapeError(\n \"Guard shape where contains only forced conditions. Client where input is not accepted.\",\n );\n }\n }\n }\n\n if (hasWhereForced(built.forced)) {\n return preserveUnique\n ? mergeUniqueWhereForced(validatedWhere, built.forced)\n : mergeWhereForced(validatedWhere, built.forced);\n }\n\n return validatedWhere ?? {};\n }\n\n function requireWhere(\n shape: GuardShape,\n bodyWhere: unknown,\n method: string,\n preserveUnique: boolean,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n const where = buildWhereFromShape(\n shape,\n bodyWhere,\n preserveUnique,\n matchedKey,\n wasDynamic,\n );\n if (Object.keys(where).length === 0) {\n throw new ShapeError(`${method} requires a where condition`);\n }\n return where;\n }\n\n function buildEffectiveReadBody(resolved: {\n body: Record<string, unknown>;\n shape: GuardShape;\n }): Record<string, unknown> {\n const hasShapeProjection =\n !!resolved.shape.select || !!resolved.shape.include;\n if (!hasShapeProjection) return resolved.body;\n\n const defaultProjection = buildDefaultProjectionBody(resolved.shape);\n const hasBodyProjection =\n \"select\" in resolved.body || \"include\" in resolved.body;\n\n if (!hasBodyProjection) {\n return { ...resolved.body, ...defaultProjection };\n }\n\n const merged: Record<string, unknown> = { ...resolved.body };\n\n if (\n \"select\" in resolved.body &&\n \"select\" in defaultProjection &&\n isPlainObject(resolved.body.select) &&\n isPlainObject(defaultProjection.select)\n ) {\n merged.select = applyClientProjectionOverrides(\n defaultProjection.select as Record<string, unknown>,\n resolved.body.select as Record<string, unknown>,\n );\n } else if (\n \"include\" in resolved.body &&\n \"include\" in defaultProjection &&\n isPlainObject(resolved.body.include) &&\n isPlainObject(defaultProjection.include)\n ) {\n merged.include = applyClientProjectionOverrides(\n defaultProjection.include as Record<string, unknown>,\n resolved.body.include as Record<string, unknown>,\n );\n }\n\n return merged;\n }\n\n function makeReadMethod(method: QueryMethod) {\n return (body?: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n if (resolved.shape.data) {\n throw new ShapeError(`Guard shape \"data\" is not valid for ${method}`);\n }\n const { data: _, ...queryShape } = resolved.shape;\n const built = getReadShape(\n method,\n queryShape,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n const isUnique = UNIQUE_READ_METHODS.has(method);\n\n const effectiveBody = buildEffectiveReadBody(resolved);\n\n const args = applyBuiltShape(built, effectiveBody, isUnique);\n if (isUnique && args.where) {\n validateResolvedUniqueWhere(\n modelName,\n args.where as Record<string, unknown>,\n method,\n uniqueMap,\n );\n }\n return callDelegate(method, args);\n };\n }\n\n function makeCreateMethod(method: string) {\n const isBatch = BATCH_CREATE_METHODS.has(method);\n const supportsProjection = PROJECTION_MUTATION_METHODS.has(method);\n let allowedBodyKeys: Set<string>;\n if (isBatch && supportsProjection) {\n allowedBodyKeys = ALLOWED_BODY_KEYS_CREATE_MANY_PROJECTION;\n } else if (isBatch) {\n allowedBodyKeys = ALLOWED_BODY_KEYS_CREATE_MANY;\n } else if (supportsProjection) {\n allowedBodyKeys = ALLOWED_BODY_KEYS_CREATE_PROJECTION;\n } else {\n allowedBodyKeys = ALLOWED_BODY_KEYS_CREATE;\n }\n const allowedShapeKeys = supportsProjection\n ? VALID_SHAPE_KEYS_CREATE_PROJECTION\n : VALID_SHAPE_KEYS_CREATE;\n\n return (body: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n if (!resolved.shape.data)\n throw new ShapeError(`Guard shape requires \"data\" for ${method}`);\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n const fks = modelScopeFks.get(modelName) ?? new Set<string>();\n validateCreateCompleteness(\n modelName,\n resolved.shape.data,\n typeMap,\n fks,\n zodDefaults,\n );\n const dataSchema = getDataSchema(\n \"create\",\n resolved.shape.data,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n\n let args: Record<string, unknown>;\n if (method === \"create\") {\n const data = validateAndMergeData(\n resolved.body.data,\n dataSchema,\n method,\n );\n args = { data };\n } else {\n if (!Array.isArray(resolved.body.data))\n throw new ShapeError(`${method} expects data to be an array`);\n if (resolved.body.data.length === 0)\n throw new ShapeError(`${method} received empty data array`);\n const data = resolved.body.data.map((item: unknown) =>\n validateAndMergeData(item, dataSchema, method),\n );\n args = { data };\n }\n\n if (isBatch && resolved.body.skipDuplicates !== undefined) {\n if (typeof resolved.body.skipDuplicates !== \"boolean\") {\n throw new ShapeError(`${method} skipDuplicates must be a boolean`);\n }\n args.skipDuplicates = resolved.body.skipDuplicates;\n }\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(\n resolved.shape,\n resolved.body,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n Object.assign(args, projectionArgs);\n }\n\n return callDelegate(method, args);\n };\n }\n\n function makeUpdateMethod(method: string) {\n const isUniqueWhere = method === \"update\";\n const isBulk = BULK_MUTATION_METHODS.has(method);\n const supportsProjection = PROJECTION_MUTATION_METHODS.has(method);\n const allowedBodyKeys = supportsProjection\n ? ALLOWED_BODY_KEYS_UPDATE_PROJECTION\n : ALLOWED_BODY_KEYS_UPDATE;\n const allowedShapeKeys = supportsProjection\n ? VALID_SHAPE_KEYS_UPDATE_PROJECTION\n : VALID_SHAPE_KEYS_UPDATE;\n\n return (body: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n if (!resolved.shape.data)\n throw new ShapeError(`Guard shape requires \"data\" for ${method}`);\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n if (isBulk && !resolved.shape.where) {\n throw new ShapeError(\n `Guard shape requires \"where\" for ${method} to prevent unconstrained bulk mutations`,\n );\n }\n maybeValidateUniqueWhere(modelName, resolved.shape, method);\n const dataSchema = getDataSchema(\n \"update\",\n resolved.shape.data,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n const data = validateAndMergeData(\n resolved.body.data,\n dataSchema,\n method,\n );\n let where = isUniqueWhere\n ? requireWhere(\n resolved.shape,\n resolved.body.where,\n method,\n true,\n resolved.matchedKey,\n resolved.wasDynamic,\n )\n : buildWhereFromShape(\n resolved.shape,\n resolved.body.where,\n false,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n if (isBulk && Object.keys(where).length === 0) {\n throw new ShapeError(\n `${method} requires at least one where condition`,\n );\n }\n if (isUniqueWhere) {\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap);\n where = normalizeUniqueWhere(where);\n }\n\n const args: Record<string, unknown> = { data, where };\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(\n resolved.shape,\n resolved.body,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n Object.assign(args, projectionArgs);\n }\n\n return callDelegate(method, args);\n };\n }\n\n function makeDeleteMethod(method: string) {\n const isUniqueWhere = method === \"delete\";\n const isBulk = BULK_MUTATION_METHODS.has(method);\n const supportsProjection = PROJECTION_MUTATION_METHODS.has(method);\n const allowedBodyKeys = supportsProjection\n ? ALLOWED_BODY_KEYS_DELETE_PROJECTION\n : ALLOWED_BODY_KEYS_DELETE;\n const allowedShapeKeys = supportsProjection\n ? VALID_SHAPE_KEYS_DELETE_PROJECTION\n : VALID_SHAPE_KEYS_DELETE;\n\n return (body: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n if (resolved.shape.data)\n throw new ShapeError(`Guard shape \"data\" is not valid for ${method}`);\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n if (isBulk && !resolved.shape.where) {\n throw new ShapeError(\n `Guard shape requires \"where\" for ${method} to prevent unconstrained bulk mutations`,\n );\n }\n maybeValidateUniqueWhere(modelName, resolved.shape, method);\n let where = isUniqueWhere\n ? requireWhere(\n resolved.shape,\n resolved.body.where,\n method,\n true,\n resolved.matchedKey,\n resolved.wasDynamic,\n )\n : buildWhereFromShape(\n resolved.shape,\n resolved.body.where,\n false,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n if (isBulk && Object.keys(where).length === 0) {\n throw new ShapeError(\n `${method} requires at least one where condition`,\n );\n }\n if (isUniqueWhere) {\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap);\n where = normalizeUniqueWhere(where);\n }\n\n const args: Record<string, unknown> = { where };\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(\n resolved.shape,\n resolved.body,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n Object.assign(args, projectionArgs);\n }\n\n return callDelegate(method, args);\n };\n }\n\n function makeUpsertMethod() {\n return (body: unknown) => {\n const caller = resolveCaller();\n const resolved = resolveShape(input, body, contextFn, caller);\n\n if (resolved.shape.data) {\n throw new ShapeError(\n 'Guard shape \"data\" is not valid for upsert. Use \"create\" and \"update\" instead.',\n );\n }\n if (!resolved.shape.create) {\n throw new ShapeError('Guard shape requires \"create\" for upsert');\n }\n if (!resolved.shape.update) {\n throw new ShapeError('Guard shape requires \"update\" for upsert');\n }\n if (!resolved.shape.where) {\n throw new ShapeError('Guard shape requires \"where\" for upsert');\n }\n\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n VALID_SHAPE_KEYS_UPSERT,\n \"upsert\",\n );\n validateMutationBodyKeys(\n resolved.body,\n ALLOWED_BODY_KEYS_UPSERT,\n \"upsert\",\n );\n\n maybeValidateUniqueWhere(modelName, resolved.shape, \"upsert\");\n\n const fks = modelScopeFks.get(modelName) ?? new Set<string>();\n validateCreateCompleteness(\n modelName,\n resolved.shape.create,\n typeMap,\n fks,\n zodDefaults,\n );\n\n const createDataSchema = getDataSchema(\n \"create\",\n resolved.shape.create,\n `upsert:create\\0${resolved.matchedKey}`,\n resolved.wasDynamic,\n );\n const createData = validateAndMergeData(\n resolved.body.create,\n createDataSchema,\n \"upsert (create)\",\n );\n\n const updateDataSchema = getDataSchema(\n \"update\",\n resolved.shape.update,\n `upsert:update\\0${resolved.matchedKey}`,\n resolved.wasDynamic,\n );\n const updateData = validateAndMergeData(\n resolved.body.update,\n updateDataSchema,\n \"upsert (update)\",\n );\n\n const where = requireWhere(\n resolved.shape,\n resolved.body.where,\n \"upsert\",\n true,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n validateResolvedUniqueWhere(modelName, where, \"upsert\", uniqueMap);\n\n const args: Record<string, unknown> = {\n where: normalizeUniqueWhere(where),\n create: createData,\n update: updateData,\n };\n\n const projectionArgs = resolveProjection(\n resolved.shape,\n resolved.body,\n \"upsert\",\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n Object.assign(args, projectionArgs);\n\n return callDelegate(\"upsert\", args);\n };\n }\n\n return {\n findMany: makeReadMethod(\"findMany\"),\n findFirst: makeReadMethod(\"findFirst\"),\n findFirstOrThrow: makeReadMethod(\"findFirstOrThrow\"),\n findUnique: makeReadMethod(\"findUnique\"),\n findUniqueOrThrow: makeReadMethod(\"findUniqueOrThrow\"),\n count: makeReadMethod(\"count\"),\n aggregate: makeReadMethod(\"aggregate\"),\n groupBy: makeReadMethod(\"groupBy\"),\n create: makeCreateMethod(\"create\"),\n createMany: makeCreateMethod(\"createMany\"),\n createManyAndReturn: makeCreateMethod(\"createManyAndReturn\"),\n update: makeUpdateMethod(\"update\"),\n updateMany: makeUpdateMethod(\"updateMany\"),\n updateManyAndReturn: makeUpdateMethod(\"updateManyAndReturn\"),\n upsert: makeUpsertMethod(),\n delete: makeDeleteMethod(\"delete\"),\n deleteMany: makeDeleteMethod(\"deleteMany\"),\n };\n }\n\n function wrapMethods(\n methods: Record<string, (body?: unknown) => any>,\n ): Record<string, (body?: unknown) => any> {\n const wrapped: Record<string, (body?: unknown) => any> = {};\n for (const [key, fn] of Object.entries(methods)) {\n wrapped[key] = (body?: unknown) => {\n try {\n return fn(body);\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new ShapeError(`Validation failed: ${formatZodError(err)}`, {\n cause: err,\n });\n }\n throw err;\n }\n };\n }\n return wrapped;\n }\n\n return {\n $allModels: {\n guard(this: any, input: GuardInput, caller?: string) {\n const modelName: string = this.$name;\n const delegateKey = toDelegateKey(modelName);\n const modelDelegate = this.$parent[delegateKey];\n if (!modelDelegate) {\n throw new ShapeError(\n `Could not resolve Prisma delegate for model \"${modelName}\" (key: \"${delegateKey}\")`,\n );\n }\n const methods = createGuardedMethods(\n modelName,\n modelDelegate,\n input,\n caller,\n );\n if (!wrapZodErrors) return methods;\n return wrapMethods(methods);\n },\n },\n };\n}\n","import { z } from \"zod\";\nimport type {\n TypeMap,\n ScopeMap,\n ZodDefaults,\n DataFieldRefine,\n} from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport { isForcedValue, isUnsupportedMarker } from \"../shared/constants.js\";\nimport { deepClone } from \"../shared/deep-clone.js\";\nimport type { createSchemaBuilder } from \"./schema-builder.js\";\nimport {\n schemaProducesValueForUndefined,\n isZodSchema,\n isPlainObject,\n coerceToArray,\n} from \"../shared/utils.js\";\n\nexport interface BuiltDataSchema {\n schema: z.ZodObject<any>;\n forced: Record<string, unknown>;\n}\n\nexport const ALLOWED_BODY_KEYS_CREATE = new Set([\"data\"]);\nexport const ALLOWED_BODY_KEYS_CREATE_PROJECTION = new Set([\n \"data\",\n \"select\",\n \"include\",\n]);\nexport const ALLOWED_BODY_KEYS_CREATE_MANY = new Set([\n \"data\",\n \"skipDuplicates\",\n]);\nexport const ALLOWED_BODY_KEYS_CREATE_MANY_PROJECTION = new Set([\n \"data\",\n \"select\",\n \"include\",\n \"skipDuplicates\",\n]);\nexport const ALLOWED_BODY_KEYS_UPDATE = new Set([\"data\", \"where\"]);\nexport const ALLOWED_BODY_KEYS_UPDATE_PROJECTION = new Set([\n \"data\",\n \"where\",\n \"select\",\n \"include\",\n]);\nexport const ALLOWED_BODY_KEYS_DELETE = new Set([\"where\"]);\nexport const ALLOWED_BODY_KEYS_DELETE_PROJECTION = new Set([\n \"where\",\n \"select\",\n \"include\",\n]);\nexport const ALLOWED_BODY_KEYS_UPSERT = new Set([\n \"where\",\n \"create\",\n \"update\",\n \"select\",\n \"include\",\n]);\n\nexport const VALID_SHAPE_KEYS_CREATE = new Set([\"data\"]);\nexport const VALID_SHAPE_KEYS_CREATE_PROJECTION = new Set([\n \"data\",\n \"select\",\n \"include\",\n]);\nexport const VALID_SHAPE_KEYS_UPDATE = new Set([\"data\", \"where\"]);\nexport const VALID_SHAPE_KEYS_UPDATE_PROJECTION = new Set([\n \"data\",\n \"where\",\n \"select\",\n \"include\",\n]);\nexport const VALID_SHAPE_KEYS_DELETE = new Set([\"where\"]);\nexport const VALID_SHAPE_KEYS_DELETE_PROJECTION = new Set([\n \"where\",\n \"select\",\n \"include\",\n]);\nexport const VALID_SHAPE_KEYS_UPSERT = new Set([\n \"where\",\n \"create\",\n \"update\",\n \"select\",\n \"include\",\n]);\n\nconst KNOWN_RELATION_WRITE_OPS = new Set([\n \"connect\",\n \"connectOrCreate\",\n \"create\",\n \"createMany\",\n \"disconnect\",\n \"delete\",\n \"set\",\n \"update\",\n \"updateMany\",\n \"upsert\",\n \"deleteMany\",\n]);\n\nexport function validateMutationBodyKeys(\n body: Record<string, unknown>,\n allowed: Set<string>,\n method: string,\n): void {\n for (const key of Object.keys(body)) {\n if (!allowed.has(key)) {\n throw new ShapeError(\n `Unexpected key \"${key}\" in ${method} body. Allowed keys: ${[...allowed].join(\", \")}`,\n );\n }\n }\n}\n\nexport function validateMutationShapeKeys(\n shape: Record<string, unknown>,\n allowed: Set<string>,\n method: string,\n): void {\n for (const key of Object.keys(shape)) {\n if (!allowed.has(key)) {\n throw new ShapeError(\n `Shape key \"${key}\" not valid for ${method}. Allowed: ${[...allowed].join(\", \")}`,\n );\n }\n }\n}\n\nexport function validateCreateCompleteness(\n modelName: string,\n dataConfig: Record<string, true | unknown>,\n typeMap: TypeMap,\n scopeFks: Set<string>,\n zodDefaults: ZodDefaults,\n): void {\n const modelFields = typeMap[modelName];\n if (!modelFields) return;\n\n const zodDefaultFields = zodDefaults[modelName];\n const zodDefaultSet = zodDefaultFields\n ? new Set(zodDefaultFields)\n : undefined;\n\n for (const [fieldName, meta] of Object.entries(modelFields)) {\n if (meta.isRelation) continue;\n if (meta.isUpdatedAt) continue;\n if (meta.hasDefault) continue;\n if (!meta.isRequired) continue;\n if (fieldName in dataConfig) continue;\n if (scopeFks.has(fieldName)) continue;\n if (zodDefaultSet && zodDefaultSet.has(fieldName)) continue;\n\n throw new ShapeError(\n `Required field \"${fieldName}\" on model \"${modelName}\" is missing from create data shape, has no default, and is not a scope FK`,\n );\n }\n}\n\nfunction buildWhereFieldsSchema(\n model: string,\n config: Record<string, true>,\n typeMap: TypeMap,\n schemaBuilder: ReturnType<typeof createSchemaBuilder>,\n): z.ZodObject<any> {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n const fieldKeys: string[] = [];\n for (const [fieldName, value] of Object.entries(config)) {\n if (value !== true)\n throw new ShapeError(\n `Field \"${fieldName}\" in connect/where config must be true`,\n );\n const meta = modelFields[fieldName];\n if (!meta)\n throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`);\n if (meta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in connect/where`,\n );\n fieldSchemas[fieldName] = schemaBuilder\n .buildFieldSchema(model, fieldName)\n .optional();\n fieldKeys.push(fieldName);\n }\n return z\n .object(fieldSchemas)\n .strict()\n .refine(\n (v) =>\n fieldKeys.some((k) => (v as Record<string, unknown>)[k] !== undefined),\n { message: `At least one field required in connect/where` },\n ) as unknown as z.ZodObject<any>;\n}\n\nfunction buildNestedDataSchema(\n model: string,\n config: Record<string, true>,\n typeMap: TypeMap,\n schemaBuilder: ReturnType<typeof createSchemaBuilder>,\n): z.ZodObject<any> {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n for (const [fieldName, value] of Object.entries(config)) {\n if (value !== true)\n throw new ShapeError(\n `Field \"${fieldName}\" in nested data config must be true`,\n );\n const meta = modelFields[fieldName];\n if (!meta)\n throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`);\n if (meta.isRelation)\n throw new ShapeError(\n `Nested relation writes inside nested data are not supported (\"${model}.${fieldName}\")`,\n );\n if (meta.isUpdatedAt)\n throw new ShapeError(\n `updatedAt field \"${fieldName}\" cannot be used in nested data`,\n );\n\n let fieldSchema = schemaBuilder.buildFieldSchema(model, fieldName);\n if (!meta.isRequired) {\n fieldSchema = fieldSchema.nullable().optional();\n } else if (meta.hasDefault) {\n fieldSchema = fieldSchema.optional();\n }\n fieldSchemas[fieldName] = fieldSchema;\n }\n return z.object(fieldSchemas).strict();\n}\n\nfunction buildRelationWriteSchema(\n model: string,\n fieldName: string,\n relatedModelName: string,\n isList: boolean,\n config: Record<string, unknown>,\n typeMap: TypeMap,\n schemaBuilder: ReturnType<typeof createSchemaBuilder>,\n): z.ZodTypeAny {\n const relatedFields = typeMap[relatedModelName];\n if (!relatedFields)\n throw new ShapeError(\n `Unknown related model \"${relatedModelName}\" for field \"${model}.${fieldName}\"`,\n );\n\n for (const key of Object.keys(config)) {\n if (!KNOWN_RELATION_WRITE_OPS.has(key)) {\n throw new ShapeError(\n `Unknown relation write operation \"${key}\" on \"${model}.${fieldName}\". Allowed: ${[...KNOWN_RELATION_WRITE_OPS].join(\", \")}`,\n );\n }\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n\n if (config.connect !== undefined) {\n if (!isPlainObject(config.connect)) {\n throw new ShapeError(\n `connect config on \"${model}.${fieldName}\" must be an object of field names`,\n );\n }\n const connectSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.connect as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"connect\"] = isList\n ? z\n .union([\n connectSchema,\n z.preprocess(coerceToArray, z.array(connectSchema)),\n ])\n .optional()\n : connectSchema.optional();\n }\n\n if (config.connectOrCreate !== undefined) {\n if (!isPlainObject(config.connectOrCreate)) {\n throw new ShapeError(\n `connectOrCreate config on \"${model}.${fieldName}\" must be an object with \"where\" and \"create\"`,\n );\n }\n const coc = config.connectOrCreate as Record<string, unknown>;\n if (!coc.where || !isPlainObject(coc.where)) {\n throw new ShapeError(\n `connectOrCreate on \"${model}.${fieldName}\" requires \"where\" object`,\n );\n }\n if (!coc.create || !isPlainObject(coc.create)) {\n throw new ShapeError(\n `connectOrCreate on \"${model}.${fieldName}\" requires \"create\" object`,\n );\n }\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n coc.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const createSchema = buildNestedDataSchema(\n relatedModelName,\n coc.create as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const cocSchema = z\n .object({ where: whereSchema, create: createSchema })\n .strict();\n opSchemas[\"connectOrCreate\"] = isList\n ? z\n .union([cocSchema, z.preprocess(coerceToArray, z.array(cocSchema))])\n .optional()\n : cocSchema.optional();\n }\n\n if (config.create !== undefined) {\n if (!isPlainObject(config.create)) {\n throw new ShapeError(\n `create config on \"${model}.${fieldName}\" must be an object of field names`,\n );\n }\n const createSchema = buildNestedDataSchema(\n relatedModelName,\n config.create as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"create\"] = isList\n ? z\n .union([\n createSchema,\n z.preprocess(coerceToArray, z.array(createSchema)),\n ])\n .optional()\n : createSchema.optional();\n }\n\n if (config.createMany !== undefined) {\n if (!isList) {\n throw new ShapeError(\n `createMany is only valid on to-many relations (\"${model}.${fieldName}\")`,\n );\n }\n if (!isPlainObject(config.createMany)) {\n throw new ShapeError(\n `createMany config on \"${model}.${fieldName}\" must be an object`,\n );\n }\n const cmConfig = config.createMany as Record<string, unknown>;\n if (!cmConfig.data || !isPlainObject(cmConfig.data)) {\n throw new ShapeError(\n `createMany on \"${model}.${fieldName}\" requires \"data\" object`,\n );\n }\n const dataSchema = buildNestedDataSchema(\n relatedModelName,\n cmConfig.data as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const cmSchemaFields: Record<string, z.ZodTypeAny> = {\n data: z.preprocess(coerceToArray, z.array(dataSchema)),\n };\n if (\"skipDuplicates\" in cmConfig) {\n cmSchemaFields[\"skipDuplicates\"] = z.boolean().optional();\n }\n opSchemas[\"createMany\"] = z.object(cmSchemaFields).strict().optional();\n }\n\n if (config.disconnect !== undefined) {\n if (config.disconnect === true) {\n if (isList) {\n throw new ShapeError(\n `disconnect on to-many relation \"${model}.${fieldName}\" requires field config, not true`,\n );\n }\n opSchemas[\"disconnect\"] = z.literal(true).optional();\n } else if (isPlainObject(config.disconnect)) {\n const disconnectSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.disconnect as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n if (isList) {\n opSchemas[\"disconnect\"] = z\n .union([\n disconnectSchema,\n z.preprocess(coerceToArray, z.array(disconnectSchema)),\n ])\n .optional();\n } else {\n opSchemas[\"disconnect\"] = z\n .union([z.literal(true), disconnectSchema])\n .optional();\n }\n } else {\n throw new ShapeError(\n `disconnect config on \"${model}.${fieldName}\" must be true (to-one) or an object of field names`,\n );\n }\n }\n\n if (config.delete !== undefined) {\n if (config.delete === true) {\n if (isList) {\n throw new ShapeError(\n `delete on to-many relation \"${model}.${fieldName}\" requires field config, not true`,\n );\n }\n opSchemas[\"delete\"] = z.literal(true).optional();\n } else if (isPlainObject(config.delete)) {\n const deleteSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.delete as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n if (isList) {\n opSchemas[\"delete\"] = z\n .union([\n deleteSchema,\n z.preprocess(coerceToArray, z.array(deleteSchema)),\n ])\n .optional();\n } else {\n opSchemas[\"delete\"] = z\n .union([z.literal(true), deleteSchema])\n .optional();\n }\n } else {\n throw new ShapeError(\n `delete config on \"${model}.${fieldName}\" must be true (to-one) or an object of field names`,\n );\n }\n }\n\n if (config.set !== undefined) {\n if (!isList) {\n throw new ShapeError(\n `set is only valid on to-many relations (\"${model}.${fieldName}\")`,\n );\n }\n if (!isPlainObject(config.set)) {\n throw new ShapeError(\n `set config on \"${model}.${fieldName}\" must be an object of field names`,\n );\n }\n const setSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.set as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"set\"] = z\n .preprocess(coerceToArray, z.array(setSchema))\n .optional();\n }\n\n if (config.update !== undefined) {\n if (!isPlainObject(config.update)) {\n throw new ShapeError(\n `update config on \"${model}.${fieldName}\" must be an object`,\n );\n }\n const updateConfig = config.update as Record<string, unknown>;\n if (isList) {\n if (!updateConfig.where || !isPlainObject(updateConfig.where)) {\n throw new ShapeError(\n `update on to-many \"${model}.${fieldName}\" requires \"where\" object`,\n );\n }\n if (!updateConfig.data || !isPlainObject(updateConfig.data)) {\n throw new ShapeError(\n `update on to-many \"${model}.${fieldName}\" requires \"data\" object`,\n );\n }\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n updateConfig.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const dataSchema = buildNestedDataSchema(\n relatedModelName,\n updateConfig.data as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const updateSchema = z\n .object({ where: whereSchema, data: dataSchema })\n .strict();\n opSchemas[\"update\"] = z\n .union([\n updateSchema,\n z.preprocess(coerceToArray, z.array(updateSchema)),\n ])\n .optional();\n } else {\n const dataSchema = buildNestedDataSchema(\n relatedModelName,\n updateConfig as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"update\"] = dataSchema.optional();\n }\n }\n\n if (config.upsert !== undefined) {\n if (!isPlainObject(config.upsert)) {\n throw new ShapeError(\n `upsert config on \"${model}.${fieldName}\" must be an object`,\n );\n }\n const upsertConfig = config.upsert as Record<string, unknown>;\n if (!upsertConfig.create || !isPlainObject(upsertConfig.create)) {\n throw new ShapeError(\n `upsert on \"${model}.${fieldName}\" requires \"create\" object`,\n );\n }\n if (!upsertConfig.update || !isPlainObject(upsertConfig.update)) {\n throw new ShapeError(\n `upsert on \"${model}.${fieldName}\" requires \"update\" object`,\n );\n }\n const createSchema = buildNestedDataSchema(\n relatedModelName,\n upsertConfig.create as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const updateSchema = buildNestedDataSchema(\n relatedModelName,\n upsertConfig.update as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n\n if (isList) {\n if (!upsertConfig.where || !isPlainObject(upsertConfig.where)) {\n throw new ShapeError(\n `upsert on to-many \"${model}.${fieldName}\" requires \"where\" object`,\n );\n }\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n upsertConfig.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const upsertSchema = z\n .object({\n where: whereSchema,\n create: createSchema,\n update: updateSchema,\n })\n .strict();\n opSchemas[\"upsert\"] = z\n .union([\n upsertSchema,\n z.preprocess(coerceToArray, z.array(upsertSchema)),\n ])\n .optional();\n } else {\n if (upsertConfig.where) {\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n upsertConfig.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const upsertSchema = z\n .object({\n where: whereSchema,\n create: createSchema,\n update: updateSchema,\n })\n .strict();\n opSchemas[\"upsert\"] = upsertSchema.optional();\n } else {\n const upsertSchema = z\n .object({ create: createSchema, update: updateSchema })\n .strict();\n opSchemas[\"upsert\"] = upsertSchema.optional();\n }\n }\n }\n\n if (config.updateMany !== undefined) {\n if (!isList) {\n throw new ShapeError(\n `updateMany is only valid on to-many relations (\"${model}.${fieldName}\")`,\n );\n }\n if (!isPlainObject(config.updateMany)) {\n throw new ShapeError(\n `updateMany config on \"${model}.${fieldName}\" must be an object`,\n );\n }\n const umConfig = config.updateMany as Record<string, unknown>;\n if (!umConfig.where || !isPlainObject(umConfig.where)) {\n throw new ShapeError(\n `updateMany on \"${model}.${fieldName}\" requires \"where\" object`,\n );\n }\n if (!umConfig.data || !isPlainObject(umConfig.data)) {\n throw new ShapeError(\n `updateMany on \"${model}.${fieldName}\" requires \"data\" object`,\n );\n }\n const whereSchema = buildWhereFieldsSchema(\n relatedModelName,\n umConfig.where as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const dataSchema = buildNestedDataSchema(\n relatedModelName,\n umConfig.data as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n const umSchema = z\n .object({ where: whereSchema, data: dataSchema })\n .strict();\n opSchemas[\"updateMany\"] = z\n .union([umSchema, z.preprocess(coerceToArray, z.array(umSchema))])\n .optional();\n }\n\n if (config.deleteMany !== undefined) {\n if (!isList) {\n throw new ShapeError(\n `deleteMany is only valid on to-many relations (\"${model}.${fieldName}\")`,\n );\n }\n if (!isPlainObject(config.deleteMany)) {\n throw new ShapeError(\n `deleteMany config on \"${model}.${fieldName}\" must be an object of allowed filter fields`,\n );\n }\n const filterSchema = buildWhereFieldsSchema(\n relatedModelName,\n config.deleteMany as Record<string, true>,\n typeMap,\n schemaBuilder,\n );\n opSchemas[\"deleteMany\"] = z\n .union([\n filterSchema,\n z.preprocess(coerceToArray, z.array(filterSchema)),\n z.object({}).strict(),\n ])\n .optional();\n }\n\n return z.object(opSchemas).strict();\n}\n\nexport function buildDataSchema(\n model: string,\n dataConfig: Record<string, true | unknown>,\n mode: \"create\" | \"update\",\n typeMap: TypeMap,\n schemaBuilder: ReturnType<typeof createSchemaBuilder>,\n zodDefaults: ZodDefaults,\n): BuiltDataSchema {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const zodDefaultFields = zodDefaults[model];\n const zodDefaultSet = zodDefaultFields\n ? new Set(zodDefaultFields)\n : undefined;\n\n const schemaMap: Record<string, z.ZodTypeAny> = {};\n const forced: Record<string, unknown> = {};\n\n for (const [fieldName, value] of Object.entries(dataConfig)) {\n const fieldMeta = modelFields[fieldName];\n\n if (!fieldMeta) {\n if (isUnsupportedMarker(value)) {\n schemaMap[fieldName] = z.unknown().optional();\n continue;\n }\n throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`);\n }\n\n if (fieldMeta.isRelation) {\n if (!isPlainObject(value)) {\n throw new ShapeError(\n `Relation field \"${fieldName}\" on model \"${model}\" requires a relation write config object`,\n );\n }\n schemaMap[fieldName] = buildRelationWriteSchema(\n model,\n fieldName,\n fieldMeta.type,\n fieldMeta.isList,\n value as Record<string, unknown>,\n typeMap,\n schemaBuilder,\n ).optional();\n continue;\n }\n\n if (fieldMeta.isUpdatedAt)\n throw new ShapeError(\n `updatedAt field \"${fieldName}\" cannot be used in data shape`,\n );\n\n if (typeof value === \"function\") {\n let baseSchema: z.ZodTypeAny = schemaBuilder.buildBaseFieldSchema(\n model,\n fieldName,\n );\n let refined: unknown;\n try {\n refined = (value as DataFieldRefine)(baseSchema);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid inline refine for \"${model}.${fieldName}\": ${err.message}`,\n { cause: err },\n );\n }\n\n if (!isZodSchema(refined)) {\n throw new ShapeError(\n `Inline refine for \"${model}.${fieldName}\" must return a Zod schema`,\n );\n }\n\n let fieldSchema: z.ZodTypeAny = refined;\n const handlesUndefined = schemaProducesValueForUndefined(fieldSchema);\n\n if (mode === \"create\") {\n if (!fieldMeta.isRequired) {\n fieldSchema = handlesUndefined\n ? fieldSchema.nullable()\n : fieldSchema.nullable().optional();\n } else if (fieldMeta.hasDefault) {\n if (!handlesUndefined) {\n fieldSchema = fieldSchema.optional();\n }\n }\n } else {\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable().optional();\n } else {\n fieldSchema = fieldSchema.optional();\n }\n }\n\n schemaMap[fieldName] = fieldSchema;\n } else if (value === true) {\n let fieldSchema: z.ZodTypeAny = schemaBuilder.buildFieldSchema(\n model,\n fieldName,\n );\n const isZodDefaultField =\n zodDefaultSet !== undefined && zodDefaultSet.has(fieldName);\n\n if (mode === \"create\") {\n if (!fieldMeta.isRequired) {\n fieldSchema = isZodDefaultField\n ? fieldSchema.nullable()\n : fieldSchema.nullable().optional();\n } else if (fieldMeta.hasDefault) {\n if (!isZodDefaultField) {\n fieldSchema = fieldSchema.optional();\n }\n }\n } else {\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable().optional();\n } else {\n fieldSchema = fieldSchema.optional();\n }\n }\n\n schemaMap[fieldName] = fieldSchema;\n } else {\n const actualValue = isForcedValue(value) ? value.value : value;\n let fieldSchema: z.ZodTypeAny = schemaBuilder.buildFieldSchema(\n model,\n fieldName,\n );\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable();\n }\n let parsed: unknown;\n try {\n parsed = fieldSchema.parse(actualValue);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced data value for \"${model}.${fieldName}\": ${err.message}`,\n );\n }\n forced[fieldName] = parsed;\n }\n }\n\n if (mode === \"create\" && zodDefaultFields) {\n for (const fieldName of zodDefaultFields) {\n if (fieldName in dataConfig) continue;\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta) continue;\n if (fieldMeta.isRelation) continue;\n if (fieldMeta.isUpdatedAt) continue;\n\n const fieldSchema = schemaBuilder.buildFieldSchema(model, fieldName);\n const result = fieldSchema.safeParse(undefined);\n if (result.success && result.data !== undefined) {\n forced[fieldName] = result.data;\n } else {\n throw new ShapeError(\n `Field \"${fieldName}\" on model \"${model}\" has @zod default/catch but its schema does not produce a value for undefined input`,\n );\n }\n }\n }\n\n return {\n schema: z.object(schemaMap).strict(),\n forced,\n };\n}\n\nexport function validateAndMergeData(\n bodyData: unknown,\n cached: BuiltDataSchema,\n method: string,\n): Record<string, unknown> {\n if (bodyData === undefined || bodyData === null) {\n throw new ShapeError(`${method} requires \"data\" in request body`);\n }\n const validated = cached.schema.parse(bodyData);\n return { ...validated, ...deepClone(cached.forced) };\n}\n\nexport function hasDataRefines(\n dataConfig: Record<string, true | unknown>,\n): boolean {\n for (const value of Object.values(dataConfig)) {\n if (typeof value === \"function\") return true;\n }\n return false;\n}\n","import type { GuardShape, GuardShapeOrFn, GuardInput } from '../shared/types.js'\nimport { ShapeError, CallerError } from '../shared/errors.js'\nimport { GUARD_SHAPE_KEYS } from '../shared/constants.js'\nimport { matchCallerPattern } from '../shared/match-caller.js'\nimport { isPlainObject } from '../shared/utils.js'\nimport { validateContext } from './policy.js'\n\nexport interface ResolvedShape {\n shape: GuardShape\n body: Record<string, unknown>\n matchedKey: string\n wasDynamic: boolean\n}\n\nfunction isGuardShape(obj: unknown): obj is GuardShape {\n if (!isPlainObject(obj)) return false\n const keys = Object.keys(obj)\n return keys.length === 0 || keys.every(k => GUARD_SHAPE_KEYS.has(k))\n}\n\nfunction isSingleShape(input: GuardInput): input is GuardShapeOrFn {\n return typeof input === 'function' || isGuardShape(input)\n}\n\nfunction requireBody(body: unknown): Record<string, unknown> {\n if (!isPlainObject(body)) throw new ShapeError('Request body must be an object')\n return body\n}\n\nexport function resolveDynamicShape(\n fn: (ctx: any) => GuardShape,\n contextFn: () => Record<string, unknown>,\n): GuardShape {\n const ctx = validateContext(contextFn())\n let result: unknown\n try {\n result = fn(ctx)\n } catch (err: any) {\n throw new ShapeError(\n `Dynamic shape function threw: ${err.message}`,\n { cause: err },\n )\n }\n if (!isPlainObject(result)) {\n throw new ShapeError('Dynamic shape function must return a plain object')\n }\n return result as GuardShape\n}\n\nexport function resolveShape(\n input: GuardInput,\n body: unknown,\n contextFn: () => Record<string, unknown>,\n caller: string | undefined,\n): ResolvedShape {\n if (isSingleShape(input)) {\n const wasDynamic = typeof input === 'function'\n const shape = wasDynamic\n ? resolveDynamicShape(input as (ctx: any) => GuardShape, contextFn)\n : input as GuardShape\n const parsed = body === undefined || body === null\n ? {}\n : requireBody(body)\n return { shape, body: parsed, matchedKey: '_default', wasDynamic }\n }\n\n const namedMap = input as Record<string, GuardShapeOrFn>\n\n for (const key of Object.keys(namedMap)) {\n if (GUARD_SHAPE_KEYS.has(key)) {\n throw new ShapeError(\n `Caller key \"${key}\" collides with reserved shape config key. Rename the caller path.`,\n )\n }\n const val = namedMap[key]\n if (typeof val !== 'function' && !isGuardShape(val)) {\n throw new ShapeError(\n `Named shape value for \"${key}\" must be a guard shape object or function`,\n )\n }\n }\n\n const parsed = body === undefined || body === null\n ? {}\n : requireBody(body)\n\n if ('caller' in parsed) {\n throw new CallerError(\n 'Pass caller as second argument to .guard() or via context function, not in the request body.',\n )\n }\n\n if (typeof caller !== 'string') {\n const patterns = Object.keys(namedMap)\n throw new CallerError(\n `Missing caller. This guard uses named shape routing with keys: ${patterns.map(k => `\"${k}\"`).join(', ')}. ` +\n `Provide caller as second argument to .guard() or set \"caller\" in the context function.`,\n )\n }\n\n const patterns = Object.keys(namedMap)\n const matched = matchCallerPattern(patterns, caller)\n if (!matched) {\n throw new CallerError(\n `Unknown caller: \"${caller}\". Allowed: ${patterns.map(k => `\"${k}\"`).join(', ')}`,\n )\n }\n\n const shapeOrFn = namedMap[matched]\n const wasDynamic = typeof shapeOrFn === 'function'\n const shape = wasDynamic\n ? resolveDynamicShape(shapeOrFn as (ctx: any) => GuardShape, contextFn)\n : shapeOrFn as GuardShape\n\n return { shape, body: parsed, matchedKey: matched, wasDynamic }\n}"],"mappings":"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","names":["z","z","z","supportedOps","z","z","z","z","z","z","z","z","z","z","z","z","wasDynamic","shape","parsed","patterns","z"]}
|