prisma-guard 1.1.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 +1311 -0
- package/dist/generator/index.d.ts +2 -0
- package/dist/generator/index.js +893 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/runtime/index.d.ts +177 -0
- package/dist/runtime/index.js +2677 -0
- package/dist/runtime/index.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/guard.ts","../../src/shared/errors.ts","../../src/runtime/schema-builder.ts","../../src/runtime/zod-type-map.ts","../../src/shared/scalar-base.ts","../../src/runtime/query-builder.ts","../../src/shared/constants.ts","../../src/shared/match-caller.ts","../../src/runtime/policy.ts","../../src/runtime/scope-extension.ts","../../src/runtime/model-guard.ts"],"sourcesContent":["import { ZodError } from 'zod'\nimport type {\n TypeMap, GuardConfig, InputOpts, ModelOpts,\n QueryMethod, ShapeOrFn, QuerySchema, GuardLogger,\n} from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.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'\n\nfunction formatZodError(err: ZodError): string {\n return err.issues.map(i => {\n const p = i.path.length > 0 ? `${i.path.join('.')}: ` : ''\n return `${p}${i.message}`\n }).join('; ')\n}\n\nexport function createGuard<\n TModels extends TypeMap = TypeMap,\n TRoots extends string = string,\n TModelExt = unknown,\n>(\n config: GuardConfig & { typeMap: TModels },\n) {\n type MName = Extract<keyof TModels, string>\n\n const schemaBuilder = createSchemaBuilder(\n config.typeMap,\n config.zodChains,\n config.enumMap,\n )\n const queryBuilder = createQueryBuilder(\n config.typeMap,\n config.enumMap,\n config.uniqueMap ?? {},\n )\n\n const log: GuardLogger = config.logger ?? { warn: (msg) => console.warn(msg) }\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)}`, { cause: err })\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 scopeCtxFn = () => {\n const ctx = contextFn()\n const scopeCtx: Partial<Record<TRoots, string | number | bigint>> = {}\n for (const key of Object.keys(ctx)) {\n const val = ctx[key]\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'bigint') {\n scopeCtx[key as TRoots] = val\n } else if (val !== null && val !== undefined) {\n log.warn(\n `prisma-guard: Context key \"${key}\" has non-primitive value (${typeof val}). Only string, number, and bigint values are used 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 uniqueMap: config.uniqueMap ?? {},\n scopeMap: config.scopeMap,\n contextFn,\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}","export 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}","import { z } from 'zod'\nimport type { TypeMap, EnumMap, ZodChains, InputOpts, ModelOpts, InputSchema } from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.js'\nimport { createBaseType } from './zod-type-map.js'\n\nconst DEFAULT_MAX_CACHE = 500\nconst DEFAULT_MAX_DEPTH = 5\n\nfunction lruGet(cache: Map<string, z.ZodTypeAny>, key: string): 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(cache: Map<string, z.ZodTypeAny>, key: string, value: z.ZodTypeAny, maxSize: number): 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) {\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) throw new ShapeError(`Unknown field \"${field}\" on model \"${model}\"`)\n\n const base = createBaseType(fieldMeta, enumMap)\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 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) throw new ShapeError(`Unknown field \"${field}\" on model \"${model}\"`)\n\n return createBaseType(fieldMeta, enumMap)\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 ?? false\n\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\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]) throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`)\n if (modelFields[name].isRelation) throw new ShapeError(`Field \"${name}\" cannot be used in input schema (relation field)`)\n if (modelFields[name].isUpdatedAt) throw new ShapeError(`Field \"${name}\" cannot be used in input schema (updatedAt field)`)\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]) 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\n if (opts.refine?.[name]) {\n fieldSchema = opts.refine[name](buildBaseFieldSchema(model, name))\n } else {\n fieldSchema = buildFieldSchema(model, name)\n }\n\n if (mode === 'create') {\n if (!fieldMeta.isRequired) {\n fieldSchema = allowNull\n ? fieldSchema.nullable().optional()\n : fieldSchema.optional()\n } else if (fieldMeta.hasDefault) {\n fieldSchema = fieldSchema.optional()\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(`Maximum include depth (${effectiveMaxDepth}) exceeded`)\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]) throw new ShapeError(`Unknown field \"${name}\" on model \"${model}\"`)\n if (modelFields[name].isRelation && !includeKeys.has(name)) {\n throw new ShapeError(`Field \"${name}\" is a relation on model \"${model}\". Use include: { ${name}: ... } instead of pick.`)\n }\n }\n }\n if (opts.omit) {\n for (const name of opts.omit) {\n if (!modelFields[name]) 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)\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) 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 const relatedModel = fieldMeta.type\n if (!typeMap[relatedModel]) {\n throw new ShapeError(`Related model \"${relatedModel}\" not found in type map`)\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 relationNames = Object.keys(modelFields).filter(n => modelFields[n].isRelation)\n\n if (opts._count === true) {\n const countFields: Record<string, z.ZodTypeAny> = {}\n for (const relName of relationNames) {\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]) throw new ShapeError(`Unknown field \"${relName}\" on model \"${model}\" in _count`)\n if (!modelFields[relName].isRelation) throw new ShapeError(`Field \"${relName}\" is not a relation on model \"${model}\" in _count`)\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 { buildFieldSchema, buildBaseFieldSchema, buildInputSchema, buildModelSchema }\n}","import { z } from 'zod'\nimport type { FieldMeta, EnumMap } from '../shared/types.js'\nimport { ShapeError } from '../shared/errors.js'\nimport { SCALAR_BASE } from '../shared/scalar-base.js'\n\nconst SCALAR_OPERATORS: Record<string, Set<string>> = {\n String: new Set(['equals', 'not', 'contains', 'startsWith', 'endsWith', 'in', 'notIn']),\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}\n\nconst SCALAR_LIST_OPERATORS = new Set(['has', 'hasEvery', 'hasSome', 'isEmpty', 'equals'])\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(['Int', 'Float', 'Decimal', 'BigInt', 'String', 'DateTime'])\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(fieldMeta: FieldMeta, enumMap: EnumMap): z.ZodTypeAny {\n let base: z.ZodTypeAny\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 base = z.enum(values as unknown as [string, ...string[]])\n } else {\n const factory = SCALAR_BASE[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): z.ZodTypeAny {\n if (!SCALAR_LIST_OPERATORS.has(operator)) {\n throw new ShapeError(`Operator \"${operator}\" not supported for scalar list fields`)\n }\n\n if (operator === 'isEmpty') {\n return z.boolean()\n }\n\n if (operator === 'equals') {\n const itemMeta: FieldMeta = { ...fieldMeta, isList: false }\n const itemBase = createBaseType(itemMeta, enumMap)\n return fieldMeta.isRequired ? z.array(itemBase) : z.union([z.array(itemBase), z.null()])\n }\n\n const itemMeta: FieldMeta = { ...fieldMeta, isList: false }\n const itemBase = createBaseType(itemMeta, enumMap)\n\n if (operator === 'has') {\n return !fieldMeta.isRequired ? z.union([itemBase, z.null()]) : itemBase\n }\n\n return z.array(itemBase)\n}\n\nexport function createOperatorSchema(\n fieldMeta: FieldMeta,\n operator: string,\n enumMap: EnumMap,\n): z.ZodTypeAny {\n if (fieldMeta.isList) {\n return createScalarListOperatorSchema(fieldMeta, operator, enumMap)\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(`Operator \"${operator}\" not supported for enum fields`)\n }\n const enumSchema = z.enum(values as unknown as [string, ...string[]])\n if (operator === 'equals' || operator === 'not') {\n return !fieldMeta.isRequired ? z.union([enumSchema, z.null()]) : enumSchema\n }\n if (!fieldMeta.isRequired) {\n return z.array(z.union([enumSchema, z.null()]))\n }\n return z.array(enumSchema)\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(`Type \"${fieldMeta.type}\" does not support filter operators`)\n }\n if (!supportedOps.has(operator)) {\n throw new ShapeError(`Operator \"${operator}\" not supported for type \"${fieldMeta.type}\"`)\n }\n\n const factory = SCALAR_BASE[fieldMeta.type]\n if (!factory) {\n throw new ShapeError(`Unknown scalar type: ${fieldMeta.type}`)\n }\n\n const scalar = factory()\n\n if (operator === 'equals' || operator === 'not') {\n return !fieldMeta.isRequired ? z.union([scalar, z.null()]) : scalar\n }\n if (operator === 'in' || operator === 'notIn') {\n if (!fieldMeta.isRequired) {\n return z.array(z.union([scalar, z.null()]))\n }\n return z.array(scalar)\n }\n return scalar\n}","import { z } from 'zod'\n\n/**\n * Validates that a value is JSON-serializable without using recursion.\n * Uses an iterative stack-based traversal to avoid stack overflow on\n * deeply nested client-provided Json field values.\n *\n * Rejects: undefined, functions, symbols, class instances (including Date),\n * NaN, Infinity.\n */\nfunction isJsonSafe(value: unknown): boolean {\n const stack: unknown[] = [value]\n\n while (stack.length > 0) {\n const current = stack.pop()\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 (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n stack.push(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(values[i])\n }\n continue\n }\n default:\n return false\n }\n }\n\n return true\n}\n\nexport const SCALAR_BASE: Record<string, () => z.ZodTypeAny> = {\n String: () => z.string(),\n Int: () => z.number().int(),\n Float: () => z.number(),\n Decimal: () => z.union([\n z.number(),\n z.string().refine(\n (s) => /^-?(\\d+\\.?\\d*|\\.\\d+)([eE]-?\\d+)?$/.test(s),\n 'Invalid decimal string',\n ),\n ]),\n BigInt: () => z.union([\n z.bigint(),\n z.number().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.string().regex(/^-?\\d+$/).transform(v => BigInt(v)),\n ]),\n Boolean: () => z.boolean(),\n DateTime: () => z.union([\n z.date(),\n z.string().datetime({ offset: true }),\n z.string().datetime(),\n ]).pipe(z.coerce.date()),\n Json: () => z.unknown().refine(isJsonSafe, 'Value must be JSON-serializable (no undefined, functions, symbols, class instances, NaN, or Infinity)'),\n Bytes: () => z.union([\n z.string(),\n z.custom<unknown>(v => v instanceof Uint8Array),\n ]),\n}","import { z } from \"zod\";\nimport type {\n TypeMap,\n EnumMap,\n UniqueMap,\n QueryMethod,\n ShapeConfig,\n ShapeOrFn,\n NestedIncludeArgs,\n NestedSelectArgs,\n QuerySchema,\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 { requireContext } from \"./policy.js\";\nimport {\n createOperatorSchema,\n createBaseType,\n getSupportedOperators,\n NUMERIC_TYPES,\n COMPARABLE_TYPES,\n} from \"./zod-type-map.js\";\n\nconst METHOD_ALLOWED_ARGS: Record<QueryMethod, Set<string>> = {\n findMany: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findFirst: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findFirstOrThrow: new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"distinct\",\n ]),\n findUnique: new Set([\"where\", \"include\", \"select\"]),\n findUniqueOrThrow: new Set([\"where\", \"include\", \"select\"]),\n count: new Set([\"where\", \"select\", \"cursor\", \"orderBy\", \"skip\", \"take\"]),\n aggregate: new Set([\n \"where\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n \"_count\",\n \"_avg\",\n \"_sum\",\n \"_min\",\n \"_max\",\n ]),\n groupBy: new Set([\n \"where\",\n \"by\",\n \"having\",\n \"_count\",\n \"_avg\",\n \"_sum\",\n \"_min\",\n \"_max\",\n \"orderBy\",\n \"take\",\n \"skip\",\n ]),\n};\n\nconst UNIQUE_WHERE_METHODS: Set<QueryMethod> = new Set([\n \"findUnique\",\n \"findUniqueOrThrow\",\n]);\n\nconst STRING_MODE_OPS = new Set([\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"equals\",\n]);\n\nconst UNSUPPORTED_WHERE_TYPES = new Set([\"Json\", \"Bytes\"]);\nconst UNSUPPORTED_BY_TYPES = new Set([\"Json\", \"Bytes\"]);\n\nconst KNOWN_NESTED_INCLUDE_KEYS = new Set([\n \"where\",\n \"include\",\n \"select\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n]);\nconst KNOWN_NESTED_SELECT_KEYS = new Set([\n \"select\",\n \"where\",\n \"orderBy\",\n \"cursor\",\n \"take\",\n \"skip\",\n]);\nconst KNOWN_COUNT_SELECT_ENTRY_KEYS = new Set([\"where\"]);\n\nexport interface ForcedTree {\n where?: Record<string, unknown>;\n include?: Record<string, ForcedTree>;\n select?: Record<string, ForcedTree>;\n _countWhere?: Record<string, Record<string, unknown>>;\n}\n\nexport interface BuiltShape {\n zodSchema: z.ZodObject<any>;\n forcedWhere: Record<string, unknown>;\n forcedIncludeTree: Record<string, ForcedTree>;\n forcedSelectTree: Record<string, ForcedTree>;\n forcedIncludeCountWhere: Record<string, Record<string, unknown>>;\n forcedSelectCountWhere: Record<string, Record<string, unknown>>;\n}\n\nexport interface BuiltIncludeResult {\n schema: z.ZodTypeAny;\n forcedTree: Record<string, ForcedTree>;\n forcedCountWhere: Record<string, Record<string, unknown>>;\n}\n\nexport interface BuiltSelectResult {\n schema: z.ZodTypeAny;\n forcedTree: Record<string, ForcedTree>;\n forcedCountWhere: Record<string, Record<string, unknown>>;\n}\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 mergeForced(\n where: Record<string, unknown> | undefined,\n forced: Record<string, unknown>,\n): Record<string, unknown> {\n if (!where) return forced;\n return { AND: [where, forced] };\n}\n\nexport function mergeUniqueForced(\n where: Record<string, unknown> | undefined,\n forced: Record<string, unknown>,\n): Record<string, unknown> {\n if (!where) return { ...forced };\n return { ...where, AND: [forced] };\n}\n\nexport function applyBuiltShape(\n built: BuiltShape,\n body: unknown,\n isUniqueMethod: boolean,\n): Record<string, unknown> {\n const validated = built.zodSchema.parse(body) as Record<string, unknown>;\n\n if (Object.keys(built.forcedWhere).length > 0) {\n const cloned = structuredClone(built.forcedWhere);\n validated.where = isUniqueMethod\n ? mergeUniqueForced(\n validated.where as Record<string, unknown> | undefined,\n cloned,\n )\n : mergeForced(\n validated.where as Record<string, unknown> | undefined,\n cloned,\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 includeContainer = validated.include as\n | Record<string, unknown>\n | undefined;\n if (includeContainer) {\n applyForcedCountWhere(includeContainer, built.forcedIncludeCountWhere);\n }\n }\n\n if (Object.keys(built.forcedSelectCountWhere).length > 0) {\n const selectContainer = validated.select as\n | Record<string, unknown>\n | undefined;\n if (selectContainer) {\n applyForcedCountWhere(selectContainer, built.forcedSelectCountWhere);\n }\n }\n\n return validated;\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) expanded.where = structuredClone(forced.where);\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 countSelect: Record<string, unknown> = {};\n for (const [countRel, countForced] of Object.entries(\n forced._countWhere,\n )) {\n countSelect[countRel] = { where: structuredClone(countForced) };\n }\n expanded._count = { select: countSelect };\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) {\n relObj.where = mergeForced(\n relObj.where as Record<string, unknown> | undefined,\n structuredClone(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 applyForcedCountWhere(relObj, forced._countWhere);\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) nested.where = structuredClone(forced.where);\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 countSelect: Record<string, unknown> = {};\n for (const [countRel, countForced] of Object.entries(\n forced._countWhere,\n )) {\n countSelect[countRel] = { where: structuredClone(countForced) };\n }\n nested._count = { select: countSelect };\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, Record<string, unknown>>,\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: structuredClone(forced) };\n } else if (isPlainObject(relVal)) {\n const relObj = relVal as Record<string, unknown>;\n relObj.where = mergeForced(\n relObj.where as Record<string, unknown> | undefined,\n structuredClone(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\nexport function validateUniqueEquality(\n model: string,\n where: Record<string, Record<string, true | unknown>>,\n method: string,\n uniqueMap: UniqueMap,\n): void {\n const constraints = uniqueMap[model];\n if (!constraints || constraints.length === 0) return;\n\n const whereFields = new Set(Object.keys(where));\n\n const valid = constraints.some((constraint) => {\n if (!constraint.every((field) => whereFields.has(field))) return false;\n return constraint.every((field) => {\n const ops = where[field];\n if (!ops) return false;\n return Object.keys(ops).every((op) => op === \"equals\");\n });\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\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 createQueryBuilder(\n typeMap: TypeMap,\n enumMap: EnumMap,\n uniqueMap: UniqueMap = {},\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 buildWhereSchema(\n model: string,\n whereConfig: Record<string, Record<string, true | unknown>>,\n ): {\n schema: z.ZodTypeAny | null;\n forced: Record<string, Record<string, unknown>>;\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 forced: Record<string, Record<string, unknown>> = {};\n\n for (const [fieldName, operators] of Object.entries(whereConfig)) {\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\"`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in where`,\n );\n if (UNSUPPORTED_WHERE_TYPES.has(fieldMeta.type) && !fieldMeta.isList) {\n throw new ShapeError(\n `${fieldMeta.type} field \"${fieldName}\" cannot be used in where filters`,\n );\n }\n\n const opSchemas: Record<string, z.ZodTypeAny> = {};\n const fieldForced: Record<string, unknown> = {};\n let hasClientOps = false;\n let hasStringModeOp = false;\n const clientOpKeys: string[] = [];\n\n for (const [op, value] of Object.entries(operators)) {\n if (value === true) {\n opSchemas[op] = createOperatorSchema(\n fieldMeta,\n op,\n enumMap,\n ).optional();\n hasClientOps = true;\n clientOpKeys.push(op);\n if (\n fieldMeta.type === \"String\" &&\n !fieldMeta.isList &&\n STRING_MODE_OPS.has(op)\n ) {\n hasStringModeOp = true;\n }\n } else {\n const opSchema = createOperatorSchema(fieldMeta, op, enumMap);\n let parsed: unknown;\n try {\n parsed = opSchema.parse(value);\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 }\n }\n\n if (!hasClientOps && Object.keys(fieldForced).length === 0) {\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 (hasStringModeOp) {\n opSchemas[\"mode\"] = z.enum([\"default\", \"insensitive\"]).optional();\n }\n\n if (hasClientOps) {\n const opObj = z.object(opSchemas).strict();\n fieldSchemas[fieldName] = opObj\n .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 .optional();\n }\n\n if (Object.keys(fieldForced).length > 0) {\n forced[fieldName] = fieldForced;\n }\n }\n\n const schema =\n Object.keys(fieldSchemas).length > 0\n ? z.object(fieldSchemas).strict().optional()\n : null;\n\n return { schema, forced };\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 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 return z.object(fieldSchemas).strict().optional();\n }\n\n function buildIncludeCountSchema(\n model: string,\n config: true | Record<string, unknown>,\n ): {\n schema: z.ZodTypeAny;\n forcedCountWhere: Record<string, Record<string, unknown>>;\n } {\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 const selectObj = config.select as Record<\n string,\n true | Record<string, unknown>\n >;\n const countSelectFields: Record<string, z.ZodTypeAny> = {};\n const forcedCountWhere: Record<string, Record<string, unknown>> = {};\n\n for (const [fieldName, fieldConfig] of Object.entries(selectObj)) {\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 `Field \"${fieldName}\" is not a relation on model \"${model}\" in _count.select`,\n );\n\n if (fieldConfig === true) {\n countSelectFields[fieldName] = z.literal(true).optional();\n } else if (isPlainObject(fieldConfig)) {\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 } = buildWhereSchema(\n relatedType,\n fieldConfig.where as Record<string, Record<string, true | 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\n .union([z.literal(true), nestedObj])\n .optional();\n\n if (Object.keys(forced).length > 0) {\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 selectSchema = z.object(countSelectFields).strict();\n return {\n schema: z.object({ select: selectSchema }).strict().optional(),\n forcedCountWhere,\n };\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 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)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in ${opName}`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in ${opName}`,\n );\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 return z.object(fieldSchemas).strict().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)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in by`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in by`,\n );\n if (UNSUPPORTED_BY_TYPES.has(fieldMeta.type)) {\n throw new ShapeError(\n `${fieldMeta.type} field \"${fieldName}\" cannot be used in by`,\n );\n }\n if (fieldMeta.isList) {\n throw new ShapeError(`List field \"${fieldName}\" cannot be used in by`);\n }\n }\n const enumSchema = z.enum(byConfig as [string, ...string[]]);\n return z.union([enumSchema, z.array(enumSchema).min(1)]);\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 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.every((field) => cursorFields.has(field)),\n );\n if (!covered) {\n const constraintDesc = constraints\n .map((c) => `(${c.join(\", \")})`)\n .join(\" | \");\n throw new ShapeError(\n `cursor on model \"${model}\" must cover 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)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\" in cursor`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in cursor`,\n );\n if (fieldMeta.isList)\n throw new ShapeError(\n `List field \"${fieldName}\" cannot be used in cursor`,\n );\n fieldSchemas[fieldName] = createBaseType(fieldMeta, enumMap);\n }\n return z.object(fieldSchemas).strict().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 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 if (fieldMeta.isList)\n throw new ShapeError(\n `List field \"${fieldName}\" cannot be used in distinct`,\n );\n }\n\n const enumSchema = z.enum(distinctConfig as [string, ...string[]]);\n return z.union([enumSchema, z.array(enumSchema).min(1)]).optional();\n }\n\n function buildIncludeSchema(\n model: string,\n includeConfig: Record<string, true | NestedIncludeArgs>,\n ): BuiltIncludeResult {\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, Record<string, unknown>> = {};\n\n for (const [relName, config] of Object.entries(includeConfig)) {\n if (relName === \"_count\") {\n const countResult = buildIncludeCountSchema(\n model,\n config as true | Record<string, unknown>,\n );\n fieldSchemas[\"_count\"] = countResult.schema;\n topLevelForcedCountWhere = countResult.forcedCountWhere;\n continue;\n }\n\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 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(\n `Nested include for \"${relName}\" cannot define both \"select\" and \"include\".`,\n );\n }\n\n if (!fieldMeta.isList) {\n if (\n config.where ||\n config.orderBy ||\n config.cursor ||\n config.take ||\n config.skip\n ) {\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 } = buildWhereSchema(\n fieldMeta.type,\n config.where,\n );\n if (whereSchema) nestedSchemas[\"where\"] = whereSchema;\n if (Object.keys(forced).length > 0) relForced.where = forced;\n }\n if (config.include) {\n const nested = buildIncludeSchema(fieldMeta.type, config.include);\n nestedSchemas[\"include\"] = nested.schema;\n if (Object.keys(nested.forcedTree).length > 0)\n relForced.include = nested.forcedTree;\n if (Object.keys(nested.forcedCountWhere).length > 0)\n relForced._countWhere = nested.forcedCountWhere;\n }\n if (config.select) {\n const nested = buildSelectSchema(fieldMeta.type, config.select);\n nestedSchemas[\"select\"] = nested.schema;\n if (Object.keys(nested.forcedTree).length > 0)\n relForced.select = nested.forcedTree;\n if (Object.keys(nested.forcedCountWhere).length > 0)\n relForced._countWhere = nested.forcedCountWhere;\n }\n if (config.orderBy) {\n nestedSchemas[\"orderBy\"] = buildOrderBySchema(\n fieldMeta.type,\n config.orderBy,\n );\n }\n if (config.cursor) {\n nestedSchemas[\"cursor\"] = buildCursorSchema(\n fieldMeta.type,\n config.cursor,\n );\n }\n if (config.take) {\n nestedSchemas[\"take\"] = 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\n .union([z.literal(true), nestedObj])\n .optional();\n\n if (Object.keys(relForced).length > 0) forcedTree[relName] = relForced;\n }\n }\n\n return {\n schema: z.object(fieldSchemas).strict().optional(),\n forcedTree,\n forcedCountWhere: topLevelForcedCountWhere,\n };\n }\n\n function buildSelectSchema(\n model: string,\n selectConfig: Record<string, true | NestedSelectArgs>,\n ): BuiltSelectResult {\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, Record<string, unknown>> = {};\n\n for (const [fieldName, config] of Object.entries(selectConfig)) {\n if (fieldName === \"_count\") {\n const countResult = buildIncludeCountSchema(\n model,\n config as true | Record<string, unknown>,\n );\n fieldSchemas[\"_count\"] = countResult.schema;\n topLevelForcedCountWhere = countResult.forcedCountWhere;\n continue;\n }\n\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 fieldSchemas[fieldName] = z.literal(true).optional();\n } else {\n if (!fieldMeta.isRelation) {\n throw new ShapeError(\n `Nested select args only valid for relations, not scalar \"${fieldName}\"`,\n );\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 (!fieldMeta.isList) {\n if (\n config.where ||\n config.orderBy ||\n config.cursor ||\n config.take ||\n config.skip\n ) {\n throw new ShapeError(\n `Relation \"${fieldName}\" on model \"${model}\" is to-one. Only \"select\" is 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);\n nestedSchemas[\"select\"] = nested.schema;\n if (Object.keys(nested.forcedTree).length > 0)\n relForced.select = nested.forcedTree;\n if (Object.keys(nested.forcedCountWhere).length > 0)\n relForced._countWhere = nested.forcedCountWhere;\n }\n if (config.where) {\n const { schema: whereSchema, forced } = buildWhereSchema(\n fieldMeta.type,\n config.where,\n );\n if (whereSchema) nestedSchemas[\"where\"] = whereSchema;\n if (Object.keys(forced).length > 0) relForced.where = forced;\n }\n if (config.orderBy) {\n nestedSchemas[\"orderBy\"] = buildOrderBySchema(\n fieldMeta.type,\n config.orderBy,\n );\n }\n if (config.cursor) {\n nestedSchemas[\"cursor\"] = buildCursorSchema(\n fieldMeta.type,\n config.cursor,\n );\n }\n if (config.take) {\n nestedSchemas[\"take\"] = 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\n .union([z.literal(true), nestedObj])\n .optional();\n\n if (Object.keys(relForced).length > 0)\n forcedTree[fieldName] = relForced;\n }\n }\n\n return {\n schema: z.object(fieldSchemas).strict().optional(),\n forcedTree,\n forcedCountWhere: topLevelForcedCountWhere,\n };\n }\n\n function buildOrderBySchema(\n model: string,\n orderByConfig: Record<string, true>,\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 of Object.keys(orderByConfig)) {\n const fieldMeta = modelFields[fieldName];\n if (!fieldMeta)\n throw new ShapeError(\n `Unknown field \"${fieldName}\" on model \"${model}\"`,\n );\n if (fieldMeta.isRelation)\n throw new ShapeError(\n `Relation field \"${fieldName}\" cannot be used in orderBy`,\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 fieldSchemas[fieldName] = z.enum([\"asc\", \"desc\"]).optional();\n }\n\n const singleSchema = z.object(fieldSchemas).strict();\n return z.union([singleSchema, z.array(singleSchema)]).optional();\n }\n\n function buildTakeSchema(config: {\n max: number;\n default?: number;\n }): z.ZodTypeAny {\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 if (config.max < 1) {\n throw new ShapeError(`take max must be at least 1, got ${config.max}`);\n }\n if (config.default !== undefined) {\n if (\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 if (config.default < 1) {\n throw new ShapeError(\n `take default must be at least 1, got ${config.default}`,\n );\n }\n if (config.default > config.max) {\n throw new ShapeError(\"take default cannot exceed max\");\n }\n return z.number().int().min(1).max(config.max).default(config.default);\n }\n return z.number().int().min(1).max(config.max).optional();\n }\n\n function 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 const fieldSchemas: Record<string, z.ZodTypeAny> = {};\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\n const ops = getSupportedOperators(fieldMeta);\n if (ops.length === 0) {\n throw new ShapeError(\n `${fieldMeta.type} field \"${fieldName}\" cannot be used in having filters`,\n );\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).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\n .object(opSchemas)\n .strict()\n .refine(\n (v) =>\n opKeys.some((k) => (v as Record<string, unknown>)[k] !== undefined),\n {\n message: `At least one operator required for having field \"${fieldName}\"`,\n },\n )\n .optional();\n }\n return z.object(fieldSchemas).strict().optional();\n }\n\n function buildCountSelectSchema(\n model: string,\n selectConfig: Record<string, true | NestedSelectArgs>,\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 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 return z.object(fieldSchemas).strict().optional();\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 }\n if (!allowed.has(key)) {\n throw new ShapeError(`Arg \"${key}\" not allowed for method \"${method}\"`);\n }\n }\n if (shape.include && shape.select) {\n throw new ShapeError(\n 'Shape config cannot define both \"include\" and \"select\".',\n );\n }\n if (method === \"groupBy\" && !shape.by) {\n throw new ShapeError('groupBy shape must define \"by\"');\n }\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 }\n if (method === \"groupBy\" && shape.orderBy) {\n const bySet = new Set(shape.by);\n for (const fieldName of Object.keys(shape.orderBy)) {\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);\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: Record<string, unknown> = {};\n let forcedIncludeTree: Record<string, ForcedTree> = {};\n let forcedSelectTree: Record<string, ForcedTree> = {};\n let forcedIncludeCountWhere: Record<string, Record<string, unknown>> = {};\n let forcedSelectCountWhere: Record<string, Record<string, unknown>> = {};\n\n if (shape.where) {\n const { schema, forced } = buildWhereSchema(model, shape.where);\n if (schema) schemaFields[\"where\"] = schema;\n forcedWhere = forced;\n }\n\n if (shape.include) {\n const result = 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\"] = buildCountSelectSchema(model, shape.select);\n } else {\n const result = 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 schemaFields[\"orderBy\"] = buildOrderBySchema(model, shape.orderBy);\n }\n\n if (shape.cursor) {\n schemaFields[\"cursor\"] = buildCursorSchema(model, shape.cursor);\n }\n\n if (shape.take) {\n schemaFields[\"take\"] = buildTakeSchema(shape.take);\n }\n\n if (shape.skip) {\n schemaFields[\"skip\"] = z.number().int().min(0).optional();\n }\n\n if (shape.distinct) {\n schemaFields[\"distinct\"] = buildDistinctSchema(model, shape.distinct);\n }\n\n if (shape._count) {\n schemaFields[\"_count\"] = buildCountFieldSchema(\n model,\n shape._count,\n \"_count\",\n );\n }\n\n if (shape._avg) {\n schemaFields[\"_avg\"] = buildAggregateFieldSchema(\n model,\n \"_avg\",\n shape._avg,\n );\n }\n\n if (shape._sum) {\n schemaFields[\"_sum\"] = buildAggregateFieldSchema(\n model,\n \"_sum\",\n shape._sum,\n );\n }\n\n if (shape._min) {\n schemaFields[\"_min\"] = buildAggregateFieldSchema(\n model,\n \"_min\",\n shape._min,\n );\n }\n\n if (shape._max) {\n schemaFields[\"_max\"] = buildAggregateFieldSchema(\n model,\n \"_max\",\n shape._max,\n );\n }\n\n if (shape.by) {\n schemaFields[\"by\"] = buildBySchema(model, shape.by);\n }\n\n if (shape.having) {\n schemaFields[\"having\"] = buildHavingSchema(model, shape.having);\n }\n\n return {\n zodSchema: z.object(schemaFields).strict(),\n forcedWhere,\n forcedIncludeTree,\n forcedSelectTree,\n forcedIncludeCountWhere,\n forcedSelectCountWhere,\n };\n }\n\n function matchCaller<TCtx>(\n shapes: Record<string, ShapeOrFn<TCtx>>,\n caller: string,\n ): { key: string; shape: ShapeOrFn<TCtx> } | null {\n const matched = matchCallerPattern(Object.keys(shapes), caller);\n if (!matched) return null;\n return { key: matched, shape: shapes[matched] };\n }\n\n function buildQuerySchema<TCtx>(\n model: string,\n method: QueryMethod,\n config: ShapeOrFn<TCtx> | Record<string, ShapeOrFn<TCtx>>,\n ): QuerySchema<TCtx> {\n const isSingleShape = typeof config === \"function\" || isShapeConfig(config);\n const builtCache = new Map<string, BuiltShape>();\n\n if (isSingleShape && typeof config !== \"function\") {\n const built = buildShapeZodSchema(model, method, config as ShapeConfig);\n builtCache.set(\"_default\", built);\n }\n\n if (!isSingleShape) {\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 const built = buildShapeZodSchema(\n model,\n method,\n shapeOrFn as ShapeConfig,\n );\n builtCache.set(key, built);\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(body: unknown, opts?: { ctx?: TCtx }): Record<string, unknown> {\n let built: BuiltShape;\n\n if (isSingleShape) {\n if (typeof config === \"function\") {\n requireContext(opts?.ctx, \"shape function\");\n const resolvedShape = config(opts!.ctx!);\n built = buildShapeZodSchema(model, method, resolvedShape);\n } else {\n built = builtCache.get(\"_default\")!;\n }\n } else {\n if (!isPlainObject(body)) {\n throw new ShapeError(\"Request body must be an object\");\n }\n const caller = body.caller;\n if (typeof caller !== \"string\") {\n throw new CallerError('Missing \"caller\" field in request body');\n }\n\n const matched = matchCaller(\n config as Record<string, ShapeOrFn<TCtx>>,\n caller,\n );\n if (!matched) {\n const allowed = Object.keys(\n config as Record<string, ShapeOrFn<TCtx>>,\n );\n throw new CallerError(\n `Unknown caller: \"${caller}\". Allowed: ${allowed.map((k) => `\"${k}\"`).join(\", \")}`,\n );\n }\n\n const shapeKey = matched.key;\n const shapeOrFn = matched.shape;\n\n if (typeof shapeOrFn === \"function\") {\n requireContext(opts?.ctx, \"shape function\");\n const resolvedShape = shapeOrFn(opts!.ctx!);\n built = buildShapeZodSchema(model, method, resolvedShape);\n } else {\n built = builtCache.get(shapeKey)!;\n }\n\n const { caller: _, ...rest } = body;\n body = rest;\n }\n\n return applyBuiltShape(built, body, isUnique);\n },\n };\n }\n\n return {\n buildQuerySchema,\n buildShapeZodSchema,\n buildWhereSchema,\n buildIncludeSchema,\n buildSelectSchema,\n };\n}","export const SHAPE_CONFIG_KEYS = new Set([\n 'where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip',\n 'distinct', 'having', '_count', '_avg', '_sum', '_min', '_max', 'by',\n])\n\nexport const GUARD_SHAPE_KEYS = new Set([\n 'data', ...SHAPE_CONFIG_KEYS,\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'\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}","import type { ScopeMap, GuardGeneratedConfig, GuardLogger } from '../shared/types.js'\nimport { PolicyError, ShapeError } from '../shared/errors.js'\n\nconst READ_OPS = new Set([\n 'findMany', 'findFirst',\n 'findFirstOrThrow',\n 'count',\n])\n\nconst AGGREGATE_OPS = new Set([\n 'aggregate', 'groupBy',\n])\n\nconst FIND_UNIQUE_OPS = new Set([\n 'findUnique', 'findUniqueOrThrow',\n])\n\nconst CREATE_OPS = new Set([\n 'create', 'createMany', 'createManyAndReturn',\n])\n\nconst UNIQUE_MUTATION_OPS = new Set([\n 'update', 'delete',\n])\n\nconst MULTI_MUTATION_OPS = new Set([\n 'updateMany', 'updateManyAndReturn', 'deleteMany',\n])\n\nfunction buildAndConditions(\n existingWhere: Record<string, unknown> | undefined,\n conditions: Record<string, unknown>[],\n): Record<string, unknown> {\n if (existingWhere) return { AND: [existingWhere, ...conditions] }\n if (conditions.length === 1) return conditions[0]\n return { AND: conditions }\n}\n\nfunction buildScopedUniqueWhere(\n existingWhere: Record<string, unknown> | undefined,\n conditions: Record<string, unknown>[],\n): Record<string, unknown> {\n if (!existingWhere) {\n return conditions.length === 1 ? conditions[0] : { AND: conditions }\n }\n const { AND: existingAnd, ...topLevel } = existingWhere\n const allConditions: unknown[] = []\n if (existingAnd !== undefined) {\n if (Array.isArray(existingAnd)) {\n allConditions.push(...existingAnd)\n } else {\n allConditions.push(existingAnd)\n }\n }\n allConditions.push(...conditions)\n return { ...topLevel, AND: allConditions }\n}\n\nfunction isComparableScopeValue(v: unknown): v is string | number | bigint {\n const t = typeof v\n return t === 'string' || t === 'number' || t === 'bigint'\n}\n\nfunction looseEqual(a: unknown, b: unknown, log?: GuardLogger, fk?: string): boolean {\n if (a === b) return true\n if (!isComparableScopeValue(a) || !isComparableScopeValue(b)) return false\n const eq = String(a) === String(b)\n if (eq && log && fk) {\n log.warn(\n `prisma-guard: Scope value for \"${fk}\" matched via type coercion (${typeof a} ${String(a)} vs ${typeof b} ${String(b)}). Consider normalizing types in the context function.`,\n )\n }\n return eq\n}\n\nfunction buildFkSelect(fks: string[]): Record<string, true> {\n const select: Record<string, true> = {}\n for (const fk of fks) select[fk] = true\n return select\n}\n\nfunction pickMissingFksFromResult(\n result: Record<string, unknown>,\n fks: string[],\n): string[] {\n const missing: string[] = []\n for (const fk of fks) {\n if (!(fk in result)) missing.push(fk)\n }\n return missing\n}\n\nfunction validateScopeValue(root: string, value: unknown): void {\n if (typeof value === 'string' && value.length === 0) {\n throw new PolicyError(\n `Empty string scope value for root \"${root}\". This is almost certainly a bug in the context function.`,\n )\n }\n if (typeof value === 'number' && !Number.isFinite(value)) {\n throw new PolicyError(\n `Invalid numeric scope value for root \"${root}\": ${value}. This is almost certainly a bug in the context function.`,\n )\n }\n}\n\nfunction enforceDataScope(\n data: Record<string, unknown>,\n scopes: readonly { readonly fk: string; readonly root: string; readonly relationName: string }[],\n overrides: Record<string, unknown>,\n log: GuardLogger,\n model: string,\n operation: string,\n onScopeRelationWrite: 'error' | 'warn' | 'strip',\n mode: 'create' | 'mutate',\n): void {\n for (const scope of scopes) {\n if (scope.fk in data) {\n log.warn(\n `prisma-guard: Scope FK \"${scope.fk}\" in ${operation} data for model \"${model}\" was overridden by scope context.`,\n )\n }\n if (scope.relationName in data) {\n if (onScopeRelationWrite === 'error') {\n throw new ShapeError(\n `Scope relation \"${scope.relationName}\" cannot be set directly in ${operation} data for model \"${model}\". The scope extension manages this relation automatically.`,\n )\n }\n if (onScopeRelationWrite === 'warn') {\n log.warn(\n `prisma-guard: Scope relation \"${scope.relationName}\" in ${operation} data for model \"${model}\" was removed by scope context.`,\n )\n }\n delete data[scope.relationName]\n }\n }\n if (mode === 'create') {\n Object.assign(data, overrides)\n } else {\n for (const scope of scopes) {\n delete data[scope.fk]\n }\n }\n}\n\nconst VALID_FIND_UNIQUE_MODES = new Set(['verify', 'reject'])\nconst VALID_ON_SCOPE_RELATION_WRITES = new Set(['error', 'warn', 'strip'])\n\nexport function createScopeExtension<TRoots extends string>(\n scopeMap: ScopeMap,\n contextFn: () => Partial<Record<TRoots, string | number | bigint>>,\n guardConfig: GuardGeneratedConfig,\n logger?: GuardLogger,\n) {\n const log: GuardLogger = logger ?? { warn: (msg) => console.warn(msg) }\n const findUniqueMode = guardConfig.findUniqueMode ?? 'reject'\n const onScopeRelationWrite = guardConfig.onScopeRelationWrite ?? 'error'\n\n if (!VALID_FIND_UNIQUE_MODES.has(findUniqueMode)) {\n throw new ShapeError(\n `prisma-guard: Invalid findUniqueMode \"${findUniqueMode}\". Allowed: ${[...VALID_FIND_UNIQUE_MODES].join(', ')}`,\n )\n }\n\n if (!VALID_ON_SCOPE_RELATION_WRITES.has(onScopeRelationWrite)) {\n throw new ShapeError(\n `prisma-guard: Invalid onScopeRelationWrite \"${onScopeRelationWrite}\". Allowed: ${[...VALID_ON_SCOPE_RELATION_WRITES].join(', ')}`,\n )\n }\n\n return {\n name: 'prisma-guard-scope',\n query: {\n $allOperations({ model, operation, args, query }: any) {\n if (!model || !scopeMap[model]) return query(args)\n\n const ctx = contextFn() as Partial<Record<string, string | number | bigint>>\n const scopes = scopeMap[model]\n\n const presentScopes = scopes.filter(s => ctx[s.root] != null)\n for (const s of presentScopes) {\n validateScopeValue(s.root, ctx[s.root])\n }\n\n const presentConditions = presentScopes.map(s => ({ [s.fk]: ctx[s.root] }))\n\n const missingRoots = scopes\n .filter(s => ctx[s.root] == null)\n .map(s => s.root)\n\n const isMutation = CREATE_OPS.has(operation) ||\n UNIQUE_MUTATION_OPS.has(operation) ||\n MULTI_MUTATION_OPS.has(operation) ||\n operation === 'upsert'\n\n if (missingRoots.length > 0) {\n if (isMutation || guardConfig.onMissingScopeContext === 'error') {\n throw new PolicyError(\n `Missing scope context for model \"${model}\": roots ${missingRoots.map(r => `\"${r}\"`).join(', ')} not provided. All scope roots must be present.`,\n )\n }\n if (guardConfig.onMissingScopeContext === 'warn') {\n log.warn(\n `prisma-guard: Missing scope context for model \"${model}\": roots ${missingRoots.map(r => `\"${r}\"`).join(', ')} not provided. Read proceeding with partial scope.`,\n )\n }\n if (presentConditions.length === 0) {\n return query(args)\n }\n }\n\n const conditions = presentConditions\n const overrides = Object.fromEntries(\n presentScopes.map(s => [s.fk, ctx[s.root]]),\n )\n\n if (operation === 'upsert') {\n throw new PolicyError(\n `Scoped model \"${model}\" cannot use upsert via extension. Handle upsert explicitly in route logic.`,\n )\n }\n\n if (FIND_UNIQUE_OPS.has(operation)) {\n if (findUniqueMode === 'reject') {\n throw new PolicyError(\n `Scoped model \"${model}\" does not allow ${operation} via scope extension (findUniqueMode is \"reject\"). Use findFirst with explicit where conditions instead.`,\n )\n }\n return handleFindUnique(args, query, conditions, scopes, operation, log)\n }\n\n const nextArgs = { ...args }\n\n if (READ_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n return query(nextArgs)\n }\n\n if (AGGREGATE_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n if (operation === 'groupBy' && !nextArgs.by) {\n throw new ShapeError(\n `prisma-guard: groupBy on scoped model \"${model}\" requires \"by\" argument.`,\n )\n }\n return query(nextArgs)\n }\n\n if (CREATE_OPS.has(operation)) {\n if (args.data === undefined || args.data === null) {\n throw new ShapeError(`${operation} expects data`)\n }\n if (operation === 'createMany' || operation === 'createManyAndReturn') {\n if (!Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an array`)\n }\n if (args.data.length === 0) {\n throw new ShapeError(`${operation} received empty data array`)\n }\n nextArgs.data = args.data.map((d: any) => {\n const item = { ...d }\n enforceDataScope(item, scopes, overrides, log, model, operation, onScopeRelationWrite, 'create')\n return item\n })\n } else {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'create')\n }\n return query(nextArgs)\n }\n\n if (UNIQUE_MUTATION_OPS.has(operation)) {\n nextArgs.where = buildScopedUniqueWhere(args.where, conditions)\n if (args.data !== undefined && args.data !== null) {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'mutate')\n }\n return query(nextArgs)\n }\n\n if (MULTI_MUTATION_OPS.has(operation)) {\n nextArgs.where = buildAndConditions(args.where, conditions)\n if (args.data !== undefined && args.data !== null) {\n if (typeof args.data !== 'object' || Array.isArray(args.data)) {\n throw new ShapeError(`${operation} expects data to be an object`)\n }\n nextArgs.data = { ...args.data }\n enforceDataScope(nextArgs.data, scopes, overrides, log, model, operation, onScopeRelationWrite, 'mutate')\n }\n return query(nextArgs)\n }\n\n throw new ShapeError(\n `Unknown operation \"${operation}\" on scoped model \"${model}\". Update prisma-guard to handle this operation.`,\n )\n },\n },\n }\n}\n\nasync function handleFindUnique(\n args: any,\n query: (args: any) => Promise<any>,\n conditions: Record<string, unknown>[],\n scopes: readonly { readonly fk: string; readonly root: string; readonly relationName: string }[],\n operation: string,\n log: GuardLogger,\n): Promise<any> {\n const nextArgs = { ...args }\n const injectedFks: string[] = []\n const originalSelect = args?.select\n const fks = scopes.map(s => s.fk)\n\n if (originalSelect) {\n nextArgs.select = { ...originalSelect }\n for (const fk of fks) {\n if (!originalSelect[fk]) {\n nextArgs.select[fk] = true\n injectedFks.push(fk)\n }\n }\n }\n\n const result = await query(nextArgs)\n if (result === null) return result\n\n if (typeof result !== 'object' || result === null) {\n throw new ShapeError('findUnique result must be an object or null')\n }\n\n const resultObj = result as Record<string, unknown>\n\n let verifyObj: Record<string, unknown> = resultObj\n const missingFks = pickMissingFksFromResult(resultObj, fks)\n\n if (missingFks.length > 0) {\n const where = args?.where\n if (!where || typeof where !== 'object' || Array.isArray(where)) {\n throw new PolicyError(\n `prisma-guard: Cannot verify scope — missing FK fields (${missingFks.join(', ')}) and findUnique args.where is not a valid object.`,\n )\n }\n\n let verifyResult: any\n try {\n verifyResult = await query({ where, select: buildFkSelect(fks) })\n } catch (err: any) {\n throw new PolicyError(\n `prisma-guard: Scope verification query failed for findUnique: ${err?.message ?? String(err)}`,\n )\n }\n\n if (verifyResult === null) {\n throw new PolicyError('prisma-guard: Scope verification query returned null for an existing findUnique result')\n }\n if (typeof verifyResult !== 'object' || verifyResult === null) {\n throw new PolicyError('prisma-guard: Scope verification result must be an object')\n }\n\n verifyObj = verifyResult as Record<string, unknown>\n }\n\n for (const condition of conditions) {\n const [fk, value] = Object.entries(condition)[0]\n if (!(fk in verifyObj)) {\n throw new PolicyError(\n `prisma-guard: Cannot verify scope on \"${fk}\" — field not present in verification result. Ensure FK fields are selectable.`,\n )\n }\n if (!looseEqual(verifyObj[fk], value, log, fk)) {\n if (operation === 'findUniqueOrThrow') {\n throw new PolicyError('Record not accessible in current scope')\n }\n return null\n }\n }\n\n if (injectedFks.length > 0) {\n const cleaned: Record<string, unknown> = { ...resultObj }\n for (const fk of injectedFks) {\n delete cleaned[fk]\n }\n return cleaned\n }\n\n return result\n}","import { z } from 'zod'\nimport type {\n TypeMap, EnumMap, ZodChains, UniqueMap, ScopeMap, GuardShape,\n GuardInput, GuardShapeOrFn, QueryMethod, GuardedModel, DataFieldRefine,\n NestedIncludeArgs, NestedSelectArgs,\n} 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 { createSchemaBuilder } from './schema-builder.js'\nimport {\n createQueryBuilder, isPlainObject, mergeForced, mergeUniqueForced,\n applyBuiltShape, validateUniqueEquality, validateResolvedUniqueWhere,\n applyForcedTree, applyForcedCountWhere,\n} from './query-builder.js'\nimport type { BuiltShape, ForcedTree, BuiltIncludeResult, BuiltSelectResult } from './query-builder.js'\n\nconst ALLOWED_BODY_KEYS_CREATE = new Set(['data'])\nconst ALLOWED_BODY_KEYS_CREATE_PROJECTION = new Set(['data', 'select', 'include'])\nconst ALLOWED_BODY_KEYS_UPDATE = new Set(['data', 'where'])\nconst ALLOWED_BODY_KEYS_UPDATE_PROJECTION = new Set(['data', 'where', 'select', 'include'])\nconst ALLOWED_BODY_KEYS_DELETE = new Set(['where'])\nconst ALLOWED_BODY_KEYS_DELETE_PROJECTION = new Set(['where', 'select', 'include'])\n\nconst VALID_SHAPE_KEYS_CREATE = new Set(['data'])\nconst VALID_SHAPE_KEYS_CREATE_PROJECTION = new Set(['data', 'select', 'include'])\nconst VALID_SHAPE_KEYS_UPDATE = new Set(['data', 'where'])\nconst VALID_SHAPE_KEYS_UPDATE_PROJECTION = new Set(['data', 'where', 'select', 'include'])\nconst VALID_SHAPE_KEYS_DELETE = new Set(['where'])\nconst VALID_SHAPE_KEYS_DELETE_PROJECTION = new Set(['where', 'select', 'include'])\n\ninterface BuiltDataSchema {\n schema: z.ZodObject<any>\n forced: Record<string, unknown>\n}\n\ninterface BuiltProjection {\n zodSchema: z.ZodObject<any>\n forcedIncludeTree: Record<string, ForcedTree>\n forcedSelectTree: Record<string, ForcedTree>\n forcedIncludeCountWhere: Record<string, Record<string, unknown>>\n forcedSelectCountWhere: Record<string, Record<string, unknown>>\n}\n\nconst UNIQUE_MUTATION_METHODS = new Set(['update', 'delete'])\n\nconst UNIQUE_READ_METHODS = new Set<string>(['findUnique', 'findUniqueOrThrow'])\n\nconst BULK_MUTATION_METHODS = new Set([\n 'updateMany', 'updateManyAndReturn', 'deleteMany',\n])\n\nconst PROJECTION_MUTATION_METHODS = new Set([\n 'create', 'update', 'delete',\n 'createManyAndReturn', 'updateManyAndReturn',\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 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\nfunction validateMutationShapeKeys(\n shape: GuardShape,\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\ninterface ResolvedShape {\n shape: GuardShape\n body: Record<string, unknown>\n matchedKey: string\n wasDynamic: boolean\n}\n\nfunction formatZodError(err: z.ZodError): string {\n return err.issues.map(i => {\n const p = i.path.length > 0 ? `${i.path.join('.')}: ` : ''\n return `${p}${i.message}`\n }).join('; ')\n}\n\nexport function createModelGuardExtension(config: {\n typeMap: TypeMap\n enumMap: EnumMap\n zodChains: ZodChains\n uniqueMap: UniqueMap\n scopeMap: ScopeMap\n contextFn: () => Record<string, unknown>\n wrapZodErrors?: boolean\n}) {\n const { typeMap, enumMap, zodChains, uniqueMap, scopeMap, contextFn } = config\n const wrapZodErrors = config.wrapZodErrors ?? false\n const schemaBuilder = createSchemaBuilder(typeMap, zodChains, enumMap)\n const queryBuilder = createQueryBuilder(typeMap, enumMap, uniqueMap)\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) {\n fks.add(entry.fk)\n }\n modelScopeFks.set(model, fks)\n }\n\n function validateCreateCompleteness(\n modelName: string,\n dataConfig: Record<string, true | unknown>,\n ): void {\n const modelFields = typeMap[modelName]\n if (!modelFields) return\n\n const fks = modelScopeFks.get(modelName) ?? new Set<string>()\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 (fks.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\n function buildDataSchema(\n model: string,\n dataConfig: Record<string, true | unknown>,\n mode: 'create' | 'update',\n ): BuiltDataSchema {\n const modelFields = typeMap[model]\n if (!modelFields) throw new ShapeError(`Unknown model: ${model}`)\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 if (!fieldMeta) throw new ShapeError(`Unknown field \"${fieldName}\" on model \"${model}\"`)\n if (fieldMeta.isRelation) throw new ShapeError(`Relation field \"${fieldName}\" cannot be used in data shape`)\n if (fieldMeta.isUpdatedAt) throw new ShapeError(`updatedAt field \"${fieldName}\" cannot be used in data shape`)\n\n if (typeof value === 'function') {\n let baseSchema: z.ZodTypeAny = schemaBuilder.buildBaseFieldSchema(model, fieldName)\n let fieldSchema: z.ZodTypeAny\n try {\n fieldSchema = (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 (mode === 'create') {\n if (!fieldMeta.isRequired || fieldMeta.hasDefault) {\n fieldSchema = fieldSchema.optional()\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(model, fieldName)\n\n if (mode === 'create') {\n if (!fieldMeta.isRequired || fieldMeta.hasDefault) {\n fieldSchema = fieldSchema.optional()\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 let fieldSchema: z.ZodTypeAny = schemaBuilder.buildFieldSchema(model, fieldName)\n if (!fieldMeta.isRequired) {\n fieldSchema = fieldSchema.nullable()\n }\n let parsed: unknown\n try {\n parsed = fieldSchema.parse(value)\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 return {\n schema: z.object(schemaMap).strict(),\n forced,\n }\n }\n\n function resolveShape(\n input: GuardInput,\n body: unknown,\n ): ResolvedShape {\n if (isSingleShape(input)) {\n const wasDynamic = typeof input === 'function'\n const shape = wasDynamic\n ? (input as (ctx: any) => GuardShape)(contextFn())\n : input as GuardShape\n const parsed = body === undefined || body === null\n ? {}\n : requireBody(body)\n if ('caller' in parsed) {\n throw new CallerError(\n 'Named shape routing is not configured on this guard. Remove \"caller\" from the request body or use a named shape map.',\n )\n }\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 = requireBody(body)\n\n const caller = parsed.caller\n if (typeof caller !== 'string') {\n throw new CallerError('Missing \"caller\" field in request body')\n }\n\n const patterns = Object.keys(namedMap)\n const matched = matchCallerPattern(patterns, caller)\n if (!matched) {\n throw new CallerError(\n `Unknown caller: \"${caller}\". Allowed: ${patterns.map(k => `\"${k}\"`).join(', ')}`,\n )\n }\n\n const shapeOrFn = namedMap[matched]\n const wasDynamic = typeof shapeOrFn === 'function'\n const shape = wasDynamic\n ? (shapeOrFn as (ctx: any) => GuardShape)(contextFn())\n : shapeOrFn as GuardShape\n\n const { caller: _, ...rest } = parsed\n return { shape, body: rest, matchedKey: matched, wasDynamic }\n }\n\n function requireBody(body: unknown): Record<string, unknown> {\n if (!isPlainObject(body)) throw new ShapeError('Request body must be an object')\n return body\n }\n\n function validateAndMergeData(\n bodyData: unknown,\n cached: BuiltDataSchema,\n method: string,\n ): Record<string, unknown> {\n if (bodyData === undefined || bodyData === null) {\n throw new ShapeError(`${method} requires \"data\" in request body`)\n }\n const validated = cached.schema.parse(bodyData)\n return { ...validated, ...cached.forced }\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)\n }\n\n function hasDataRefines(dataConfig: Record<string, true | unknown>): boolean {\n for (const value of Object.values(dataConfig)) {\n if (typeof value === 'function') return true\n }\n return false\n }\n\n function createGuardedMethods(\n modelName: string,\n modelDelegate: Record<string, (args: any) => any>,\n input: GuardInput,\n ) {\n function callDelegate(method: string, args: any): any {\n if (typeof modelDelegate[method] !== 'function') {\n throw new ShapeError(`Method \"${method}\" is not available on this model`)\n }\n return modelDelegate[method](args)\n }\n\n const readShapeCache = new Map<string, BuiltShape>()\n const dataSchemaCache = new Map<string, BuiltDataSchema>()\n const whereBuiltCache = new Map<string, { schema: z.ZodTypeAny | null; forced: Record<string, Record<string, unknown>> }>()\n const projectionCache = new Map<string, BuiltProjection>()\n\n function getReadShape(\n method: QueryMethod,\n queryShape: Record<string, unknown>,\n matchedKey: string,\n wasDynamic: boolean,\n ): BuiltShape {\n if (!wasDynamic) {\n const cacheKey = `${method}\\0${matchedKey}`\n const cached = readShapeCache.get(cacheKey)\n if (cached) return cached\n const built = queryBuilder.buildShapeZodSchema(modelName, method, queryShape as any)\n readShapeCache.set(cacheKey, built)\n return built\n }\n return queryBuilder.buildShapeZodSchema(modelName, method, queryShape as any)\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(modelName, dataConfig, mode)\n dataSchemaCache.set(cacheKey, built)\n return built\n }\n return buildDataSchema(modelName, dataConfig, mode)\n }\n\n function getWhereBuilt(\n whereConfig: Record<string, Record<string, true | unknown>>,\n matchedKey: string,\n wasDynamic: boolean,\n ): { schema: z.ZodTypeAny | null; forced: Record<string, Record<string, unknown>> } {\n if (!wasDynamic) {\n const cached = whereBuiltCache.get(matchedKey)\n if (cached) return cached\n const built = queryBuilder.buildWhereSchema(modelName, whereConfig)\n whereBuiltCache.set(matchedKey, built)\n return built\n }\n return queryBuilder.buildWhereSchema(modelName, whereConfig)\n }\n\n function buildProjectionSchema(shape: GuardShape): BuiltProjection {\n if (shape.select && shape.include) {\n throw new ShapeError('Shape cannot define both \"select\" and \"include\"')\n }\n\n const schemaFields: Record<string, z.ZodTypeAny> = {}\n let forcedIncludeTree: Record<string, ForcedTree> = {}\n let forcedSelectTree: Record<string, ForcedTree> = {}\n let forcedIncludeCountWhere: Record<string, Record<string, unknown>> = {}\n let forcedSelectCountWhere: Record<string, Record<string, unknown>> = {}\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 (!hasShapeProjection) return {}\n\n const projection = getProjection(shape, matchedKey, wasDynamic)\n\n const projectionBody: Record<string, unknown> = {}\n if ('select' in parsed) projectionBody.select = parsed.select\n if ('include' in parsed) projectionBody.include = parsed.include\n\n const validated = projection.zodSchema.parse(projectionBody) as Record<string, unknown>\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 validatedWhere = built.schema.parse(bodyWhere) as Record<string, unknown> | undefined\n }\n\n if (Object.keys(built.forced).length > 0) {\n return preserveUnique\n ? mergeUniqueForced(validatedWhere, built.forced)\n : mergeForced(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(shape, bodyWhere, preserveUnique, matchedKey, wasDynamic)\n if (Object.keys(where).length === 0) {\n throw new ShapeError(`${method} requires a where condition`)\n }\n return where\n }\n\n function makeReadMethod(method: QueryMethod) {\n return (body?: unknown) => {\n const { shape, body: parsed, matchedKey, wasDynamic } = resolveShape(input, body)\n if (shape.data) {\n throw new ShapeError(`Guard shape \"data\" is not valid for ${method}`)\n }\n const { data: _, ...queryShape } = shape\n const built = getReadShape(method, queryShape, matchedKey, wasDynamic)\n const isUnique = UNIQUE_READ_METHODS.has(method)\n const args = applyBuiltShape(built, parsed, isUnique)\n if (isUnique && args.where) {\n validateResolvedUniqueWhere(\n modelName,\n args.where as Record<string, unknown>,\n method,\n uniqueMap,\n )\n }\n return callDelegate(method, args)\n }\n }\n\n function makeCreateMethod(method: string) {\n const supportsProjection = PROJECTION_MUTATION_METHODS.has(method)\n const allowedBodyKeys = supportsProjection\n ? ALLOWED_BODY_KEYS_CREATE_PROJECTION\n : ALLOWED_BODY_KEYS_CREATE\n const allowedShapeKeys = supportsProjection\n ? VALID_SHAPE_KEYS_CREATE_PROJECTION\n : VALID_SHAPE_KEYS_CREATE\n\n return (body: unknown) => {\n const { shape, body: parsed, matchedKey, wasDynamic } = resolveShape(input, body)\n if (!shape.data) throw new ShapeError(`Guard shape requires \"data\" for ${method}`)\n validateMutationShapeKeys(shape, allowedShapeKeys, method)\n validateMutationBodyKeys(parsed, allowedBodyKeys, method)\n validateCreateCompleteness(modelName, shape.data)\n const dataSchema = getDataSchema('create', shape.data, matchedKey, wasDynamic)\n\n let args: Record<string, unknown>\n if (method === 'create') {\n const data = validateAndMergeData(parsed.data, dataSchema, method)\n args = { data }\n } else {\n if (!Array.isArray(parsed.data)) throw new ShapeError(`${method} expects data to be an array`)\n if (parsed.data.length === 0) throw new ShapeError(`${method} received empty data array`)\n const data = parsed.data.map((item: unknown) =>\n validateAndMergeData(item, dataSchema, method),\n )\n args = { data }\n }\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(shape, parsed, method, matchedKey, wasDynamic)\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 { shape, body: parsed, matchedKey, wasDynamic } = resolveShape(input, body)\n if (!shape.data) throw new ShapeError(`Guard shape requires \"data\" for ${method}`)\n validateMutationShapeKeys(shape, allowedShapeKeys, method)\n validateMutationBodyKeys(parsed, allowedBodyKeys, method)\n if (isBulk && !shape.where) {\n throw new ShapeError(`Guard shape requires \"where\" for ${method} to prevent unconstrained bulk mutations`)\n }\n maybeValidateUniqueWhere(modelName, shape, method)\n const dataSchema = getDataSchema('update', shape.data, matchedKey, wasDynamic)\n const data = validateAndMergeData(parsed.data, dataSchema, method)\n const where = isUniqueWhere\n ? requireWhere(shape, parsed.where, method, true, matchedKey, wasDynamic)\n : buildWhereFromShape(shape, parsed.where, false, matchedKey, wasDynamic)\n if (isBulk && Object.keys(where).length === 0) {\n throw new ShapeError(`${method} requires at least one where condition`)\n }\n if (isUniqueWhere) {\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap)\n }\n\n const args: Record<string, unknown> = { data, where }\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(shape, parsed, method, matchedKey, wasDynamic)\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 { shape, body: parsed, matchedKey, wasDynamic } = resolveShape(input, body)\n if (shape.data) throw new ShapeError(`Guard shape \"data\" is not valid for ${method}`)\n validateMutationShapeKeys(shape, allowedShapeKeys, method)\n validateMutationBodyKeys(parsed, allowedBodyKeys, method)\n if (isBulk && !shape.where) {\n throw new ShapeError(`Guard shape requires \"where\" for ${method} to prevent unconstrained bulk mutations`)\n }\n maybeValidateUniqueWhere(modelName, shape, method)\n const where = isUniqueWhere\n ? requireWhere(shape, parsed.where, method, true, matchedKey, wasDynamic)\n : buildWhereFromShape(shape, parsed.where, false, matchedKey, wasDynamic)\n if (isBulk && Object.keys(where).length === 0) {\n throw new ShapeError(`${method} requires at least one where condition`)\n }\n if (isUniqueWhere) {\n validateResolvedUniqueWhere(modelName, where, method, uniqueMap)\n }\n\n const args: Record<string, unknown> = { where }\n\n if (supportsProjection) {\n const projectionArgs = resolveProjection(shape, parsed, method, matchedKey, wasDynamic)\n Object.assign(args, projectionArgs)\n }\n\n return callDelegate(method, 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 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(\n `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) {\n const modelName: string = this.$name\n const delegateKey = modelName[0].toLowerCase() + modelName.slice(1)\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(modelName, modelDelegate, input)\n if (!wrapZodErrors) return methods\n return wrapMethods(methods)\n },\n },\n }\n}"],"mappings":"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","names":["z","z","z","itemMeta","itemBase","z","z","z","isSingleShape","z","z","wasDynamic","shape","parsed","formatZodError"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "prisma-guard",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Prisma generator + runtime for input validation, query shape enforcement, and row-level tenant isolation",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=20"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
"./generator": {
|
|
12
|
+
"import": "./dist/generator/index.js",
|
|
13
|
+
"types": "./dist/generator/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
".": {
|
|
16
|
+
"import": "./dist/runtime/index.js",
|
|
17
|
+
"types": "./dist/runtime/index.d.ts"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"bin": {
|
|
21
|
+
"prisma-guard": "./dist/generator/index.js"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsup",
|
|
28
|
+
"coverage": "vitest run --coverage",
|
|
29
|
+
"prepublishOnly": "npm run build",
|
|
30
|
+
"test": "vitest",
|
|
31
|
+
"test:e2e": "npm run build && vitest -c vitest.config.e2e.ts",
|
|
32
|
+
"typecheck": "tsc --noEmit"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@prisma/generator-helper": "^6.0.0 || ^7.0.0"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"@prisma/client": "^6.0.0 || ^7.0.0",
|
|
39
|
+
"zod": "^4.0.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@prisma/client": "^7.4.0",
|
|
43
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
44
|
+
"@semantic-release/git": "^10.0.1",
|
|
45
|
+
"@types/node": "^25.0.0",
|
|
46
|
+
"@vitest/coverage-v8": "^4.0.0",
|
|
47
|
+
"dotenv": "^16.0.0",
|
|
48
|
+
"prisma": "^7.4.0",
|
|
49
|
+
"semantic-release": "^24.2.9",
|
|
50
|
+
"tsup": "^8.0.0",
|
|
51
|
+
"typescript": "^5.9.0",
|
|
52
|
+
"vitest": "^4.0.0",
|
|
53
|
+
"zod": "^4.3.0"
|
|
54
|
+
}
|
|
55
|
+
}
|