prisma-guard 1.28.0 → 1.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generator/index.js +10 -9
- package/dist/generator/index.js.map +1 -1
- package/dist/runtime/index.cjs +10 -9
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.d.cts +10 -9
- package/dist/runtime/index.d.ts +10 -9
- package/dist/runtime/index.js +10 -9
- package/dist/runtime/index.js.map +1 -1
- package/package.json +1 -1
package/dist/generator/index.js
CHANGED
|
@@ -350,21 +350,22 @@ ${typesSource}
|
|
|
350
350
|
// src/shared/operation-shape-keys.ts
|
|
351
351
|
var OPERATION_SHAPE_KEYS = {
|
|
352
352
|
findMany: ["where", "include", "select", "orderBy", "cursor", "take", "skip", "distinct"],
|
|
353
|
+
findManyPaginated: ["where", "include", "select", "orderBy", "cursor", "take", "skip", "distinct"],
|
|
353
354
|
findFirst: ["where", "include", "select", "orderBy", "cursor", "take", "skip", "distinct"],
|
|
354
355
|
findFirstOrThrow: ["where", "include", "select", "orderBy", "cursor", "take", "skip", "distinct"],
|
|
355
356
|
findUnique: ["where", "include", "select"],
|
|
356
357
|
findUniqueOrThrow: ["where", "include", "select"],
|
|
357
358
|
count: ["where", "select", "cursor", "orderBy", "skip", "take"],
|
|
358
359
|
aggregate: ["where", "orderBy", "cursor", "take", "skip", "_count", "_avg", "_sum", "_min", "_max"],
|
|
359
|
-
groupBy: ["where", "
|
|
360
|
-
create: ["data", "
|
|
361
|
-
createMany: ["data"],
|
|
362
|
-
createManyAndReturn: ["data", "select", "
|
|
363
|
-
update: ["
|
|
364
|
-
updateMany: ["
|
|
365
|
-
updateManyAndReturn: ["
|
|
366
|
-
upsert: ["where", "create", "update", "
|
|
367
|
-
delete: ["where", "
|
|
360
|
+
groupBy: ["where", "orderBy", "by", "having", "take", "skip", "_count", "_avg", "_sum", "_min", "_max"],
|
|
361
|
+
create: ["data", "include", "select"],
|
|
362
|
+
createMany: ["data", "skipDuplicates"],
|
|
363
|
+
createManyAndReturn: ["data", "select", "skipDuplicates"],
|
|
364
|
+
update: ["where", "data", "include", "select"],
|
|
365
|
+
updateMany: ["where", "data"],
|
|
366
|
+
updateManyAndReturn: ["where", "data", "select"],
|
|
367
|
+
upsert: ["where", "create", "update", "include", "select"],
|
|
368
|
+
delete: ["where", "include", "select"],
|
|
368
369
|
deleteMany: ["where"]
|
|
369
370
|
};
|
|
370
371
|
var READ_METHOD_ALLOWED_ARGS = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/generator/index.ts","../../src/generator/import-style.ts","../../src/generator/emit-client.ts","../../src/generator/emit-scope-map.ts","../../src/shared/unique-constraints.ts","../../src/generator/emit-type-map.ts","../../src/shared/operation-shape-keys.ts","../../src/generator/emit-typed-shapes.ts","../../src/generator/emit-zod-chains.ts","../../src/generator/validate-directive.ts","../../src/shared/scalar-base.ts"],"sourcesContent":["import pkg from '@prisma/generator-helper'\nconst { generatorHandler } = pkg\nimport type { DMMF, GeneratorOptions } from '@prisma/generator-helper'\nimport { existsSync, mkdirSync, rmSync, writeFileSync } from 'fs'\nimport { relative } from 'path'\nimport { z } from 'zod'\nimport { emitClient } from './emit-client.js'\nimport { emitScopeMap } from './emit-scope-map.js'\nimport { emitTypeMap } from './emit-type-map.js'\nimport { emitTypedShapes } from './emit-typed-shapes.js'\nimport { emitZodChains } from './emit-zod-chains.js'\nimport {\n resolveImportStyle,\n type PrismaClientKind,\n} from './import-style.js'\n\nconst booleanConfig = z\n .enum(['true', 'false'])\n .transform((v) => v === 'true')\n\nconst configSchema = z.object({\n onInvalidZod: z.enum(['error', 'warn']).default('error'),\n onAmbiguousScope: z.enum(['error', 'warn', 'ignore']).default('error'),\n onMissingScopeContext: z.enum(['error', 'warn', 'ignore']).default('error'),\n findUniqueMode: z.enum(['verify', 'reject']).default('reject'),\n onScopeRelationWrite: z.enum(['error', 'warn', 'strip']).default('error'),\n strictDecimal: booleanConfig.default(false),\n enforceProjection: booleanConfig.default(false),\n typedGuardShapes: booleanConfig.default(true),\n typedGuardRelationDepth: z\n .enum(['0', '1', '2', '3'])\n .default('1')\n .transform((v) => Number(v) as 0 | 1 | 2 | 3),\n importStyle: z.enum(['auto', 'none', 'js', 'ts']).default('auto'),\n runtimeImportPath: z\n .string()\n .trim()\n .min(1, 'runtimeImportPath must be a non-empty string')\n .default('prisma-guard'),\n})\n\ntype ResolvedConfig = z.infer<typeof configSchema>\n\nfunction parseGeneratorConfig(raw: Record<string, unknown>): ResolvedConfig {\n const result = configSchema.safeParse(raw)\n if (result.success) return result.data\n\n const issues = result.error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join('.') : '(root)'\n return `\"${path}\": ${issue.message}`\n })\n .join('; ')\n\n throw new Error(`prisma-guard: Invalid generator config: ${issues}`)\n}\n\nfunction emitZodDefaults(defaults: Record<string, string[]>): string {\n const entries = Object.entries(defaults)\n\n if (entries.length === 0) {\n return `export const ZOD_DEFAULTS: Record<string, readonly string[]> = {}\\n`\n }\n\n const mapEntries = entries\n .map(([model, fields]) => {\n const fieldsStr = fields.map((field) => JSON.stringify(field)).join(', ')\n return ` ${JSON.stringify(model)}: [${fieldsStr}],`\n })\n .join('\\n')\n\n return `export const ZOD_DEFAULTS: Record<string, readonly string[]> = {\\n${mapEntries}\\n}\\n`\n}\n\nfunction getProviderValue(provider: unknown): string {\n if (typeof provider === 'string') return provider\n\n if (provider && typeof provider === 'object' && 'value' in provider) {\n const value = (provider as { value?: unknown }).value\n if (typeof value === 'string') return value\n }\n\n return ''\n}\n\nfunction classifyPrismaProvider(provider: unknown): 'prisma-client-js' | 'prisma-client' | null {\n const value = getProviderValue(provider)\n\n if (value === 'prisma-client-js' || value.endsWith('/prisma-client-js')) {\n return 'prisma-client-js'\n }\n\n if (value === 'prisma-client' || value.endsWith('/prisma-client')) {\n return 'prisma-client'\n }\n\n return null\n}\n\nfunction normalizeImportPath(path: string): string {\n const normalized = path.replace(/\\\\/g, '/')\n if (normalized.startsWith('/') || /^[A-Za-z]:/.test(normalized)) {\n return '@prisma/client'\n }\n if (normalized.startsWith('.')) return normalized\n return `./${normalized}`\n}\n\nfunction resolvePrismaClientImport(\n options: GeneratorOptions,\n guardOutput: string,\n): { path: string; kind: PrismaClientKind } {\n let matched: { provider: 'prisma-client-js' | 'prisma-client'; output: string } | null = null\n\n for (const generator of options.otherGenerators) {\n const providerKind = classifyPrismaProvider(generator.provider)\n if (!providerKind) continue\n\n const output = generator.output?.value\n if (!output) continue\n\n matched = { provider: providerKind, output }\n break\n }\n\n if (!matched) return { path: '@prisma/client', kind: 'package' }\n\n const rel = relative(guardOutput, matched.output)\n if (rel.length === 0) return { path: '@prisma/client', kind: 'package' }\n\n return {\n path: normalizeImportPath(rel),\n kind: matched.provider,\n }\n}\n\ngeneratorHandler({\n onManifest() {\n return {\n prettyName: 'Prisma Guard',\n defaultOutput: 'generated/guard',\n }\n },\n\n async onGenerate(options) {\n const output = options.generator.output?.value\n if (!output) throw new Error('prisma-guard: No output directory specified')\n\n const rawConfig = (options.generator.config ?? {}) as Record<string, unknown>\n const cfg = parseGeneratorConfig(rawConfig)\n\n const importStyle = resolveImportStyle(output, cfg.importStyle)\n\n const dmmf: DMMF.Document = options.dmmf\n const parts: string[] = []\n\n parts.push(\n `export const GUARD_CONFIG = {\\n` +\n ` onMissingScopeContext: ${JSON.stringify(cfg.onMissingScopeContext)},\\n` +\n ` findUniqueMode: ${JSON.stringify(cfg.findUniqueMode)},\\n` +\n ` onScopeRelationWrite: ${JSON.stringify(cfg.onScopeRelationWrite)},\\n` +\n ` strictDecimal: ${JSON.stringify(cfg.strictDecimal)},\\n` +\n ` enforceProjection: ${JSON.stringify(cfg.enforceProjection)},\\n` +\n `} as const\\n`,\n )\n\n const { source: scopeSource } = emitScopeMap(dmmf, cfg.onAmbiguousScope)\n parts.push(scopeSource)\n\n const typeMapSource = emitTypeMap(dmmf)\n parts.push(typeMapSource)\n\n const { source: zodChainsSource, defaults } = emitZodChains(dmmf, cfg.onInvalidZod)\n parts.push(zodChainsSource)\n parts.push(emitZodDefaults(defaults))\n\n mkdirSync(output, { recursive: true })\n\n writeFileSync(`${output}/index.ts`, parts.join('\\n'), 'utf-8')\n\n const { path: prismaClientImport, kind: prismaClientKind } =\n resolvePrismaClientImport(options, output)\n const clientSource = emitClient(\n dmmf,\n prismaClientImport,\n prismaClientKind,\n importStyle,\n cfg.runtimeImportPath,\n )\n writeFileSync(`${output}/client.ts`, clientSource, 'utf-8')\n\n const shapesPath = `${output}/shapes.ts`\n\n if (cfg.typedGuardShapes) {\n writeFileSync(\n shapesPath,\n emitTypedShapes(dmmf, cfg.typedGuardRelationDepth, importStyle, cfg.runtimeImportPath),\n 'utf-8',\n )\n } else if (existsSync(shapesPath)) {\n rmSync(shapesPath, { force: true })\n }\n },\n})","import { existsSync, readFileSync } from 'fs'\nimport { dirname, join, resolve } from 'path'\nimport { getTsconfig } from 'get-tsconfig'\n\nexport type ImportStyle = 'none' | 'js' | 'ts'\nexport type ImportStyleConfig = 'auto' | ImportStyle\nexport type PrismaClientKind = 'prisma-client-js' | 'prisma-client' | 'package'\n\nconst NODE_ESM_MODES = new Set(['node16', 'node18', 'nodenext'])\nconst NO_EXTENSION_RESOLUTIONS = new Set(['bundler', 'classic', 'node', 'node10'])\n\ninterface TsCompilerOptions {\n module?: string\n moduleResolution?: string\n allowImportingTsExtensions?: boolean\n}\n\nfunction findUpwards(startDir: string, filename: string): string | null {\n let dir = resolve(startDir)\n while (true) {\n const candidate = join(dir, filename)\n if (existsSync(candidate)) return candidate\n const parent = dirname(dir)\n if (parent === dir) return null\n dir = parent\n }\n}\n\nfunction readCompilerOptions(startDir: string): TsCompilerOptions {\n try {\n const result = getTsconfig(startDir)\n if (!result) return {}\n const co = result.config.compilerOptions\n if (!co || typeof co !== 'object') return {}\n return co as TsCompilerOptions\n } catch {\n return {}\n }\n}\n\nfunction readPackageType(startDir: string): string | null {\n const pkgPath = findUpwards(startDir, 'package.json')\n if (!pkgPath) return null\n\n try {\n const raw = readFileSync(pkgPath, 'utf-8')\n const pkg = JSON.parse(raw)\n return typeof pkg.type === 'string' ? pkg.type : null\n } catch {\n return null\n }\n}\n\nexport function resolveImportStyle(\n startDir: string,\n override: ImportStyleConfig,\n): ImportStyle {\n if (override !== 'auto') return override\n\n const co = readCompilerOptions(startDir)\n\n if (co.allowImportingTsExtensions === true) return 'ts'\n\n const moduleValue =\n typeof co.module === 'string' ? co.module.toLowerCase() : ''\n const resolutionValue =\n typeof co.moduleResolution === 'string'\n ? co.moduleResolution.toLowerCase()\n : ''\n\n if (NODE_ESM_MODES.has(moduleValue) || NODE_ESM_MODES.has(resolutionValue)) {\n return 'js'\n }\n\n if (NO_EXTENSION_RESOLUTIONS.has(resolutionValue)) {\n return 'none'\n }\n\n if (readPackageType(startDir) === 'module') return 'js'\n\n return 'none'\n}\n\nexport function withImportStyle(path: string, style: ImportStyle): string {\n if (style === 'js') return `${path}.js`\n if (style === 'ts') return `${path}.ts`\n return path\n}\n\nexport function withClientImportStyle(\n path: string,\n style: ImportStyle,\n kind: PrismaClientKind,\n): string {\n if (kind === 'package') return path\n if (!path.startsWith('.')) return path\n\n if (kind === 'prisma-client') {\n const entry = `${path}/client`\n return withImportStyle(entry, style)\n }\n\n if (style === 'js') return `${path}/index.js`\n return path\n}","import type { DMMF } from '@prisma/generator-helper'\nimport {\n withImportStyle,\n withClientImportStyle,\n type ImportStyle,\n type PrismaClientKind,\n} from './import-style.js'\n\nfunction delegateKey(modelName: string): string {\n return modelName.charAt(0).toLowerCase() + modelName.slice(1)\n}\n\nfunction emitGuardModelExtension(dmmf: DMMF.Document): string {\n const entries = dmmf.datamodel.models\n .map((model) => {\n const key = delegateKey(model.name)\n return (\n ` ${key}: {\\n` +\n ` guard(input: GuardInput, caller?: string): GuardedModel<PrismaClient['${key}']>\\n` +\n ` }`\n )\n })\n .join('\\n')\n\n return `interface GuardModelExtension {\\n${entries}\\n}\\n`\n}\n\nexport function emitClient(\n dmmf: DMMF.Document,\n prismaClientImport: string,\n prismaClientKind: PrismaClientKind,\n importStyle: ImportStyle,\n runtimeImportPath: string,\n): string {\n const indexImport = withImportStyle('./index', importStyle)\n const clientImport = withClientImportStyle(\n prismaClientImport,\n importStyle,\n prismaClientKind,\n )\n\n return (\n `import type { PrismaClient } from '${clientImport}'\\n` +\n `import type { GuardInput, GuardedModel } from '${runtimeImportPath}'\\n` +\n `import { createGuard } from '${runtimeImportPath}'\\n` +\n `import { SCOPE_MAP, TYPE_MAP, ENUM_MAP, ZOD_CHAINS, GUARD_CONFIG, UNIQUE_MAP, ZOD_DEFAULTS } from '${indexImport}'\\n` +\n `import type { ScopeRoot } from '${indexImport}'\\n\\n` +\n emitGuardModelExtension(dmmf) +\n `\\n` +\n `export const guard = createGuard<typeof TYPE_MAP, ScopeRoot, GuardModelExtension>({\\n` +\n ` scopeMap: SCOPE_MAP,\\n` +\n ` typeMap: TYPE_MAP,\\n` +\n ` enumMap: ENUM_MAP,\\n` +\n ` zodChains: ZOD_CHAINS,\\n` +\n ` guardConfig: GUARD_CONFIG,\\n` +\n ` uniqueMap: UNIQUE_MAP,\\n` +\n ` zodDefaults: ZOD_DEFAULTS,\\n` +\n `})\\n`\n )\n}","import type { DMMF } from '@prisma/generator-helper'\n\nfunction isScopeRoot(documentation: string | undefined): boolean {\n if (!documentation) return false\n const tokens = documentation.split(/[\\s\\n\\r]+/)\n return tokens.some(t => t === '@scope-root')\n}\n\ninterface RelationEntry {\n fks: string[]\n root: string\n relationName: string\n}\n\ntype IssueMode = 'error' | 'warn' | 'ignore'\n\nfunction reportScopeIssue(\n mode: IssueMode,\n errorMsg: string,\n warnMsg: string,\n): void {\n if (mode === 'error') throw new Error(`prisma-guard: ${errorMsg}`)\n if (mode === 'warn') console.warn(`prisma-guard: ${warnMsg}`)\n}\n\nfunction serializeScopeEntry(e: {\n fk: string\n root: string\n relationName: string\n}): string {\n return `{ fk: ${JSON.stringify(e.fk)}, root: ${JSON.stringify(e.root)}, relationName: ${JSON.stringify(e.relationName)} }`\n}\n\nexport function emitScopeMap(\n dmmf: DMMF.Document,\n onAmbiguousScope: IssueMode,\n): { source: string } {\n const rootModels = new Set<string>()\n\n for (const model of dmmf.datamodel.models) {\n if (isScopeRoot(model.documentation)) {\n rootModels.add(model.name)\n }\n }\n\n const scopeMap: Record<string, { fk: string; root: string; relationName: string }[]> = {}\n\n for (const model of dmmf.datamodel.models) {\n if (rootModels.has(model.name)) continue\n\n const relations: RelationEntry[] = []\n\n for (const field of model.fields) {\n if (!field.relationFromFields || field.relationFromFields.length === 0) continue\n if (!rootModels.has(field.type)) continue\n\n if (field.relationFromFields.length > 1) {\n const compositeMsg =\n `Model \"${model.name}\" has a composite foreign key to scope root \"${field.type}\" via relation \"${field.name}\" ` +\n `(fields: ${field.relationFromFields.join(', ')}). Composite scope relations are not supported.`\n const excludeMsg =\n `${compositeMsg} Excluding relation \"${field.name}\" to scope root \"${field.type}\" from scope map for model \"${model.name}\".`\n\n reportScopeIssue(onAmbiguousScope, compositeMsg, excludeMsg)\n continue\n }\n\n relations.push({\n fks: [...field.relationFromFields],\n root: field.type,\n relationName: field.name,\n })\n }\n\n if (relations.length === 0) continue\n\n const relationsByRoot: Record<string, RelationEntry[]> = {}\n for (const rel of relations) {\n if (!relationsByRoot[rel.root]) relationsByRoot[rel.root] = []\n relationsByRoot[rel.root].push(rel)\n }\n\n const entries: { fk: string; root: string; relationName: string }[] = []\n\n for (const [root, rels] of Object.entries(relationsByRoot)) {\n if (rels.length > 1) {\n const relNames = rels.map(r => r.relationName)\n const ambiguousMsg =\n `Model \"${model.name}\" has multiple relations to scope root \"${root}\" (${relNames.join(', ')}).`\n const errorMsg =\n `Ambiguous scope detected. Resolve these or set onAmbiguousScope to \"warn\" or \"ignore\":\\n - ${ambiguousMsg}`\n const warnMsg =\n `${ambiguousMsg} Excluding relations to scope root \"${root}\" from scope map for model \"${model.name}\".`\n\n reportScopeIssue(onAmbiguousScope, errorMsg, warnMsg)\n continue\n }\n\n entries.push({\n fk: rels[0].fks[0],\n root: rels[0].root,\n relationName: rels[0].relationName,\n })\n }\n\n if (entries.length > 0) {\n scopeMap[model.name] = entries\n }\n }\n\n const roots = Array.from(rootModels).sort()\n\n const mapEntries = Object.entries(scopeMap)\n .map(([model, entries]) => {\n const entriesStr = entries.map(serializeScopeEntry).join(', ')\n return ` ${model}: [${entriesStr}],`\n })\n .join('\\n')\n\n const scopeRootType = roots.length > 0\n ? roots.map(r => `'${r}'`).join(' | ')\n : 'never'\n\n const source = `export const SCOPE_MAP = {\\n${mapEntries}\\n} as const\\n\\nexport type ScopeRoot = ${scopeRootType}\\n`\n\n return { source }\n}","import type { DMMF } from '@prisma/generator-helper'\nimport type { UniqueConstraint } from './types.js'\n\nexport interface UniqueConstraintMeta {\n selector: string\n fields: string[]\n}\n\nexport function uniqueSelector(fields: string[], name?: string | null): string {\n if (typeof name === 'string' && name.trim().length > 0) return name\n return fields.join('_')\n}\n\nexport function fieldsKey(fields: string[]): string {\n return fields.join('\\0')\n}\n\nexport function formatUniqueConstraint(constraint: UniqueConstraint | UniqueConstraintMeta): string {\n return constraint.fields.length === 1\n ? constraint.selector\n : `${constraint.selector}(${constraint.fields.join(', ')})`\n}\n\nexport function formatUniqueConstraints(\n constraints: readonly (UniqueConstraint | UniqueConstraintMeta)[],\n): string {\n return constraints.map(formatUniqueConstraint).join(' | ')\n}\n\nexport function collectUniqueConstraints(model: DMMF.Model): UniqueConstraintMeta[] {\n const fieldSetSeen = new Set<string>()\n const selectorToFields = new Map<string, string>()\n const constraints: UniqueConstraintMeta[] = []\n\n function add(fields: string[], selector?: string | null): void {\n if (fields.length === 0) return\n\n const normalizedSelector =\n fields.length === 1 ? fields[0] : uniqueSelector(fields, selector)\n\n const key = fieldsKey(fields)\n const existingFieldsForSelector = selectorToFields.get(normalizedSelector)\n\n if (existingFieldsForSelector && existingFieldsForSelector !== key) {\n throw new Error(\n `prisma-guard: Unique selector \"${normalizedSelector}\" on model \"${model.name}\" maps to multiple field sets.`,\n )\n }\n\n if (fieldSetSeen.has(key)) return\n\n fieldSetSeen.add(key)\n selectorToFields.set(normalizedSelector, key)\n\n constraints.push({\n selector: normalizedSelector,\n fields: [...fields],\n })\n }\n\n for (const field of model.fields) {\n if (field.isId) add([field.name], field.name)\n }\n\n if (model.primaryKey) {\n add([...model.primaryKey.fields], model.primaryKey.name)\n }\n\n for (const field of model.fields) {\n if (field.isUnique) add([field.name], field.name)\n }\n\n const uniqueIndexes =\n (\n model as DMMF.Model & {\n uniqueIndexes?: Array<{ name?: string | null; fields: string[] }>\n }\n ).uniqueIndexes ?? []\n\n for (const index of uniqueIndexes) {\n add([...index.fields], index.name)\n }\n\n for (const fields of model.uniqueFields) {\n add([...fields], fields.length === 1 ? fields[0] : fields.join('_'))\n }\n\n return constraints\n}","import type { DMMF } from '@prisma/generator-helper'\nimport { collectUniqueConstraints } from '../shared/unique-constraints.js'\n\nfunction serializeMeta(entries: Array<[string, unknown]>): string {\n return entries\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(', ')\n}\n\nexport function emitTypeMap(dmmf: DMMF.Document): string {\n const enumNames = new Set(dmmf.datamodel.enums.map((e) => e.name))\n\n for (const e of dmmf.datamodel.enums) {\n if (e.values.length === 0) {\n throw new Error(`prisma-guard: Enum \"${e.name}\" has zero values.`)\n }\n }\n\n const modelEntries = dmmf.datamodel.models\n .map((model) => {\n const fieldEntries = model.fields\n .map((field) => {\n const isRelation =\n field.kind === 'object' || field.relationName != null\n const isEnum = enumNames.has(field.type)\n const isUnsupported = field.kind === 'unsupported'\n\n const metaPairs: Array<[string, unknown]> = [\n ['type', field.type],\n ['isList', field.isList],\n ['isRequired', field.isRequired],\n ['isId', field.isId],\n ['isRelation', isRelation],\n ['hasDefault', field.hasDefaultValue],\n ['isUpdatedAt', field.isUpdatedAt],\n ]\n if (isEnum) metaPairs.push(['isEnum', true])\n if (isUnsupported) metaPairs.push(['isUnsupported', true])\n if (field.isUnique) metaPairs.push(['isUnique', true])\n\n return ` ${JSON.stringify(field.name)}: { ${serializeMeta(metaPairs)} },`\n })\n .join('\\n')\n return ` ${JSON.stringify(model.name)}: {\\n${fieldEntries}\\n },`\n })\n .join('\\n')\n\n const enumEntries = dmmf.datamodel.enums\n .map((e) => {\n const values = e.values.map((v) => JSON.stringify(v.name)).join(', ')\n return ` ${JSON.stringify(e.name)}: [${values}],`\n })\n .join('\\n')\n\n const uniqueMapEntries = dmmf.datamodel.models\n .map((model) => {\n const constraints = collectUniqueConstraints(model)\n if (constraints.length === 0) return null\n\n const constraintsStr = constraints\n .map((c) => {\n const fields = c.fields.map((f) => JSON.stringify(f)).join(', ')\n return `{ selector: ${JSON.stringify(c.selector)}, fields: [${fields}] }`\n })\n .join(', ')\n\n return ` ${JSON.stringify(model.name)}: [${constraintsStr}],`\n })\n .filter(Boolean)\n .join('\\n')\n\n const typeMapSource = `export const TYPE_MAP = {\\n${modelEntries}\\n} as const\\n`\n const enumMapSource = `export const ENUM_MAP = {\\n${enumEntries}\\n} as const\\n`\n const uniqueMapSource = `export const UNIQUE_MAP = {\\n${uniqueMapEntries}\\n} as const\\n`\n\n const typesSource = [\n `export type ModelName = keyof typeof TYPE_MAP`,\n `export type FieldName<M extends ModelName> = keyof (typeof TYPE_MAP)[M]`,\n ].join('\\n')\n\n return `${typeMapSource}\\n${enumMapSource}\\n${uniqueMapSource}\\n${typesSource}\\n`\n}","export const OPERATION_SHAPE_KEYS = {\n findMany: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findFirst: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findFirstOrThrow: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findUnique: ['where', 'include', 'select'],\n findUniqueOrThrow: ['where', 'include', 'select'],\n count: ['where', 'select', 'cursor', 'orderBy', 'skip', 'take'],\n aggregate: ['where', 'orderBy', 'cursor', 'take', 'skip', '_count', '_avg', '_sum', '_min', '_max'],\n groupBy: ['where', 'by', 'having', '_count', '_avg', '_sum', '_min', '_max', 'orderBy', 'take', 'skip'],\n create: ['data', 'select', 'include'],\n createMany: ['data'],\n createManyAndReturn: ['data', 'select', 'include'],\n update: ['data', 'where', 'select', 'include'],\n updateMany: ['data', 'where'],\n updateManyAndReturn: ['data', 'where', 'select', 'include'],\n upsert: ['where', 'create', 'update', 'select', 'include'],\n delete: ['where', 'select', 'include'],\n deleteMany: ['where'],\n} as const\n\nexport type OperationName = keyof typeof OPERATION_SHAPE_KEYS\n\nexport type OperationShapeKey<O extends OperationName> =\n (typeof OPERATION_SHAPE_KEYS)[O][number]\n\nexport const READ_METHOD_ALLOWED_ARGS: Record<string, Set<string>> = {\n findMany: new Set(OPERATION_SHAPE_KEYS.findMany),\n findFirst: new Set(OPERATION_SHAPE_KEYS.findFirst),\n findFirstOrThrow: new Set(OPERATION_SHAPE_KEYS.findFirstOrThrow),\n findUnique: new Set(OPERATION_SHAPE_KEYS.findUnique),\n findUniqueOrThrow: new Set(OPERATION_SHAPE_KEYS.findUniqueOrThrow),\n count: new Set(OPERATION_SHAPE_KEYS.count),\n aggregate: new Set(OPERATION_SHAPE_KEYS.aggregate),\n groupBy: new Set(OPERATION_SHAPE_KEYS.groupBy),\n}\n\nexport const MUTATION_SHAPE_KEYS = {\n create: new Set(OPERATION_SHAPE_KEYS.create),\n createMany: new Set(OPERATION_SHAPE_KEYS.createMany),\n createManyAndReturn: new Set(OPERATION_SHAPE_KEYS.createManyAndReturn),\n update: new Set(OPERATION_SHAPE_KEYS.update),\n updateMany: new Set(OPERATION_SHAPE_KEYS.updateMany),\n updateManyAndReturn: new Set(OPERATION_SHAPE_KEYS.updateManyAndReturn),\n upsert: new Set(OPERATION_SHAPE_KEYS.upsert),\n delete: new Set(OPERATION_SHAPE_KEYS.delete),\n deleteMany: new Set(OPERATION_SHAPE_KEYS.deleteMany),\n}\n\nexport interface MutationOperationSpec {\n bodyKeysBase: readonly string[]\n bodyKeysProjection: readonly string[]\n shapeKeysBase: readonly string[]\n shapeKeysProjection: readonly string[]\n supportsProjection: boolean\n}\n\nexport const MUTATION_OPERATION_SPECS: Record<string, MutationOperationSpec> = {\n create: {\n bodyKeysBase: ['data'],\n bodyKeysProjection: ['data', 'select', 'include'],\n shapeKeysBase: ['data'],\n shapeKeysProjection: ['data', 'select', 'include'],\n supportsProjection: true,\n },\n createMany: {\n bodyKeysBase: ['data', 'skipDuplicates'],\n bodyKeysProjection: ['data', 'select', 'include', 'skipDuplicates'],\n shapeKeysBase: ['data'],\n shapeKeysProjection: ['data'],\n supportsProjection: false,\n },\n createManyAndReturn: {\n bodyKeysBase: ['data', 'skipDuplicates'],\n bodyKeysProjection: ['data', 'select', 'include', 'skipDuplicates'],\n shapeKeysBase: ['data'],\n shapeKeysProjection: ['data', 'select', 'include'],\n supportsProjection: true,\n },\n update: {\n bodyKeysBase: ['data', 'where'],\n bodyKeysProjection: ['data', 'where', 'select', 'include'],\n shapeKeysBase: ['data', 'where'],\n shapeKeysProjection: ['data', 'where', 'select', 'include'],\n supportsProjection: true,\n },\n updateMany: {\n bodyKeysBase: ['data', 'where'],\n bodyKeysProjection: ['data', 'where'],\n shapeKeysBase: ['data', 'where'],\n shapeKeysProjection: ['data', 'where'],\n supportsProjection: false,\n },\n updateManyAndReturn: {\n bodyKeysBase: ['data', 'where'],\n bodyKeysProjection: ['data', 'where', 'select', 'include'],\n shapeKeysBase: ['data', 'where'],\n shapeKeysProjection: ['data', 'where', 'select', 'include'],\n supportsProjection: true,\n },\n upsert: {\n bodyKeysBase: ['where', 'create', 'update', 'select', 'include'],\n bodyKeysProjection: ['where', 'create', 'update', 'select', 'include'],\n shapeKeysBase: ['where', 'create', 'update', 'select', 'include'],\n shapeKeysProjection: ['where', 'create', 'update', 'select', 'include'],\n supportsProjection: true,\n },\n delete: {\n bodyKeysBase: ['where'],\n bodyKeysProjection: ['where', 'select', 'include'],\n shapeKeysBase: ['where'],\n shapeKeysProjection: ['where', 'select', 'include'],\n supportsProjection: true,\n },\n deleteMany: {\n bodyKeysBase: ['where'],\n bodyKeysProjection: ['where'],\n shapeKeysBase: ['where'],\n shapeKeysProjection: ['where'],\n supportsProjection: false,\n },\n}\n\nconst bodyKeyCache = new Map<string, Set<string>>()\nconst shapeKeyCache = new Map<string, Set<string>>()\n\nexport function getAllowedBodyKeys(method: string, withProjection: boolean): Set<string> {\n const cacheKey = `${method}\\0${withProjection ? 'p' : 'b'}`\n const cached = bodyKeyCache.get(cacheKey)\n if (cached) return cached\n\n const spec = MUTATION_OPERATION_SPECS[method]\n if (!spec) throw new Error(`Unknown mutation method \"${method}\"`)\n\n const keys = withProjection && spec.supportsProjection\n ? spec.bodyKeysProjection\n : spec.bodyKeysBase\n\n const set = new Set(keys)\n bodyKeyCache.set(cacheKey, set)\n return set\n}\n\nexport function getAllowedShapeKeys(method: string, withProjection: boolean): Set<string> {\n const cacheKey = `${method}\\0${withProjection ? 'p' : 'b'}`\n const cached = shapeKeyCache.get(cacheKey)\n if (cached) return cached\n\n const spec = MUTATION_OPERATION_SPECS[method]\n if (!spec) throw new Error(`Unknown mutation method \"${method}\"`)\n\n const keys = withProjection && spec.supportsProjection\n ? spec.shapeKeysProjection\n : spec.shapeKeysBase\n\n const set = new Set(keys)\n shapeKeyCache.set(cacheKey, set)\n return set\n}\n\nexport function methodSupportsProjection(method: string): boolean {\n const spec = MUTATION_OPERATION_SPECS[method]\n return spec ? spec.supportsProjection : false\n}","import type { DMMF } from '@prisma/generator-helper'\nimport { OPERATION_SHAPE_KEYS } from '../shared/operation-shape-keys.js'\nimport { withImportStyle, type ImportStyle } from './import-style.js'\n\nconst OPERATIONS = Object.keys(OPERATION_SHAPE_KEYS) as Array<\n keyof typeof OPERATION_SHAPE_KEYS\n>\n\nfunction cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nexport function emitTypedShapes(\n dmmf: DMMF.Document,\n depth: 0 | 1 | 2 | 3,\n importStyle: ImportStyle,\n runtimeImportPath: string,\n): string {\n const indexImport = withImportStyle('./index', importStyle)\n\n const header =\n `import type { TYPE_MAP, UNIQUE_MAP } from '${indexImport}'\\n` +\n `import type {\\n` +\n ` TypedGuardShape,\\n` +\n ` OperationShape,\\n` +\n ` ShapeInput,\\n` +\n ` TypedProjection,\\n` +\n ` TypedInclude,\\n` +\n ` TypedCountSelect,\\n` +\n `} from '${runtimeImportPath}'\\n\\n` +\n `type TM = typeof TYPE_MAP\\n` +\n `type UM = typeof UNIQUE_MAP\\n\\n`\n\n const blocks = dmmf.datamodel.models\n .map((model) => {\n const m = model.name\n\n const projAlias =\n `export type ${m}Select = ` +\n `TypedProjection<TM, '${m}', ${depth}, UM>\\n` +\n `export type ${m}Projection = ${m}Select\\n` +\n `export type ${m}Include = ` +\n `TypedInclude<TM, '${m}', ${depth}, UM>\\n` +\n `export type ${m}CountSelect = ` +\n `TypedCountSelect<TM, '${m}'>\\n`\n\n const guardAlias =\n `export type ${m}GuardShape = ` +\n `TypedGuardShape<TM, '${m}', ${depth}, UM>\\n`\n\n const opAliases = OPERATIONS.map((op) => {\n const c = cap(op)\n\n return (\n `export type ${m}${c}Shape = ` +\n `OperationShape<TM, '${m}', '${op}', ${depth}, UM>\\n` +\n `export type ${m}${c}ShapeInput<TCtx = unknown> = ` +\n `ShapeInput<${m}${c}Shape, TCtx>\\n`\n )\n }).join('')\n\n return projAlias + guardAlias + opAliases\n })\n .join('\\n')\n\n return header + blocks\n}","import type { DMMF } from '@prisma/generator-helper'\nimport { z } from 'zod'\nimport { validateDirective } from './validate-directive.js'\nimport { SCALAR_BASE } from '../shared/scalar-base.js'\n\nfunction buildGenerationBase(\n fieldType: string,\n isList: boolean,\n isEnum: boolean,\n enumValues?: readonly string[],\n): z.ZodTypeAny | null {\n let base: z.ZodTypeAny\n\n if (isEnum) {\n const values = enumValues && enumValues.length > 0 ? enumValues : ['__placeholder__']\n base = z.enum(values as [string, ...string[]])\n } else {\n const factory = SCALAR_BASE[fieldType]\n if (!factory) return null\n base = factory()\n }\n\n if (isList) base = z.array(base)\n\n return base\n}\n\nfunction verifyChainExecution(\n fieldType: string,\n isList: boolean,\n isEnum: boolean,\n enumValues: readonly string[] | undefined,\n chainStr: string,\n): string | null {\n const base = buildGenerationBase(fieldType, isList, isEnum, enumValues)\n if (!base) {\n return `Unsupported field type \"${fieldType}\" for @zod directive`\n }\n\n let fn: (base: z.ZodTypeAny) => z.ZodTypeAny\n try {\n fn = new Function('base', `'use strict'; return base${chainStr}`) as (base: z.ZodTypeAny) => z.ZodTypeAny\n } catch (err: any) {\n return `syntax error: ${err.message}`\n }\n\n try {\n const result = fn(base)\n if (result === null || result === undefined || typeof result !== 'object' || typeof (result as any).parse !== 'function') {\n return 'chain did not produce a valid Zod schema'\n }\n } catch (err: any) {\n return err.message\n }\n\n return null\n}\n\nfunction findZodInDoc(documentation: string): string[] {\n return documentation.split('\\n').filter(line => {\n const trimmed = line.trim()\n return /^@zod(?:\\s|$|\\.)/.test(trimmed)\n })\n}\n\nexport function emitZodChains(\n dmmf: DMMF.Document,\n onInvalidZod: 'error' | 'warn',\n): { source: string; hasChains: boolean; defaults: Record<string, string[]> } {\n const enumNames = new Set(dmmf.datamodel.enums.map(e => e.name))\n const enumValues: Record<string, readonly string[]> = {}\n for (const e of dmmf.datamodel.enums) {\n enumValues[e.name] = e.values.map(v => v.name)\n }\n\n const modelChains: Record<string, Record<string, string>> = {}\n const defaults: Record<string, string[]> = {}\n\n function fail(msg: string): void {\n if (onInvalidZod === 'error') throw new Error(msg)\n console.warn(msg)\n }\n\n for (const model of dmmf.datamodel.models) {\n for (const field of model.fields) {\n if (!field.documentation) continue\n\n const zodLines = findZodInDoc(field.documentation)\n\n if (zodLines.length === 0) continue\n\n if (zodLines.length > 1) {\n fail(`prisma-guard: Multiple @zod directives on ${model.name}.${field.name}. Only one @zod per field allowed.`)\n continue\n }\n\n const line = zodLines[0]\n const idx = line.indexOf('@zod')\n const chainStr = line.slice(idx + 4).trim()\n\n if (chainStr.length === 0) {\n fail(`prisma-guard: Empty @zod directive on ${model.name}.${field.name}. Add a method chain (e.g. @zod .min(1)) or remove the directive.`)\n continue\n }\n\n const result = validateDirective(chainStr)\n\n if (result.valid === false) {\n fail(`prisma-guard: Invalid @zod directive on ${model.name}.${field.name}: ${result.reason}`)\n continue\n }\n\n const isEnum = enumNames.has(field.type)\n\n const execError = verifyChainExecution(\n field.type,\n field.isList,\n isEnum,\n isEnum ? enumValues[field.type] : undefined,\n chainStr,\n )\n if (execError) {\n fail(`prisma-guard: @zod directive on ${model.name}.${field.name} fails at schema construction: ${execError}`)\n continue\n }\n\n if (!modelChains[model.name]) modelChains[model.name] = {}\n modelChains[model.name][field.name] = chainStr\n\n if (result.methods.includes('default') || result.methods.includes('catch')) {\n if (!defaults[model.name]) defaults[model.name] = []\n defaults[model.name].push(field.name)\n }\n }\n }\n\n const hasChains = Object.keys(modelChains).length > 0\n\n if (!hasChains) {\n return { source: 'export const ZOD_CHAINS = {}\\n', hasChains: false, defaults }\n }\n\n const entries = Object.entries(modelChains)\n .map(([model, fields]) => {\n const fieldEntries = Object.entries(fields)\n .map(([field, chain]) => ` ${JSON.stringify(field)}: (base: any) => base${chain},`)\n .join('\\n')\n return ` ${JSON.stringify(model)}: {\\n${fieldEntries}\\n },`\n })\n .join('\\n')\n\n return {\n source: `export const ZOD_CHAINS = {\\n${entries}\\n}\\n`,\n hasChains: true,\n defaults,\n }\n}","const ALLOWED_ZOD_METHODS = new Set([\n 'min', 'max', 'length', 'email', 'url', 'uuid', 'cuid', 'cuid2',\n 'ulid', 'trim', 'toLowerCase', 'toUpperCase',\n 'startsWith', 'endsWith', 'includes',\n 'datetime', 'ip', 'cidr', 'date', 'time', 'duration',\n 'base64', 'nanoid', 'emoji',\n 'int', 'positive', 'nonnegative', 'negative', 'nonpositive',\n 'finite', 'safe', 'multipleOf', 'step',\n 'gt', 'gte', 'lt', 'lte',\n 'nonempty',\n 'regex',\n 'readonly',\n 'optional', 'nullable', 'nullish',\n 'default', 'catch',\n])\n\nconst METHOD_ARITY: Record<string, [number, number]> = {\n min: [1, 2], max: [1, 2], length: [1, 2],\n email: [0, 1], url: [0, 1], uuid: [0, 1], cuid: [0, 1], cuid2: [0, 1], ulid: [0, 1],\n trim: [0, 0], toLowerCase: [0, 0], toUpperCase: [0, 0],\n startsWith: [1, 2], endsWith: [1, 2], includes: [1, 2],\n datetime: [0, 1], ip: [0, 1], cidr: [0, 1], date: [0, 1], time: [0, 1], duration: [0, 1],\n base64: [0, 1], nanoid: [0, 1], emoji: [0, 1],\n int: [0, 1], positive: [0, 1], nonnegative: [0, 1], negative: [0, 1], nonpositive: [0, 1],\n finite: [0, 1], safe: [0, 1],\n multipleOf: [1, 2], step: [1, 2],\n gt: [1, 2], gte: [1, 2], lt: [1, 2], lte: [1, 2],\n nonempty: [0, 1],\n regex: [1, 2],\n readonly: [0, 0],\n optional: [0, 0], nullable: [0, 0], nullish: [0, 0],\n default: [1, 1], catch: [1, 1],\n}\n\nconst MAX_DIRECTIVE_LENGTH = 1024\nconst MAX_CHAIN_DEPTH = 20\n\ntype ValidationResult =\n | { valid: true; methods: string[] }\n | { valid: false; reason: string }\n\nexport function validateDirective(raw: string): ValidationResult {\n if (raw.length > MAX_DIRECTIVE_LENGTH) {\n return { valid: false, reason: 'Directive exceeds maximum length' }\n }\n\n const input = raw.trim()\n if (input.length === 0) {\n return { valid: false, reason: 'Empty directive' }\n }\n if (input[0] !== '.') {\n return { valid: false, reason: 'Directive must start with \".\"' }\n }\n\n let pos = 0\n let chainCount = 0\n const methods: string[] = []\n\n function peek(): string {\n return input[pos] ?? ''\n }\n\n function advance(): string {\n return input[pos++] ?? ''\n }\n\n function skipWhitespace(): void {\n while (pos < input.length && (input[pos] === ' ' || input[pos] === '\\t')) {\n pos++\n }\n }\n\n function parseString(): ValidationResult | null {\n const quote = peek()\n if (quote !== '\"' && quote !== \"'\") return null\n advance()\n while (pos < input.length) {\n const ch = input[pos]\n if (ch === '\\\\') {\n const next = input[pos + 1]\n if (next === \"'\" || next === '\"' || next === '\\\\') {\n pos += 2\n continue\n }\n return { valid: false, reason: `Invalid escape sequence \"\\\\${next ?? ''}\" in string` }\n }\n if (ch === quote) {\n advance()\n return null\n }\n if (ch.charCodeAt(0) < 32) {\n return { valid: false, reason: 'Control character in string' }\n }\n advance()\n }\n return { valid: false, reason: 'Unterminated string' }\n }\n\n function parseNumber(): ValidationResult | null {\n const start = pos\n if (peek() === '-') advance()\n if (pos >= input.length || !/[0-9]/.test(peek())) {\n pos = start\n return null\n }\n if (peek() === '0' && pos + 1 < input.length && /[0-9]/.test(input[pos + 1])) {\n return { valid: false, reason: 'Leading zeros not allowed in numbers' }\n }\n while (pos < input.length && /[0-9]/.test(peek())) advance()\n if (peek() === '.') {\n advance()\n if (!/[0-9]/.test(peek())) {\n return { valid: false, reason: 'Invalid number: expected digit after decimal point' }\n }\n while (pos < input.length && /[0-9]/.test(peek())) advance()\n }\n if (peek() === 'e' || peek() === 'E') {\n advance()\n if (peek() === '-' || peek() === '+') advance()\n if (!/[0-9]/.test(peek())) {\n return { valid: false, reason: 'Invalid number: expected digit in exponent' }\n }\n while (pos < input.length && /[0-9]/.test(peek())) advance()\n }\n return null\n }\n\n function parseRegex(): ValidationResult | null {\n advance()\n if (peek() === '/' || peek() === '*') {\n return { valid: false, reason: 'Empty or comment-like regex pattern' }\n }\n let inCharClass = false\n while (pos < input.length) {\n const ch = input[pos]\n if (ch === '\\\\') {\n if (pos + 1 >= input.length) {\n return { valid: false, reason: 'Unterminated escape in regex' }\n }\n pos += 2\n continue\n }\n if (ch === '[' && !inCharClass) {\n inCharClass = true\n pos++\n continue\n }\n if (ch === ']' && inCharClass) {\n inCharClass = false\n pos++\n continue\n }\n if (ch === '/' && !inCharClass) {\n advance()\n while (pos < input.length && /[gimsuydv]/.test(peek())) {\n advance()\n }\n return null\n }\n if (ch.charCodeAt(0) < 32 && ch !== '\\t') {\n return { valid: false, reason: 'Control character in regex' }\n }\n pos++\n }\n return { valid: false, reason: 'Unterminated regex literal' }\n }\n\n function parseObjectKey(): ValidationResult | null {\n skipWhitespace()\n const ch = peek()\n if (ch === '\"' || ch === \"'\") {\n return parseString()\n }\n if (/[a-zA-Z_]/.test(ch)) {\n while (pos < input.length && /[a-zA-Z0-9_]/.test(peek())) {\n advance()\n }\n return null\n }\n return { valid: false, reason: 'Expected object key (identifier or string)' }\n }\n\n function parseArg(): ValidationResult | null {\n skipWhitespace()\n const ch = peek()\n\n if (ch === '}') {\n return { valid: false, reason: 'Unexpected \"}\" in directive args' }\n }\n if (ch === '`') {\n return { valid: false, reason: 'Template literals not allowed in directive args' }\n }\n if (ch !== '' && ch.charCodeAt(0) < 32) {\n return { valid: false, reason: 'Control character not allowed outside strings' }\n }\n\n if (ch === '\"' || ch === \"'\") {\n return parseString()\n }\n\n if (ch === '/') {\n return parseRegex()\n }\n\n if (ch === '{') {\n advance()\n skipWhitespace()\n if (peek() === '}') {\n advance()\n return null\n }\n const keyErr = parseObjectKey()\n if (keyErr) return keyErr\n skipWhitespace()\n if (peek() !== ':') {\n return { valid: false, reason: 'Expected \":\" after object key' }\n }\n advance()\n const valErr = parseArg()\n if (valErr) return valErr\n skipWhitespace()\n while (peek() === ',') {\n advance()\n skipWhitespace()\n if (peek() === '}') break\n const nextKeyErr = parseObjectKey()\n if (nextKeyErr) return nextKeyErr\n skipWhitespace()\n if (peek() !== ':') {\n return { valid: false, reason: 'Expected \":\" after object key' }\n }\n advance()\n const nextValErr = parseArg()\n if (nextValErr) return nextValErr\n skipWhitespace()\n }\n if (peek() !== '}') {\n return { valid: false, reason: 'Expected \"}\" to close object' }\n }\n advance()\n return null\n }\n\n if (ch === '[') {\n advance()\n skipWhitespace()\n if (peek() === ']') {\n advance()\n return null\n }\n const firstErr = parseArg()\n if (firstErr) return firstErr\n skipWhitespace()\n while (peek() === ',') {\n advance()\n skipWhitespace()\n if (peek() === ']') break\n const elemErr = parseArg()\n if (elemErr) return elemErr\n skipWhitespace()\n }\n if (peek() !== ']') {\n return { valid: false, reason: 'Expected \"]\" to close array' }\n }\n advance()\n return null\n }\n\n if (ch === '-' || /[0-9]/.test(ch)) {\n return parseNumber()\n }\n\n if (input.startsWith('true', pos)) {\n const after = input[pos + 4]\n if (!after || !/[a-zA-Z0-9_]/.test(after)) {\n pos += 4\n return null\n }\n }\n if (input.startsWith('false', pos)) {\n const after = input[pos + 5]\n if (!after || !/[a-zA-Z0-9_]/.test(after)) {\n pos += 5\n return null\n }\n }\n\n if (input.startsWith('NaN', pos)) {\n return { valid: false, reason: 'NaN not allowed' }\n }\n if (input.startsWith('Infinity', pos)) {\n return { valid: false, reason: 'Infinity not allowed' }\n }\n if (input.startsWith('null', pos)) {\n return { valid: false, reason: 'null not allowed as argument value' }\n }\n if (ch === '+') {\n return { valid: false, reason: '\"+\" prefix not allowed on numbers' }\n }\n\n if (/[a-zA-Z_]/.test(ch)) {\n return { valid: false, reason: 'Identifiers not allowed as argument values' }\n }\n\n return { valid: false, reason: `Unexpected character \"${ch}\"` }\n }\n\n while (pos < input.length) {\n skipWhitespace()\n if (pos >= input.length) break\n\n if (peek() !== '.') {\n return { valid: false, reason: `Expected \".\" at position ${pos}, got \"${peek()}\"` }\n }\n advance()\n\n if (!/[a-zA-Z_]/.test(peek())) {\n return { valid: false, reason: `Expected method name after \".\" at position ${pos}` }\n }\n\n let ident = ''\n while (pos < input.length && /[a-zA-Z0-9_]/.test(peek())) {\n ident += advance()\n }\n\n if (!ALLOWED_ZOD_METHODS.has(ident)) {\n return { valid: false, reason: `Unknown zod method: ${ident}` }\n }\n\n skipWhitespace()\n\n if (peek() !== '(') {\n return { valid: false, reason: `Expected \"(\" after method \"${ident}\"` }\n }\n advance()\n\n skipWhitespace()\n\n let argCount = 0\n if (peek() !== ')') {\n const argErr = parseArg()\n if (argErr) return argErr\n argCount = 1\n skipWhitespace()\n while (peek() === ',') {\n advance()\n skipWhitespace()\n if (peek() === ')') break\n const nextArgErr = parseArg()\n if (nextArgErr) return nextArgErr\n argCount++\n skipWhitespace()\n }\n }\n\n if (peek() !== ')') {\n return { valid: false, reason: `Expected \")\" to close method \"${ident}\"` }\n }\n advance()\n\n const arity = METHOD_ARITY[ident]\n if (arity) {\n const [minArgs, maxArgs] = arity\n if (argCount < minArgs || argCount > maxArgs) {\n if (minArgs === maxArgs) {\n return { valid: false, reason: `Method \"${ident}\" expects ${minArgs} argument(s), got ${argCount}` }\n }\n return { valid: false, reason: `Method \"${ident}\" expects ${minArgs}-${maxArgs} arguments, got ${argCount}` }\n }\n }\n\n methods.push(ident)\n chainCount++\n if (chainCount > MAX_CHAIN_DEPTH) {\n return { valid: false, reason: 'Directive exceeds maximum chain depth' }\n }\n }\n\n if (chainCount === 0) {\n return { valid: false, reason: 'No method calls found' }\n }\n\n return { valid: true, methods }\n}","import { z } from \"zod\";\n\nexport type ScalarBaseMap = Record<string, () => z.ZodTypeAny>;\n\nfunction isPrismaNullSentinel(value: unknown): boolean {\n if (value === null || typeof value !== \"object\") return false;\n const tag = (value as { _tag?: unknown })._tag;\n if (tag === \"DbNull\" || tag === \"JsonNull\" || tag === \"AnyNull\") return true;\n const constructorName = (value as { constructor?: { name?: unknown } }).constructor?.name;\n if (\n constructorName === \"DbNull\" ||\n constructorName === \"JsonNull\" ||\n constructorName === \"AnyNull\"\n ) {\n return true;\n }\n return false;\n}\n\nfunction isJsonSafe(value: unknown): boolean {\n type Entry = { tag: \"visit\"; value: unknown } | { tag: \"exit\"; ref: object };\n\n const stack: Entry[] = [{ tag: \"visit\", value }];\n const ancestors = new Set<object>();\n\n while (stack.length > 0) {\n const entry = stack.pop()!;\n\n if (entry.tag === \"exit\") {\n ancestors.delete(entry.ref);\n continue;\n }\n\n const current = entry.value;\n\n if (current === undefined) return false;\n if (current === null) continue;\n if (isPrismaNullSentinel(current)) continue;\n\n switch (typeof current) {\n case \"string\":\n case \"boolean\":\n continue;\n case \"number\":\n if (!Number.isFinite(current)) return false;\n continue;\n case \"object\": {\n if (ancestors.has(current)) return false;\n ancestors.add(current);\n stack.push({ tag: \"exit\", ref: current });\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n stack.push({ tag: \"visit\", value: current[i] });\n }\n continue;\n }\n const proto = Object.getPrototypeOf(current);\n if (proto !== Object.prototype && proto !== null) return false;\n const values = Object.values(current as Record<string, unknown>);\n for (let i = 0; i < values.length; i++) {\n stack.push({ tag: \"visit\", value: values[i] });\n }\n continue;\n }\n default:\n return false;\n }\n }\n\n return true;\n}\n\nconst DECIMAL_REGEX = /^-?(\\d+\\.?\\d*|\\.\\d+)([eE]-?\\d+)?$/;\n\nconst decimalStringSchema = z\n .string()\n .refine((s) => DECIMAL_REGEX.test(s), \"Invalid decimal string\");\n\nconst decimalObjectSchema = z.custom<unknown>(\n (v) =>\n v !== null &&\n typeof v === \"object\" &&\n typeof (v as any).toFixed === \"function\" &&\n typeof (v as any).toNumber === \"function\",\n \"Expected Decimal-compatible object\",\n);\n\nfunction createDecimalFactory(strict: boolean): () => z.ZodTypeAny {\n if (strict) {\n return () => z.union([decimalStringSchema, decimalObjectSchema]);\n }\n return () => z.union([z.number(), decimalStringSchema, decimalObjectSchema]);\n}\n\nexport function createScalarBase(strictDecimal: boolean): ScalarBaseMap {\n return {\n String: () => z.string(),\n Int: () => z.number().int(),\n Float: () => z.number(),\n Decimal: createDecimalFactory(strictDecimal),\n BigInt: () =>\n z.union([\n z.bigint(),\n z\n .number()\n .int()\n .refine(\n (v) => v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER,\n \"Number exceeds safe integer range for BigInt conversion\",\n )\n .transform((v) => BigInt(v)),\n z\n .string()\n .regex(/^-?\\d+$/)\n .transform((v) => BigInt(v)),\n ]),\n Boolean: () => z.boolean(),\n DateTime: () =>\n z\n .union([\n z.date(),\n z.string().refine(\n (s) => !isNaN(Date.parse(s)),\n \"Invalid date string\",\n ),\n ])\n .pipe(z.coerce.date()),\n Json: () =>\n z\n .unknown()\n .refine(\n isJsonSafe,\n \"Value must be JSON-serializable (no undefined, functions, symbols, class instances, NaN, Infinity, or circular references)\",\n ),\n Bytes: () =>\n z.union([z.string(), z.custom<unknown>((v) => v instanceof Uint8Array)]),\n };\n}\n\nexport const SCALAR_BASE: ScalarBaseMap = createScalarBase(false);\n\nexport function wrapWithInputCoercion(\n fieldType: string,\n isList: boolean,\n schema: z.ZodTypeAny,\n): z.ZodTypeAny {\n let itemCoercion: z.ZodTypeAny | null = null;\n\n switch (fieldType) {\n case \"String\":\n itemCoercion = z.union([z.string(), z.number().transform(String)]);\n break;\n case \"Int\":\n itemCoercion = z.union([\n z.number().int(),\n z\n .string()\n .regex(/^-?\\d+$/)\n .transform((v) => Number(v)),\n ]);\n break;\n case \"Float\":\n itemCoercion = z.union([\n z.number(),\n z\n .string()\n .regex(/^-?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/)\n .transform(Number),\n ]);\n break;\n default:\n return schema;\n }\n\n const coercion = isList ? z.array(itemCoercion) : itemCoercion;\n return coercion.pipe(schema);\n}"],"mappings":"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","names":["existsSync","z","pkg","z","z","z","existsSync"]}
|
|
1
|
+
{"version":3,"sources":["../../src/generator/index.ts","../../src/generator/import-style.ts","../../src/generator/emit-client.ts","../../src/generator/emit-scope-map.ts","../../src/shared/unique-constraints.ts","../../src/generator/emit-type-map.ts","../../src/shared/operation-shape-keys.ts","../../src/generator/emit-typed-shapes.ts","../../src/generator/emit-zod-chains.ts","../../src/generator/validate-directive.ts","../../src/shared/scalar-base.ts"],"sourcesContent":["import pkg from '@prisma/generator-helper'\nconst { generatorHandler } = pkg\nimport type { DMMF, GeneratorOptions } from '@prisma/generator-helper'\nimport { existsSync, mkdirSync, rmSync, writeFileSync } from 'fs'\nimport { relative } from 'path'\nimport { z } from 'zod'\nimport { emitClient } from './emit-client.js'\nimport { emitScopeMap } from './emit-scope-map.js'\nimport { emitTypeMap } from './emit-type-map.js'\nimport { emitTypedShapes } from './emit-typed-shapes.js'\nimport { emitZodChains } from './emit-zod-chains.js'\nimport {\n resolveImportStyle,\n type PrismaClientKind,\n} from './import-style.js'\n\nconst booleanConfig = z\n .enum(['true', 'false'])\n .transform((v) => v === 'true')\n\nconst configSchema = z.object({\n onInvalidZod: z.enum(['error', 'warn']).default('error'),\n onAmbiguousScope: z.enum(['error', 'warn', 'ignore']).default('error'),\n onMissingScopeContext: z.enum(['error', 'warn', 'ignore']).default('error'),\n findUniqueMode: z.enum(['verify', 'reject']).default('reject'),\n onScopeRelationWrite: z.enum(['error', 'warn', 'strip']).default('error'),\n strictDecimal: booleanConfig.default(false),\n enforceProjection: booleanConfig.default(false),\n typedGuardShapes: booleanConfig.default(true),\n typedGuardRelationDepth: z\n .enum(['0', '1', '2', '3'])\n .default('1')\n .transform((v) => Number(v) as 0 | 1 | 2 | 3),\n importStyle: z.enum(['auto', 'none', 'js', 'ts']).default('auto'),\n runtimeImportPath: z\n .string()\n .trim()\n .min(1, 'runtimeImportPath must be a non-empty string')\n .default('prisma-guard'),\n})\n\ntype ResolvedConfig = z.infer<typeof configSchema>\n\nfunction parseGeneratorConfig(raw: Record<string, unknown>): ResolvedConfig {\n const result = configSchema.safeParse(raw)\n if (result.success) return result.data\n\n const issues = result.error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join('.') : '(root)'\n return `\"${path}\": ${issue.message}`\n })\n .join('; ')\n\n throw new Error(`prisma-guard: Invalid generator config: ${issues}`)\n}\n\nfunction emitZodDefaults(defaults: Record<string, string[]>): string {\n const entries = Object.entries(defaults)\n\n if (entries.length === 0) {\n return `export const ZOD_DEFAULTS: Record<string, readonly string[]> = {}\\n`\n }\n\n const mapEntries = entries\n .map(([model, fields]) => {\n const fieldsStr = fields.map((field) => JSON.stringify(field)).join(', ')\n return ` ${JSON.stringify(model)}: [${fieldsStr}],`\n })\n .join('\\n')\n\n return `export const ZOD_DEFAULTS: Record<string, readonly string[]> = {\\n${mapEntries}\\n}\\n`\n}\n\nfunction getProviderValue(provider: unknown): string {\n if (typeof provider === 'string') return provider\n\n if (provider && typeof provider === 'object' && 'value' in provider) {\n const value = (provider as { value?: unknown }).value\n if (typeof value === 'string') return value\n }\n\n return ''\n}\n\nfunction classifyPrismaProvider(provider: unknown): 'prisma-client-js' | 'prisma-client' | null {\n const value = getProviderValue(provider)\n\n if (value === 'prisma-client-js' || value.endsWith('/prisma-client-js')) {\n return 'prisma-client-js'\n }\n\n if (value === 'prisma-client' || value.endsWith('/prisma-client')) {\n return 'prisma-client'\n }\n\n return null\n}\n\nfunction normalizeImportPath(path: string): string {\n const normalized = path.replace(/\\\\/g, '/')\n if (normalized.startsWith('/') || /^[A-Za-z]:/.test(normalized)) {\n return '@prisma/client'\n }\n if (normalized.startsWith('.')) return normalized\n return `./${normalized}`\n}\n\nfunction resolvePrismaClientImport(\n options: GeneratorOptions,\n guardOutput: string,\n): { path: string; kind: PrismaClientKind } {\n let matched: { provider: 'prisma-client-js' | 'prisma-client'; output: string } | null = null\n\n for (const generator of options.otherGenerators) {\n const providerKind = classifyPrismaProvider(generator.provider)\n if (!providerKind) continue\n\n const output = generator.output?.value\n if (!output) continue\n\n matched = { provider: providerKind, output }\n break\n }\n\n if (!matched) return { path: '@prisma/client', kind: 'package' }\n\n const rel = relative(guardOutput, matched.output)\n if (rel.length === 0) return { path: '@prisma/client', kind: 'package' }\n\n return {\n path: normalizeImportPath(rel),\n kind: matched.provider,\n }\n}\n\ngeneratorHandler({\n onManifest() {\n return {\n prettyName: 'Prisma Guard',\n defaultOutput: 'generated/guard',\n }\n },\n\n async onGenerate(options) {\n const output = options.generator.output?.value\n if (!output) throw new Error('prisma-guard: No output directory specified')\n\n const rawConfig = (options.generator.config ?? {}) as Record<string, unknown>\n const cfg = parseGeneratorConfig(rawConfig)\n\n const importStyle = resolveImportStyle(output, cfg.importStyle)\n\n const dmmf: DMMF.Document = options.dmmf\n const parts: string[] = []\n\n parts.push(\n `export const GUARD_CONFIG = {\\n` +\n ` onMissingScopeContext: ${JSON.stringify(cfg.onMissingScopeContext)},\\n` +\n ` findUniqueMode: ${JSON.stringify(cfg.findUniqueMode)},\\n` +\n ` onScopeRelationWrite: ${JSON.stringify(cfg.onScopeRelationWrite)},\\n` +\n ` strictDecimal: ${JSON.stringify(cfg.strictDecimal)},\\n` +\n ` enforceProjection: ${JSON.stringify(cfg.enforceProjection)},\\n` +\n `} as const\\n`,\n )\n\n const { source: scopeSource } = emitScopeMap(dmmf, cfg.onAmbiguousScope)\n parts.push(scopeSource)\n\n const typeMapSource = emitTypeMap(dmmf)\n parts.push(typeMapSource)\n\n const { source: zodChainsSource, defaults } = emitZodChains(dmmf, cfg.onInvalidZod)\n parts.push(zodChainsSource)\n parts.push(emitZodDefaults(defaults))\n\n mkdirSync(output, { recursive: true })\n\n writeFileSync(`${output}/index.ts`, parts.join('\\n'), 'utf-8')\n\n const { path: prismaClientImport, kind: prismaClientKind } =\n resolvePrismaClientImport(options, output)\n const clientSource = emitClient(\n dmmf,\n prismaClientImport,\n prismaClientKind,\n importStyle,\n cfg.runtimeImportPath,\n )\n writeFileSync(`${output}/client.ts`, clientSource, 'utf-8')\n\n const shapesPath = `${output}/shapes.ts`\n\n if (cfg.typedGuardShapes) {\n writeFileSync(\n shapesPath,\n emitTypedShapes(dmmf, cfg.typedGuardRelationDepth, importStyle, cfg.runtimeImportPath),\n 'utf-8',\n )\n } else if (existsSync(shapesPath)) {\n rmSync(shapesPath, { force: true })\n }\n },\n})","import { existsSync, readFileSync } from 'fs'\nimport { dirname, join, resolve } from 'path'\nimport { getTsconfig } from 'get-tsconfig'\n\nexport type ImportStyle = 'none' | 'js' | 'ts'\nexport type ImportStyleConfig = 'auto' | ImportStyle\nexport type PrismaClientKind = 'prisma-client-js' | 'prisma-client' | 'package'\n\nconst NODE_ESM_MODES = new Set(['node16', 'node18', 'nodenext'])\nconst NO_EXTENSION_RESOLUTIONS = new Set(['bundler', 'classic', 'node', 'node10'])\n\ninterface TsCompilerOptions {\n module?: string\n moduleResolution?: string\n allowImportingTsExtensions?: boolean\n}\n\nfunction findUpwards(startDir: string, filename: string): string | null {\n let dir = resolve(startDir)\n while (true) {\n const candidate = join(dir, filename)\n if (existsSync(candidate)) return candidate\n const parent = dirname(dir)\n if (parent === dir) return null\n dir = parent\n }\n}\n\nfunction readCompilerOptions(startDir: string): TsCompilerOptions {\n try {\n const result = getTsconfig(startDir)\n if (!result) return {}\n const co = result.config.compilerOptions\n if (!co || typeof co !== 'object') return {}\n return co as TsCompilerOptions\n } catch {\n return {}\n }\n}\n\nfunction readPackageType(startDir: string): string | null {\n const pkgPath = findUpwards(startDir, 'package.json')\n if (!pkgPath) return null\n\n try {\n const raw = readFileSync(pkgPath, 'utf-8')\n const pkg = JSON.parse(raw)\n return typeof pkg.type === 'string' ? pkg.type : null\n } catch {\n return null\n }\n}\n\nexport function resolveImportStyle(\n startDir: string,\n override: ImportStyleConfig,\n): ImportStyle {\n if (override !== 'auto') return override\n\n const co = readCompilerOptions(startDir)\n\n if (co.allowImportingTsExtensions === true) return 'ts'\n\n const moduleValue =\n typeof co.module === 'string' ? co.module.toLowerCase() : ''\n const resolutionValue =\n typeof co.moduleResolution === 'string'\n ? co.moduleResolution.toLowerCase()\n : ''\n\n if (NODE_ESM_MODES.has(moduleValue) || NODE_ESM_MODES.has(resolutionValue)) {\n return 'js'\n }\n\n if (NO_EXTENSION_RESOLUTIONS.has(resolutionValue)) {\n return 'none'\n }\n\n if (readPackageType(startDir) === 'module') return 'js'\n\n return 'none'\n}\n\nexport function withImportStyle(path: string, style: ImportStyle): string {\n if (style === 'js') return `${path}.js`\n if (style === 'ts') return `${path}.ts`\n return path\n}\n\nexport function withClientImportStyle(\n path: string,\n style: ImportStyle,\n kind: PrismaClientKind,\n): string {\n if (kind === 'package') return path\n if (!path.startsWith('.')) return path\n\n if (kind === 'prisma-client') {\n const entry = `${path}/client`\n return withImportStyle(entry, style)\n }\n\n if (style === 'js') return `${path}/index.js`\n return path\n}","import type { DMMF } from '@prisma/generator-helper'\nimport {\n withImportStyle,\n withClientImportStyle,\n type ImportStyle,\n type PrismaClientKind,\n} from './import-style.js'\n\nfunction delegateKey(modelName: string): string {\n return modelName.charAt(0).toLowerCase() + modelName.slice(1)\n}\n\nfunction emitGuardModelExtension(dmmf: DMMF.Document): string {\n const entries = dmmf.datamodel.models\n .map((model) => {\n const key = delegateKey(model.name)\n return (\n ` ${key}: {\\n` +\n ` guard(input: GuardInput, caller?: string): GuardedModel<PrismaClient['${key}']>\\n` +\n ` }`\n )\n })\n .join('\\n')\n\n return `interface GuardModelExtension {\\n${entries}\\n}\\n`\n}\n\nexport function emitClient(\n dmmf: DMMF.Document,\n prismaClientImport: string,\n prismaClientKind: PrismaClientKind,\n importStyle: ImportStyle,\n runtimeImportPath: string,\n): string {\n const indexImport = withImportStyle('./index', importStyle)\n const clientImport = withClientImportStyle(\n prismaClientImport,\n importStyle,\n prismaClientKind,\n )\n\n return (\n `import type { PrismaClient } from '${clientImport}'\\n` +\n `import type { GuardInput, GuardedModel } from '${runtimeImportPath}'\\n` +\n `import { createGuard } from '${runtimeImportPath}'\\n` +\n `import { SCOPE_MAP, TYPE_MAP, ENUM_MAP, ZOD_CHAINS, GUARD_CONFIG, UNIQUE_MAP, ZOD_DEFAULTS } from '${indexImport}'\\n` +\n `import type { ScopeRoot } from '${indexImport}'\\n\\n` +\n emitGuardModelExtension(dmmf) +\n `\\n` +\n `export const guard = createGuard<typeof TYPE_MAP, ScopeRoot, GuardModelExtension>({\\n` +\n ` scopeMap: SCOPE_MAP,\\n` +\n ` typeMap: TYPE_MAP,\\n` +\n ` enumMap: ENUM_MAP,\\n` +\n ` zodChains: ZOD_CHAINS,\\n` +\n ` guardConfig: GUARD_CONFIG,\\n` +\n ` uniqueMap: UNIQUE_MAP,\\n` +\n ` zodDefaults: ZOD_DEFAULTS,\\n` +\n `})\\n`\n )\n}","import type { DMMF } from '@prisma/generator-helper'\n\nfunction isScopeRoot(documentation: string | undefined): boolean {\n if (!documentation) return false\n const tokens = documentation.split(/[\\s\\n\\r]+/)\n return tokens.some(t => t === '@scope-root')\n}\n\ninterface RelationEntry {\n fks: string[]\n root: string\n relationName: string\n}\n\ntype IssueMode = 'error' | 'warn' | 'ignore'\n\nfunction reportScopeIssue(\n mode: IssueMode,\n errorMsg: string,\n warnMsg: string,\n): void {\n if (mode === 'error') throw new Error(`prisma-guard: ${errorMsg}`)\n if (mode === 'warn') console.warn(`prisma-guard: ${warnMsg}`)\n}\n\nfunction serializeScopeEntry(e: {\n fk: string\n root: string\n relationName: string\n}): string {\n return `{ fk: ${JSON.stringify(e.fk)}, root: ${JSON.stringify(e.root)}, relationName: ${JSON.stringify(e.relationName)} }`\n}\n\nexport function emitScopeMap(\n dmmf: DMMF.Document,\n onAmbiguousScope: IssueMode,\n): { source: string } {\n const rootModels = new Set<string>()\n\n for (const model of dmmf.datamodel.models) {\n if (isScopeRoot(model.documentation)) {\n rootModels.add(model.name)\n }\n }\n\n const scopeMap: Record<string, { fk: string; root: string; relationName: string }[]> = {}\n\n for (const model of dmmf.datamodel.models) {\n if (rootModels.has(model.name)) continue\n\n const relations: RelationEntry[] = []\n\n for (const field of model.fields) {\n if (!field.relationFromFields || field.relationFromFields.length === 0) continue\n if (!rootModels.has(field.type)) continue\n\n if (field.relationFromFields.length > 1) {\n const compositeMsg =\n `Model \"${model.name}\" has a composite foreign key to scope root \"${field.type}\" via relation \"${field.name}\" ` +\n `(fields: ${field.relationFromFields.join(', ')}). Composite scope relations are not supported.`\n const excludeMsg =\n `${compositeMsg} Excluding relation \"${field.name}\" to scope root \"${field.type}\" from scope map for model \"${model.name}\".`\n\n reportScopeIssue(onAmbiguousScope, compositeMsg, excludeMsg)\n continue\n }\n\n relations.push({\n fks: [...field.relationFromFields],\n root: field.type,\n relationName: field.name,\n })\n }\n\n if (relations.length === 0) continue\n\n const relationsByRoot: Record<string, RelationEntry[]> = {}\n for (const rel of relations) {\n if (!relationsByRoot[rel.root]) relationsByRoot[rel.root] = []\n relationsByRoot[rel.root].push(rel)\n }\n\n const entries: { fk: string; root: string; relationName: string }[] = []\n\n for (const [root, rels] of Object.entries(relationsByRoot)) {\n if (rels.length > 1) {\n const relNames = rels.map(r => r.relationName)\n const ambiguousMsg =\n `Model \"${model.name}\" has multiple relations to scope root \"${root}\" (${relNames.join(', ')}).`\n const errorMsg =\n `Ambiguous scope detected. Resolve these or set onAmbiguousScope to \"warn\" or \"ignore\":\\n - ${ambiguousMsg}`\n const warnMsg =\n `${ambiguousMsg} Excluding relations to scope root \"${root}\" from scope map for model \"${model.name}\".`\n\n reportScopeIssue(onAmbiguousScope, errorMsg, warnMsg)\n continue\n }\n\n entries.push({\n fk: rels[0].fks[0],\n root: rels[0].root,\n relationName: rels[0].relationName,\n })\n }\n\n if (entries.length > 0) {\n scopeMap[model.name] = entries\n }\n }\n\n const roots = Array.from(rootModels).sort()\n\n const mapEntries = Object.entries(scopeMap)\n .map(([model, entries]) => {\n const entriesStr = entries.map(serializeScopeEntry).join(', ')\n return ` ${model}: [${entriesStr}],`\n })\n .join('\\n')\n\n const scopeRootType = roots.length > 0\n ? roots.map(r => `'${r}'`).join(' | ')\n : 'never'\n\n const source = `export const SCOPE_MAP = {\\n${mapEntries}\\n} as const\\n\\nexport type ScopeRoot = ${scopeRootType}\\n`\n\n return { source }\n}","import type { DMMF } from '@prisma/generator-helper'\nimport type { UniqueConstraint } from './types.js'\n\nexport interface UniqueConstraintMeta {\n selector: string\n fields: string[]\n}\n\nexport function uniqueSelector(fields: string[], name?: string | null): string {\n if (typeof name === 'string' && name.trim().length > 0) return name\n return fields.join('_')\n}\n\nexport function fieldsKey(fields: string[]): string {\n return fields.join('\\0')\n}\n\nexport function formatUniqueConstraint(constraint: UniqueConstraint | UniqueConstraintMeta): string {\n return constraint.fields.length === 1\n ? constraint.selector\n : `${constraint.selector}(${constraint.fields.join(', ')})`\n}\n\nexport function formatUniqueConstraints(\n constraints: readonly (UniqueConstraint | UniqueConstraintMeta)[],\n): string {\n return constraints.map(formatUniqueConstraint).join(' | ')\n}\n\nexport function collectUniqueConstraints(model: DMMF.Model): UniqueConstraintMeta[] {\n const fieldSetSeen = new Set<string>()\n const selectorToFields = new Map<string, string>()\n const constraints: UniqueConstraintMeta[] = []\n\n function add(fields: string[], selector?: string | null): void {\n if (fields.length === 0) return\n\n const normalizedSelector =\n fields.length === 1 ? fields[0] : uniqueSelector(fields, selector)\n\n const key = fieldsKey(fields)\n const existingFieldsForSelector = selectorToFields.get(normalizedSelector)\n\n if (existingFieldsForSelector && existingFieldsForSelector !== key) {\n throw new Error(\n `prisma-guard: Unique selector \"${normalizedSelector}\" on model \"${model.name}\" maps to multiple field sets.`,\n )\n }\n\n if (fieldSetSeen.has(key)) return\n\n fieldSetSeen.add(key)\n selectorToFields.set(normalizedSelector, key)\n\n constraints.push({\n selector: normalizedSelector,\n fields: [...fields],\n })\n }\n\n for (const field of model.fields) {\n if (field.isId) add([field.name], field.name)\n }\n\n if (model.primaryKey) {\n add([...model.primaryKey.fields], model.primaryKey.name)\n }\n\n for (const field of model.fields) {\n if (field.isUnique) add([field.name], field.name)\n }\n\n const uniqueIndexes =\n (\n model as DMMF.Model & {\n uniqueIndexes?: Array<{ name?: string | null; fields: string[] }>\n }\n ).uniqueIndexes ?? []\n\n for (const index of uniqueIndexes) {\n add([...index.fields], index.name)\n }\n\n for (const fields of model.uniqueFields) {\n add([...fields], fields.length === 1 ? fields[0] : fields.join('_'))\n }\n\n return constraints\n}","import type { DMMF } from '@prisma/generator-helper'\nimport { collectUniqueConstraints } from '../shared/unique-constraints.js'\n\nfunction serializeMeta(entries: Array<[string, unknown]>): string {\n return entries\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(', ')\n}\n\nexport function emitTypeMap(dmmf: DMMF.Document): string {\n const enumNames = new Set(dmmf.datamodel.enums.map((e) => e.name))\n\n for (const e of dmmf.datamodel.enums) {\n if (e.values.length === 0) {\n throw new Error(`prisma-guard: Enum \"${e.name}\" has zero values.`)\n }\n }\n\n const modelEntries = dmmf.datamodel.models\n .map((model) => {\n const fieldEntries = model.fields\n .map((field) => {\n const isRelation =\n field.kind === 'object' || field.relationName != null\n const isEnum = enumNames.has(field.type)\n const isUnsupported = field.kind === 'unsupported'\n\n const metaPairs: Array<[string, unknown]> = [\n ['type', field.type],\n ['isList', field.isList],\n ['isRequired', field.isRequired],\n ['isId', field.isId],\n ['isRelation', isRelation],\n ['hasDefault', field.hasDefaultValue],\n ['isUpdatedAt', field.isUpdatedAt],\n ]\n if (isEnum) metaPairs.push(['isEnum', true])\n if (isUnsupported) metaPairs.push(['isUnsupported', true])\n if (field.isUnique) metaPairs.push(['isUnique', true])\n\n return ` ${JSON.stringify(field.name)}: { ${serializeMeta(metaPairs)} },`\n })\n .join('\\n')\n return ` ${JSON.stringify(model.name)}: {\\n${fieldEntries}\\n },`\n })\n .join('\\n')\n\n const enumEntries = dmmf.datamodel.enums\n .map((e) => {\n const values = e.values.map((v) => JSON.stringify(v.name)).join(', ')\n return ` ${JSON.stringify(e.name)}: [${values}],`\n })\n .join('\\n')\n\n const uniqueMapEntries = dmmf.datamodel.models\n .map((model) => {\n const constraints = collectUniqueConstraints(model)\n if (constraints.length === 0) return null\n\n const constraintsStr = constraints\n .map((c) => {\n const fields = c.fields.map((f) => JSON.stringify(f)).join(', ')\n return `{ selector: ${JSON.stringify(c.selector)}, fields: [${fields}] }`\n })\n .join(', ')\n\n return ` ${JSON.stringify(model.name)}: [${constraintsStr}],`\n })\n .filter(Boolean)\n .join('\\n')\n\n const typeMapSource = `export const TYPE_MAP = {\\n${modelEntries}\\n} as const\\n`\n const enumMapSource = `export const ENUM_MAP = {\\n${enumEntries}\\n} as const\\n`\n const uniqueMapSource = `export const UNIQUE_MAP = {\\n${uniqueMapEntries}\\n} as const\\n`\n\n const typesSource = [\n `export type ModelName = keyof typeof TYPE_MAP`,\n `export type FieldName<M extends ModelName> = keyof (typeof TYPE_MAP)[M]`,\n ].join('\\n')\n\n return `${typeMapSource}\\n${enumMapSource}\\n${uniqueMapSource}\\n${typesSource}\\n`\n}","export const OPERATION_SHAPE_KEYS = {\n findMany: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findManyPaginated: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findFirst: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findFirstOrThrow: ['where', 'include', 'select', 'orderBy', 'cursor', 'take', 'skip', 'distinct'],\n findUnique: ['where', 'include', 'select'],\n findUniqueOrThrow: ['where', 'include', 'select'],\n count: ['where', 'select', 'cursor', 'orderBy', 'skip', 'take'],\n aggregate: ['where', 'orderBy', 'cursor', 'take', 'skip', '_count', '_avg', '_sum', '_min', '_max'],\n groupBy: ['where', 'orderBy', 'by', 'having', 'take', 'skip', '_count', '_avg', '_sum', '_min', '_max'],\n create: ['data', 'include', 'select'],\n createMany: ['data', 'skipDuplicates'],\n createManyAndReturn: ['data', 'select', 'skipDuplicates'],\n update: ['where', 'data', 'include', 'select'],\n updateMany: ['where', 'data'],\n updateManyAndReturn: ['where', 'data', 'select'],\n upsert: ['where', 'create', 'update', 'include', 'select'],\n delete: ['where', 'include', 'select'],\n deleteMany: ['where'],\n} as const\n\nexport type OperationName = keyof typeof OPERATION_SHAPE_KEYS\n\nexport type OperationShapeKey<O extends OperationName> =\n (typeof OPERATION_SHAPE_KEYS)[O][number]\n\nexport const READ_METHOD_ALLOWED_ARGS: Record<string, Set<string>> = {\n findMany: new Set(OPERATION_SHAPE_KEYS.findMany),\n findFirst: new Set(OPERATION_SHAPE_KEYS.findFirst),\n findFirstOrThrow: new Set(OPERATION_SHAPE_KEYS.findFirstOrThrow),\n findUnique: new Set(OPERATION_SHAPE_KEYS.findUnique),\n findUniqueOrThrow: new Set(OPERATION_SHAPE_KEYS.findUniqueOrThrow),\n count: new Set(OPERATION_SHAPE_KEYS.count),\n aggregate: new Set(OPERATION_SHAPE_KEYS.aggregate),\n groupBy: new Set(OPERATION_SHAPE_KEYS.groupBy),\n}\n\nexport const MUTATION_SHAPE_KEYS = {\n create: new Set(OPERATION_SHAPE_KEYS.create),\n createMany: new Set(OPERATION_SHAPE_KEYS.createMany),\n createManyAndReturn: new Set(OPERATION_SHAPE_KEYS.createManyAndReturn),\n update: new Set(OPERATION_SHAPE_KEYS.update),\n updateMany: new Set(OPERATION_SHAPE_KEYS.updateMany),\n updateManyAndReturn: new Set(OPERATION_SHAPE_KEYS.updateManyAndReturn),\n upsert: new Set(OPERATION_SHAPE_KEYS.upsert),\n delete: new Set(OPERATION_SHAPE_KEYS.delete),\n deleteMany: new Set(OPERATION_SHAPE_KEYS.deleteMany),\n}\n\nexport interface MutationOperationSpec {\n bodyKeysBase: readonly string[]\n bodyKeysProjection: readonly string[]\n shapeKeysBase: readonly string[]\n shapeKeysProjection: readonly string[]\n supportsProjection: boolean\n}\n\nexport const MUTATION_OPERATION_SPECS: Record<string, MutationOperationSpec> = {\n create: {\n bodyKeysBase: ['data'],\n bodyKeysProjection: ['data', 'select', 'include'],\n shapeKeysBase: ['data'],\n shapeKeysProjection: ['data', 'select', 'include'],\n supportsProjection: true,\n },\n createMany: {\n bodyKeysBase: ['data', 'skipDuplicates'],\n bodyKeysProjection: ['data', 'select', 'include', 'skipDuplicates'],\n shapeKeysBase: ['data'],\n shapeKeysProjection: ['data'],\n supportsProjection: false,\n },\n createManyAndReturn: {\n bodyKeysBase: ['data', 'skipDuplicates'],\n bodyKeysProjection: ['data', 'select', 'include', 'skipDuplicates'],\n shapeKeysBase: ['data'],\n shapeKeysProjection: ['data', 'select', 'include'],\n supportsProjection: true,\n },\n update: {\n bodyKeysBase: ['data', 'where'],\n bodyKeysProjection: ['data', 'where', 'select', 'include'],\n shapeKeysBase: ['data', 'where'],\n shapeKeysProjection: ['data', 'where', 'select', 'include'],\n supportsProjection: true,\n },\n updateMany: {\n bodyKeysBase: ['data', 'where'],\n bodyKeysProjection: ['data', 'where'],\n shapeKeysBase: ['data', 'where'],\n shapeKeysProjection: ['data', 'where'],\n supportsProjection: false,\n },\n updateManyAndReturn: {\n bodyKeysBase: ['data', 'where'],\n bodyKeysProjection: ['data', 'where', 'select', 'include'],\n shapeKeysBase: ['data', 'where'],\n shapeKeysProjection: ['data', 'where', 'select', 'include'],\n supportsProjection: true,\n },\n upsert: {\n bodyKeysBase: ['where', 'create', 'update', 'select', 'include'],\n bodyKeysProjection: ['where', 'create', 'update', 'select', 'include'],\n shapeKeysBase: ['where', 'create', 'update', 'select', 'include'],\n shapeKeysProjection: ['where', 'create', 'update', 'select', 'include'],\n supportsProjection: true,\n },\n delete: {\n bodyKeysBase: ['where'],\n bodyKeysProjection: ['where', 'select', 'include'],\n shapeKeysBase: ['where'],\n shapeKeysProjection: ['where', 'select', 'include'],\n supportsProjection: true,\n },\n deleteMany: {\n bodyKeysBase: ['where'],\n bodyKeysProjection: ['where'],\n shapeKeysBase: ['where'],\n shapeKeysProjection: ['where'],\n supportsProjection: false,\n },\n}\n\nconst bodyKeyCache = new Map<string, Set<string>>()\nconst shapeKeyCache = new Map<string, Set<string>>()\n\nexport function getAllowedBodyKeys(method: string, withProjection: boolean): Set<string> {\n const cacheKey = `${method}\\0${withProjection ? 'p' : 'b'}`\n const cached = bodyKeyCache.get(cacheKey)\n if (cached) return cached\n\n const spec = MUTATION_OPERATION_SPECS[method]\n if (!spec) throw new Error(`Unknown mutation method \"${method}\"`)\n\n const keys = withProjection && spec.supportsProjection\n ? spec.bodyKeysProjection\n : spec.bodyKeysBase\n\n const set = new Set(keys)\n bodyKeyCache.set(cacheKey, set)\n return set\n}\n\nexport function getAllowedShapeKeys(method: string, withProjection: boolean): Set<string> {\n const cacheKey = `${method}\\0${withProjection ? 'p' : 'b'}`\n const cached = shapeKeyCache.get(cacheKey)\n if (cached) return cached\n\n const spec = MUTATION_OPERATION_SPECS[method]\n if (!spec) throw new Error(`Unknown mutation method \"${method}\"`)\n\n const keys = withProjection && spec.supportsProjection\n ? spec.shapeKeysProjection\n : spec.shapeKeysBase\n\n const set = new Set(keys)\n shapeKeyCache.set(cacheKey, set)\n return set\n}\n\nexport function methodSupportsProjection(method: string): boolean {\n const spec = MUTATION_OPERATION_SPECS[method]\n return spec ? spec.supportsProjection : false\n}","import type { DMMF } from '@prisma/generator-helper'\nimport { OPERATION_SHAPE_KEYS } from '../shared/operation-shape-keys.js'\nimport { withImportStyle, type ImportStyle } from './import-style.js'\n\nconst OPERATIONS = Object.keys(OPERATION_SHAPE_KEYS) as Array<\n keyof typeof OPERATION_SHAPE_KEYS\n>\n\nfunction cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nexport function emitTypedShapes(\n dmmf: DMMF.Document,\n depth: 0 | 1 | 2 | 3,\n importStyle: ImportStyle,\n runtimeImportPath: string,\n): string {\n const indexImport = withImportStyle('./index', importStyle)\n\n const header =\n `import type { TYPE_MAP, UNIQUE_MAP } from '${indexImport}'\\n` +\n `import type {\\n` +\n ` TypedGuardShape,\\n` +\n ` OperationShape,\\n` +\n ` ShapeInput,\\n` +\n ` TypedProjection,\\n` +\n ` TypedInclude,\\n` +\n ` TypedCountSelect,\\n` +\n `} from '${runtimeImportPath}'\\n\\n` +\n `type TM = typeof TYPE_MAP\\n` +\n `type UM = typeof UNIQUE_MAP\\n\\n`\n\n const blocks = dmmf.datamodel.models\n .map((model) => {\n const m = model.name\n\n const projAlias =\n `export type ${m}Select = ` +\n `TypedProjection<TM, '${m}', ${depth}, UM>\\n` +\n `export type ${m}Projection = ${m}Select\\n` +\n `export type ${m}Include = ` +\n `TypedInclude<TM, '${m}', ${depth}, UM>\\n` +\n `export type ${m}CountSelect = ` +\n `TypedCountSelect<TM, '${m}'>\\n`\n\n const guardAlias =\n `export type ${m}GuardShape = ` +\n `TypedGuardShape<TM, '${m}', ${depth}, UM>\\n`\n\n const opAliases = OPERATIONS.map((op) => {\n const c = cap(op)\n\n return (\n `export type ${m}${c}Shape = ` +\n `OperationShape<TM, '${m}', '${op}', ${depth}, UM>\\n` +\n `export type ${m}${c}ShapeInput<TCtx = unknown> = ` +\n `ShapeInput<${m}${c}Shape, TCtx>\\n`\n )\n }).join('')\n\n return projAlias + guardAlias + opAliases\n })\n .join('\\n')\n\n return header + blocks\n}","import type { DMMF } from '@prisma/generator-helper'\nimport { z } from 'zod'\nimport { validateDirective } from './validate-directive.js'\nimport { SCALAR_BASE } from '../shared/scalar-base.js'\n\nfunction buildGenerationBase(\n fieldType: string,\n isList: boolean,\n isEnum: boolean,\n enumValues?: readonly string[],\n): z.ZodTypeAny | null {\n let base: z.ZodTypeAny\n\n if (isEnum) {\n const values = enumValues && enumValues.length > 0 ? enumValues : ['__placeholder__']\n base = z.enum(values as [string, ...string[]])\n } else {\n const factory = SCALAR_BASE[fieldType]\n if (!factory) return null\n base = factory()\n }\n\n if (isList) base = z.array(base)\n\n return base\n}\n\nfunction verifyChainExecution(\n fieldType: string,\n isList: boolean,\n isEnum: boolean,\n enumValues: readonly string[] | undefined,\n chainStr: string,\n): string | null {\n const base = buildGenerationBase(fieldType, isList, isEnum, enumValues)\n if (!base) {\n return `Unsupported field type \"${fieldType}\" for @zod directive`\n }\n\n let fn: (base: z.ZodTypeAny) => z.ZodTypeAny\n try {\n fn = new Function('base', `'use strict'; return base${chainStr}`) as (base: z.ZodTypeAny) => z.ZodTypeAny\n } catch (err: any) {\n return `syntax error: ${err.message}`\n }\n\n try {\n const result = fn(base)\n if (result === null || result === undefined || typeof result !== 'object' || typeof (result as any).parse !== 'function') {\n return 'chain did not produce a valid Zod schema'\n }\n } catch (err: any) {\n return err.message\n }\n\n return null\n}\n\nfunction findZodInDoc(documentation: string): string[] {\n return documentation.split('\\n').filter(line => {\n const trimmed = line.trim()\n return /^@zod(?:\\s|$|\\.)/.test(trimmed)\n })\n}\n\nexport function emitZodChains(\n dmmf: DMMF.Document,\n onInvalidZod: 'error' | 'warn',\n): { source: string; hasChains: boolean; defaults: Record<string, string[]> } {\n const enumNames = new Set(dmmf.datamodel.enums.map(e => e.name))\n const enumValues: Record<string, readonly string[]> = {}\n for (const e of dmmf.datamodel.enums) {\n enumValues[e.name] = e.values.map(v => v.name)\n }\n\n const modelChains: Record<string, Record<string, string>> = {}\n const defaults: Record<string, string[]> = {}\n\n function fail(msg: string): void {\n if (onInvalidZod === 'error') throw new Error(msg)\n console.warn(msg)\n }\n\n for (const model of dmmf.datamodel.models) {\n for (const field of model.fields) {\n if (!field.documentation) continue\n\n const zodLines = findZodInDoc(field.documentation)\n\n if (zodLines.length === 0) continue\n\n if (zodLines.length > 1) {\n fail(`prisma-guard: Multiple @zod directives on ${model.name}.${field.name}. Only one @zod per field allowed.`)\n continue\n }\n\n const line = zodLines[0]\n const idx = line.indexOf('@zod')\n const chainStr = line.slice(idx + 4).trim()\n\n if (chainStr.length === 0) {\n fail(`prisma-guard: Empty @zod directive on ${model.name}.${field.name}. Add a method chain (e.g. @zod .min(1)) or remove the directive.`)\n continue\n }\n\n const result = validateDirective(chainStr)\n\n if (result.valid === false) {\n fail(`prisma-guard: Invalid @zod directive on ${model.name}.${field.name}: ${result.reason}`)\n continue\n }\n\n const isEnum = enumNames.has(field.type)\n\n const execError = verifyChainExecution(\n field.type,\n field.isList,\n isEnum,\n isEnum ? enumValues[field.type] : undefined,\n chainStr,\n )\n if (execError) {\n fail(`prisma-guard: @zod directive on ${model.name}.${field.name} fails at schema construction: ${execError}`)\n continue\n }\n\n if (!modelChains[model.name]) modelChains[model.name] = {}\n modelChains[model.name][field.name] = chainStr\n\n if (result.methods.includes('default') || result.methods.includes('catch')) {\n if (!defaults[model.name]) defaults[model.name] = []\n defaults[model.name].push(field.name)\n }\n }\n }\n\n const hasChains = Object.keys(modelChains).length > 0\n\n if (!hasChains) {\n return { source: 'export const ZOD_CHAINS = {}\\n', hasChains: false, defaults }\n }\n\n const entries = Object.entries(modelChains)\n .map(([model, fields]) => {\n const fieldEntries = Object.entries(fields)\n .map(([field, chain]) => ` ${JSON.stringify(field)}: (base: any) => base${chain},`)\n .join('\\n')\n return ` ${JSON.stringify(model)}: {\\n${fieldEntries}\\n },`\n })\n .join('\\n')\n\n return {\n source: `export const ZOD_CHAINS = {\\n${entries}\\n}\\n`,\n hasChains: true,\n defaults,\n }\n}","const ALLOWED_ZOD_METHODS = new Set([\n 'min', 'max', 'length', 'email', 'url', 'uuid', 'cuid', 'cuid2',\n 'ulid', 'trim', 'toLowerCase', 'toUpperCase',\n 'startsWith', 'endsWith', 'includes',\n 'datetime', 'ip', 'cidr', 'date', 'time', 'duration',\n 'base64', 'nanoid', 'emoji',\n 'int', 'positive', 'nonnegative', 'negative', 'nonpositive',\n 'finite', 'safe', 'multipleOf', 'step',\n 'gt', 'gte', 'lt', 'lte',\n 'nonempty',\n 'regex',\n 'readonly',\n 'optional', 'nullable', 'nullish',\n 'default', 'catch',\n])\n\nconst METHOD_ARITY: Record<string, [number, number]> = {\n min: [1, 2], max: [1, 2], length: [1, 2],\n email: [0, 1], url: [0, 1], uuid: [0, 1], cuid: [0, 1], cuid2: [0, 1], ulid: [0, 1],\n trim: [0, 0], toLowerCase: [0, 0], toUpperCase: [0, 0],\n startsWith: [1, 2], endsWith: [1, 2], includes: [1, 2],\n datetime: [0, 1], ip: [0, 1], cidr: [0, 1], date: [0, 1], time: [0, 1], duration: [0, 1],\n base64: [0, 1], nanoid: [0, 1], emoji: [0, 1],\n int: [0, 1], positive: [0, 1], nonnegative: [0, 1], negative: [0, 1], nonpositive: [0, 1],\n finite: [0, 1], safe: [0, 1],\n multipleOf: [1, 2], step: [1, 2],\n gt: [1, 2], gte: [1, 2], lt: [1, 2], lte: [1, 2],\n nonempty: [0, 1],\n regex: [1, 2],\n readonly: [0, 0],\n optional: [0, 0], nullable: [0, 0], nullish: [0, 0],\n default: [1, 1], catch: [1, 1],\n}\n\nconst MAX_DIRECTIVE_LENGTH = 1024\nconst MAX_CHAIN_DEPTH = 20\n\ntype ValidationResult =\n | { valid: true; methods: string[] }\n | { valid: false; reason: string }\n\nexport function validateDirective(raw: string): ValidationResult {\n if (raw.length > MAX_DIRECTIVE_LENGTH) {\n return { valid: false, reason: 'Directive exceeds maximum length' }\n }\n\n const input = raw.trim()\n if (input.length === 0) {\n return { valid: false, reason: 'Empty directive' }\n }\n if (input[0] !== '.') {\n return { valid: false, reason: 'Directive must start with \".\"' }\n }\n\n let pos = 0\n let chainCount = 0\n const methods: string[] = []\n\n function peek(): string {\n return input[pos] ?? ''\n }\n\n function advance(): string {\n return input[pos++] ?? ''\n }\n\n function skipWhitespace(): void {\n while (pos < input.length && (input[pos] === ' ' || input[pos] === '\\t')) {\n pos++\n }\n }\n\n function parseString(): ValidationResult | null {\n const quote = peek()\n if (quote !== '\"' && quote !== \"'\") return null\n advance()\n while (pos < input.length) {\n const ch = input[pos]\n if (ch === '\\\\') {\n const next = input[pos + 1]\n if (next === \"'\" || next === '\"' || next === '\\\\') {\n pos += 2\n continue\n }\n return { valid: false, reason: `Invalid escape sequence \"\\\\${next ?? ''}\" in string` }\n }\n if (ch === quote) {\n advance()\n return null\n }\n if (ch.charCodeAt(0) < 32) {\n return { valid: false, reason: 'Control character in string' }\n }\n advance()\n }\n return { valid: false, reason: 'Unterminated string' }\n }\n\n function parseNumber(): ValidationResult | null {\n const start = pos\n if (peek() === '-') advance()\n if (pos >= input.length || !/[0-9]/.test(peek())) {\n pos = start\n return null\n }\n if (peek() === '0' && pos + 1 < input.length && /[0-9]/.test(input[pos + 1])) {\n return { valid: false, reason: 'Leading zeros not allowed in numbers' }\n }\n while (pos < input.length && /[0-9]/.test(peek())) advance()\n if (peek() === '.') {\n advance()\n if (!/[0-9]/.test(peek())) {\n return { valid: false, reason: 'Invalid number: expected digit after decimal point' }\n }\n while (pos < input.length && /[0-9]/.test(peek())) advance()\n }\n if (peek() === 'e' || peek() === 'E') {\n advance()\n if (peek() === '-' || peek() === '+') advance()\n if (!/[0-9]/.test(peek())) {\n return { valid: false, reason: 'Invalid number: expected digit in exponent' }\n }\n while (pos < input.length && /[0-9]/.test(peek())) advance()\n }\n return null\n }\n\n function parseRegex(): ValidationResult | null {\n advance()\n if (peek() === '/' || peek() === '*') {\n return { valid: false, reason: 'Empty or comment-like regex pattern' }\n }\n let inCharClass = false\n while (pos < input.length) {\n const ch = input[pos]\n if (ch === '\\\\') {\n if (pos + 1 >= input.length) {\n return { valid: false, reason: 'Unterminated escape in regex' }\n }\n pos += 2\n continue\n }\n if (ch === '[' && !inCharClass) {\n inCharClass = true\n pos++\n continue\n }\n if (ch === ']' && inCharClass) {\n inCharClass = false\n pos++\n continue\n }\n if (ch === '/' && !inCharClass) {\n advance()\n while (pos < input.length && /[gimsuydv]/.test(peek())) {\n advance()\n }\n return null\n }\n if (ch.charCodeAt(0) < 32 && ch !== '\\t') {\n return { valid: false, reason: 'Control character in regex' }\n }\n pos++\n }\n return { valid: false, reason: 'Unterminated regex literal' }\n }\n\n function parseObjectKey(): ValidationResult | null {\n skipWhitespace()\n const ch = peek()\n if (ch === '\"' || ch === \"'\") {\n return parseString()\n }\n if (/[a-zA-Z_]/.test(ch)) {\n while (pos < input.length && /[a-zA-Z0-9_]/.test(peek())) {\n advance()\n }\n return null\n }\n return { valid: false, reason: 'Expected object key (identifier or string)' }\n }\n\n function parseArg(): ValidationResult | null {\n skipWhitespace()\n const ch = peek()\n\n if (ch === '}') {\n return { valid: false, reason: 'Unexpected \"}\" in directive args' }\n }\n if (ch === '`') {\n return { valid: false, reason: 'Template literals not allowed in directive args' }\n }\n if (ch !== '' && ch.charCodeAt(0) < 32) {\n return { valid: false, reason: 'Control character not allowed outside strings' }\n }\n\n if (ch === '\"' || ch === \"'\") {\n return parseString()\n }\n\n if (ch === '/') {\n return parseRegex()\n }\n\n if (ch === '{') {\n advance()\n skipWhitespace()\n if (peek() === '}') {\n advance()\n return null\n }\n const keyErr = parseObjectKey()\n if (keyErr) return keyErr\n skipWhitespace()\n if (peek() !== ':') {\n return { valid: false, reason: 'Expected \":\" after object key' }\n }\n advance()\n const valErr = parseArg()\n if (valErr) return valErr\n skipWhitespace()\n while (peek() === ',') {\n advance()\n skipWhitespace()\n if (peek() === '}') break\n const nextKeyErr = parseObjectKey()\n if (nextKeyErr) return nextKeyErr\n skipWhitespace()\n if (peek() !== ':') {\n return { valid: false, reason: 'Expected \":\" after object key' }\n }\n advance()\n const nextValErr = parseArg()\n if (nextValErr) return nextValErr\n skipWhitespace()\n }\n if (peek() !== '}') {\n return { valid: false, reason: 'Expected \"}\" to close object' }\n }\n advance()\n return null\n }\n\n if (ch === '[') {\n advance()\n skipWhitespace()\n if (peek() === ']') {\n advance()\n return null\n }\n const firstErr = parseArg()\n if (firstErr) return firstErr\n skipWhitespace()\n while (peek() === ',') {\n advance()\n skipWhitespace()\n if (peek() === ']') break\n const elemErr = parseArg()\n if (elemErr) return elemErr\n skipWhitespace()\n }\n if (peek() !== ']') {\n return { valid: false, reason: 'Expected \"]\" to close array' }\n }\n advance()\n return null\n }\n\n if (ch === '-' || /[0-9]/.test(ch)) {\n return parseNumber()\n }\n\n if (input.startsWith('true', pos)) {\n const after = input[pos + 4]\n if (!after || !/[a-zA-Z0-9_]/.test(after)) {\n pos += 4\n return null\n }\n }\n if (input.startsWith('false', pos)) {\n const after = input[pos + 5]\n if (!after || !/[a-zA-Z0-9_]/.test(after)) {\n pos += 5\n return null\n }\n }\n\n if (input.startsWith('NaN', pos)) {\n return { valid: false, reason: 'NaN not allowed' }\n }\n if (input.startsWith('Infinity', pos)) {\n return { valid: false, reason: 'Infinity not allowed' }\n }\n if (input.startsWith('null', pos)) {\n return { valid: false, reason: 'null not allowed as argument value' }\n }\n if (ch === '+') {\n return { valid: false, reason: '\"+\" prefix not allowed on numbers' }\n }\n\n if (/[a-zA-Z_]/.test(ch)) {\n return { valid: false, reason: 'Identifiers not allowed as argument values' }\n }\n\n return { valid: false, reason: `Unexpected character \"${ch}\"` }\n }\n\n while (pos < input.length) {\n skipWhitespace()\n if (pos >= input.length) break\n\n if (peek() !== '.') {\n return { valid: false, reason: `Expected \".\" at position ${pos}, got \"${peek()}\"` }\n }\n advance()\n\n if (!/[a-zA-Z_]/.test(peek())) {\n return { valid: false, reason: `Expected method name after \".\" at position ${pos}` }\n }\n\n let ident = ''\n while (pos < input.length && /[a-zA-Z0-9_]/.test(peek())) {\n ident += advance()\n }\n\n if (!ALLOWED_ZOD_METHODS.has(ident)) {\n return { valid: false, reason: `Unknown zod method: ${ident}` }\n }\n\n skipWhitespace()\n\n if (peek() !== '(') {\n return { valid: false, reason: `Expected \"(\" after method \"${ident}\"` }\n }\n advance()\n\n skipWhitespace()\n\n let argCount = 0\n if (peek() !== ')') {\n const argErr = parseArg()\n if (argErr) return argErr\n argCount = 1\n skipWhitespace()\n while (peek() === ',') {\n advance()\n skipWhitespace()\n if (peek() === ')') break\n const nextArgErr = parseArg()\n if (nextArgErr) return nextArgErr\n argCount++\n skipWhitespace()\n }\n }\n\n if (peek() !== ')') {\n return { valid: false, reason: `Expected \")\" to close method \"${ident}\"` }\n }\n advance()\n\n const arity = METHOD_ARITY[ident]\n if (arity) {\n const [minArgs, maxArgs] = arity\n if (argCount < minArgs || argCount > maxArgs) {\n if (minArgs === maxArgs) {\n return { valid: false, reason: `Method \"${ident}\" expects ${minArgs} argument(s), got ${argCount}` }\n }\n return { valid: false, reason: `Method \"${ident}\" expects ${minArgs}-${maxArgs} arguments, got ${argCount}` }\n }\n }\n\n methods.push(ident)\n chainCount++\n if (chainCount > MAX_CHAIN_DEPTH) {\n return { valid: false, reason: 'Directive exceeds maximum chain depth' }\n }\n }\n\n if (chainCount === 0) {\n return { valid: false, reason: 'No method calls found' }\n }\n\n return { valid: true, methods }\n}","import { z } from \"zod\";\n\nexport type ScalarBaseMap = Record<string, () => z.ZodTypeAny>;\n\nfunction isPrismaNullSentinel(value: unknown): boolean {\n if (value === null || typeof value !== \"object\") return false;\n const tag = (value as { _tag?: unknown })._tag;\n if (tag === \"DbNull\" || tag === \"JsonNull\" || tag === \"AnyNull\") return true;\n const constructorName = (value as { constructor?: { name?: unknown } }).constructor?.name;\n if (\n constructorName === \"DbNull\" ||\n constructorName === \"JsonNull\" ||\n constructorName === \"AnyNull\"\n ) {\n return true;\n }\n return false;\n}\n\nfunction isJsonSafe(value: unknown): boolean {\n type Entry = { tag: \"visit\"; value: unknown } | { tag: \"exit\"; ref: object };\n\n const stack: Entry[] = [{ tag: \"visit\", value }];\n const ancestors = new Set<object>();\n\n while (stack.length > 0) {\n const entry = stack.pop()!;\n\n if (entry.tag === \"exit\") {\n ancestors.delete(entry.ref);\n continue;\n }\n\n const current = entry.value;\n\n if (current === undefined) return false;\n if (current === null) continue;\n if (isPrismaNullSentinel(current)) continue;\n\n switch (typeof current) {\n case \"string\":\n case \"boolean\":\n continue;\n case \"number\":\n if (!Number.isFinite(current)) return false;\n continue;\n case \"object\": {\n if (ancestors.has(current)) return false;\n ancestors.add(current);\n stack.push({ tag: \"exit\", ref: current });\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n stack.push({ tag: \"visit\", value: current[i] });\n }\n continue;\n }\n const proto = Object.getPrototypeOf(current);\n if (proto !== Object.prototype && proto !== null) return false;\n const values = Object.values(current as Record<string, unknown>);\n for (let i = 0; i < values.length; i++) {\n stack.push({ tag: \"visit\", value: values[i] });\n }\n continue;\n }\n default:\n return false;\n }\n }\n\n return true;\n}\n\nconst DECIMAL_REGEX = /^-?(\\d+\\.?\\d*|\\.\\d+)([eE]-?\\d+)?$/;\n\nconst decimalStringSchema = z\n .string()\n .refine((s) => DECIMAL_REGEX.test(s), \"Invalid decimal string\");\n\nconst decimalObjectSchema = z.custom<unknown>(\n (v) =>\n v !== null &&\n typeof v === \"object\" &&\n typeof (v as any).toFixed === \"function\" &&\n typeof (v as any).toNumber === \"function\",\n \"Expected Decimal-compatible object\",\n);\n\nfunction createDecimalFactory(strict: boolean): () => z.ZodTypeAny {\n if (strict) {\n return () => z.union([decimalStringSchema, decimalObjectSchema]);\n }\n return () => z.union([z.number(), decimalStringSchema, decimalObjectSchema]);\n}\n\nexport function createScalarBase(strictDecimal: boolean): ScalarBaseMap {\n return {\n String: () => z.string(),\n Int: () => z.number().int(),\n Float: () => z.number(),\n Decimal: createDecimalFactory(strictDecimal),\n BigInt: () =>\n z.union([\n z.bigint(),\n z\n .number()\n .int()\n .refine(\n (v) => v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER,\n \"Number exceeds safe integer range for BigInt conversion\",\n )\n .transform((v) => BigInt(v)),\n z\n .string()\n .regex(/^-?\\d+$/)\n .transform((v) => BigInt(v)),\n ]),\n Boolean: () => z.boolean(),\n DateTime: () =>\n z\n .union([\n z.date(),\n z.string().refine(\n (s) => !isNaN(Date.parse(s)),\n \"Invalid date string\",\n ),\n ])\n .pipe(z.coerce.date()),\n Json: () =>\n z\n .unknown()\n .refine(\n isJsonSafe,\n \"Value must be JSON-serializable (no undefined, functions, symbols, class instances, NaN, Infinity, or circular references)\",\n ),\n Bytes: () =>\n z.union([z.string(), z.custom<unknown>((v) => v instanceof Uint8Array)]),\n };\n}\n\nexport const SCALAR_BASE: ScalarBaseMap = createScalarBase(false);\n\nexport function wrapWithInputCoercion(\n fieldType: string,\n isList: boolean,\n schema: z.ZodTypeAny,\n): z.ZodTypeAny {\n let itemCoercion: z.ZodTypeAny | null = null;\n\n switch (fieldType) {\n case \"String\":\n itemCoercion = z.union([z.string(), z.number().transform(String)]);\n break;\n case \"Int\":\n itemCoercion = z.union([\n z.number().int(),\n z\n .string()\n .regex(/^-?\\d+$/)\n .transform((v) => Number(v)),\n ]);\n break;\n case \"Float\":\n itemCoercion = z.union([\n z.number(),\n z\n .string()\n .regex(/^-?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/)\n .transform(Number),\n ]);\n break;\n default:\n return schema;\n }\n\n const coercion = isList ? z.array(itemCoercion) : itemCoercion;\n return coercion.pipe(schema);\n}"],"mappings":"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","names":["existsSync","z","pkg","z","z","z","existsSync"]}
|
package/dist/runtime/index.cjs
CHANGED
|
@@ -2945,21 +2945,22 @@ function createProjectionBuilder(typeMap, _enumMap, deps) {
|
|
|
2945
2945
|
// src/shared/operation-shape-keys.ts
|
|
2946
2946
|
var OPERATION_SHAPE_KEYS = {
|
|
2947
2947
|
findMany: ["where", "include", "select", "orderBy", "cursor", "take", "skip", "distinct"],
|
|
2948
|
+
findManyPaginated: ["where", "include", "select", "orderBy", "cursor", "take", "skip", "distinct"],
|
|
2948
2949
|
findFirst: ["where", "include", "select", "orderBy", "cursor", "take", "skip", "distinct"],
|
|
2949
2950
|
findFirstOrThrow: ["where", "include", "select", "orderBy", "cursor", "take", "skip", "distinct"],
|
|
2950
2951
|
findUnique: ["where", "include", "select"],
|
|
2951
2952
|
findUniqueOrThrow: ["where", "include", "select"],
|
|
2952
2953
|
count: ["where", "select", "cursor", "orderBy", "skip", "take"],
|
|
2953
2954
|
aggregate: ["where", "orderBy", "cursor", "take", "skip", "_count", "_avg", "_sum", "_min", "_max"],
|
|
2954
|
-
groupBy: ["where", "
|
|
2955
|
-
create: ["data", "
|
|
2956
|
-
createMany: ["data"],
|
|
2957
|
-
createManyAndReturn: ["data", "select", "
|
|
2958
|
-
update: ["
|
|
2959
|
-
updateMany: ["
|
|
2960
|
-
updateManyAndReturn: ["
|
|
2961
|
-
upsert: ["where", "create", "update", "
|
|
2962
|
-
delete: ["where", "
|
|
2955
|
+
groupBy: ["where", "orderBy", "by", "having", "take", "skip", "_count", "_avg", "_sum", "_min", "_max"],
|
|
2956
|
+
create: ["data", "include", "select"],
|
|
2957
|
+
createMany: ["data", "skipDuplicates"],
|
|
2958
|
+
createManyAndReturn: ["data", "select", "skipDuplicates"],
|
|
2959
|
+
update: ["where", "data", "include", "select"],
|
|
2960
|
+
updateMany: ["where", "data"],
|
|
2961
|
+
updateManyAndReturn: ["where", "data", "select"],
|
|
2962
|
+
upsert: ["where", "create", "update", "include", "select"],
|
|
2963
|
+
delete: ["where", "include", "select"],
|
|
2963
2964
|
deleteMany: ["where"]
|
|
2964
2965
|
};
|
|
2965
2966
|
var READ_METHOD_ALLOWED_ARGS = {
|