prisma-guard 1.23.0 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -39
- package/dist/generator/index.js +312 -257
- package/dist/generator/index.js.map +1 -1
- package/dist/runtime/index.cjs +766 -403
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.d.cts +65 -25
- package/dist/runtime/index.d.ts +65 -25
- package/dist/runtime/index.js +766 -403
- package/dist/runtime/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/index.ts","../../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/shared/operation-shape-keys.ts","../../src/runtime/scope-extension.ts","../../src/runtime/model-guard.ts","../../src/runtime/model-guard-data.ts","../../src/runtime/model-guard-resolve.ts"],"sourcesContent":["export { createGuard } from './guard.js'\nexport { PolicyError, ShapeError, CallerError } from '../shared/errors.js'\nexport { force, unsupported } from '../shared/constants.js'\nexport type {\n FieldMeta,\n InputOpts,\n ModelOpts,\n QueryMethod,\n MutationMethod,\n ShapeConfig,\n ShapeOrFn,\n NestedIncludeArgs,\n NestedSelectArgs,\n ScopeEntry,\n ScopeMap,\n TypeMap,\n EnumMap,\n ZodChains,\n ZodDefaults,\n UniqueConstraint,\n UniqueMap,\n MissingScopeContextMode,\n GuardGeneratedConfig,\n GuardConfig,\n GuardLogger,\n QuerySchema,\n InputSchema,\n GuardShape,\n GuardShapeOrFn,\n GuardInput,\n GuardedModel,\n} from '../shared/types.js'\nexport type {\n TypeMapConst,\n FieldMetaConst,\n ShapeDepth,\n TypedGuardShape,\n TypedShapeProps,\n OperationShape,\n ShapeInput,\n TypedWhere,\n TypedProjection,\n TypedInclude,\n TypedCountSelect,\n NumericFields,\n ComparableFields,\n} from '../shared/typed-shape.js'\nexport type { OperationName } from '../shared/operation-shape-keys.js'","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, ZodIssue } 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\nfunction formatIssue(issue: ZodIssue): string {\n const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : ''\n const code = issue.code as string\n\n if (code === 'invalid_union') {\n const unionErrors = (issue as any).unionErrors as ZodError[] | undefined\n if (unionErrors && unionErrors.length > 0) {\n const branches = unionErrors\n .map((ue, i) => {\n const nested = ue.issues.map(formatIssue).join(', ')\n return `branch ${i + 1}: [${nested}]`\n })\n .join(' | ')\n return `${path}No matching variant (${branches})`\n }\n return `${path}No matching variant`\n }\n\n if (issue.code === 'unrecognized_keys') {\n const keys = (issue as any).keys as string[] | undefined\n if (keys && keys.length > 0) {\n return `${path}Unrecognized key(s): ${keys.join(', ')}`\n }\n }\n\n if (issue.code === 'invalid_type') {\n const expected = (issue as any).expected\n const received = (issue as any).received\n if (expected && received) {\n return `${path}Expected ${expected}, received ${received}`\n }\n }\n\n if (code === 'invalid_enum_value') {\n const options = (issue as any).options\n if (options) {\n return `${path}Invalid value. Expected one of: ${options.join(', ')}`\n }\n }\n\n if (code === 'too_small') {\n const minimum = (issue as any).minimum\n const type = (issue as any).type\n if (type === 'string' && minimum !== undefined) {\n return `${path}String must contain at least ${minimum} character(s)`\n }\n if (type === 'array' && minimum !== undefined) {\n return `${path}Array must contain at least ${minimum} element(s)`\n }\n if (type === 'number' && minimum !== undefined) {\n return `${path}Number must be >= ${minimum}`\n }\n return `${path}${issue.message}`\n }\n\n if (code === 'too_big') {\n const maximum = (issue as any).maximum\n const type = (issue as any).type\n if (type === 'string' && maximum !== undefined) {\n return `${path}String must contain at most ${maximum} character(s)`\n }\n if (type === 'array' && maximum !== undefined) {\n return `${path}Array must contain at most ${maximum} element(s)`\n }\n if (type === 'number' && maximum !== undefined) {\n return `${path}Number must be <= ${maximum}`\n }\n return `${path}${issue.message}`\n }\n\n if (code === 'invalid_format') {\n const format = (issue as any).format\n if (format) {\n return `${path}Invalid ${format} format`\n }\n }\n\n if (code === 'invalid_value') {\n const values = (issue as any).values\n if (values) {\n return `${path}Invalid value. Expected one of: ${values.join(', ')}`\n }\n }\n\n return `${path}${issue.message}`\n}\n\nexport function formatZodError(err: ZodError): string {\n return err.issues.map(formatIssue).join('; ')\n}\n\nexport function wrapParseError(err: unknown, context: string): never {\n if (err instanceof ShapeError) {\n throw new ShapeError(`${context}: ${err.message}`, { cause: err })\n }\n if (err && typeof err === 'object' && 'issues' in err) {\n throw new ShapeError(`${context}: ${formatZodError(err as ZodError)}`, { cause: err })\n }\n throw err\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([\n z.date(),\n z.string().refine(\n (s) => !isNaN(Date.parse(s)),\n \"Invalid date string\",\n ),\n ])\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().transform((v) => Math.trunc(v)).pipe(z.number().int()),\n z\n .string()\n .regex(/^-?\\d+(\\.\\d+)?$/)\n .transform((v) => Math.trunc(Number(v))),\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}","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 \"search\",\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\") {\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\nfunction buildNotFilterSchema(\n fieldMeta: FieldMeta,\n scalarSchema: z.ZodTypeAny,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n const allOps = getSupportedOperators(fieldMeta);\n const nestedOps = allOps.filter((o) => o !== \"not\");\n\n if (nestedOps.length === 0) return scalarSchema;\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {};\n for (const op of nestedOps) {\n nestedSchemas[op] = createOperatorSchema(\n fieldMeta,\n op,\n enumMap,\n scalarBase,\n ).optional();\n }\n\n const nestedKeys = Object.keys(nestedSchemas);\n const nestedObj = z\n .object(nestedSchemas)\n .strict()\n .refine(\n (v) =>\n nestedKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: \"not filter must specify at least one operator\" },\n );\n\n return z.union([scalarSchema, nestedObj]);\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\") {\n return !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n }\n if (operator === \"not\") {\n const scalarSchema = !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n return buildNotFilterSchema(fieldMeta, scalarSchema, enumMap, scalarBase);\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 if (operator === \"not\") {\n const jsonValue = z.unknown();\n const scalarSchema = !fieldMeta.isRequired\n ? z.union([jsonValue, z.null()])\n : jsonValue;\n return buildNotFilterSchema(fieldMeta, scalarSchema, enumMap, scalarBase);\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\") {\n return !fieldMeta.isRequired ? z.union([coerced, z.null()]) : coerced;\n }\n if (operator === \"not\") {\n const scalarSchema = !fieldMeta.isRequired\n ? z.union([coerced, z.null()])\n : coerced;\n return buildNotFilterSchema(fieldMeta, scalarSchema, enumMap, scalarBase);\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 value\n const allNumeric = keys.every((k) => /^\\d+$/.test(k))\n if (!allNumeric) return value\n const indices = keys.map(Number).sort((a, b) => a - b)\n for (let i = 0; i < indices.length; i++) {\n if (indices[i] !== i) return value\n }\n const obj = value as Record<string, unknown>\n const result: unknown[] = new Array(indices.length)\n for (let i = 0; i < indices.length; i++) {\n result[i] = obj[String(i)]\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 } 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\";\nimport { READ_METHOD_ALLOWED_ARGS } from \"../shared/operation-shape-keys.js\";\n\nconst METHOD_ALLOWED_ARGS: Record<QueryMethod, Set<string>> =\n READ_METHOD_ALLOWED_ARGS as Record<QueryMethod, Set<string>>;\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 resolveDefaultShape<TCtx>(\n config: Record<string, ShapeOrFn<TCtx>>,\n model: string,\n method: QueryMethod,\n normalizedBody: unknown,\n opts: { ctx?: TCtx; caller?: string } | undefined,\n builtCache: Map<string, BuiltShape>,\n isUnique: boolean,\n ): Record<string, unknown> {\n const shapeOrFn = config['default'];\n let built: BuiltShape;\n if (typeof shapeOrFn === 'function') {\n const resolved = resolveAndValidateShape(shapeOrFn, opts?.ctx);\n built = buildShapeZodSchema(model, method, resolved);\n } else {\n built = builtCache.get('default')!;\n }\n return applyBuiltShape(built, normalizedBody, isUnique);\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 namedConfig = config as Record<string, ShapeOrFn<TCtx>>;\n const caller = opts?.caller;\n\n if (typeof caller !== \"string\") {\n if (\"default\" in namedConfig) {\n return resolveDefaultShape(\n namedConfig, model, method, normalizedBody, opts, builtCache, isUnique,\n );\n }\n const allowed = Object.keys(namedConfig);\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(namedConfig, caller);\n\n if (!matched) {\n if (\"default\" in namedConfig) {\n return resolveDefaultShape(\n namedConfig, model, method, normalizedBody, opts, builtCache, isUnique,\n );\n }\n const allowed = Object.keys(namedConfig);\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 buildUniqueWhereSchema: whereBuilder.buildUniqueWhereSchema,\n buildIncludeSchema: projectionBuilder.buildIncludeSchema,\n buildSelectSchema: projectionBuilder.buildSelectSchema,\n };\n}","export const SHAPE_CONFIG_KEY_LIST = [\n 'where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip',\n 'distinct', 'having', '_count', '_avg', '_sum', '_min', '_max', 'by',\n] as const\n\nexport type ShapeConfigKey = (typeof SHAPE_CONFIG_KEY_LIST)[number]\n\nexport const SHAPE_CONFIG_KEYS = new Set<string>(SHAPE_CONFIG_KEY_LIST)\n\nexport const GUARD_SHAPE_KEY_LIST = [\n 'data', 'create', 'update', ...SHAPE_CONFIG_KEY_LIST,\n] as const\n\nexport type GuardShapeKey = (typeof GUARD_SHAPE_KEY_LIST)[number]\n\nexport const GUARD_SHAPE_KEYS = new Set<string>(GUARD_SHAPE_KEY_LIST)\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, createBaseType } 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 {\n wrapWithInputCoercion,\n type ScalarBaseMap,\n} 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\nexport interface UniqueWhereBuiltResult {\n schema: z.ZodObject<any> | null;\n forced: Record<string, unknown>;\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 scalarConditions,\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 parentConditions: Record<string, unknown>,\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 let hasForcedNull = 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 (opValue === null) {\n if (!TO_ONE_RELATION_OPS.has(op)) {\n throw new ShapeError(\n `Null value for operator \"${op}\" is only valid on to-one relation operators (is, isNot), not on \"${key}\"`,\n );\n }\n const existing = parentConditions[key];\n if (existing && isPlainObject(existing)) {\n (existing as Record<string, unknown>)[op] = null;\n } else {\n parentConditions[key] = { [op]: null };\n }\n hasForcedNull = true;\n continue;\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, or null for to-one existence checks`,\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 && !hasForcedNull) {\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 && !hasForcedNull) {\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 function buildUniqueWhereSchema(\n model: string,\n whereConfig: Record<string, unknown>,\n ): UniqueWhereBuiltResult {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n const forced: Record<string, unknown> = {};\n const forcedOnlyKeys = new Set<string>();\n\n for (const [key, value] of Object.entries(whereConfig)) {\n if (COMBINATOR_KEYS.has(key)) {\n throw new ShapeError(\n `Combinator \"${key}\" is not supported in unique where for model \"${model}\"`,\n );\n }\n\n const fieldMeta = modelFields[key];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${key}\" on model \"${model}\"`);\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${key}\" cannot be used in unique where for model \"${model}\"`,\n );\n\n const base = createBaseType(fieldMeta, enumMap, scalarBase);\n let directSchema: z.ZodTypeAny;\n if (\n !fieldMeta.isEnum &&\n !fieldMeta.isRelation &&\n !fieldMeta.isUnsupported\n ) {\n directSchema = wrapWithInputCoercion(\n fieldMeta.type,\n fieldMeta.isList,\n base,\n );\n } else {\n directSchema = base;\n }\n\n const equalsWrapper = z\n .object({ equals: directSchema })\n .strict()\n .transform((v) => v.equals);\n\n if (value === true) {\n fieldSchemas[key] = z.union([directSchema, equalsWrapper]);\n continue;\n }\n\n if (isPlainObject(value)) {\n const keys = Object.keys(value);\n if (keys.length === 1 && keys[0] === \"equals\") {\n const equalsVal = (value as Record<string, unknown>).equals;\n if (equalsVal === true) {\n fieldSchemas[key] = z.union([directSchema, equalsWrapper]);\n } else {\n const actual = isForcedValue(equalsVal)\n ? (equalsVal as any).value\n : equalsVal;\n try {\n forced[key] = directSchema.parse(actual);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced value for unique where \"${model}.${key}\": ${err.message}`,\n );\n }\n forcedOnlyKeys.add(key);\n }\n continue;\n }\n throw new ShapeError(\n `Unique where field \"${key}\" on model \"${model}\" only accepts true or { equals: true/value }. Got operators: ${keys.join(\", \")}`,\n );\n }\n\n const actual = isForcedValue(value) ? (value as any).value : value;\n try {\n forced[key] = directSchema.parse(actual);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced value for unique where \"${model}.${key}\": ${err.message}`,\n );\n }\n forcedOnlyKeys.add(key);\n }\n\n return {\n schema:\n Object.keys(fieldSchemas).length > 0\n ? z.object(fieldSchemas).strict()\n : null,\n forced,\n forcedOnlyKeys,\n };\n }\n\n return { buildWhereSchema, buildUniqueWhereSchema };\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 (value instanceof RegExp) return new RegExp(value.source, value.flags) 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 { isPlainObject } from \"../shared/utils.js\";\nimport { deepClone } from \"../shared/deep-clone.js\";\nimport { formatZodError, ShapeError } from \"../shared/errors.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 = {\n conditions: {},\n relations: {},\n};\n\nexport function hasWhereForced(f: WhereForced): boolean {\n return (\n Object.keys(f.conditions).length > 0 || Object.keys(f.relations).length > 0\n );\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 modelName?: string,\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 (\n built.forcedOnlyWhereKeys.size > 0 &&\n isPlainObject(bodyObj.where)\n ) {\n const where = { ...(bodyObj.where as Record<string, unknown>) };\n for (const key of built.forcedOnlyWhereKeys) {\n delete where[key];\n }\n if (\n Object.keys(where).length === 0 &&\n hasWhereForced(built.forcedWhere)\n ) {\n const { where: _, ...rest } = bodyObj;\n parseable = rest;\n } else {\n parseable = { ...bodyObj, where };\n }\n }\n }\n }\n\n let validated: Record<string, unknown>;\n try {\n validated = built.zodSchema.parse(parseable) as Record<string, unknown>;\n } catch (err) {\n if (err instanceof ShapeError) throw err;\n if (err && typeof err === \"object\" && \"issues\" in err) {\n const context = modelName\n ? `Invalid query on model \"${modelName}\"`\n : \"Invalid query\";\n throw new ShapeError(`${context}: ${formatZodError(err as any)}`, {\n cause: err,\n });\n }\n throw err;\n }\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)\n relObj.include = buildForcedOnlyContainer(forced.include);\n applyForcedTree(relObj, \"include\", forced.include);\n }\n if (forced.select) {\n if (!relObj.select)\n 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\n | Record<string, unknown>\n | 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)\n 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\n .map((c) => `(${c.join(\", \")})`)\n .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 (\"equals\" in value) {\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\n .map((c) => `(${c.join(\", \")})`)\n .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}\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: number | { max: number; default?: number }): z.ZodTypeAny {\n const normalized = typeof config === 'number'\n ? { max: config, default: config }\n : config\n\n if (!Number.isFinite(normalized.max) || !Number.isInteger(normalized.max)) {\n throw new ShapeError(`take max must be a finite integer, got ${normalized.max}`)\n }\n if (normalized.max < 1) {\n throw new ShapeError(`take max must be at least 1, got ${normalized.max}`)\n }\n if (normalized.default !== undefined) {\n if (!Number.isFinite(normalized.default) || !Number.isInteger(normalized.default)) {\n throw new ShapeError(`take default must be a finite integer, got ${normalized.default}`)\n }\n if (normalized.default < 1) {\n throw new ShapeError(`take default must be at least 1, got ${normalized.default}`)\n }\n if (normalized.default > normalized.max) {\n throw new ShapeError('take default cannot exceed max')\n }\n return z.number().int().min(1).max(normalized.max).default(normalized.default)\n }\n return z.number().int().min(1).max(normalized.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\n const havingSchema: z.ZodTypeAny = z.lazy(() => {\n const allSchemas: Record<string, z.ZodTypeAny> = { ...fieldSchemas }\n allSchemas['AND'] = z.preprocess(coerceToArray, z.array(havingSchema).min(1)).optional()\n allSchemas['OR'] = z.preprocess(coerceToArray, z.array(havingSchema).min(1)).optional()\n allSchemas['NOT'] = z.union([\n havingSchema,\n z.preprocess(coerceToArray, z.array(havingSchema).min(1)),\n ]).optional()\n\n const allKeys = [...havingFieldKeys, 'AND', 'OR', 'NOT']\n return z.object(allSchemas).strict()\n .refine(\n (v) => allKeys.some(k => (v as Record<string, unknown>)[k] !== undefined),\n { message: 'having must specify at least one field or combinator' },\n )\n })\n\n return havingSchema.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: number | { 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}","export const OPERATION_SHAPE_KEYS = {\n findMany: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findFirst: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findFirstOrThrow: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findUnique: ['where', 'include', 'select'],\n findUniqueOrThrow: ['where', 'include', 'select'],\n findManyPaginated: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n count: ['where', 'select', 'cursor', 'orderBy', 'skip', 'take'],\n aggregate: ['where', 'orderBy', 'cursor', 'take', 'skip', '_count', '_avg', '_sum', '_min', '_max'],\n groupBy: ['where', 'by', 'having', '_count', '_avg', '_sum', '_min', '_max', 'orderBy', 'take', 'skip'],\n create: ['data', 'select', 'include'],\n createMany: ['data'],\n createManyAndReturn: ['data', 'select', 'include'],\n update: ['data', 'where', 'select', 'include'],\n updateMany: ['data', 'where'],\n updateManyAndReturn: ['data', 'where', 'select', 'include'],\n upsert: ['where', 'create', 'update', 'select', 'include'],\n delete: ['where', 'select', 'include'],\n deleteMany: ['where'],\n} as const\n\nexport type OperationName = keyof typeof OPERATION_SHAPE_KEYS\n\nexport type OperationShapeKey<O extends OperationName> =\n (typeof OPERATION_SHAPE_KEYS)[O][number]\n\nexport const READ_METHOD_ALLOWED_ARGS: Record<string, Set<string>> = {\n findMany: new Set(OPERATION_SHAPE_KEYS.findMany),\n findFirst: new Set(OPERATION_SHAPE_KEYS.findFirst),\n findFirstOrThrow: new Set(OPERATION_SHAPE_KEYS.findFirstOrThrow),\n findUnique: new Set(OPERATION_SHAPE_KEYS.findUnique),\n findUniqueOrThrow: new Set(OPERATION_SHAPE_KEYS.findUniqueOrThrow),\n count: new Set(OPERATION_SHAPE_KEYS.count),\n aggregate: new Set(OPERATION_SHAPE_KEYS.aggregate),\n groupBy: new Set(OPERATION_SHAPE_KEYS.groupBy),\n}\n\nexport const MUTATION_SHAPE_KEYS = {\n create: new Set(OPERATION_SHAPE_KEYS.create),\n createMany: new Set(OPERATION_SHAPE_KEYS.createMany),\n createManyAndReturn: new Set(OPERATION_SHAPE_KEYS.createManyAndReturn),\n update: new Set(OPERATION_SHAPE_KEYS.update),\n updateMany: new Set(OPERATION_SHAPE_KEYS.updateMany),\n updateManyAndReturn: new Set(OPERATION_SHAPE_KEYS.updateManyAndReturn),\n upsert: new Set(OPERATION_SHAPE_KEYS.upsert),\n delete: new Set(OPERATION_SHAPE_KEYS.delete),\n deleteMany: new Set(OPERATION_SHAPE_KEYS.deleteMany),\n}","import type {\n ScopeMap,\n GuardGeneratedConfig,\n GuardLogger,\n} from \"../shared/types.js\";\nimport { PolicyError, ShapeError } from \"../shared/errors.js\";\n\nconst READ_OPS = new Set([\n \"findMany\",\n \"findFirst\",\n \"findFirstOrThrow\",\n \"count\",\n]);\n\nconst AGGREGATE_OPS = new Set([\"aggregate\", \"groupBy\"]);\n\nconst FIND_UNIQUE_OPS = new Set([\"findUnique\", \"findUniqueOrThrow\"]);\n\nconst CREATE_OPS = new Set([\"create\", \"createMany\", \"createManyAndReturn\"]);\n\nconst UNIQUE_MUTATION_OPS = new Set([\"update\", \"delete\"]);\n\nconst MULTI_MUTATION_OPS = new Set([\n \"updateMany\",\n \"updateManyAndReturn\",\n \"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 stripScopeFksFromWhere(\n where: Record<string, unknown>,\n scopeFks: Set<string>,\n log: GuardLogger,\n model: string,\n): Record<string, unknown> {\n let result = where;\n for (const fk of scopeFks) {\n if (fk in result) {\n if (result === where) result = { ...where };\n log.warn(\n `prisma-guard: Scope FK \"${fk}\" found in where for model \"${model}\". Stripped in favor of scope context.`,\n );\n delete result[fk];\n }\n }\n return result;\n}\n\nfunction buildScopedUniqueWhere(\n existingWhere: Record<string, unknown> | undefined,\n conditions: Record<string, unknown>[],\n scopeFks: Set<string>,\n log: GuardLogger,\n model: string,\n): Record<string, unknown> {\n let cleaned = existingWhere;\n if (cleaned) {\n cleaned = stripScopeFksFromWhere(cleaned, scopeFks, log, model);\n }\n if (!cleaned || Object.keys(cleaned).length === 0) {\n return conditions.length === 1 ? conditions[0] : { AND: conditions };\n }\n const { AND: existingAnd, ...topLevel } = cleaned;\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(\n a: unknown,\n b: unknown,\n log?: GuardLogger,\n fk?: string,\n): 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 {\n readonly fk: string;\n readonly root: string;\n readonly relationName: string;\n }[],\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 const scopeFkSets = 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 scopeFkSets.set(model, fks);\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<\n Record<string, string | number | bigint>\n >;\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) => ({\n [s.fk]: ctx[s.root],\n }));\n\n const missingRoots = scopes\n .filter((s) => ctx[s.root] == null)\n .map((s) => s.root);\n\n const isMutation =\n 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 `prisma-guard: 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 const modelFks = scopeFkSets.get(model) ?? new Set<string>();\n\n const nextArgs = { ...args };\n\n if (operation === \"upsert\") {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions, modelFks, log, model);\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(\n nextArgs.create,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"create\",\n );\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(\n nextArgs.update,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"mutate\",\n );\n }\n return query(nextArgs);\n }\n\n if (FIND_UNIQUE_OPS.has(operation)) {\n if (findUniqueMode === \"reject\") {\n throw new PolicyError(\n `prisma-guard: 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(\n args,\n query,\n conditions,\n scopes,\n operation,\n log,\n model,\n );\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 (\n operation === \"createMany\" ||\n operation === \"createManyAndReturn\"\n ) {\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(\n item,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"create\",\n );\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(\n nextArgs.data,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"create\",\n );\n }\n return query(nextArgs);\n }\n\n if (UNIQUE_MUTATION_OPS.has(operation)) {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions, modelFks, log, model);\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(\n nextArgs.data,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"mutate\",\n );\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(\n nextArgs.data,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"mutate\",\n );\n }\n return query(nextArgs);\n }\n\n throw new ShapeError(\n `prisma-guard: 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 {\n readonly fk: string;\n readonly root: string;\n readonly relationName: string;\n }[],\n operation: string,\n log: GuardLogger,\n model: string,\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(\n `${operation} on model \"${model}\" returned a non-object, non-null result`,\n );\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 on model \"${model}\" for ${operation} — missing FK fields (${missingFks.join(\", \")}) in result and args.where is not a valid object. Ensure the where clause is a plain object so the verification query can re-fetch FK values.`,\n );\n }\n\n let verifyResult: any;\n try {\n verifyResult = await query({ where, select: buildFkSelect(fks) });\n } catch (err: any) {\n log.warn(\n `prisma-guard: Scope verification re-query failed for ${operation} on model \"${model}\": ${err?.message ?? String(err)}`,\n );\n throw new PolicyError(\n `prisma-guard: Scope verification re-query failed for ${operation} on model \"${model}\". The re-query to fetch FK fields (${fks.join(\", \")}) returned a database error. Check server logs for the underlying cause.`,\n );\n }\n\n if (verifyResult === null) {\n throw new PolicyError(\n `prisma-guard: Scope verification re-query on model \"${model}\" returned null for an existing ${operation} result. The record may have been deleted between the original query and verification.`,\n );\n }\n if (typeof verifyResult !== \"object\" || verifyResult === null) {\n throw new PolicyError(\n `prisma-guard: Scope verification re-query on model \"${model}\" returned a non-object result.`,\n );\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 model \"${model}\" — FK field \"${fk}\" not present in verification result. Ensure \"${fk}\" is selectable on model \"${model}\" (not excluded by select or field-level access).`,\n );\n }\n if (!looseEqual(verifyObj[fk], value, log, fk)) {\n if (operation === \"findUniqueOrThrow\") {\n throw new PolicyError(\n `prisma-guard: Record on model \"${model}\" not accessible in current scope`,\n );\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 {\n ShapeError,\n formatZodError,\n wrapParseError,\n} 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 {\n WhereBuiltResult,\n UniqueWhereBuiltResult,\n} 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 validateUniqueWhereShapeConfig(\n modelName: string,\n where: Record<string, unknown>,\n method: string,\n ): void {\n const constraints = uniqueMap[modelName];\n if (!constraints || constraints.length === 0) return;\n\n const equalityFields = new Set<string>();\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\" || key === \"OR\" || key === \"NOT\") continue;\n\n if (value === true) {\n equalityFields.add(key);\n continue;\n }\n\n if (isPlainObject(value)) {\n if (\"equals\" in value) {\n equalityFields.add(key);\n }\n continue;\n }\n\n if (value !== null && value !== undefined) {\n equalityFields.add(key);\n }\n }\n\n const valid = constraints.some((constraint) =>\n constraint.every((field) => equalityFields.has(field)),\n );\n\n if (!valid) {\n const constraintDesc = constraints\n .map((c) => `(${c.join(\", \")})`)\n .join(\" | \");\n throw new ShapeError(\n `${method} on model \"${modelName}\" requires where to cover a unique constraint with equality operators only: ${constraintDesc}`,\n );\n }\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 const uniqueWhereCache = new Map<string, UniqueWhereBuiltResult>();\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 getUniqueWhereBuilt(\n whereConfig: Record<string, unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): UniqueWhereBuiltResult {\n if (!wasDynamic) {\n const cacheKey = `unique\\0${matchedKey}`;\n const cached = uniqueWhereCache.get(cacheKey);\n if (cached) return cached;\n const built = queryBuilder.buildUniqueWhereSchema(\n modelName,\n whereConfig,\n );\n uniqueWhereCache.set(cacheKey, built);\n return built;\n }\n return queryBuilder.buildUniqueWhereSchema(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 let validated: Record<string, unknown>;\n try {\n validated = projection.zodSchema.parse(projectionBody) as Record<\n string,\n unknown\n >;\n } catch (err) {\n wrapParseError(\n err,\n `Invalid select/include projection on model \"${modelName}\" for ${method}`,\n );\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 try {\n validatedWhere = built.schema.parse(sanitizedWhere) as\n | Record<string, unknown>\n | undefined;\n } catch (err) {\n wrapParseError(err, `Invalid \"where\" clause on model \"${modelName}\"`);\n }\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 const expectedFields = shape.where\n ? Object.keys(shape.where).join(\", \")\n : \"none defined\";\n throw new ShapeError(\n `${method} on model \"${modelName}\" requires a where condition. Expected fields: ${expectedFields}`,\n );\n }\n return where;\n }\n\n function buildUniqueWhereFromShape(\n shape: GuardShape,\n bodyWhere: unknown,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n if (!shape.where) return {};\n\n const built = getUniqueWhereBuilt(shape.where, matchedKey, wasDynamic);\n let result: Record<string, unknown> = {};\n\n if (built.schema) {\n if (bodyWhere !== undefined && bodyWhere !== null) {\n if (!isPlainObject(bodyWhere)) {\n throw new ShapeError(\n `Invalid \"where\" on model \"${modelName}\": unique where must be a plain object`,\n );\n }\n const sanitized = { ...(bodyWhere as Record<string, unknown>) };\n for (const key of built.forcedOnlyKeys) {\n delete sanitized[key];\n }\n try {\n result = built.schema.parse(sanitized) as Record<string, unknown>;\n } catch (err) {\n const allowedFields = Object.keys(shape.where!).join(\", \");\n wrapParseError(\n err,\n `Invalid unique \"where\" on model \"${modelName}\". Allowed fields: ${allowedFields}`,\n );\n }\n }\n } else if (bodyWhere !== undefined && bodyWhere !== null) {\n if (isPlainObject(bodyWhere)) {\n const hasOnlyForcedKeys =\n built.forcedOnlyKeys.size > 0 &&\n Object.keys(bodyWhere).every((k) => built.forcedOnlyKeys.has(k));\n if (!hasOnlyForcedKeys && Object.keys(bodyWhere).length > 0) {\n throw new ShapeError(\n `Unique where on model \"${modelName}\" contains only forced values. Client where input is not accepted.`,\n );\n }\n }\n }\n\n for (const [key, value] of Object.entries(built.forced)) {\n result[key] = value;\n }\n\n return result;\n }\n\n function requireUniqueWhere(\n shape: GuardShape,\n bodyWhere: unknown,\n method: string,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n const where = buildUniqueWhereFromShape(\n shape,\n bodyWhere,\n matchedKey,\n wasDynamic,\n );\n if (Object.keys(where).length === 0) {\n const constraints = uniqueMap[modelName];\n const constraintDesc = constraints\n ? constraints.map((c) => `(${c.join(\", \")})`).join(\" | \")\n : \"unknown\";\n const expectedFields = shape.where\n ? Object.keys(shape.where).join(\", \")\n : \"none defined\";\n throw new ShapeError(\n `${method} on model \"${modelName}\" requires a unique where condition. ` +\n `Unique constraints: ${constraintDesc}. Shape allows: ${expectedFields}`,\n );\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, modelName);\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 modelName\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, modelName),\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 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 modelName\n );\n\n let where: Record<string, unknown>;\n if (isUniqueWhere) {\n if (resolved.shape.where) {\n validateUniqueWhereShapeConfig(\n modelName,\n resolved.shape.where,\n method,\n );\n }\n where = requireUniqueWhere(\n resolved.shape,\n resolved.body.where,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap);\n } else {\n maybeValidateUniqueWhere(modelName, resolved.shape, method);\n where = 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 }\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\n let where: Record<string, unknown>;\n if (isUniqueWhere) {\n if (resolved.shape.where) {\n validateUniqueWhereShapeConfig(\n modelName,\n resolved.shape.where,\n method,\n );\n }\n where = requireUniqueWhere(\n resolved.shape,\n resolved.body.where,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap);\n } else {\n maybeValidateUniqueWhere(modelName, resolved.shape, method);\n where = 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 }\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 validateUniqueWhereShapeConfig(\n modelName,\n resolved.shape.where,\n \"upsert\",\n );\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 modelName\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 modelName\n );\n\n const where = requireUniqueWhere(\n resolved.shape,\n resolved.body.where,\n \"upsert\",\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}","import { z } from \"zod\";\nimport type {\n TypeMap,\n ScopeMap,\n ZodDefaults,\n DataFieldRefine,\n} from \"../shared/types.js\";\nimport { ShapeError, formatZodError } 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 modelName?: string,\n): Record<string, unknown> {\n if (bodyData === undefined || bodyData === null) {\n throw new ShapeError(`${method} requires \"data\" in request body`);\n }\n let validated: Record<string, unknown>;\n try {\n validated = cached.schema.parse(bodyData);\n } catch (err) {\n if (err instanceof ShapeError) throw err;\n if (err && typeof err === 'object' && 'issues' in err) {\n const context = modelName\n ? `Invalid data for ${method} on model \"${modelName}\"`\n : `Invalid data for ${method}`;\n throw new ShapeError(`${context}: ${formatZodError(err as any)}`, { cause: err });\n }\n throw err;\n }\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}","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 if ('default' in namedMap) {\n const shapeOrFn = namedMap['default']\n const wasDynamic = typeof shapeOrFn === 'function'\n const shape = wasDynamic\n ? resolveDynamicShape(shapeOrFn as (ctx: any) => GuardShape, contextFn)\n : shapeOrFn as GuardShape\n return { shape, body: parsed, matchedKey: 'default', wasDynamic }\n }\n\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, or add a \"default\" variant.`,\n )\n }\n\n const patterns = Object.keys(namedMap)\n const matched = matchCallerPattern(patterns, caller)\n if (!matched) {\n if ('default' in namedMap) {\n const shapeOrFn = namedMap['default']\n const wasDynamic = typeof shapeOrFn === 'function'\n const shape = wasDynamic\n ? resolveDynamicShape(shapeOrFn as (ctx: any) => GuardShape, contextFn)\n : shapeOrFn as GuardShape\n return { shape, body: parsed, matchedKey: 'default', wasDynamic }\n }\n\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":["import_zod","import_zod","import_zod","supportedOps","import_zod","import_zod","actual","import_zod","import_zod","import_zod","import_zod","wasDynamic","shape","parsed","shapeOrFn","patterns"]}
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/index.ts","../../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/shared/operation-shape-keys.ts","../../src/runtime/scope-extension.ts","../../src/runtime/model-guard.ts","../../src/runtime/model-guard-data.ts","../../src/runtime/model-guard-resolve.ts"],"sourcesContent":["export { createGuard } from \"./guard.js\";\nexport { PolicyError, ShapeError, CallerError } from \"../shared/errors.js\";\nexport { force, unsupported } from \"../shared/constants.js\";\nexport type {\n FieldMeta,\n InputOpts,\n ModelOpts,\n QueryMethod,\n MutationMethod,\n ShapeConfig,\n ShapeOrFn,\n NestedIncludeArgs,\n NestedSelectArgs,\n ScopeEntry,\n ScopeMap,\n TypeMap,\n EnumMap,\n ZodChains,\n ZodDefaults,\n UniqueConstraint,\n UniqueMap,\n MissingScopeContextMode,\n GuardGeneratedConfig,\n GuardConfig,\n GuardLogger,\n QuerySchema,\n InputSchema,\n GuardShape,\n GuardShapeOrFn,\n GuardInput,\n GuardedModel,\n} from \"../shared/types.js\";\nexport type {\n TypeMapConst,\n FieldMetaConst,\n ShapeDepth,\n TypedGuardShape,\n TypedShapeProps,\n OperationShape,\n ShapeInput,\n TypedWhere,\n TypedProjection,\n TypedInclude,\n TypedCountSelect,\n NumericFields,\n ComparableFields,\n UniqueConstraintConst,\n UniqueMapConst,\n TypedUniqueWhere,\n} from \"../shared/typed-shape.js\";\nexport type { OperationName } from \"../shared/operation-shape-keys.js\";\n","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, ZodIssue } 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\nfunction formatIssue(issue: ZodIssue): string {\n const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : ''\n const code = issue.code as string\n\n if (code === 'invalid_union') {\n const unionErrors = (issue as any).unionErrors as ZodError[] | undefined\n if (unionErrors && unionErrors.length > 0) {\n const branches = unionErrors\n .map((ue, i) => {\n const nested = ue.issues.map(formatIssue).join(', ')\n return `branch ${i + 1}: [${nested}]`\n })\n .join(' | ')\n return `${path}No matching variant (${branches})`\n }\n return `${path}No matching variant`\n }\n\n if (issue.code === 'unrecognized_keys') {\n const keys = (issue as any).keys as string[] | undefined\n if (keys && keys.length > 0) {\n return `${path}Unrecognized key(s): ${keys.join(', ')}`\n }\n }\n\n if (issue.code === 'invalid_type') {\n const expected = (issue as any).expected\n const received = (issue as any).received\n if (expected && received) {\n return `${path}Expected ${expected}, received ${received}`\n }\n }\n\n if (code === 'invalid_enum_value') {\n const options = (issue as any).options\n if (options) {\n return `${path}Invalid value. Expected one of: ${options.join(', ')}`\n }\n }\n\n if (code === 'too_small') {\n const minimum = (issue as any).minimum\n const type = (issue as any).type\n if (type === 'string' && minimum !== undefined) {\n return `${path}String must contain at least ${minimum} character(s)`\n }\n if (type === 'array' && minimum !== undefined) {\n return `${path}Array must contain at least ${minimum} element(s)`\n }\n if (type === 'number' && minimum !== undefined) {\n return `${path}Number must be >= ${minimum}`\n }\n return `${path}${issue.message}`\n }\n\n if (code === 'too_big') {\n const maximum = (issue as any).maximum\n const type = (issue as any).type\n if (type === 'string' && maximum !== undefined) {\n return `${path}String must contain at most ${maximum} character(s)`\n }\n if (type === 'array' && maximum !== undefined) {\n return `${path}Array must contain at most ${maximum} element(s)`\n }\n if (type === 'number' && maximum !== undefined) {\n return `${path}Number must be <= ${maximum}`\n }\n return `${path}${issue.message}`\n }\n\n if (code === 'invalid_format') {\n const format = (issue as any).format\n if (format) {\n return `${path}Invalid ${format} format`\n }\n }\n\n if (code === 'invalid_value') {\n const values = (issue as any).values\n if (values) {\n return `${path}Invalid value. Expected one of: ${values.join(', ')}`\n }\n }\n\n return `${path}${issue.message}`\n}\n\nexport function formatZodError(err: ZodError): string {\n return err.issues.map(formatIssue).join('; ')\n}\n\nexport function wrapParseError(err: unknown, context: string): never {\n if (err instanceof ShapeError) {\n throw new ShapeError(`${context}: ${err.message}`, { cause: err })\n }\n if (err && typeof err === 'object' && 'issues' in err) {\n throw new ShapeError(`${context}: ${formatZodError(err as ZodError)}`, { cause: err })\n }\n throw err\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([\n z.date(),\n z.string().refine(\n (s) => !isNaN(Date.parse(s)),\n \"Invalid date string\",\n ),\n ])\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().transform((v) => Math.trunc(v)).pipe(z.number().int()),\n z\n .string()\n .regex(/^-?\\d+(\\.\\d+)?$/)\n .transform((v) => Math.trunc(Number(v))),\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}","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 \"search\",\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\"]);\n\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[];\nexport function getSupportedOperators(\n fieldType: string,\n isList?: boolean,\n isEnum?: boolean,\n): string[];\nexport function getSupportedOperators(\n input: FieldMeta | string,\n isList = false,\n isEnum = false,\n): string[] {\n let fieldType: string;\n let list: boolean;\n let enumField: boolean;\n\n if (typeof input === \"string\") {\n fieldType = input;\n list = isList;\n enumField = isEnum;\n } else {\n fieldType = input.type;\n list = input.isList;\n enumField = input.isEnum === true;\n }\n\n if (list) return [...SCALAR_LIST_OPERATORS];\n if (enumField) return [...ENUM_OPERATORS];\n\n const ops = SCALAR_OPERATORS[fieldType];\n if (!ops) return [];\n\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\n if (!values || values.length === 0) {\n throw new ShapeError(`Unknown enum: ${fieldMeta.type}`);\n }\n\n base = z.enum(values as unknown as [string, ...string[]]);\n } else {\n const factory = scalarBase[fieldMeta.type];\n\n if (!factory) {\n throw new ShapeError(`Unknown scalar type: ${fieldMeta.type}`);\n }\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\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\") {\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(`Operator \"${operator}\" not supported for Json fields`);\n}\n\nfunction buildNotFilterSchema(\n fieldMeta: FieldMeta,\n scalarSchema: z.ZodTypeAny,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n const allOps = getSupportedOperators(fieldMeta);\n const nestedOps = allOps.filter((op) => op !== \"not\");\n\n if (nestedOps.length === 0) {\n return scalarSchema;\n }\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {};\n\n for (const op of nestedOps) {\n nestedSchemas[op] = createOperatorSchema(\n fieldMeta,\n op,\n enumMap,\n scalarBase,\n ).optional();\n }\n\n const nestedKeys = Object.keys(nestedSchemas);\n\n const nestedObj = z\n .object(nestedSchemas)\n .strict()\n .refine(\n (value) =>\n nestedKeys.some(\n (key) => (value as Record<string, unknown>)[key] !== undefined,\n ),\n { message: \"not filter must specify at least one operator\" },\n );\n\n return z.union([scalarSchema, nestedObj]);\n}\n\nexport function createOperatorSchema(\n fieldMeta: FieldMeta,\n operator: string,\n enumMap: EnumMap,\n scalarBase: ScalarBaseMap,\n): z.ZodTypeAny {\n const allowedOps = getSupportedOperators(fieldMeta);\n\n if (!allowedOps.includes(operator)) {\n if (fieldMeta.isList) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for scalar list fields`,\n );\n }\n\n if (fieldMeta.isEnum) {\n throw new ShapeError(\n `Operator \"${operator}\" not supported for enum fields`,\n );\n }\n\n if (fieldMeta.type === \"Bytes\" && allowedOps.length === 0) {\n throw new ShapeError(\n `Type \"${fieldMeta.type}\" does not support filter operators`,\n );\n }\n\n throw new ShapeError(\n `Operator \"${operator}\" not supported for type \"${fieldMeta.type}\"`,\n );\n }\n\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\n if (!values || values.length === 0) {\n throw new ShapeError(`Unknown enum: ${fieldMeta.type}`);\n }\n\n const enumSchema = z.enum(values as unknown as [string, ...string[]]);\n\n if (operator === \"equals\") {\n return !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n }\n\n if (operator === \"not\") {\n const scalarSchema = !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n\n return buildNotFilterSchema(\n fieldMeta,\n scalarSchema,\n enumMap,\n scalarBase,\n );\n }\n\n const itemSchema = !fieldMeta.isRequired\n ? z.union([enumSchema, z.null()])\n : enumSchema;\n\n return z.preprocess(coerceToArray, z.array(itemSchema));\n }\n\n if (fieldMeta.type === \"Json\") {\n if (operator === \"not\") {\n const jsonValue = z.unknown();\n const scalarSchema = !fieldMeta.isRequired\n ? z.union([jsonValue, z.null()])\n : jsonValue;\n\n return buildNotFilterSchema(\n fieldMeta,\n scalarSchema,\n enumMap,\n scalarBase,\n );\n }\n\n return createJsonOperatorSchema(fieldMeta, operator);\n }\n\n const factory = scalarBase[fieldMeta.type];\n\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\") {\n return !fieldMeta.isRequired ? z.union([coerced, z.null()]) : coerced;\n }\n\n if (operator === \"not\") {\n const scalarSchema = !fieldMeta.isRequired\n ? z.union([coerced, z.null()])\n : coerced;\n\n return buildNotFilterSchema(fieldMeta, scalarSchema, enumMap, scalarBase);\n }\n\n if (operator === \"in\" || operator === \"notIn\") {\n const itemSchema = !fieldMeta.isRequired\n ? z.union([coerced, z.null()])\n : coerced;\n\n return z.preprocess(coerceToArray, z.array(itemSchema));\n }\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 value\n const allNumeric = keys.every((k) => /^\\d+$/.test(k))\n if (!allNumeric) return value\n const indices = keys.map(Number).sort((a, b) => a - b)\n for (let i = 0; i < indices.length; i++) {\n if (indices[i] !== i) return value\n }\n const obj = value as Record<string, unknown>\n const result: unknown[] = new Array(indices.length)\n for (let i = 0; i < indices.length; i++) {\n result[i] = obj[String(i)]\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 OrderByFieldConfig,\n} from \"../shared/types.js\";\nimport { ShapeError, CallerError } from \"../shared/errors.js\";\nimport { SHAPE_CONFIG_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 { ScalarBaseMap } from \"../shared/scalar-base.js\";\nimport { READ_METHOD_ALLOWED_ARGS } from \"../shared/operation-shape-keys.js\";\n\nconst METHOD_ALLOWED_ARGS: Record<QueryMethod, Set<string>> =\n READ_METHOD_ALLOWED_ARGS as Record<QueryMethod, Set<string>>;\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(\n typeMap,\n enumMap,\n scalarBase,\n uniqueMap,\n );\n\n const argsBuilder = createArgsBuilder(\n typeMap,\n enumMap,\n uniqueMap,\n scalarBase,\n );\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\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 }\n\n if (!allowed.has(key)) {\n throw new ShapeError(`Arg \"${key}\" not allowed for method \"${method}\"`);\n }\n }\n\n if (UNIQUE_WHERE_METHODS.has(method) && !shape.where) {\n throw new ShapeError(`${method} shape must define \"where\"`);\n }\n\n if (method === \"groupBy\" && !shape.by) {\n throw new ShapeError('groupBy shape must define \"by\"');\n }\n\n if (method === \"groupBy\" && (shape.include || shape.select)) {\n throw new ShapeError('groupBy does not support \"include\" or \"select\"');\n }\n\n if (method === \"aggregate\" && (shape.include || shape.select)) {\n throw new ShapeError('aggregate does not support \"include\" or \"select\"');\n }\n\n if (method === \"count\" && shape.include) {\n throw new ShapeError('count does not support \"include\"');\n }\n\n if (\n method === \"groupBy\" &&\n shape.orderBy &&\n (shape.orderBy as unknown) !== true\n ) {\n const bySet = new Set(shape.by);\n\n for (const fieldName of Object.keys(shape.orderBy)) {\n if (fieldName === \"_count\") continue;\n\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\n if (method === \"groupBy\" && shape.having) {\n const bySet = new Set(shape.by);\n\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\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\n const result = shapeOrFn(ctx);\n\n if (!isPlainObject(result)) {\n throw new ShapeError(\n \"Dynamic shape function must return a plain object\",\n );\n }\n\n return result as ShapeConfig;\n }\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 builtWhere = UNIQUE_WHERE_METHODS.has(method)\n ? whereBuilder.buildUniqueWhereSchema(model, shape.where)\n : whereBuilder.buildWhereSchema(model, shape.where);\n\n if (builtWhere.schema) {\n schemaFields.where = builtWhere.schema;\n }\n\n forcedWhere = builtWhere.forced;\n forcedOnlyWhereKeys = builtWhere.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\n for (const field of shape.by) {\n groupByOrderFields[field] = sortEnum.optional();\n }\n\n groupByOrderFields._count = sortEnum.optional();\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\n schemaFields.orderBy = z\n .union([\n singleSchema,\n z.preprocess(coerceToArray, z.array(singleSchema).min(1)),\n ])\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\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\n countFields[countField] = sortEnum.optional();\n }\n\n const countKeys = Object.keys(countFields);\n\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\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\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\n schemaFields.orderBy = z\n .union([\n singleSchema,\n z.preprocess(coerceToArray, z.array(singleSchema).min(1)),\n ])\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 }\n\n if (shape.take) {\n schemaFields.take = argsBuilder.buildTakeSchema(shape.take);\n }\n\n if (shape.skip !== undefined) {\n if (shape.skip !== true) {\n throw new ShapeError('Shape config \"skip\" must be true');\n }\n\n schemaFields.skip = z.number().int().min(0).optional();\n }\n\n if (shape.distinct) {\n schemaFields.distinct = argsBuilder.buildDistinctSchema(\n model,\n shape.distinct,\n );\n }\n\n if (shape._count) {\n schemaFields._count = argsBuilder.buildCountFieldSchema(\n model,\n shape._count,\n \"_count\",\n );\n }\n\n if (shape._avg) {\n schemaFields._avg = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_avg\",\n shape._avg,\n );\n }\n\n if (shape._sum) {\n schemaFields._sum = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_sum\",\n shape._sum,\n );\n }\n\n if (shape._min) {\n schemaFields._min = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_min\",\n shape._min,\n );\n }\n\n if (shape._max) {\n schemaFields._max = argsBuilder.buildAggregateFieldSchema(\n model,\n \"_max\",\n shape._max,\n );\n }\n\n if (shape.by) {\n schemaFields.by = argsBuilder.buildBySchema(model, shape.by);\n }\n\n if (shape.having) {\n schemaFields.having = argsBuilder.buildHavingSchema(\n model,\n shape.having,\n );\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\n return { key: matched, shape: shapes[matched] };\n }\n\n function resolveDefaultShape<TCtx>(\n config: Record<string, ShapeOrFn<TCtx>>,\n model: string,\n method: QueryMethod,\n normalizedBody: unknown,\n opts: { ctx?: TCtx; caller?: string } | undefined,\n builtCache: Map<string, BuiltShape>,\n isUnique: boolean,\n ): Record<string, unknown> {\n const shapeOrFn = config.default;\n let built: BuiltShape;\n\n if (typeof shapeOrFn === \"function\") {\n const resolved = resolveAndValidateShape(shapeOrFn, opts?.ctx);\n built = buildShapeZodSchema(model, method, resolved);\n } else {\n built = builtCache.get(\"default\")!;\n }\n\n return applyBuiltShape(built, normalizedBody, isUnique);\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\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\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 namedConfig = config as Record<string, ShapeOrFn<TCtx>>;\n const caller = opts?.caller;\n\n if (typeof caller !== \"string\") {\n if (\"default\" in namedConfig) {\n return resolveDefaultShape(\n namedConfig,\n model,\n method,\n normalizedBody,\n opts,\n builtCache,\n isUnique,\n );\n }\n\n const allowed = Object.keys(namedConfig);\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(namedConfig, caller);\n\n if (!matched) {\n if (\"default\" in namedConfig) {\n return resolveDefaultShape(\n namedConfig,\n model,\n method,\n normalizedBody,\n opts,\n builtCache,\n isUnique,\n );\n }\n\n const allowed = Object.keys(namedConfig);\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 buildUniqueWhereSchema: whereBuilder.buildUniqueWhereSchema,\n buildIncludeSchema: projectionBuilder.buildIncludeSchema,\n buildSelectSchema: projectionBuilder.buildSelectSchema,\n };\n}","export const SHAPE_CONFIG_KEY_LIST = [\n 'where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip',\n 'distinct', 'having', '_count', '_avg', '_sum', '_min', '_max', 'by',\n] as const\n\nexport type ShapeConfigKey = (typeof SHAPE_CONFIG_KEY_LIST)[number]\n\nexport const SHAPE_CONFIG_KEYS = new Set<string>(SHAPE_CONFIG_KEY_LIST)\n\nexport const GUARD_SHAPE_KEY_LIST = [\n 'data', 'create', 'update', ...SHAPE_CONFIG_KEY_LIST,\n] as const\n\nexport type GuardShapeKey = (typeof GUARD_SHAPE_KEY_LIST)[number]\n\nexport const GUARD_SHAPE_KEYS = new Set<string>(GUARD_SHAPE_KEY_LIST)\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 {\n TypeMap,\n EnumMap,\n FieldMeta,\n UniqueMap,\n UniqueConstraint,\n} 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, createBaseType } 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 {\n wrapWithInputCoercion,\n type ScalarBaseMap,\n} 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\nexport interface UniqueWhereBuiltResult {\n schema: z.ZodObject<any> | 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 uniqueMap: UniqueMap = {},\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 scalarConditions,\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 parentConditions: Record<string, unknown>,\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 let hasForcedNull = 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 (opValue === null) {\n if (!TO_ONE_RELATION_OPS.has(op)) {\n throw new ShapeError(\n `Null value for operator \"${op}\" is only valid on to-one relation operators (is, isNot), not on \"${key}\"`,\n );\n }\n const existing = parentConditions[key];\n if (existing && isPlainObject(existing)) {\n (existing as Record<string, unknown>)[op] = null;\n } else {\n parentConditions[key] = { [op]: null };\n }\n hasForcedNull = true;\n continue;\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, or null for to-one existence checks`,\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 && !hasForcedNull) {\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 && !hasForcedNull) {\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 function getUniqueConstraint(\n model: string,\n selector: string,\n ): UniqueConstraint | null {\n return (\n (uniqueMap[model] ?? []).find(\n (constraint) => constraint.selector === selector,\n ) ?? null\n );\n }\n\n function buildDirectUniqueSchema(fieldMeta: FieldMeta): z.ZodTypeAny {\n const base = createBaseType(fieldMeta, enumMap, scalarBase);\n\n if (!fieldMeta.isEnum && !fieldMeta.isRelation && !fieldMeta.isUnsupported) {\n return wrapWithInputCoercion(fieldMeta.type, fieldMeta.isList, base);\n }\n\n return base;\n }\n\n function parseForcedUniqueValue(\n model: string,\n fieldName: string,\n fieldMeta: FieldMeta,\n value: unknown,\n ): unknown {\n const schema = buildDirectUniqueSchema(fieldMeta);\n const actual = isForcedValue(value) ? value.value : value;\n\n try {\n return schema.parse(actual);\n } catch (err: any) {\n throw new ShapeError(\n `Invalid forced value for unique where \"${model}.${fieldName}\": ${err.message}`,\n );\n }\n }\n\n function assertCompoundSelectorConfig(\n model: string,\n selector: string,\n constraint: UniqueConstraint,\n value: unknown,\n ): Record<string, unknown> {\n const actual = isForcedValue(value) ? value.value : value;\n\n if (!isPlainObject(actual)) {\n throw new ShapeError(\n `Compound unique selector \"${model}.${selector}\" must be an object with fields: ${constraint.fields.join(\", \")}`,\n );\n }\n\n const allowed = new Set(constraint.fields);\n const keys = Object.keys(actual);\n\n for (const key of keys) {\n if (!allowed.has(key)) {\n throw new ShapeError(\n `Unknown field \"${key}\" in compound unique selector \"${model}.${selector}\". Allowed fields: ${constraint.fields.join(\", \")}`,\n );\n }\n }\n\n for (const field of constraint.fields) {\n if (!(field in actual)) {\n throw new ShapeError(\n `Missing field \"${field}\" in compound unique selector \"${model}.${selector}\"`,\n );\n }\n }\n\n return actual;\n }\n\n function buildUniqueWhereSchema(\n model: string,\n whereConfig: Record<string, unknown>,\n ): UniqueWhereBuiltResult {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n const forcedConditions: Record<string, unknown> = {};\n const forcedOnlyKeys = new Set<string>();\n\n for (const [key, value] of Object.entries(whereConfig)) {\n if (COMBINATOR_KEYS.has(key)) {\n throw new ShapeError(\n `Combinator \"${key}\" is not supported in unique where for model \"${model}\"`,\n );\n }\n\n const constraint = getUniqueConstraint(model, key);\n\n if (constraint && constraint.fields.length > 1) {\n const compoundConfig = assertCompoundSelectorConfig(\n model,\n key,\n constraint,\n value,\n );\n\n const nestedSchemas: Record<string, z.ZodTypeAny> = {};\n const forcedCompound: Record<string, unknown> = {};\n\n for (const fieldName of constraint.fields) {\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta) {\n throw new ShapeError(\n `Unknown field \"${fieldName}\" in compound unique selector \"${model}.${key}\"`,\n );\n }\n\n if (fieldMeta.isRelation) {\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in compound unique selector \"${model}.${key}\"`,\n );\n }\n\n const fieldValue = compoundConfig[fieldName];\n const forced = isForcedValue(fieldValue);\n\n if (!forced && isPlainObject(fieldValue)) {\n const operators = Object.keys(fieldValue);\n throw new ShapeError(\n `Invalid compound unique where shape for \"${model}.${key}.${fieldName}\". Prisma compound unique selectors do not accept filter operator objects${operators.length ? `: ${operators.join(\", \")}` : \"\"}. Use direct values only.`,\n );\n }\n\n const directSchema = buildDirectUniqueSchema(fieldMeta);\n\n if (fieldValue === true) {\n nestedSchemas[fieldName] = directSchema;\n } else {\n forcedCompound[fieldName] = parseForcedUniqueValue(\n model,\n fieldName,\n fieldMeta,\n fieldValue,\n );\n }\n }\n\n if (Object.keys(nestedSchemas).length > 0) {\n fieldSchemas[key] = z.object(nestedSchemas).strict();\n }\n\n if (Object.keys(forcedCompound).length > 0) {\n forcedConditions[key] = forcedCompound;\n }\n\n if (Object.keys(nestedSchemas).length === 0) {\n forcedOnlyKeys.add(key);\n }\n\n continue;\n }\n\n const fieldMeta = modelFields[key];\n if (!fieldMeta) {\n const selectors = (uniqueMap[model] ?? [])\n .map((constraint) => constraint.selector)\n .join(\", \");\n throw new ShapeError(\n `Unknown unique field or selector \"${key}\" on model \"${model}\"${selectors ? `. Unique selectors: ${selectors}` : \"\"}`,\n );\n }\n\n if (fieldMeta.isRelation) {\n throw new ShapeError(\n `Relation field \"${key}\" cannot be used in unique where for model \"${model}\"`,\n );\n }\n\n const forced = isForcedValue(value);\n\n if (!forced && isPlainObject(value)) {\n const keys = Object.keys(value);\n\n if (keys.includes(\"equals\")) {\n throw new ShapeError(\n `Invalid unique where shape for \"${model}.${key}\". Prisma WhereUniqueInput does not accept filter operator objects. Use { ${key}: true } instead of { ${key}: { equals: true } }.`,\n );\n }\n\n throw new ShapeError(\n `Invalid unique where shape for \"${model}.${key}\". Prisma WhereUniqueInput does not accept operators: ${keys.join(\", \")}. Use a direct unique value shape, for example { ${key}: true }.`,\n );\n }\n\n const directSchema = buildDirectUniqueSchema(fieldMeta);\n\n if (value === true) {\n fieldSchemas[key] = directSchema;\n continue;\n }\n\n forcedConditions[key] = parseForcedUniqueValue(model, key, fieldMeta, value);\n forcedOnlyKeys.add(key);\n }\n\n return {\n schema:\n Object.keys(fieldSchemas).length > 0\n ? z.object(fieldSchemas).strict()\n : null,\n forced: {\n conditions: forcedConditions,\n relations: {},\n },\n forcedOnlyKeys,\n };\n }\n\n return { buildWhereSchema, buildUniqueWhereSchema };\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 (value instanceof RegExp) return new RegExp(value.source, value.flags) 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 { isPlainObject } from \"../shared/utils.js\";\nimport { deepClone } from \"../shared/deep-clone.js\";\nimport { formatZodError, ShapeError } from \"../shared/errors.js\";\nimport { isForcedValue } from \"../shared/constants.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 = {\n conditions: {},\n relations: {},\n};\n\nexport function hasWhereForced(f: WhereForced): boolean {\n return (\n Object.keys(f.conditions).length > 0 || Object.keys(f.relations).length > 0\n );\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\ntype UniqueConstraintLike = {\n selector: string;\n fields: readonly string[];\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\n const relObj = result[relName] as Record<string, unknown>;\n\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\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\nfunction uniqueValuesEqual(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 (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n return a.every((v, i) => uniqueValuesEqual(v, b[i]));\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every((key) => key in b && uniqueValuesEqual(a[key], b[key]));\n }\n\n return false;\n}\n\nfunction mergeUniqueValue(\n target: Record<string, unknown>,\n key: string,\n value: unknown,\n): void {\n const cloned = deepClone(value);\n\n if (!(key in target)) {\n target[key] = cloned;\n return;\n }\n\n const existing = target[key];\n\n if (isPlainObject(existing) && isPlainObject(cloned)) {\n const merged = { ...existing };\n\n for (const [nestedKey, nestedValue] of Object.entries(cloned)) {\n if (\n nestedKey in merged &&\n !uniqueValuesEqual(merged[nestedKey], nestedValue)\n ) {\n throw new ShapeError(\n `Conflicting unique where value for \"${key}.${nestedKey}\"`,\n );\n }\n\n merged[nestedKey] = nestedValue;\n }\n\n target[key] = merged;\n return;\n }\n\n if (!uniqueValuesEqual(existing, cloned)) {\n throw new ShapeError(`Conflicting unique where value for \"${key}\"`);\n }\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 if (Object.keys(forced.relations).length > 0) {\n throw new ShapeError(\n \"Unique where forced conditions cannot contain relation filters\",\n );\n }\n\n const result: Record<string, unknown> = where ? deepClone(where) : {};\n\n for (const [key, value] of Object.entries(forced.conditions)) {\n mergeUniqueValue(result, key, value);\n }\n\n return result;\n}\n\nexport function applyBuiltShape(\n built: BuiltShape,\n body: unknown,\n isUniqueMethod: boolean,\n modelName?: string,\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 (\n isUniqueMethod &&\n hasWhereForced(built.forcedWhere) &&\n isPlainObject(bodyObj.where)\n ) {\n const where = stripUniqueWhereForcedInput(\n bodyObj.where as Record<string, unknown>,\n built.forcedWhere,\n );\n\n if (Object.keys(where).length === 0) {\n const { where: _, ...rest } = bodyObj;\n parseable = rest;\n } else {\n parseable = { ...bodyObj, where };\n }\n } else if (\n built.forcedOnlyWhereKeys.size > 0 &&\n isPlainObject(bodyObj.where)\n ) {\n const where = { ...(bodyObj.where as Record<string, unknown>) };\n\n for (const key of built.forcedOnlyWhereKeys) {\n delete where[key];\n }\n\n if (\n Object.keys(where).length === 0 &&\n hasWhereForced(built.forcedWhere)\n ) {\n const { where: _, ...rest } = bodyObj;\n parseable = rest;\n } else {\n parseable = { ...bodyObj, where };\n }\n }\n }\n }\n\n let validated: Record<string, unknown>;\n\n try {\n validated = built.zodSchema.parse(parseable) as Record<string, unknown>;\n } catch (err) {\n if (err instanceof ShapeError) throw err;\n\n if (err && typeof err === \"object\" && \"issues\" in err) {\n const context = modelName\n ? `Invalid query on model \"${modelName}\"`\n : \"Invalid query\";\n\n throw new ShapeError(`${context}: ${formatZodError(err as any)}`, {\n cause: err,\n });\n }\n\n throw err;\n }\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\n for (const [countRel, countForced] of Object.entries(countWhere)) {\n countSelect[countRel] = { where: mergeWhereForced(undefined, countForced) };\n }\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\n if (forced.where && hasWhereForced(forced.where)) {\n expanded.where = mergeWhereForced(undefined, forced.where);\n }\n\n if (forced.include) {\n expanded.include = buildForcedOnlyContainer(forced.include);\n applyForcedTree(expanded, \"include\", forced.include);\n }\n\n if (forced.select) {\n expanded.select = buildForcedOnlyContainer(forced.select);\n applyForcedTree(expanded, \"select\", forced.select);\n }\n\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? \"include\";\n\n if (!expanded[placement]) expanded[placement] = {};\n\n const placementObj = expanded[placement] as Record<string, unknown>;\n Object.assign(placementObj, buildCountForPlacement(forced._countWhere));\n }\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\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\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\n if (forced.include) {\n if (!relObj.include) {\n relObj.include = buildForcedOnlyContainer(forced.include);\n }\n\n applyForcedTree(relObj, \"include\", forced.include);\n }\n\n if (forced.select) {\n if (!relObj.select) {\n relObj.select = buildForcedOnlyContainer(forced.select);\n }\n\n applyForcedTree(relObj, \"select\", forced.select);\n }\n\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? \"include\";\n const projContainer = relObj[placement] as\n | Record<string, unknown>\n | undefined;\n\n if (projContainer) {\n applyForcedCountWhere(projContainer, forced._countWhere);\n }\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\n for (const [relName, forced] of Object.entries(tree)) {\n const nested: Record<string, unknown> = {};\n\n if (forced.where && hasWhereForced(forced.where)) {\n nested.where = mergeWhereForced(undefined, forced.where);\n }\n\n if (forced.include) {\n nested.include = buildForcedOnlyContainer(forced.include);\n }\n\n if (forced.select) {\n nested.select = buildForcedOnlyContainer(forced.select);\n }\n\n if (forced._countWhere && Object.keys(forced._countWhere).length > 0) {\n const placement = forced._countWherePlacement ?? \"include\";\n\n if (!nested[placement]) nested[placement] = {};\n\n const placementObj = nested[placement] as Record<string, unknown>;\n Object.assign(placementObj, buildCountForPlacement(forced._countWhere));\n }\n\n result[relName] = Object.keys(nested).length > 0 ? nested : true;\n }\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\n const countObj = countVal as Record<string, unknown>;\n const selectVal = countObj.select;\n\n if (!selectVal || !isPlainObject(selectVal)) return;\n\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\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\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const items = Array.isArray(value) ? value : [value];\n\n for (const item of items) {\n if (isPlainObject(item)) {\n for (const k of collectWhereFieldKeys(item)) {\n keys.add(k);\n }\n }\n }\n } else if (key !== \"OR\" && key !== \"NOT\") {\n keys.add(key);\n }\n }\n\n return keys;\n}\n\nfunction formatUniqueConstraint(constraint: UniqueConstraintLike): string {\n return constraint.fields.length === 1\n ? constraint.selector\n : `${constraint.selector}(${constraint.fields.join(\", \")})`;\n}\n\nfunction formatUniqueConstraints(\n constraints: readonly UniqueConstraintLike[],\n): string {\n return constraints.map(formatUniqueConstraint).join(\" | \");\n}\n\nfunction resolvedWhereCoversConstraint(\n where: Record<string, unknown>,\n constraint: UniqueConstraintLike,\n): boolean {\n if (constraint.fields.length === 1) {\n return constraint.fields[0] in where;\n }\n\n const value = where[constraint.selector];\n if (!isPlainObject(value)) return false;\n\n return constraint.fields.every((field) => field in value);\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 covered = constraints.some((constraint) =>\n resolvedWhereCoversConstraint(where, constraint),\n );\n\n if (!covered) {\n throw new ShapeError(\n `${method} on model \"${model}\" requires resolved where to cover a unique constraint: ${formatUniqueConstraints(constraints)}`,\n );\n }\n}\n\nfunction assertDirectUniqueShapeValue(\n model: string | undefined,\n field: string,\n value: unknown,\n typeMap?: Record<string, Record<string, { isRelation: boolean }>>,\n): void {\n if (typeMap && model) {\n const fieldMeta = typeMap[model]?.[field];\n\n if (!fieldMeta) {\n throw new ShapeError(`Unknown unique where field \"${model}.${field}\"`);\n }\n\n if (fieldMeta.isRelation) {\n throw new ShapeError(\n `Relation field \"${model}.${field}\" cannot be used in unique where`,\n );\n }\n }\n\n if (isForcedValue(value)) return;\n\n if (isPlainObject(value)) {\n const keys = Object.keys(value);\n\n throw new ShapeError(\n `Invalid unique where shape for \"${model ?? \"unknown\"}.${field}\". Prisma WhereUniqueInput does not accept filter operator objects${keys.length ? `: ${keys.join(\", \")}` : \"\"}. Use { ${field}: true } in guard shape and { ${field}: value } in request args.`,\n );\n }\n\n if (value === null || value === undefined) {\n throw new ShapeError(\n `Invalid unique where shape for \"${model ?? \"unknown\"}.${field}\". Unique fields must use true or a forced value.`,\n );\n }\n}\n\nfunction shapeCoversConstraint(\n where: Record<string, unknown>,\n constraint: UniqueConstraintLike,\n model: string,\n typeMap?: Record<string, Record<string, { isRelation: boolean }>>,\n): boolean {\n if (constraint.fields.length === 1) {\n const field = constraint.fields[0];\n\n if (!(field in where)) return false;\n\n assertDirectUniqueShapeValue(model, field, where[field], typeMap);\n\n return true;\n }\n\n if (!(constraint.selector in where)) return false;\n\n const selectorValue = where[constraint.selector];\n\n if (isForcedValue(selectorValue)) return true;\n\n if (!isPlainObject(selectorValue)) {\n throw new ShapeError(\n `Compound unique selector \"${model}.${constraint.selector}\" must be an object with fields: ${constraint.fields.join(\", \")}`,\n );\n }\n\n const allowed = new Set(constraint.fields);\n\n for (const key of Object.keys(selectorValue)) {\n if (!allowed.has(key)) {\n throw new ShapeError(\n `Unknown field \"${key}\" in compound unique selector \"${model}.${constraint.selector}\". Allowed fields: ${constraint.fields.join(\", \")}`,\n );\n }\n }\n\n for (const field of constraint.fields) {\n if (!(field in selectorValue)) {\n throw new ShapeError(\n `Missing field \"${field}\" in compound unique selector \"${model}.${constraint.selector}\"`,\n );\n }\n\n assertDirectUniqueShapeValue(model, field, selectorValue[field], typeMap);\n }\n\n return true;\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 valid = constraints.some((constraint) =>\n shapeCoversConstraint(where, constraint, model, typeMap),\n );\n\n if (!valid) {\n throw new ShapeError(\n `${method} on model \"${model}\" requires unique where shape to cover a unique constraint using Prisma unique selector syntax: ${formatUniqueConstraints(constraints)}`,\n );\n }\n}\n\nexport function stripUniqueWhereForcedInput(\n where: Record<string, unknown>,\n forced: WhereForced,\n): Record<string, unknown> {\n const result = deepClone(where);\n\n for (const [key, forcedValue] of Object.entries(forced.conditions)) {\n if (!(key in result)) continue;\n\n const currentValue = result[key];\n\n if (isPlainObject(currentValue) && isPlainObject(forcedValue)) {\n const nested = { ...currentValue };\n\n for (const nestedKey of Object.keys(forcedValue)) {\n delete nested[nestedKey];\n }\n\n if (Object.keys(nested).length === 0) {\n delete result[key];\n } else {\n result[key] = nested;\n }\n\n continue;\n }\n\n delete result[key];\n }\n\n return result;\n}\n","import { z } from \"zod\";\nimport type {\n TypeMap,\n EnumMap,\n UniqueMap,\n OrderByFieldConfig,\n UniqueConstraint,\n} from \"../shared/types.js\";\nimport { ShapeError } from \"../shared/errors.js\";\nimport {\n createBaseType,\n getSupportedOperators,\n createOperatorSchema,\n NUMERIC_TYPES,\n COMPARABLE_TYPES,\n} from \"./zod-type-map.js\";\nimport { coerceToArray } from \"../shared/utils.js\";\nimport {\n wrapWithInputCoercion,\n type ScalarBaseMap,\n} from \"../shared/scalar-base.js\";\n\nconst UNSUPPORTED_BY_TYPES = new Set([\"Json\", \"Bytes\"]);\n\nfunction requireConfigTrue(\n config: Record<string, unknown>,\n context: string,\n): 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\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction formatUniqueConstraint(constraint: UniqueConstraint): string {\n return constraint.fields.length === 1\n ? constraint.selector\n : `${constraint.selector}(${constraint.fields.join(\", \")})`;\n}\n\nfunction formatUniqueConstraints(\n constraints: readonly UniqueConstraint[],\n): string {\n return constraints.map(formatUniqueConstraint).join(\" | \");\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\n .object({ sort: sortEnum, nulls: nullsEnum.optional() })\n .strict();\n const scalarOrderSchema = z.union([sortEnum, sortWithNulls]);\n\n function validateScalarOrderByField(\n fieldName: string,\n model: string,\n modelFields: Record<\n string,\n { type: string; isList: boolean; isRelation: boolean }\n >,\n ): void {\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta)\n throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`);\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" in orderBy requires a nested config object, not true`,\n );\n if (fieldMeta.type === \"Json\")\n throw new ShapeError(\n `Json field \"${fieldName}\" cannot be used in orderBy`,\n );\n if (fieldMeta.isList)\n throw new ShapeError(\n `List field \"${fieldName}\" cannot be used in orderBy`,\n );\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)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\"`,\n );\n\n if (config === true) {\n validateScalarOrderByField(fieldName, model, modelFields);\n fieldSchemas[fieldName] = scalarOrderSchema.optional();\n continue;\n }\n\n if (!isPlainRecord(config)) {\n throw new ShapeError(\n `orderBy config for \"${fieldName}\" on model \"${model}\" must be true or a relation aggregate object`,\n );\n }\n\n if (!fieldMeta.isRelation) {\n const allowedOps = getSupportedOperators(\n fieldMeta.type,\n fieldMeta.isList,\n );\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n\n for (const [op, enabled] of Object.entries(config)) {\n if (enabled !== true) {\n throw new ShapeError(\n `orderBy operator config for \"${model}.${fieldName}.${op}\" must be true`,\n );\n }\n\n if (!allowedOps.includes(op)) {\n throw new ShapeError(\n `Operator \"${op}\" not supported for orderBy field \"${model}.${fieldName}\"`,\n );\n }\n\n opSchemas[op] = scalarOrderSchema.optional();\n }\n\n const opKeys = Object.keys(opSchemas);\n fieldSchemas[fieldName] = z\n .object(opSchemas)\n .strict()\n .refine(\n (v) =>\n opKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n {\n message: `orderBy field \"${fieldName}\" must specify at least one operator`,\n },\n )\n .optional();\n\n continue;\n }\n\n if (fieldMeta.isList) {\n if (!(\"_count\" in config)) {\n throw new ShapeError(\n `To-many relation orderBy \"${fieldName}\" only supports _count`,\n );\n }\n\n if (config._count !== true) {\n throw new ShapeError(\n `orderBy relation aggregate \"${fieldName}._count\" must be true`,\n );\n }\n\n fieldSchemas[fieldName] = z\n .object({\n _count: sortEnum.optional(),\n })\n .strict()\n .optional();\n continue;\n }\n\n const nested = buildOrderBySchema(\n fieldMeta.type,\n config as Record<string, OrderByFieldConfig>,\n );\n fieldSchemas[fieldName] = nested;\n }\n\n const fieldKeys = Object.keys(fieldSchemas);\n const singleSchema = z\n .object(fieldSchemas)\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\n return z\n .union([\n singleSchema,\n z.preprocess(coerceToArray, z.array(singleSchema).min(1)),\n ])\n .optional();\n }\n\n function buildTakeSchema(\n config: number | { max: number; default?: number },\n ): z.ZodTypeAny {\n if (typeof config === \"number\") {\n if (!Number.isFinite(config) || !Number.isInteger(config)) {\n throw new ShapeError(`take must be a finite integer, got ${config}`);\n }\n\n if (config <= 0) {\n throw new ShapeError(\"take must be a positive integer\");\n }\n\n return z.literal(config).optional();\n }\n\n if (!config || typeof config !== \"object\" || Array.isArray(config)) {\n throw new ShapeError(\"take config must be a number or { max, default? }\");\n }\n\n if (!Number.isFinite(config.max) || !Number.isInteger(config.max)) {\n throw new ShapeError(\n `take.max must be a finite integer, got ${config.max}`,\n );\n }\n\n if (config.max <= 0) {\n throw new ShapeError(\"take.max must be a positive integer\");\n }\n\n if (config.default !== undefined) {\n if (\n !Number.isFinite(config.default) ||\n !Number.isInteger(config.default)\n ) {\n throw new ShapeError(\n `take.default must be a finite integer, got ${config.default}`,\n );\n }\n\n if (config.default <= 0) {\n throw new ShapeError(\"take.default must be a positive integer\");\n }\n\n if (config.default > config.max) {\n throw new ShapeError(\"take.default cannot exceed take.max\");\n }\n\n return z.number().int().min(1).max(config.max).default(config.default);\n }\n\n return z.number().int().min(1).max(config.max).optional();\n }\n\n function buildCursorFieldSchema(\n model: string,\n fieldName: string,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta) {\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in cursor`,\n );\n }\n\n if (fieldMeta.isRelation) {\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in cursor`,\n );\n }\n\n if (fieldMeta.isList) {\n throw new ShapeError(\n `List field \"${fieldName}\" cannot be used in cursor`,\n );\n }\n\n const base = createBaseType(fieldMeta, enumMap, scalarBase);\n\n if (\n !fieldMeta.isEnum &&\n !fieldMeta.isRelation &&\n !fieldMeta.isUnsupported\n ) {\n return wrapWithInputCoercion(fieldMeta.type, fieldMeta.isList, base);\n }\n\n return base;\n }\n\n function cursorConfigMatchesConstraint(\n cursorConfig: Record<string, unknown>,\n constraint: UniqueConstraint,\n ): boolean {\n if (!(constraint.selector in cursorConfig)) return false;\n\n const value = cursorConfig[constraint.selector];\n\n if (constraint.fields.length === 1) {\n return value === true;\n }\n\n if (!isPlainRecord(value)) return false;\n\n const keys = Object.keys(value);\n\n if (keys.length !== constraint.fields.length) return false;\n\n return constraint.fields.every((field) => value[field] === true);\n }\n\n function getUniqueConstraints(model: string): readonly UniqueConstraint[] {\n const constraints = uniqueMap[model];\n\n if (constraints && constraints.length > 0) {\n return constraints;\n }\n\n const modelFields = typeMap[model];\n\n if (!modelFields) {\n throw new ShapeError(`Unknown model: ${model}`);\n }\n\n const inferred: UniqueConstraint[] = [];\n\n for (const [fieldName, fieldMeta] of Object.entries(modelFields)) {\n if (fieldMeta.isRelation) continue;\n\n if (fieldMeta.isId || fieldMeta.isUnique) {\n inferred.push({\n selector: fieldName,\n fields: [fieldName],\n });\n }\n }\n\n return inferred;\n }\n\n function buildCursorSchema(\n model: string,\n cursorConfig: Record<string, unknown>,\n ): z.ZodTypeAny {\n const constraints = getUniqueConstraints(model);\n\n if (constraints.length === 0) {\n throw new ShapeError(\n `cursor on model \"${model}\" requires at least one unique constraint`,\n );\n }\n\n const matching = constraints.find((constraint) =>\n cursorConfigMatchesConstraint(cursorConfig, constraint),\n );\n\n if (!matching) {\n throw new ShapeError(\n `cursor on model \"${model}\" must exactly match a unique selector: ${formatUniqueConstraints(constraints)}`,\n );\n }\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n\n if (matching.fields.length === 1) {\n fieldSchemas[matching.selector] = buildCursorFieldSchema(\n model,\n matching.fields[0],\n ).optional();\n } else {\n const nestedSchemas: Record<string, z.ZodTypeAny> = {};\n\n for (const field of matching.fields) {\n nestedSchemas[field] = buildCursorFieldSchema(model, field);\n }\n\n fieldSchemas[matching.selector] = z\n .object(nestedSchemas)\n .strict()\n .optional();\n }\n\n return z\n .object(fieldSchemas)\n .strict()\n .refine(\n (v) => (v as Record<string, unknown>)[matching.selector] !== undefined,\n { message: `cursor must specify \"${matching.selector}\"` },\n )\n .optional();\n }\n\n function buildDistinctSchema(\n model: string,\n distinctConfig: string[],\n ): z.ZodTypeAny {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n if (!Array.isArray(distinctConfig) || distinctConfig.length === 0) {\n throw new ShapeError(\n `distinct on model \"${model}\" must be a non-empty array of scalar fields`,\n );\n }\n\n const allowedFields = new Set<string>();\n\n for (const fieldName of distinctConfig) {\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in distinct`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in distinct`,\n );\n allowedFields.add(fieldName);\n }\n\n return z\n .union([\n z.enum([...allowedFields] as [string, ...string[]]),\n z.array(z.enum([...allowedFields] as [string, ...string[]])).min(1),\n ])\n .optional();\n }\n\n function buildBySchema(model: string, byConfig: string[]): z.ZodTypeAny {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n if (!Array.isArray(byConfig) || byConfig.length === 0) {\n throw new ShapeError(\n `groupBy \"by\" on model \"${model}\" must be a non-empty array`,\n );\n }\n\n const allowedFields = new Set<string>();\n\n for (const fieldName of byConfig) {\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in groupBy by`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in groupBy by`,\n );\n if (fieldMeta.isList)\n throw new ShapeError(\n `List field \"${fieldName}\" cannot be used in groupBy by`,\n );\n if (UNSUPPORTED_BY_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(\n `${fieldMeta.type} field \"${fieldName}\" cannot be used in groupBy by`,\n );\n }\n allowedFields.add(fieldName);\n }\n\n return z.array(z.enum([...allowedFields] as [string, ...string[]])).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\n for (const fieldName of Object.keys(havingConfig)) {\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in having`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in having`,\n );\n if (fieldMeta.isList)\n throw new ShapeError(\n `List field \"${fieldName}\" cannot be used in having`,\n );\n if (UNSUPPORTED_BY_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(\n `${fieldMeta.type} field \"${fieldName}\" cannot be used in having`,\n );\n }\n\n const allowedOps = getSupportedOperators(\n fieldMeta.type,\n fieldMeta.isList,\n );\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n\n for (const op of allowedOps) {\n opSchemas[op] = createOperatorSchema(\n fieldMeta,\n op,\n enumMap,\n scalarBase,\n ).optional();\n }\n\n if (fieldMeta.type === \"String\") {\n opSchemas.mode = z.enum([\"default\", \"insensitive\"]).optional();\n }\n\n const opKeys = Object.keys(opSchemas).filter((key) => key !== \"mode\");\n\n fieldSchemas[fieldName] = z\n .object(opSchemas)\n .strict()\n .refine(\n (v) =>\n opKeys.some((k) => (v as Record<string, unknown>)[k] !== undefined),\n {\n message: `having field \"${fieldName}\" must specify at least one operator`,\n },\n )\n .optional();\n }\n\n const fieldKeys = Object.keys(fieldSchemas);\n\n return z\n .object(fieldSchemas)\n .strict()\n .refine(\n (v) =>\n fieldKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: \"having must specify at least one field\" },\n )\n .optional();\n }\n\n function buildAggregateFieldSchema(\n model: string,\n op: \"_avg\" | \"_sum\" | \"_min\" | \"_max\",\n config: Record<string, true>,\n ): z.ZodTypeAny {\n const modelFields = typeMap[model];\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`);\n\n requireConfigTrue(config, `${op} on model \"${model}\"`);\n\n const allowedTypes =\n op === \"_avg\" || op === \"_sum\" ? NUMERIC_TYPES : COMPARABLE_TYPES;\n\n const fieldSchemas: Record<string, z.ZodTypeAny> = {};\n\n for (const fieldName of Object.keys(config)) {\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in ${op}`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in ${op}`,\n );\n if (fieldMeta.isList)\n throw new ShapeError(\n `List field \"${fieldName}\" cannot be used in ${op}`,\n );\n if (!allowedTypes.has(fieldMeta.type)) {\n throw new ShapeError(\n `Field \"${fieldName}\" of type \"${fieldMeta.type}\" cannot be used in ${op}`,\n );\n }\n\n fieldSchemas[fieldName] = z.literal(true).optional();\n }\n\n const aggregateFieldKeys = Object.keys(fieldSchemas);\n return z\n .object(fieldSchemas)\n .strict()\n .refine(\n (v) =>\n aggregateFieldKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\n { message: `${op} 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)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in ${context}`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in ${context}`,\n );\n }\n fieldSchemas[fieldName] = z.literal(true).optional();\n }\n\n const countFieldKeys = Object.keys(fieldSchemas);\n return z\n .object(fieldSchemas)\n .strict()\n .refine(\n (v) =>\n countFieldKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\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)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in count select`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in count select`,\n );\n fieldSchemas[fieldName] = z.literal(true).optional();\n }\n\n const countSelectKeys = Object.keys(fieldSchemas);\n return z\n .object(fieldSchemas)\n .strict()\n .refine(\n (v) =>\n countSelectKeys.some(\n (k) => (v as Record<string, unknown>)[k] !== undefined,\n ),\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}\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, unknown>): z.ZodTypeAny\n buildTakeSchema(config: number | { 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}","export const OPERATION_SHAPE_KEYS = {\n findMany: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findFirst: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findFirstOrThrow: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findUnique: ['where', 'include', 'select'],\n findUniqueOrThrow: ['where', 'include', 'select'],\n findManyPaginated: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n count: ['where', 'select', 'cursor', 'orderBy', 'skip', 'take'],\n aggregate: ['where', 'orderBy', 'cursor', 'take', 'skip', '_count', '_avg', '_sum', '_min', '_max'],\n groupBy: ['where', 'by', 'having', '_count', '_avg', '_sum', '_min', '_max', 'orderBy', 'take', 'skip'],\n create: ['data', 'select', 'include'],\n createMany: ['data'],\n createManyAndReturn: ['data', 'select', 'include'],\n update: ['data', 'where', 'select', 'include'],\n updateMany: ['data', 'where'],\n updateManyAndReturn: ['data', 'where', 'select', 'include'],\n upsert: ['where', 'create', 'update', 'select', 'include'],\n delete: ['where', 'select', 'include'],\n deleteMany: ['where'],\n} as const\n\nexport type OperationName = keyof typeof OPERATION_SHAPE_KEYS\n\nexport type OperationShapeKey<O extends OperationName> =\n (typeof OPERATION_SHAPE_KEYS)[O][number]\n\nexport const READ_METHOD_ALLOWED_ARGS: Record<string, Set<string>> = {\n findMany: new Set(OPERATION_SHAPE_KEYS.findMany),\n findFirst: new Set(OPERATION_SHAPE_KEYS.findFirst),\n findFirstOrThrow: new Set(OPERATION_SHAPE_KEYS.findFirstOrThrow),\n findUnique: new Set(OPERATION_SHAPE_KEYS.findUnique),\n findUniqueOrThrow: new Set(OPERATION_SHAPE_KEYS.findUniqueOrThrow),\n count: new Set(OPERATION_SHAPE_KEYS.count),\n aggregate: new Set(OPERATION_SHAPE_KEYS.aggregate),\n groupBy: new Set(OPERATION_SHAPE_KEYS.groupBy),\n}\n\nexport const MUTATION_SHAPE_KEYS = {\n create: new Set(OPERATION_SHAPE_KEYS.create),\n createMany: new Set(OPERATION_SHAPE_KEYS.createMany),\n createManyAndReturn: new Set(OPERATION_SHAPE_KEYS.createManyAndReturn),\n update: new Set(OPERATION_SHAPE_KEYS.update),\n updateMany: new Set(OPERATION_SHAPE_KEYS.updateMany),\n updateManyAndReturn: new Set(OPERATION_SHAPE_KEYS.updateManyAndReturn),\n upsert: new Set(OPERATION_SHAPE_KEYS.upsert),\n delete: new Set(OPERATION_SHAPE_KEYS.delete),\n deleteMany: new Set(OPERATION_SHAPE_KEYS.deleteMany),\n}","import type {\n ScopeMap,\n GuardGeneratedConfig,\n GuardLogger,\n} from \"../shared/types.js\";\nimport { PolicyError, ShapeError } from \"../shared/errors.js\";\n\nconst READ_OPS = new Set([\n \"findMany\",\n \"findFirst\",\n \"findFirstOrThrow\",\n \"count\",\n]);\n\nconst AGGREGATE_OPS = new Set([\"aggregate\", \"groupBy\"]);\n\nconst FIND_UNIQUE_OPS = new Set([\"findUnique\", \"findUniqueOrThrow\"]);\n\nconst CREATE_OPS = new Set([\"create\", \"createMany\", \"createManyAndReturn\"]);\n\nconst UNIQUE_MUTATION_OPS = new Set([\"update\", \"delete\"]);\n\nconst MULTI_MUTATION_OPS = new Set([\n \"updateMany\",\n \"updateManyAndReturn\",\n \"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 stripScopeFksFromWhere(\n where: Record<string, unknown>,\n scopeFks: Set<string>,\n log: GuardLogger,\n model: string,\n): Record<string, unknown> {\n let result = where;\n for (const fk of scopeFks) {\n if (fk in result) {\n if (result === where) result = { ...where };\n log.warn(\n `prisma-guard: Scope FK \"${fk}\" found in where for model \"${model}\". Stripped in favor of scope context.`,\n );\n delete result[fk];\n }\n }\n return result;\n}\n\nfunction buildScopedUniqueWhere(\n existingWhere: Record<string, unknown> | undefined,\n conditions: Record<string, unknown>[],\n scopeFks: Set<string>,\n log: GuardLogger,\n model: string,\n): Record<string, unknown> {\n let cleaned = existingWhere;\n if (cleaned) {\n cleaned = stripScopeFksFromWhere(cleaned, scopeFks, log, model);\n }\n if (!cleaned || Object.keys(cleaned).length === 0) {\n return conditions.length === 1 ? conditions[0] : { AND: conditions };\n }\n const { AND: existingAnd, ...topLevel } = cleaned;\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(\n a: unknown,\n b: unknown,\n log?: GuardLogger,\n fk?: string,\n): 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 {\n readonly fk: string;\n readonly root: string;\n readonly relationName: string;\n }[],\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 const scopeFkSets = 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 scopeFkSets.set(model, fks);\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<\n Record<string, string | number | bigint>\n >;\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) => ({\n [s.fk]: ctx[s.root],\n }));\n\n const missingRoots = scopes\n .filter((s) => ctx[s.root] == null)\n .map((s) => s.root);\n\n const isMutation =\n 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 `prisma-guard: 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 const modelFks = scopeFkSets.get(model) ?? new Set<string>();\n\n const nextArgs = { ...args };\n\n if (operation === \"upsert\") {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions, modelFks, log, model);\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(\n nextArgs.create,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"create\",\n );\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(\n nextArgs.update,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"mutate\",\n );\n }\n return query(nextArgs);\n }\n\n if (FIND_UNIQUE_OPS.has(operation)) {\n if (findUniqueMode === \"reject\") {\n throw new PolicyError(\n `prisma-guard: 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(\n args,\n query,\n conditions,\n scopes,\n operation,\n log,\n model,\n );\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 (\n operation === \"createMany\" ||\n operation === \"createManyAndReturn\"\n ) {\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(\n item,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"create\",\n );\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(\n nextArgs.data,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"create\",\n );\n }\n return query(nextArgs);\n }\n\n if (UNIQUE_MUTATION_OPS.has(operation)) {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions, modelFks, log, model);\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(\n nextArgs.data,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"mutate\",\n );\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(\n nextArgs.data,\n scopes,\n overrides,\n log,\n model,\n operation,\n onScopeRelationWrite,\n \"mutate\",\n );\n }\n return query(nextArgs);\n }\n\n throw new ShapeError(\n `prisma-guard: 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 {\n readonly fk: string;\n readonly root: string;\n readonly relationName: string;\n }[],\n operation: string,\n log: GuardLogger,\n model: string,\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(\n `${operation} on model \"${model}\" returned a non-object, non-null result`,\n );\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 on model \"${model}\" for ${operation} — missing FK fields (${missingFks.join(\", \")}) in result and args.where is not a valid object. Ensure the where clause is a plain object so the verification query can re-fetch FK values.`,\n );\n }\n\n let verifyResult: any;\n try {\n verifyResult = await query({ where, select: buildFkSelect(fks) });\n } catch (err: any) {\n log.warn(\n `prisma-guard: Scope verification re-query failed for ${operation} on model \"${model}\": ${err?.message ?? String(err)}`,\n );\n throw new PolicyError(\n `prisma-guard: Scope verification re-query failed for ${operation} on model \"${model}\". The re-query to fetch FK fields (${fks.join(\", \")}) returned a database error. Check server logs for the underlying cause.`,\n );\n }\n\n if (verifyResult === null) {\n throw new PolicyError(\n `prisma-guard: Scope verification re-query on model \"${model}\" returned null for an existing ${operation} result. The record may have been deleted between the original query and verification.`,\n );\n }\n if (typeof verifyResult !== \"object\" || verifyResult === null) {\n throw new PolicyError(\n `prisma-guard: Scope verification re-query on model \"${model}\" returned a non-object result.`,\n );\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 model \"${model}\" — FK field \"${fk}\" not present in verification result. Ensure \"${fk}\" is selectable on model \"${model}\" (not excluded by select or field-level access).`,\n );\n }\n if (!looseEqual(verifyObj[fk], value, log, fk)) {\n if (operation === \"findUniqueOrThrow\") {\n throw new PolicyError(\n `prisma-guard: Record on model \"${model}\" not accessible in current scope`,\n );\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 {\n ShapeError,\n formatZodError,\n wrapParseError,\n} 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 stripUniqueWhereForcedInput,\n} from \"./query-builder-forced.js\";\nimport type {\n BuiltShape,\n ForcedTree,\n WhereForced,\n} from \"./query-builder-forced.js\";\nimport type {\n WhereBuiltResult,\n UniqueWhereBuiltResult,\n} 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\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 }\n result[key] = Object.keys(nested).length > 0 ? nested : true;\n }\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\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 }\n if (value.select) nested.select = buildDefaultSelectInput(value.select);\n result[key] = Object.keys(nested).length > 0 ? nested : true;\n }\n }\n\n return result;\n}\n\nfunction buildDefaultCountInput(\n config: true | Record<string, unknown>,\n): unknown {\n if (config === true) return true;\n\n if (\n !isPlainObject(config) ||\n !config.select ||\n !isPlainObject(config.select)\n ) {\n return true;\n }\n\n const selectObj = config.select as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(selectObj)) {\n result[key] = true;\n }\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\n if (shape.include) {\n return { include: buildDefaultIncludeInput(shape.include) };\n }\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\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\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\n continue;\n }\n\n if (value === true) continue;\n if (value.orderBy || value.cursor || value.take || value.skip) return true;\n\n if (\n value.where &&\n isPlainObject(value.where) &&\n hasClientControlledValues(value.where as Record<string, unknown>)\n ) {\n return true;\n }\n\n if (value.include && checkIncludeForClientArgs(value.include)) return true;\n if (value.select && checkSelectForClientArgs(value.select)) return true;\n }\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\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\n continue;\n }\n\n if (value === true) continue;\n if (value.orderBy || value.cursor || value.take || value.skip) return true;\n\n if (\n value.where &&\n isPlainObject(value.where) &&\n hasClientControlledValues(value.where as Record<string, unknown>)\n ) {\n return true;\n }\n\n if (value.select && checkSelectForClientArgs(value.select)) return true;\n if (value.include && checkIncludeForClientArgs(value.include)) return true;\n }\n\n return false;\n}\n\nfunction hasNestedClientControlledArgs(shape: GuardShape): boolean {\n if (shape.include) {\n if (checkIncludeForClientArgs(shape.include)) return true;\n }\n\n if (shape.select) {\n if (checkSelectForClientArgs(shape.select)) return true;\n }\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\n const wrapZodErrors = config.wrapZodErrors ?? false;\n const enforceProjection = guardConfig.enforceProjection ?? false;\n const scalarBase = createScalarBase(guardConfig.strictDecimal ?? false);\n\n const schemaBuilder = createSchemaBuilder(\n typeMap,\n zodChains,\n enumMap,\n scalarBase,\n zodDefaults,\n );\n\n const queryBuilder = createQueryBuilder(\n typeMap,\n enumMap,\n uniqueMap,\n scalarBase,\n );\n\n const modelScopeFks = new Map<string, Set<string>>();\n\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 validateUniqueWhereShapeConfig(\n modelName: string,\n where: Record<string, unknown>,\n method: string,\n ): void {\n validateUniqueEquality(modelName, 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\n return modelDelegate[method](args);\n }\n\n function resolveCaller(): string | undefined {\n if (explicitCaller !== undefined) return explicitCaller;\n\n const ctx = validateContext(contextFn());\n const c = ctx.caller;\n\n if (typeof c === \"string\") return c;\n\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 const uniqueWhereCache = new Map<string, UniqueWhereBuiltResult>();\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\n if (cached) return cached;\n\n const built = queryBuilder.buildShapeZodSchema(\n modelName,\n method,\n queryShape as any,\n );\n\n readShapeCache.set(cacheKey, built);\n\n return built;\n }\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\n if (cached) return cached;\n\n const built = buildDataSchema(\n modelName,\n dataConfig,\n mode,\n typeMap,\n schemaBuilder,\n zodDefaults,\n );\n\n dataSchemaCache.set(cacheKey, built);\n\n return built;\n }\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\n if (cached) return cached;\n\n const built = queryBuilder.buildWhereSchema(modelName, whereConfig);\n whereBuiltCache.set(matchedKey, built);\n\n return built;\n }\n\n return queryBuilder.buildWhereSchema(modelName, whereConfig);\n }\n\n function getUniqueWhereBuilt(\n whereConfig: Record<string, unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): UniqueWhereBuiltResult {\n if (!wasDynamic) {\n const cacheKey = `unique\\0${matchedKey}`;\n const cached = uniqueWhereCache.get(cacheKey);\n\n if (cached) return cached;\n\n const built = queryBuilder.buildUniqueWhereSchema(\n modelName,\n whereConfig,\n );\n\n uniqueWhereCache.set(cacheKey, built);\n\n return built;\n }\n\n return queryBuilder.buildUniqueWhereSchema(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\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\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\n if (cached) return cached;\n\n const built = buildProjectionSchema(shape);\n projectionCache.set(cacheKey, built);\n\n return built;\n }\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\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 let validated: Record<string, unknown>;\n\n try {\n validated = projection.zodSchema.parse(projectionBody) as Record<\n string,\n unknown\n >;\n } catch (err) {\n wrapParseError(\n err,\n `Invalid select/include projection on model \"${modelName}\" for ${method}`,\n );\n }\n\n if (Object.keys(projection.forcedIncludeTree).length > 0) {\n applyForcedTree(validated, \"include\", projection.forcedIncludeTree);\n }\n\n if (Object.keys(projection.forcedSelectTree).length > 0) {\n applyForcedTree(validated, \"select\", projection.forcedSelectTree);\n }\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\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\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\n if (built.forcedOnlyKeys.size > 0 && isPlainObject(bodyWhere)) {\n const w = { ...(bodyWhere as Record<string, unknown>) };\n\n for (const key of built.forcedOnlyKeys) {\n delete w[key];\n }\n\n sanitizedWhere = w;\n }\n\n try {\n validatedWhere = built.schema.parse(sanitizedWhere) as\n | Record<string, unknown>\n | undefined;\n } catch (err) {\n wrapParseError(err, `Invalid \"where\" clause on model \"${modelName}\"`);\n }\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\n if (isPlainObject(bodyWhere) && built.forcedOnlyKeys.size > 0) {\n hasOnlyForcedKeys = Object.keys(bodyWhere).every((k) =>\n built.forcedOnlyKeys.has(k),\n );\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\n if (Object.keys(where).length === 0) {\n const expectedFields = shape.where\n ? Object.keys(shape.where).join(\", \")\n : \"none defined\";\n\n throw new ShapeError(\n `${method} on model \"${modelName}\" requires a where condition. Expected fields: ${expectedFields}`,\n );\n }\n\n return where;\n }\n\n function buildUniqueWhereFromShape(\n shape: GuardShape,\n bodyWhere: unknown,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n if (!shape.where) return {};\n\n const built = getUniqueWhereBuilt(shape.where, matchedKey, wasDynamic);\n let result: Record<string, unknown> = {};\n\n if (built.schema) {\n if (bodyWhere !== undefined && bodyWhere !== null) {\n if (!isPlainObject(bodyWhere)) {\n throw new ShapeError(\n `Invalid \"where\" on model \"${modelName}\": unique where must be a plain object`,\n );\n }\n\n const sanitized = hasWhereForced(built.forced)\n ? stripUniqueWhereForcedInput(\n bodyWhere as Record<string, unknown>,\n built.forced,\n )\n : { ...(bodyWhere as Record<string, unknown>) };\n\n try {\n result = built.schema.parse(sanitized) as Record<string, unknown>;\n } catch (err) {\n const allowedFields = Object.keys(shape.where!).join(\", \");\n\n wrapParseError(\n err,\n `Invalid unique \"where\" on model \"${modelName}\". Allowed fields: ${allowedFields}`,\n );\n }\n }\n } else if (bodyWhere !== undefined && bodyWhere !== null) {\n if (isPlainObject(bodyWhere)) {\n const sanitized = hasWhereForced(built.forced)\n ? stripUniqueWhereForcedInput(\n bodyWhere as Record<string, unknown>,\n built.forced,\n )\n : { ...(bodyWhere as Record<string, unknown>) };\n\n if (Object.keys(sanitized).length > 0) {\n throw new ShapeError(\n `Unique where on model \"${modelName}\" contains only forced values. Client where input is not accepted.`,\n );\n }\n } else {\n throw new ShapeError(\n `Invalid \"where\" on model \"${modelName}\": unique where must be a plain object`,\n );\n }\n }\n\n if (hasWhereForced(built.forced)) {\n result = mergeUniqueWhereForced(result, built.forced);\n }\n\n return result;\n }\n\n function requireUniqueWhere(\n shape: GuardShape,\n bodyWhere: unknown,\n method: string,\n matchedKey: string,\n wasDynamic: boolean,\n ): Record<string, unknown> {\n const where = buildUniqueWhereFromShape(\n shape,\n bodyWhere,\n matchedKey,\n wasDynamic,\n );\n\n if (Object.keys(where).length === 0) {\n const constraints = uniqueMap[modelName];\n const constraintDesc = constraints\n ? constraints\n .map((constraint) =>\n constraint.fields.length === 1\n ? constraint.selector\n : `${constraint.selector}(${constraint.fields.join(\", \")})`,\n )\n .join(\" | \")\n : \"unknown\";\n const expectedFields = shape.where\n ? Object.keys(shape.where).join(\", \")\n : \"none defined\";\n\n throw new ShapeError(\n `${method} on model \"${modelName}\" requires a unique where condition. ` +\n `Unique constraints: ${constraintDesc}. Shape allows: ${expectedFields}`,\n );\n }\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\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\n if (resolved.shape.data) {\n throw new ShapeError(`Guard shape \"data\" is not valid for ${method}`);\n }\n\n const { data: _, ...queryShape } = resolved.shape;\n\n const built = getReadShape(\n method,\n queryShape,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n\n const isUnique = UNIQUE_READ_METHODS.has(method);\n const effectiveBody = buildEffectiveReadBody(resolved);\n const args = applyBuiltShape(built, effectiveBody, isUnique, modelName);\n\n if (isUnique && args.where) {\n validateResolvedUniqueWhere(\n modelName,\n args.where as Record<string, unknown>,\n method,\n uniqueMap,\n );\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\n let allowedBodyKeys: Set<string>;\n\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\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\n if (!resolved.shape.data) {\n throw new ShapeError(`Guard shape requires \"data\" for ${method}`);\n }\n\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n\n const fks = modelScopeFks.get(modelName) ?? new Set<string>();\n\n validateCreateCompleteness(\n modelName,\n resolved.shape.data,\n typeMap,\n fks,\n zodDefaults,\n );\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\n if (method === \"create\") {\n const data = validateAndMergeData(\n resolved.body.data,\n dataSchema,\n method,\n modelName,\n );\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 }\n\n if (resolved.body.data.length === 0) {\n throw new ShapeError(`${method} received empty data array`);\n }\n\n const data = resolved.body.data.map((item: unknown) =>\n validateAndMergeData(item, dataSchema, method, modelName),\n );\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\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\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\n if (!resolved.shape.data) {\n throw new ShapeError(`Guard shape requires \"data\" for ${method}`);\n }\n\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n\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\n const dataSchema = getDataSchema(\n \"update\",\n resolved.shape.data,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n\n const data = validateAndMergeData(\n resolved.body.data,\n dataSchema,\n method,\n modelName,\n );\n\n let where: Record<string, unknown>;\n\n if (isUniqueWhere) {\n if (resolved.shape.where) {\n validateUniqueWhereShapeConfig(\n modelName,\n resolved.shape.where,\n method,\n );\n }\n\n where = requireUniqueWhere(\n resolved.shape,\n resolved.body.where,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap);\n } else {\n maybeValidateUniqueWhere(modelName, resolved.shape, method);\n\n where = buildWhereFromShape(\n resolved.shape,\n resolved.body.where,\n false,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n\n if (isBulk && Object.keys(where).length === 0) {\n throw new ShapeError(\n `${method} requires at least one where condition`,\n );\n }\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\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\n if (resolved.shape.data) {\n throw new ShapeError(`Guard shape \"data\" is not valid for ${method}`);\n }\n\n validateMutationShapeKeys(\n resolved.shape as unknown as Record<string, unknown>,\n allowedShapeKeys,\n method,\n );\n\n validateMutationBodyKeys(resolved.body, allowedBodyKeys, method);\n\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\n let where: Record<string, unknown>;\n\n if (isUniqueWhere) {\n if (resolved.shape.where) {\n validateUniqueWhereShapeConfig(\n modelName,\n resolved.shape.where,\n method,\n );\n }\n\n where = requireUniqueWhere(\n resolved.shape,\n resolved.body.where,\n method,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap);\n } else {\n maybeValidateUniqueWhere(modelName, resolved.shape, method);\n\n where = buildWhereFromShape(\n resolved.shape,\n resolved.body.where,\n false,\n resolved.matchedKey,\n resolved.wasDynamic,\n );\n\n if (isBulk && Object.keys(where).length === 0) {\n throw new ShapeError(\n `${method} requires at least one where condition`,\n );\n }\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\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\n if (!resolved.shape.create) {\n throw new ShapeError('Guard shape requires \"create\" for upsert');\n }\n\n if (!resolved.shape.update) {\n throw new ShapeError('Guard shape requires \"update\" for upsert');\n }\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\n validateMutationBodyKeys(\n resolved.body,\n ALLOWED_BODY_KEYS_UPSERT,\n \"upsert\",\n );\n\n validateUniqueWhereShapeConfig(\n modelName,\n resolved.shape.where,\n \"upsert\",\n );\n\n const fks = modelScopeFks.get(modelName) ?? new Set<string>();\n\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\n const createData = validateAndMergeData(\n resolved.body.create,\n createDataSchema,\n \"upsert (create)\",\n modelName,\n );\n\n const updateDataSchema = getDataSchema(\n \"update\",\n resolved.shape.update,\n `upsert:update\\0${resolved.matchedKey}`,\n resolved.wasDynamic,\n );\n\n const updateData = validateAndMergeData(\n resolved.body.update,\n updateDataSchema,\n \"upsert (update)\",\n modelName,\n );\n\n const where = requireUniqueWhere(\n resolved.shape,\n resolved.body.where,\n \"upsert\",\n resolved.matchedKey,\n resolved.wasDynamic,\n );\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\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\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\n throw err;\n }\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\n if (!modelDelegate) {\n throw new ShapeError(\n `Could not resolve Prisma delegate for model \"${modelName}\" (key: \"${delegateKey}\")`,\n );\n }\n\n const methods = createGuardedMethods(\n modelName,\n modelDelegate,\n input,\n caller,\n );\n\n if (!wrapZodErrors) return methods;\n\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, formatZodError } 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 modelName?: string,\n): Record<string, unknown> {\n if (bodyData === undefined || bodyData === null) {\n throw new ShapeError(`${method} requires \"data\" in request body`);\n }\n let validated: Record<string, unknown>;\n try {\n validated = cached.schema.parse(bodyData);\n } catch (err) {\n if (err instanceof ShapeError) throw err;\n if (err && typeof err === 'object' && 'issues' in err) {\n const context = modelName\n ? `Invalid data for ${method} on model \"${modelName}\"`\n : `Invalid data for ${method}`;\n throw new ShapeError(`${context}: ${formatZodError(err as any)}`, { cause: err });\n }\n throw err;\n }\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}","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 if ('default' in namedMap) {\n const shapeOrFn = namedMap['default']\n const wasDynamic = typeof shapeOrFn === 'function'\n const shape = wasDynamic\n ? resolveDynamicShape(shapeOrFn as (ctx: any) => GuardShape, contextFn)\n : shapeOrFn as GuardShape\n return { shape, body: parsed, matchedKey: 'default', wasDynamic }\n }\n\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, or add a \"default\" variant.`,\n )\n }\n\n const patterns = Object.keys(namedMap)\n const matched = matchCallerPattern(patterns, caller)\n if (!matched) {\n if ('default' in namedMap) {\n const shapeOrFn = namedMap['default']\n const wasDynamic = typeof shapeOrFn === 'function'\n const shape = wasDynamic\n ? resolveDynamicShape(shapeOrFn as (ctx: any) => GuardShape, contextFn)\n : shapeOrFn as GuardShape\n return { shape, body: parsed, matchedKey: 'default', wasDynamic }\n }\n\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":["import_zod","import_zod","import_zod","import_zod","import_zod","fieldMeta","forced","directSchema","constraint","import_zod","formatUniqueConstraint","formatUniqueConstraints","import_zod","import_zod","import_zod","wasDynamic","shape","parsed","shapeOrFn","patterns"]}
|