zodipus 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/generator.ts","../src/errors.ts","../src/queryEngine.ts","../src/index.ts"],"names":["resolve","dirname","mkdirSync","writeFileSync","existsSync","entries","generatorHandler"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport type { DMMF, GeneratorOptions } from '@prisma/generator-helper';\n\n/**\n * Configuration options for Zodipus generator\n */\ninterface ZodipusConfig {\n /** How to handle DateTime fields: 'coerce' uses z.coerce.date(), 'string' uses z.string().datetime() */\n dateFormat: 'coerce' | 'string';\n /** Whether to enable passthrough mode for objects (allows extra keys) */\n passthroughEnabled: boolean;\n /** Maximum depth for relation nesting */\n relationDepth: number;\n /** Enable debug logging */\n debug: boolean;\n /** Zod import path for generated files. Default: 'zod'. Advanced: use 'zod/v4' or 'zod/v3' for explicit versioning */\n zodImport: string;\n /** Preview output without writing files */\n dryRun: boolean;\n}\n\n/**\n * Parse configuration from Prisma generator options\n * @internal\n */\nexport function parseConfig(options: GeneratorOptions): ZodipusConfig {\n const config = options.generator.config;\n\n const getConfigValue = (key: string, defaultValue: string): string => {\n const value = config[key];\n if (Array.isArray(value)) return value[0] ?? defaultValue;\n return value ?? defaultValue;\n };\n\n return {\n dateFormat: getConfigValue('dateFormat', 'coerce') as 'coerce' | 'string',\n passthroughEnabled: getConfigValue('passthroughEnabled', 'false') === 'true',\n relationDepth: Number.parseInt(getConfigValue('relationDepth', '5')),\n debug: getConfigValue('debug', 'false') === 'true',\n zodImport: getConfigValue('zodImport', 'zod'),\n dryRun: process.env.ZODIPUS_DRY_RUN === 'true',\n };\n}\n\nexport async function generate(options: GeneratorOptions) {\n // Handle Inspect Command (CLI wrapper)\n if (process.env.ZODIPUS_CMD === 'inspect') {\n await inspectSchema(options.dmmf);\n return;\n }\n\n const outputDir = options.generator.output?.value;\n\n if (!outputDir) {\n throw new Error('No output directory specified');\n }\n\n // Parse configuration\n const config = parseConfig(options);\n\n // Helper function to log only in debug mode\n const log = (...args: unknown[]) => {\n if (config.debug) {\n console.log(...args);\n }\n };\n\n // Resolve the output directory relative to the schema location\n const resolvedOutputDir = resolve(dirname(options.schemaPath), outputDir);\n\n log('šŸ”§ Zodipus generator');\n log(`šŸ“ Output directory: ${resolvedOutputDir}`);\n log(\n `āš™ļø Config: dateFormat=${config.dateFormat}, passthroughEnabled=${config.passthroughEnabled}, relationDepth=${config.relationDepth}`\n );\n\n // Step 1: Generate clean Zod model schemas\n log('šŸ“¦ Generating clean Zod model schemas...');\n await generateCleanModelSchemas(options, resolvedOutputDir, log, config);\n\n // Step 2: Extract and generate relations\n log('šŸ”— Extracting relations from DMMF...');\n log(` Total models in schema: ${options.dmmf.datamodel.models.length}`);\n\n const relations = extractRelationsFromDMMF(options.dmmf, config.relationDepth);\n\n log(` Found ${Object.keys(relations).length} models with relations`);\n\n const relationsCode = formatRelationsAsTypeScript(relations, config.relationDepth);\n const relationsPath = resolve(resolvedOutputDir, 'generated-relations.ts');\n\n if (!config.dryRun) {\n mkdirSync(dirname(relationsPath), { recursive: true });\n writeFileSync(relationsPath, relationsCode, 'utf-8');\n } else {\n log(` [DRY RUN] Would write to ${relationsPath}`);\n }\n\n log(` āœ… Relations written to ${relationsPath}`);\n\n // Step 3: Generate index file\n log('šŸ“ Generating index file...');\n const indexCode = generateIndexFile(options.dmmf);\n const indexPath = resolve(resolvedOutputDir, 'generated-index.ts');\n\n if (!config.dryRun) {\n writeFileSync(indexPath, indexCode, 'utf-8');\n } else {\n log(` [DRY RUN] Would write to ${indexPath}`);\n }\n\n log('āœ… Query Engine generation complete!');\n}\n\nasync function generateCleanModelSchemas(\n options: GeneratorOptions,\n outputDir: string,\n log: (...args: unknown[]) => void,\n config: ZodipusConfig\n) {\n const models = options.dmmf.datamodel.models;\n const enums = options.dmmf.datamodel.enums;\n const enumNames = new Set(enums.map((e) => e.name));\n\n log(` Found ${models.length} models and ${enums.length} enums`);\n\n // Collect custom schemas from field documentation\n const customSchemas = new Set<string>();\n for (const model of models) {\n const scalarFields = model.fields.filter((field) => field.kind !== 'object');\n for (const field of scalarFields) {\n const customSchema = extractCustomSchema(field.documentation);\n if (customSchema) {\n customSchemas.add(customSchema);\n }\n }\n }\n\n // Generate enum schemas first\n const enumSchemas: string[] = [];\n for (const enumDef of enums) {\n const enumCode = generateEnumSchema(enumDef, config);\n enumSchemas.push(enumCode);\n }\n\n // Collect all used enums across all models\n const usedEnums = new Set<string>();\n for (const model of models) {\n const scalarFields = model.fields.filter((field) => field.kind !== 'object');\n for (const field of scalarFields) {\n if (enumNames.has(field.type)) {\n usedEnums.add(field.type);\n }\n }\n }\n\n // Generate model schemas (without relations)\n const modelSchemas: string[] = [];\n for (const model of models) {\n const modelCode = generateModelSchema(model, enums, config);\n modelSchemas.push(modelCode);\n }\n\n // Write enums file with single import at top\n const enumsCode = `import { z } from '${config.zodImport}';\\n\\n${enumSchemas.map((s) => s.replace(/import \\{ z \\} from '[^']+';\\n\\n/g, '')).join('\\n\\n')}`;\n\n const enumsPath = resolve(outputDir, 'enums.ts');\n if (!config.dryRun) {\n writeFileSync(enumsPath, enumsCode, 'utf-8');\n } else {\n log(` [DRY RUN] Would write to ${enumsPath}`);\n }\n\n // Write models file with consolidated imports\n const enumImportList = Array.from(usedEnums)\n .sort()\n .map((name) => `${name}Schema`)\n .join(', ');\n const customSchemaImportList = Array.from(customSchemas).sort().join(', ');\n\n const modelImports = [`import { z } from '${config.zodImport}';`];\n if (usedEnums.size > 0) {\n modelImports.push(`import { ${enumImportList} } from './enums';`);\n }\n if (customSchemas.size > 0) {\n modelImports.push(`import { ${customSchemaImportList} } from './custom-schemas';`);\n }\n\n const modelsCodeWithoutImports = modelSchemas\n .map((s) =>\n s\n .replace(/import \\{ z \\} from '[^']+';\\n/g, '')\n .replace(/import \\{ [^}]+ \\} from '\\.\\/enums';\\n/g, '')\n .replace(/import \\{ [^}]+ \\} from '\\.\\/custom-schemas';\\n/g, '')\n .trim()\n )\n .join('\\n\\n');\n\n const modelsCode = `${modelImports.join('\\n')}\\n\\n${modelsCodeWithoutImports}`;\n\n const modelsPath = resolve(outputDir, 'models.ts');\n if (!config.dryRun) {\n writeFileSync(modelsPath, modelsCode, 'utf-8');\n } else {\n log(` [DRY RUN] Would write to ${modelsPath}`);\n }\n\n // Create custom-schemas.ts template if custom schemas are used\n if (customSchemas.size > 0) {\n generateCustomSchemasTemplate(outputDir, customSchemas, log, config);\n }\n\n log(` āœ… Generated ${enums.length} enums and ${models.length} model schemas`);\n if (customSchemas.size > 0) {\n log(` šŸ“ Found ${customSchemas.size} custom schema references - update custom-schemas.ts`);\n }\n}\n\nfunction generateCustomSchemasTemplate(\n outputDir: string,\n customSchemas: Set<string>,\n log: (...args: unknown[]) => void,\n config: ZodipusConfig\n) {\n const customSchemasPath = resolve(outputDir, 'custom-schemas.ts');\n\n // Check if file already exists - don't overwrite it\n if (existsSync(customSchemasPath)) {\n log(' āš ļø custom-schemas.ts already exists, skipping template generation');\n return;\n }\n\n const schemaTemplates = Array.from(customSchemas)\n .map((schemaName) => {\n return `/**\n * ${schemaName} schema\n */\nexport const ${schemaName} = z.any(); // Replace with your schema`;\n })\n .join('\\n\\n');\n\n const template = `import { z } from '${config.zodImport}';\n\n/**\n * Custom Zod schemas for JSON fields\n * \n * This file contains custom schemas referenced via @zodSchema annotations\n * in your Prisma schema. Update these with your actual schema definitions.\n */\n\n${schemaTemplates}\n`;\n\n if (!config.dryRun) {\n writeFileSync(customSchemasPath, template, 'utf-8');\n log(` ✨ Created custom-schemas.ts template at ${customSchemasPath}`);\n } else {\n log(` [DRY RUN] Would create template at ${customSchemasPath}`);\n }\n}\n\nasync function inspectSchema(dmmf: DMMF.Document) {\n const flags = process.env.ZODIPUS_INSPECT_FLAGS || '';\n const showModels = flags.includes('models');\n const showEnums = flags.includes('enums');\n const showRelations = flags.includes('relations');\n const showAll = !showModels && !showEnums && !showRelations;\n const asJson = process.env.ZODIPUS_INSPECT_JSON === 'true';\n\n if (asJson) {\n const output: Record<string, unknown> = {};\n if (showAll || showModels) {\n output.models = dmmf.datamodel.models.map((m) => ({\n name: m.name,\n fields: m.fields.map((f) => ({\n name: f.name,\n type: f.type,\n isRequired: f.isRequired,\n isList: f.isList,\n isId: f.isId,\n isUnique: f.isUnique,\n })),\n }));\n }\n if (showAll || showEnums) {\n output.enums = dmmf.datamodel.enums.map((e) => ({\n name: e.name,\n values: e.values.map((v) => v.name),\n }));\n }\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n\n // Text output\n if (showAll || showModels) {\n console.log('šŸ“¦ Models:');\n console.log('─'.repeat(50));\n for (const model of dmmf.datamodel.models) {\n const fieldCount = model.fields.length;\n const scalarCount = model.fields.filter((f) => f.kind !== 'object').length;\n const relationCount = fieldCount - scalarCount;\n console.log(` ${model.name} (${scalarCount} fields, ${relationCount} relations)`);\n\n for (const field of model.fields) {\n const markers: string[] = [];\n if (field.isId) markers.push('@id');\n if (field.isUnique) markers.push('@unique');\n if (!field.isRequired) markers.push('optional');\n if (field.isList) markers.push('[]');\n\n const markerStr = markers.length > 0 ? ` [${markers.join(', ')}]` : '';\n const typeStr = field.kind === 'object' ? `→ ${field.type}` : field.type;\n console.log(` • ${field.name}: ${typeStr}${markerStr}`);\n }\n console.log();\n }\n }\n\n if (showAll || showEnums) {\n console.log('\\nšŸ·ļø Enums:');\n console.log('─'.repeat(50));\n for (const enumDef of dmmf.datamodel.enums) {\n const values = enumDef.values.map((v) => v.name).join(', ');\n console.log(` ${enumDef.name}: ${values}`);\n }\n console.log();\n }\n\n if (showAll || showRelations) {\n console.log('\\nšŸ”— Relations:');\n console.log('─'.repeat(50));\n for (const model of dmmf.datamodel.models) {\n const relations = model.fields.filter((f) => f.kind === 'object');\n if (relations.length > 0) {\n console.log(` ${model.name}:`);\n for (const rel of relations) {\n const arrow = rel.isList ? '─┬▶' : '──▶';\n console.log(` ${arrow} ${rel.type} (via ${rel.name})`);\n }\n }\n }\n console.log();\n }\n\n console.log('āœ… Inspection complete\\n');\n}\n\nfunction generateEnumSchema(enumDef: DMMF.DatamodelEnum, config: ZodipusConfig): string {\n const values = enumDef.values.map((v) => ` '${v.name}'`).join(',\\n');\n\n // Build JSDoc for enum\n const jsDocLines = ['/**'];\n jsDocLines.push(` * ${enumDef.name} enum schema`);\n if (enumDef.documentation) {\n jsDocLines.push(` * @description ${enumDef.documentation}`);\n }\n jsDocLines.push(` * @values ${enumDef.values.map((v) => v.name).join(', ')}`);\n jsDocLines.push(' */');\n const jsDoc = jsDocLines.join('\\n');\n\n return `import { z } from '${config.zodImport}';\n\n${jsDoc}\nexport const ${enumDef.name}Schema = z.enum([\\n${values}\\n]);\n\nexport type ${enumDef.name} = z.infer<typeof ${enumDef.name}Schema>;`;\n}\n\nfunction generateModelSchema(\n model: DMMF.Model,\n enums: readonly DMMF.DatamodelEnum[],\n config: ZodipusConfig\n): string {\n const enumNames = new Set(enums.map((e) => e.name));\n\n // Filter out relation fields (kind === 'object')\n const scalarFields = model.fields.filter((field) => field.kind !== 'object');\n\n const imports: string[] = [`import { z } from '${config.zodImport}';`];\n const enumImports = new Set<string>();\n const customSchemaImports = new Set<string>();\n const fieldDefinitions: string[] = [];\n\n for (const field of scalarFields) {\n // Check if field has custom schema annotation\n const customSchema = extractCustomSchema(field.documentation);\n\n let zodType: string;\n if (customSchema) {\n zodType = customSchema;\n customSchemaImports.add(customSchema);\n } else {\n zodType = mapPrismaTypeToZod(field, enumNames, config);\n\n // Track enum imports\n if (enumNames.has(field.type)) {\n enumImports.add(field.type);\n }\n }\n\n const optional = field.isRequired ? '' : '.optional()';\n const nullable = field.isRequired ? '' : '.nullable()';\n const array = field.isList ? '.array()' : '';\n\n let fieldDef = ` ${field.name}: ${zodType}${array}${optional}${nullable}`;\n\n // Build comprehensive JSDoc for field\n const fieldDocLines: string[] = [];\n\n if (field.documentation) {\n // Add field documentation\n const cleanDoc = field.documentation.replace(/@zodSchema\\s+\\w+/g, '').trim();\n if (cleanDoc) {\n fieldDocLines.push(cleanDoc);\n }\n }\n\n // Add validation constraint hints\n const constraints: string[] = [];\n if (field.isId) constraints.push('@id');\n if (field.isUnique) constraints.push('@unique');\n\n if (field.hasDefaultValue) {\n const defaultVal = formatDefaultValue(field.default);\n constraints.push(`@default(${defaultVal})`);\n }\n if (field.isUpdatedAt) constraints.push('@updatedAt');\n if (!field.isRequired) constraints.push('optional');\n\n if (constraints.length > 0) {\n fieldDocLines.push(`Prisma: ${constraints.join(', ')}`);\n }\n\n if (fieldDocLines.length > 0) {\n fieldDef = ` /** ${fieldDocLines.join(' | ')} */\\n${fieldDef}`;\n }\n\n fieldDefinitions.push(fieldDef);\n }\n\n // Add enum imports\n if (enumImports.size > 0) {\n const enumImportList = Array.from(enumImports)\n .map((name) => `${name}Schema`)\n .sort()\n .join(', ');\n imports.push(`import { ${enumImportList} } from './enums';`);\n }\n\n // Add custom schema imports\n if (customSchemaImports.size > 0) {\n const customImportList = Array.from(customSchemaImports).sort().join(', '); // Sort for deterministic output\n imports.push(`import { ${customImportList} } from './custom-schemas';`);\n }\n\n // Apply strictMode setting\n const schemaModifier = config.passthroughEnabled ? '.passthrough()' : '';\n\n return `${imports.join('\\n')}\n\n/**\n * ${model.name} model (clean schema without relations)\n */\nexport const ${model.name}Schema = z.object({\n${fieldDefinitions.join(',\\n')}\n})${schemaModifier};\n\nexport type ${model.name} = z.infer<typeof ${model.name}Schema>;`;\n}\n\n/**\n * Extract custom schema name from field documentation\n * Looks for pattern: @zodSchema SchemaName\n * @internal\n */\nexport function extractCustomSchema(documentation: string | undefined): string | null {\n if (!documentation) return null;\n\n const match = documentation.match(/@zodSchema\\s+(\\w+)/);\n return match ? match[1]! : null;\n}\n\n/**\n * Format Prisma default value for documentation\n * standardized across Prisma versions (v5/v6)\n * @internal\n */\nfunction formatDefaultValue(value: unknown): string {\n if (typeof value === 'object' && value !== null && 'name' in value && 'args' in value) {\n const { name, args } = value as { name: string; args: unknown[] };\n // Handle Prisma 5 vs 6 differences\n // v6: name=\"uuid\", args=[4] -> \"uuid(4)\"\n // v5: name=\"uuid(4)\", args=[] -> \"uuid(4)\"\n\n // If name already looks like a function call, use it as is\n if (name.includes('(')) return name;\n\n // Otherwise construct function call\n if (Array.isArray(args) && args.length > 0) {\n return `${name}(${args.join(', ')})`;\n }\n return `${name}()`;\n }\n\n if (typeof value === 'object' && value !== null) {\n return JSON.stringify(value);\n }\n\n return String(value);\n}\n\n/**\n * Map Prisma field type to Zod validator string\n * @internal\n */\nexport function mapPrismaTypeToZod(\n field: DMMF.Field,\n enumNames: Set<string>,\n config: ZodipusConfig\n): string {\n // Check if it's an enum\n if (enumNames.has(field.type)) {\n return `${field.type}Schema`;\n }\n\n // Map Prisma scalar types to Zod types\n switch (field.type) {\n case 'String':\n return 'z.string()';\n case 'Int':\n return 'z.number().int()';\n case 'BigInt':\n return 'z.bigint()';\n case 'Float':\n return 'z.number()';\n case 'Decimal':\n // Prisma Decimal can be a Decimal.js object, number, or string\n // We accept all and coerce to string for consistency\n return 'z.union([z.number(), z.string(), z.custom<{ toString(): string }>((val) => typeof val === \"object\" && val !== null && \"toString\" in val)]).transform(String)';\n case 'Boolean':\n return 'z.boolean()';\n case 'DateTime':\n // dateFormat option: 'coerce' uses z.coerce.date(), 'string' uses z.string().datetime()\n return config.dateFormat === 'string' ? 'z.string().datetime()' : 'z.coerce.date()';\n case 'Json':\n return 'z.union([z.record(z.string(), z.unknown()), z.array(z.unknown())])';\n case 'Bytes':\n return 'z.instanceof(Buffer)';\n default:\n return 'z.unknown()';\n }\n}\n\ninterface RelationConfig {\n type: string;\n isArray: boolean;\n relations?: Record<string, RelationConfig>;\n}\n\nfunction extractRelationsFromDMMF(\n dmmf: DMMF.Document,\n maxDepth: number\n): Record<string, Record<string, RelationConfig>> {\n const relations: Record<string, Record<string, RelationConfig>> = {};\n\n // Create a lookup map for quick access\n const modelMap = new Map(dmmf.datamodel.models.map((m) => [m.name, m]));\n\n function extractForModel(\n modelName: string,\n depth: number,\n visited: Set<string>\n ): Record<string, RelationConfig> {\n if (depth > maxDepth || visited.has(modelName)) {\n return {};\n }\n\n const model = modelMap.get(modelName);\n if (!model) return {};\n\n const newVisited = new Set(visited);\n newVisited.add(modelName);\n\n const result: Record<string, RelationConfig> = {};\n\n for (const field of model.fields) {\n // Only process relation fields (kind === 'object' means it's a relation)\n if (field.kind === 'object') {\n const nestedRelations = extractForModel(field.type, depth + 1, newVisited);\n\n result[field.name] = {\n type: toCamelCase(field.type),\n isArray: field.isList,\n ...(Object.keys(nestedRelations).length > 0 && {\n relations: nestedRelations,\n }),\n };\n }\n }\n\n return result;\n }\n\n for (const model of dmmf.datamodel.models) {\n // Start at depth 0, and the model itself is not in visited yet\n const modelRelations = extractForModel(model.name, 0, new Set());\n\n if (Object.keys(modelRelations).length > 0) {\n relations[toCamelCase(model.name)] = modelRelations;\n }\n }\n\n return relations;\n}\n\nfunction formatRelationsAsTypeScript(\n relations: Record<string, Record<string, RelationConfig>>,\n maxDepth: number\n): string {\n const formatValue = (value: unknown, indent: number): string => {\n const spaces = ' '.repeat(indent);\n\n if (typeof value === 'string') {\n return `\"${value}\" as const`;\n }\n\n if (typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'object' && value !== null) {\n const entries = Object.entries(value);\n if (entries.length === 0) return '{}';\n\n const formattedEntries = entries.map(([key, val]) => {\n const formattedVal = formatValue(val, indent + 1);\n return `${spaces} ${key}: ${formattedVal},`;\n });\n\n return `{\\n${formattedEntries.join('\\n')}\\n${spaces}}`;\n }\n\n return String(value);\n };\n\n const lines: string[] = [];\n lines.push('/**');\n lines.push(' * Auto-generated relation metadata from Prisma schema');\n lines.push(` * Generated on: ${new Date().toISOString()}`);\n lines.push(` * Max nesting depth: ${maxDepth}`);\n lines.push(' *');\n lines.push(' * Generated by zodipus');\n lines.push(' * To regenerate: prisma generate');\n lines.push(' */');\n lines.push('');\n lines.push('const modelRelations = {');\n\n const entries = Object.entries(relations);\n for (let i = 0; i < entries.length; i++) {\n const [modelName, modelRelations] = entries[i]!;\n const formattedRelations = formatValue(modelRelations, 1);\n const comma = i < entries.length - 1 ? ',' : '';\n lines.push(` ${modelName}: ${formattedRelations}${comma}`);\n }\n\n lines.push('} as const;');\n lines.push('');\n lines.push('export default modelRelations;');\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction generateIndexFile(dmmf: DMMF.Document): string {\n const modelNames = dmmf.datamodel.models.map((m) => m.name);\n const enumNames = dmmf.datamodel.enums.map((e) => e.name);\n\n const modelTypeExports = modelNames.map((name) => ` ${name},`).join('\\n');\n const enumTypeExports = enumNames.map((name) => ` ${name},`).join('\\n');\n\n return `/**\n * Generated export from zodipus\n *\n * This file exports:\n * - Clean Zod model schemas (without relations)\n * - Enum schemas\n * - Relation metadata\n */\n\n// Export enum schemas\nexport * from './enums';\n\n// Export model schemas\nexport * as models from './models';\n\n// Export relation metadata\nexport { default as modelRelations } from './generated-relations';\n\n// Re-export types for convenience\nexport type {\n${modelTypeExports}\n} from './models';\n\nexport type {\n${enumTypeExports}\n} from './enums';\n`;\n}\n\nfunction toCamelCase(str: string): string {\n return str.charAt(0).toLowerCase() + str.slice(1);\n}\n","/**\n * Custom error classes for Zodipus\n *\n * These errors provide better context for debugging validation\n * and generation issues.\n */\n\n/**\n * Base error class for all Zodipus errors\n */\nexport class ZodipusError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ZodipusError';\n // Maintains proper stack trace for where error was thrown (V8 engines)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Context for validation errors\n */\nexport interface ValidationErrorContext {\n /** The model being validated */\n model: string;\n /** The field that failed validation (if applicable) */\n field?: string;\n /** The expected type or value */\n expected?: string;\n /** The received type or value */\n received?: string;\n /** The path to the field in nested objects */\n path?: (string | number)[];\n}\n\n/**\n * Error thrown when data validation fails\n *\n * @example\n * ```typescript\n * throw new ZodipusValidationError('Invalid data type', {\n * model: 'User',\n * field: 'email',\n * expected: 'string',\n * received: 'number',\n * path: ['user', 'email'],\n * });\n * ```\n */\nexport class ZodipusValidationError extends ZodipusError {\n readonly context: ValidationErrorContext;\n\n constructor(message: string, context: ValidationErrorContext) {\n const contextInfo = [\n `Model: ${context.model}`,\n context.field ? `Field: ${context.field}` : null,\n context.expected ? `Expected: ${context.expected}` : null,\n context.received ? `Received: ${context.received}` : null,\n context.path?.length ? `Path: ${context.path.join('.')}` : null,\n ]\n .filter(Boolean)\n .join(', ');\n\n super(`${message} (${contextInfo})`);\n this.name = 'ZodipusValidationError';\n this.context = context;\n }\n}\n\n/**\n * Error thrown during schema generation\n */\nexport class ZodipusGeneratorError extends ZodipusError {\n readonly schemaPath?: string;\n readonly modelName?: string;\n\n constructor(message: string, options?: { schemaPath?: string; modelName?: string }) {\n const contextParts = [\n options?.schemaPath ? `Schema: ${options.schemaPath}` : null,\n options?.modelName ? `Model: ${options.modelName}` : null,\n ].filter(Boolean);\n\n const fullMessage = contextParts.length ? `${message} (${contextParts.join(', ')})` : message;\n\n super(fullMessage);\n this.name = 'ZodipusGeneratorError';\n this.schemaPath = options?.schemaPath;\n this.modelName = options?.modelName;\n }\n}\n","import type { ZodTypeAny, z } from 'zod';\nimport { ZodipusValidationError } from './errors';\n\ntype Simplify<T> = { [K in keyof T]: T[K] } & {};\ntype InferZodType<T extends ZodTypeAny> = z.infer<T>;\n\n/**\n * Result type for safeParse operations\n */\nexport type SafeParseResult<T> = { success: true; data: T } | { success: false; error: Error };\n\n/**\n * Generic model registry type - accepts any object with ZodTypeAny schemas\n * @example\n * const models = {\n * user: UserSchema,\n * post: PostSchema,\n * } as const;\n */\nexport type ModelRegistry = Record<string, ZodTypeAny>;\n\n/**\n * Configuration for a single relation\n */\nexport type RelationConfig<TModelName extends string = string> = {\n type: TModelName;\n isArray: boolean;\n relations?: Record<string, RelationConfig<TModelName>>;\n};\n\n/**\n * Generic model relations type\n * @example\n * const modelRelations = {\n * user: {\n * posts: { type: 'post' as const, isArray: true as const }\n * }\n * } as const;\n */\nexport type ModelRelations = Record<string, Record<string, RelationConfig>>;\n\n// Helper to get all possible keys (for error messages)\ntype ValidKeys<T> = keyof T;\n\n// Strict select type that only allows keys from T\ntype StrictSelect<T> = {\n [K in keyof T]?: K extends ValidKeys<T> ? boolean : never;\n};\n\ntype SelectQuery<T> = {\n select: StrictSelect<T>;\n};\n\ntype RelationQueryValue<TRelation extends RelationConfig> =\n | boolean\n | { select: Record<string, boolean> }\n | {\n include: TRelation['relations'] extends Record<string, RelationConfig>\n ? {\n [K in keyof TRelation['relations']]?: RelationQueryValue<TRelation['relations'][K]>;\n }\n : never;\n };\n\ntype QueryConfig<\n TModel extends ZodTypeAny,\n TRelations extends Record<string, RelationConfig>,\n> = Partial<SelectQuery<InferZodType<TModel>>> & {\n [K in keyof TRelations]?: RelationQueryValue<TRelations[K]>;\n};\n\nexport type QueryExecutor<\n TModel extends ZodTypeAny,\n TRelations extends Record<string, RelationConfig>,\n TQuery extends QueryConfig<TModel, TRelations>,\n TModels extends ModelRegistry = ModelRegistry,\n> = {\n query: TQuery extends { select: infer S }\n ? {\n select: S & {\n [K in keyof TRelations & keyof TQuery]: TQuery[K] extends {\n select: infer S;\n }\n ? { select: S }\n : TQuery[K] extends { include: infer I }\n ? { include: I }\n : TQuery[K] extends true\n ? true\n : never;\n };\n }\n : {\n include: {\n [K in keyof TRelations & keyof TQuery]: TQuery[K] extends {\n select: infer S;\n }\n ? { select: S }\n : TQuery[K] extends { include: infer I }\n ? { include: I }\n : TQuery[K] extends true\n ? true\n : never;\n };\n };\n parse: (data: unknown) => InferQueryResult<TModel, TRelations, TQuery, TModels>;\n safeParse: (\n data: unknown\n ) => SafeParseResult<InferQueryResult<TModel, TRelations, TQuery, TModels>>;\n array: () => {\n parse: (data: unknown[]) => InferQueryResult<TModel, TRelations, TQuery, TModels>[];\n safeParse: (\n data: unknown[]\n ) => SafeParseResult<InferQueryResult<TModel, TRelations, TQuery, TModels>[]>;\n };\n};\n\ntype InferQueryResult<\n TModel extends ZodTypeAny,\n TRelations extends Record<string, RelationConfig>,\n TQuery extends QueryConfig<TModel, TRelations>,\n TModels extends ModelRegistry = ModelRegistry,\n> = Simplify<\n (TQuery extends { select: infer Select }\n ? Pick<InferZodType<TModel>, keyof Select & keyof InferZodType<TModel>>\n : InferZodType<TModel>) & {\n [K in keyof TQuery & keyof TRelations]: TQuery[K] extends {\n select: Record<infer SelectKey, boolean>;\n }\n ? TRelations[K]['isArray'] extends true\n ? Pick<\n InferZodType<TModels[TRelations[K]['type']]>,\n SelectKey & keyof InferZodType<TModels[TRelations[K]['type']]>\n >[]\n : Pick<\n InferZodType<TModels[TRelations[K]['type']]>,\n SelectKey & keyof InferZodType<TModels[TRelations[K]['type']]>\n >\n : TQuery[K] extends { include: infer Include }\n ? TRelations[K] extends {\n relations: Record<string, RelationConfig>;\n }\n ? InferZodType<TModels[TRelations[K]['type']]> & {\n [NK in keyof Include & keyof TRelations[K]['relations']]: Include[NK] extends {\n select: Record<infer SelectKey, boolean>;\n }\n ? TRelations[K]['relations'][NK] extends RelationConfig\n ? TRelations[K]['relations'][NK]['isArray'] extends true\n ? Pick<\n InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>,\n SelectKey &\n keyof InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>\n >[]\n : Pick<\n InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>,\n SelectKey &\n keyof InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>\n >\n : never\n : Include[NK] extends true\n ? TRelations[K]['relations'][NK] extends RelationConfig\n ? TRelations[K]['relations'][NK]['isArray'] extends true\n ? InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>[]\n : InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>\n : never\n : never;\n }\n : InferZodType<TModels[TRelations[K]['type']]>\n : TQuery[K] extends true\n ? TRelations[K]['isArray'] extends true\n ? InferZodType<TModels[TRelations[K]['type']]>[]\n : InferZodType<TModels[TRelations[K]['type']]>\n : never;\n }\n>;\n\n/**\n * Create a type-safe query registry for your Prisma models\n *\n * @example\n * ```typescript\n * import { createRegistry } from 'zodipus/queryEngine';\n * import { models, modelRelations } from './generated/generated-index';\n *\n * const registry = createRegistry({\n * models,\n * relations: modelRelations,\n * });\n *\n * export const userQuery = registry.createQuery('user');\n * export const postQuery = registry.createQuery('post');\n * ```\n */\nexport function createRegistry<\n TModels extends ModelRegistry,\n TRelations extends ModelRelations,\n>(config: {\n models: TModels;\n relations: TRelations;\n}) {\n // Build explicit relation types by directly mapping over the relations\n // This provides better autocomplete than conditional types\n type BuildRelationTypes<TRelations extends Record<string, RelationConfig>> = {\n [K in keyof TRelations]: TRelations[K]['type'] extends keyof TModels\n ?\n | boolean\n | {\n select: {\n [F in keyof InferZodType<TModels[TRelations[K]['type']]>]?: boolean;\n };\n }\n | {\n include: TRelations[K]['relations'] extends Record<string, RelationConfig>\n ? {\n [NK in keyof TRelations[K]['relations']]?: TRelations[K]['relations'][NK]['type'] extends keyof TModels\n ?\n | boolean\n | {\n select: {\n [F in keyof InferZodType<\n TModels[TRelations[K]['relations'][NK]['type']]\n >]?: boolean;\n };\n }\n : boolean | { select: Record<string, boolean> };\n }\n : never;\n }\n : boolean | { select: Record<string, boolean> };\n };\n\n type TypedQueryConfig<\n TModel extends ZodTypeAny,\n TRelations extends Record<string, RelationConfig>,\n > = Partial<SelectQuery<InferZodType<TModel>>> & Partial<BuildRelationTypes<TRelations>>;\n\n return {\n createQuery: <TModel extends keyof TModels & string>(model: TModel) => {\n type ResultType = InferQueryResult<\n TModels[TModel],\n TRelations[TModel],\n QueryConfig<TModels[TModel], TRelations[TModel]>,\n TModels\n >;\n\n return <TQuery extends TypedQueryConfig<TModels[TModel], TRelations[TModel]>>(\n query: TQuery\n ): QueryExecutor<\n TModels[TModel],\n TRelations[TModel],\n TQuery & QueryConfig<TModels[TModel], TRelations[TModel]>,\n TModels\n > => {\n const createParser = (isArray: boolean) => {\n return (data: unknown) => {\n const parseRelations = (item: unknown) => {\n // Basic validation: data must be an object\n if (typeof item !== 'object' || item === null) {\n throw new ZodipusValidationError(`Invalid data for model \"${String(model)}\"`, {\n model: String(model),\n expected: 'object',\n received: item === null ? 'null' : typeof item,\n });\n }\n\n // When using select, we don't validate against the full schema\n // We just validate the data as-is and handle relations\n let result: Record<string, unknown>;\n\n if (hasSelect) {\n // With select, just use the data as-is (Prisma already validated it)\n // We trust Prisma to return the correct shape based on our select query\n result = item as Record<string, unknown>;\n } else {\n // Without select, use the full Zod schema for validation\n const modelSchema = config.models[model];\n if (!modelSchema) {\n throw new ZodipusValidationError('Model schema not found', {\n model: String(model),\n });\n }\n const parsed = modelSchema.parse(item);\n result = parsed as Record<string, unknown>;\n }\n\n // Parse relations\n for (const [key, value] of Object.entries(query)) {\n if (key === 'select') continue;\n if (typeof item === 'object' && item !== null && key in item) {\n const modelRelations = config.relations[model];\n if (!modelRelations) continue;\n\n const relationType = modelRelations[key]?.type;\n if (!relationType) continue;\n\n // Check if this relation has a select clause\n const relationHasSelectOrInclude =\n typeof value === 'object' &&\n value !== null &&\n ('select' in value || 'include' in value);\n\n if (Array.isArray((item as Record<string, unknown>)[key])) {\n result[key] = ((item as Record<string, unknown>)[key] as unknown[]).map(\n (rel: unknown) => {\n // If relation has select, just return the data as-is\n // Otherwise use full Zod schema validation\n if (relationHasSelectOrInclude) {\n return rel;\n }\n const relationSchema = config.models[relationType];\n if (!relationSchema) {\n throw new ZodipusValidationError('Model schema not found for relation', {\n model: relationType,\n field: key,\n path: [String(model), key],\n });\n }\n return relationSchema.parse(rel);\n }\n );\n } else {\n const relData = (item as Record<string, unknown>)[key];\n // Handle null relations (optional relations)\n if (relData === null) {\n result[key] = null;\n } else if (relationHasSelectOrInclude) {\n // If relation has select/include, just return the data as-is\n result[key] = relData;\n } else {\n // Otherwise use full Zod schema validation\n const relationSchema = config.models[relationType];\n if (!relationSchema) {\n throw new ZodipusValidationError('Model schema not found for relation', {\n model: relationType,\n field: key,\n path: [String(model), key],\n });\n }\n result[key] = relationSchema.parse(relData);\n }\n }\n }\n }\n\n return result;\n };\n\n if (isArray) {\n const arrayData = data as unknown[];\n return arrayData.map(parseRelations);\n }\n\n return parseRelations(data) as unknown as ResultType;\n };\n };\n // Build the query object for Prisma\n const relationEntries = Object.fromEntries(\n Object.entries(query).filter(([key]) => key !== 'select')\n );\n\n const hasSelect = 'select' in query && query.select;\n const hasRelations = Object.keys(relationEntries).length > 0;\n\n // If we have a select query with relations, we need to merge them into the select\n let selectQuery: Record<string, unknown>;\n let includeQuery: Record<string, unknown>;\n\n if (hasSelect && hasRelations) {\n // Merge: select fields + relations go into select\n selectQuery = {\n ...(query.select ?? {}),\n ...relationEntries,\n };\n includeQuery = {};\n } else if (hasSelect && !hasRelations) {\n // Only select, no relations\n selectQuery = query.select ?? {};\n includeQuery = {};\n } else if (!hasSelect && hasRelations) {\n // Only relations, use include\n selectQuery = {};\n includeQuery = relationEntries;\n } else {\n // Neither select nor relations (should not happen in practice)\n selectQuery = {};\n includeQuery = {};\n }\n\n return {\n query: (hasSelect\n ? { select: selectQuery }\n : { include: includeQuery }) as TQuery extends { select: infer S }\n ? {\n select: S & {\n [K in keyof TRelations[TModel] & keyof TQuery]: TQuery[K] extends {\n select: infer S;\n }\n ? { select: S }\n : TQuery[K] extends { include: infer I }\n ? { include: I }\n : TQuery[K] extends true\n ? true\n : never;\n };\n }\n : {\n include: {\n [K in keyof TRelations[TModel] & keyof TQuery]: TQuery[K] extends {\n select: infer S;\n }\n ? { select: S }\n : TQuery[K] extends { include: infer I }\n ? { include: I }\n : TQuery[K] extends true\n ? true\n : never;\n };\n },\n parse: createParser(false) as (data: unknown) => ResultType,\n safeParse: ((data: unknown) => {\n try {\n return { success: true, data: createParser(false)(data) };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }) as (data: unknown) => SafeParseResult<ResultType>,\n array: () => ({\n parse: createParser(true) as (data: unknown[]) => ResultType[],\n safeParse: ((data: unknown[]) => {\n try {\n return { success: true, data: createParser(true)(data) };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }) as (data: unknown[]) => SafeParseResult<ResultType[]>,\n }),\n };\n };\n },\n };\n}\n","import { generatorHandler } from '@prisma/generator-helper';\nimport type { GeneratorOptions } from '@prisma/generator-helper';\nimport { generate } from './generator';\n\nexport { createRegistry } from './queryEngine';\nexport type {\n ModelRegistry,\n ModelRelations,\n RelationConfig,\n QueryExecutor,\n SafeParseResult,\n} from './queryEngine';\n\n// Export error types\nexport {\n ZodipusError,\n ZodipusValidationError,\n ZodipusGeneratorError,\n} from './errors';\nexport type { ValidationErrorContext } from './errors';\n\n// Prisma Generator Handler\ngeneratorHandler({\n onManifest() {\n return {\n prettyName: 'Zodipus - Prisma Zod Schema Generator',\n defaultOutput: '../generated',\n };\n },\n\n async onGenerate(options: GeneratorOptions) {\n await generate(options);\n },\n});\n"]}
@@ -0,0 +1,3 @@
1
+ export { ModelRegistry, ModelRelations, QueryExecutor, RelationConfig, SafeParseResult, createRegistry } from './queryEngine.cjs';
2
+ export { ValidationErrorContext, ZodipusError, ZodipusGeneratorError, ZodipusValidationError } from './errors.cjs';
3
+ import 'zod';
@@ -0,0 +1,168 @@
1
+ 'use strict';
2
+
3
+ // src/errors.ts
4
+ var ZodipusError = class extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "ZodipusError";
8
+ if (Error.captureStackTrace) {
9
+ Error.captureStackTrace(this, this.constructor);
10
+ }
11
+ }
12
+ };
13
+ var ZodipusValidationError = class extends ZodipusError {
14
+ context;
15
+ constructor(message, context) {
16
+ const contextInfo = [
17
+ `Model: ${context.model}`,
18
+ context.field ? `Field: ${context.field}` : null,
19
+ context.expected ? `Expected: ${context.expected}` : null,
20
+ context.received ? `Received: ${context.received}` : null,
21
+ context.path?.length ? `Path: ${context.path.join(".")}` : null
22
+ ].filter(Boolean).join(", ");
23
+ super(`${message} (${contextInfo})`);
24
+ this.name = "ZodipusValidationError";
25
+ this.context = context;
26
+ }
27
+ };
28
+
29
+ // src/queryEngine.ts
30
+ function createRegistry(config) {
31
+ return {
32
+ createQuery: (model) => {
33
+ return (query) => {
34
+ const createParser = (isArray) => {
35
+ return (data) => {
36
+ const parseRelations = (item) => {
37
+ if (typeof item !== "object" || item === null) {
38
+ throw new ZodipusValidationError(`Invalid data for model "${String(model)}"`, {
39
+ model: String(model),
40
+ expected: "object",
41
+ received: item === null ? "null" : typeof item
42
+ });
43
+ }
44
+ let result;
45
+ if (hasSelect) {
46
+ result = item;
47
+ } else {
48
+ const modelSchema = config.models[model];
49
+ if (!modelSchema) {
50
+ throw new ZodipusValidationError("Model schema not found", {
51
+ model: String(model)
52
+ });
53
+ }
54
+ const parsed = modelSchema.parse(item);
55
+ result = parsed;
56
+ }
57
+ for (const [key, value] of Object.entries(query)) {
58
+ if (key === "select") continue;
59
+ if (typeof item === "object" && item !== null && key in item) {
60
+ const modelRelations = config.relations[model];
61
+ if (!modelRelations) continue;
62
+ const relationType = modelRelations[key]?.type;
63
+ if (!relationType) continue;
64
+ const relationHasSelectOrInclude = typeof value === "object" && value !== null && ("select" in value || "include" in value);
65
+ if (Array.isArray(item[key])) {
66
+ result[key] = item[key].map(
67
+ (rel) => {
68
+ if (relationHasSelectOrInclude) {
69
+ return rel;
70
+ }
71
+ const relationSchema = config.models[relationType];
72
+ if (!relationSchema) {
73
+ throw new ZodipusValidationError("Model schema not found for relation", {
74
+ model: relationType,
75
+ field: key,
76
+ path: [String(model), key]
77
+ });
78
+ }
79
+ return relationSchema.parse(rel);
80
+ }
81
+ );
82
+ } else {
83
+ const relData = item[key];
84
+ if (relData === null) {
85
+ result[key] = null;
86
+ } else if (relationHasSelectOrInclude) {
87
+ result[key] = relData;
88
+ } else {
89
+ const relationSchema = config.models[relationType];
90
+ if (!relationSchema) {
91
+ throw new ZodipusValidationError("Model schema not found for relation", {
92
+ model: relationType,
93
+ field: key,
94
+ path: [String(model), key]
95
+ });
96
+ }
97
+ result[key] = relationSchema.parse(relData);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ return result;
103
+ };
104
+ if (isArray) {
105
+ const arrayData = data;
106
+ return arrayData.map(parseRelations);
107
+ }
108
+ return parseRelations(data);
109
+ };
110
+ };
111
+ const relationEntries = Object.fromEntries(
112
+ Object.entries(query).filter(([key]) => key !== "select")
113
+ );
114
+ const hasSelect = "select" in query && query.select;
115
+ const hasRelations = Object.keys(relationEntries).length > 0;
116
+ let selectQuery;
117
+ let includeQuery;
118
+ if (hasSelect && hasRelations) {
119
+ selectQuery = {
120
+ ...query.select ?? {},
121
+ ...relationEntries
122
+ };
123
+ includeQuery = {};
124
+ } else if (hasSelect && !hasRelations) {
125
+ selectQuery = query.select ?? {};
126
+ includeQuery = {};
127
+ } else if (!hasSelect && hasRelations) {
128
+ selectQuery = {};
129
+ includeQuery = relationEntries;
130
+ } else {
131
+ selectQuery = {};
132
+ includeQuery = {};
133
+ }
134
+ return {
135
+ query: hasSelect ? { select: selectQuery } : { include: includeQuery },
136
+ parse: createParser(false),
137
+ safeParse: ((data) => {
138
+ try {
139
+ return { success: true, data: createParser(false)(data) };
140
+ } catch (error) {
141
+ return {
142
+ success: false,
143
+ error: error instanceof Error ? error : new Error(String(error))
144
+ };
145
+ }
146
+ }),
147
+ array: () => ({
148
+ parse: createParser(true),
149
+ safeParse: ((data) => {
150
+ try {
151
+ return { success: true, data: createParser(true)(data) };
152
+ } catch (error) {
153
+ return {
154
+ success: false,
155
+ error: error instanceof Error ? error : new Error(String(error))
156
+ };
157
+ }
158
+ })
159
+ })
160
+ };
161
+ };
162
+ }
163
+ };
164
+ }
165
+
166
+ exports.createRegistry = createRegistry;
167
+ //# sourceMappingURL=queryEngine.cjs.map
168
+ //# sourceMappingURL=queryEngine.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/queryEngine.ts"],"names":[],"mappings":"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","file":"queryEngine.cjs","sourcesContent":["/**\n * Custom error classes for Zodipus\n *\n * These errors provide better context for debugging validation\n * and generation issues.\n */\n\n/**\n * Base error class for all Zodipus errors\n */\nexport class ZodipusError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ZodipusError';\n // Maintains proper stack trace for where error was thrown (V8 engines)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Context for validation errors\n */\nexport interface ValidationErrorContext {\n /** The model being validated */\n model: string;\n /** The field that failed validation (if applicable) */\n field?: string;\n /** The expected type or value */\n expected?: string;\n /** The received type or value */\n received?: string;\n /** The path to the field in nested objects */\n path?: (string | number)[];\n}\n\n/**\n * Error thrown when data validation fails\n *\n * @example\n * ```typescript\n * throw new ZodipusValidationError('Invalid data type', {\n * model: 'User',\n * field: 'email',\n * expected: 'string',\n * received: 'number',\n * path: ['user', 'email'],\n * });\n * ```\n */\nexport class ZodipusValidationError extends ZodipusError {\n readonly context: ValidationErrorContext;\n\n constructor(message: string, context: ValidationErrorContext) {\n const contextInfo = [\n `Model: ${context.model}`,\n context.field ? `Field: ${context.field}` : null,\n context.expected ? `Expected: ${context.expected}` : null,\n context.received ? `Received: ${context.received}` : null,\n context.path?.length ? `Path: ${context.path.join('.')}` : null,\n ]\n .filter(Boolean)\n .join(', ');\n\n super(`${message} (${contextInfo})`);\n this.name = 'ZodipusValidationError';\n this.context = context;\n }\n}\n\n/**\n * Error thrown during schema generation\n */\nexport class ZodipusGeneratorError extends ZodipusError {\n readonly schemaPath?: string;\n readonly modelName?: string;\n\n constructor(message: string, options?: { schemaPath?: string; modelName?: string }) {\n const contextParts = [\n options?.schemaPath ? `Schema: ${options.schemaPath}` : null,\n options?.modelName ? `Model: ${options.modelName}` : null,\n ].filter(Boolean);\n\n const fullMessage = contextParts.length ? `${message} (${contextParts.join(', ')})` : message;\n\n super(fullMessage);\n this.name = 'ZodipusGeneratorError';\n this.schemaPath = options?.schemaPath;\n this.modelName = options?.modelName;\n }\n}\n","import type { ZodTypeAny, z } from 'zod';\nimport { ZodipusValidationError } from './errors';\n\ntype Simplify<T> = { [K in keyof T]: T[K] } & {};\ntype InferZodType<T extends ZodTypeAny> = z.infer<T>;\n\n/**\n * Result type for safeParse operations\n */\nexport type SafeParseResult<T> = { success: true; data: T } | { success: false; error: Error };\n\n/**\n * Generic model registry type - accepts any object with ZodTypeAny schemas\n * @example\n * const models = {\n * user: UserSchema,\n * post: PostSchema,\n * } as const;\n */\nexport type ModelRegistry = Record<string, ZodTypeAny>;\n\n/**\n * Configuration for a single relation\n */\nexport type RelationConfig<TModelName extends string = string> = {\n type: TModelName;\n isArray: boolean;\n relations?: Record<string, RelationConfig<TModelName>>;\n};\n\n/**\n * Generic model relations type\n * @example\n * const modelRelations = {\n * user: {\n * posts: { type: 'post' as const, isArray: true as const }\n * }\n * } as const;\n */\nexport type ModelRelations = Record<string, Record<string, RelationConfig>>;\n\n// Helper to get all possible keys (for error messages)\ntype ValidKeys<T> = keyof T;\n\n// Strict select type that only allows keys from T\ntype StrictSelect<T> = {\n [K in keyof T]?: K extends ValidKeys<T> ? boolean : never;\n};\n\ntype SelectQuery<T> = {\n select: StrictSelect<T>;\n};\n\ntype RelationQueryValue<TRelation extends RelationConfig> =\n | boolean\n | { select: Record<string, boolean> }\n | {\n include: TRelation['relations'] extends Record<string, RelationConfig>\n ? {\n [K in keyof TRelation['relations']]?: RelationQueryValue<TRelation['relations'][K]>;\n }\n : never;\n };\n\ntype QueryConfig<\n TModel extends ZodTypeAny,\n TRelations extends Record<string, RelationConfig>,\n> = Partial<SelectQuery<InferZodType<TModel>>> & {\n [K in keyof TRelations]?: RelationQueryValue<TRelations[K]>;\n};\n\nexport type QueryExecutor<\n TModel extends ZodTypeAny,\n TRelations extends Record<string, RelationConfig>,\n TQuery extends QueryConfig<TModel, TRelations>,\n TModels extends ModelRegistry = ModelRegistry,\n> = {\n query: TQuery extends { select: infer S }\n ? {\n select: S & {\n [K in keyof TRelations & keyof TQuery]: TQuery[K] extends {\n select: infer S;\n }\n ? { select: S }\n : TQuery[K] extends { include: infer I }\n ? { include: I }\n : TQuery[K] extends true\n ? true\n : never;\n };\n }\n : {\n include: {\n [K in keyof TRelations & keyof TQuery]: TQuery[K] extends {\n select: infer S;\n }\n ? { select: S }\n : TQuery[K] extends { include: infer I }\n ? { include: I }\n : TQuery[K] extends true\n ? true\n : never;\n };\n };\n parse: (data: unknown) => InferQueryResult<TModel, TRelations, TQuery, TModels>;\n safeParse: (\n data: unknown\n ) => SafeParseResult<InferQueryResult<TModel, TRelations, TQuery, TModels>>;\n array: () => {\n parse: (data: unknown[]) => InferQueryResult<TModel, TRelations, TQuery, TModels>[];\n safeParse: (\n data: unknown[]\n ) => SafeParseResult<InferQueryResult<TModel, TRelations, TQuery, TModels>[]>;\n };\n};\n\ntype InferQueryResult<\n TModel extends ZodTypeAny,\n TRelations extends Record<string, RelationConfig>,\n TQuery extends QueryConfig<TModel, TRelations>,\n TModels extends ModelRegistry = ModelRegistry,\n> = Simplify<\n (TQuery extends { select: infer Select }\n ? Pick<InferZodType<TModel>, keyof Select & keyof InferZodType<TModel>>\n : InferZodType<TModel>) & {\n [K in keyof TQuery & keyof TRelations]: TQuery[K] extends {\n select: Record<infer SelectKey, boolean>;\n }\n ? TRelations[K]['isArray'] extends true\n ? Pick<\n InferZodType<TModels[TRelations[K]['type']]>,\n SelectKey & keyof InferZodType<TModels[TRelations[K]['type']]>\n >[]\n : Pick<\n InferZodType<TModels[TRelations[K]['type']]>,\n SelectKey & keyof InferZodType<TModels[TRelations[K]['type']]>\n >\n : TQuery[K] extends { include: infer Include }\n ? TRelations[K] extends {\n relations: Record<string, RelationConfig>;\n }\n ? InferZodType<TModels[TRelations[K]['type']]> & {\n [NK in keyof Include & keyof TRelations[K]['relations']]: Include[NK] extends {\n select: Record<infer SelectKey, boolean>;\n }\n ? TRelations[K]['relations'][NK] extends RelationConfig\n ? TRelations[K]['relations'][NK]['isArray'] extends true\n ? Pick<\n InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>,\n SelectKey &\n keyof InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>\n >[]\n : Pick<\n InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>,\n SelectKey &\n keyof InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>\n >\n : never\n : Include[NK] extends true\n ? TRelations[K]['relations'][NK] extends RelationConfig\n ? TRelations[K]['relations'][NK]['isArray'] extends true\n ? InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>[]\n : InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>\n : never\n : never;\n }\n : InferZodType<TModels[TRelations[K]['type']]>\n : TQuery[K] extends true\n ? TRelations[K]['isArray'] extends true\n ? InferZodType<TModels[TRelations[K]['type']]>[]\n : InferZodType<TModels[TRelations[K]['type']]>\n : never;\n }\n>;\n\n/**\n * Create a type-safe query registry for your Prisma models\n *\n * @example\n * ```typescript\n * import { createRegistry } from 'zodipus/queryEngine';\n * import { models, modelRelations } from './generated/generated-index';\n *\n * const registry = createRegistry({\n * models,\n * relations: modelRelations,\n * });\n *\n * export const userQuery = registry.createQuery('user');\n * export const postQuery = registry.createQuery('post');\n * ```\n */\nexport function createRegistry<\n TModels extends ModelRegistry,\n TRelations extends ModelRelations,\n>(config: {\n models: TModels;\n relations: TRelations;\n}) {\n // Build explicit relation types by directly mapping over the relations\n // This provides better autocomplete than conditional types\n type BuildRelationTypes<TRelations extends Record<string, RelationConfig>> = {\n [K in keyof TRelations]: TRelations[K]['type'] extends keyof TModels\n ?\n | boolean\n | {\n select: {\n [F in keyof InferZodType<TModels[TRelations[K]['type']]>]?: boolean;\n };\n }\n | {\n include: TRelations[K]['relations'] extends Record<string, RelationConfig>\n ? {\n [NK in keyof TRelations[K]['relations']]?: TRelations[K]['relations'][NK]['type'] extends keyof TModels\n ?\n | boolean\n | {\n select: {\n [F in keyof InferZodType<\n TModels[TRelations[K]['relations'][NK]['type']]\n >]?: boolean;\n };\n }\n : boolean | { select: Record<string, boolean> };\n }\n : never;\n }\n : boolean | { select: Record<string, boolean> };\n };\n\n type TypedQueryConfig<\n TModel extends ZodTypeAny,\n TRelations extends Record<string, RelationConfig>,\n > = Partial<SelectQuery<InferZodType<TModel>>> & Partial<BuildRelationTypes<TRelations>>;\n\n return {\n createQuery: <TModel extends keyof TModels & string>(model: TModel) => {\n type ResultType = InferQueryResult<\n TModels[TModel],\n TRelations[TModel],\n QueryConfig<TModels[TModel], TRelations[TModel]>,\n TModels\n >;\n\n return <TQuery extends TypedQueryConfig<TModels[TModel], TRelations[TModel]>>(\n query: TQuery\n ): QueryExecutor<\n TModels[TModel],\n TRelations[TModel],\n TQuery & QueryConfig<TModels[TModel], TRelations[TModel]>,\n TModels\n > => {\n const createParser = (isArray: boolean) => {\n return (data: unknown) => {\n const parseRelations = (item: unknown) => {\n // Basic validation: data must be an object\n if (typeof item !== 'object' || item === null) {\n throw new ZodipusValidationError(`Invalid data for model \"${String(model)}\"`, {\n model: String(model),\n expected: 'object',\n received: item === null ? 'null' : typeof item,\n });\n }\n\n // When using select, we don't validate against the full schema\n // We just validate the data as-is and handle relations\n let result: Record<string, unknown>;\n\n if (hasSelect) {\n // With select, just use the data as-is (Prisma already validated it)\n // We trust Prisma to return the correct shape based on our select query\n result = item as Record<string, unknown>;\n } else {\n // Without select, use the full Zod schema for validation\n const modelSchema = config.models[model];\n if (!modelSchema) {\n throw new ZodipusValidationError('Model schema not found', {\n model: String(model),\n });\n }\n const parsed = modelSchema.parse(item);\n result = parsed as Record<string, unknown>;\n }\n\n // Parse relations\n for (const [key, value] of Object.entries(query)) {\n if (key === 'select') continue;\n if (typeof item === 'object' && item !== null && key in item) {\n const modelRelations = config.relations[model];\n if (!modelRelations) continue;\n\n const relationType = modelRelations[key]?.type;\n if (!relationType) continue;\n\n // Check if this relation has a select clause\n const relationHasSelectOrInclude =\n typeof value === 'object' &&\n value !== null &&\n ('select' in value || 'include' in value);\n\n if (Array.isArray((item as Record<string, unknown>)[key])) {\n result[key] = ((item as Record<string, unknown>)[key] as unknown[]).map(\n (rel: unknown) => {\n // If relation has select, just return the data as-is\n // Otherwise use full Zod schema validation\n if (relationHasSelectOrInclude) {\n return rel;\n }\n const relationSchema = config.models[relationType];\n if (!relationSchema) {\n throw new ZodipusValidationError('Model schema not found for relation', {\n model: relationType,\n field: key,\n path: [String(model), key],\n });\n }\n return relationSchema.parse(rel);\n }\n );\n } else {\n const relData = (item as Record<string, unknown>)[key];\n // Handle null relations (optional relations)\n if (relData === null) {\n result[key] = null;\n } else if (relationHasSelectOrInclude) {\n // If relation has select/include, just return the data as-is\n result[key] = relData;\n } else {\n // Otherwise use full Zod schema validation\n const relationSchema = config.models[relationType];\n if (!relationSchema) {\n throw new ZodipusValidationError('Model schema not found for relation', {\n model: relationType,\n field: key,\n path: [String(model), key],\n });\n }\n result[key] = relationSchema.parse(relData);\n }\n }\n }\n }\n\n return result;\n };\n\n if (isArray) {\n const arrayData = data as unknown[];\n return arrayData.map(parseRelations);\n }\n\n return parseRelations(data) as unknown as ResultType;\n };\n };\n // Build the query object for Prisma\n const relationEntries = Object.fromEntries(\n Object.entries(query).filter(([key]) => key !== 'select')\n );\n\n const hasSelect = 'select' in query && query.select;\n const hasRelations = Object.keys(relationEntries).length > 0;\n\n // If we have a select query with relations, we need to merge them into the select\n let selectQuery: Record<string, unknown>;\n let includeQuery: Record<string, unknown>;\n\n if (hasSelect && hasRelations) {\n // Merge: select fields + relations go into select\n selectQuery = {\n ...(query.select ?? {}),\n ...relationEntries,\n };\n includeQuery = {};\n } else if (hasSelect && !hasRelations) {\n // Only select, no relations\n selectQuery = query.select ?? {};\n includeQuery = {};\n } else if (!hasSelect && hasRelations) {\n // Only relations, use include\n selectQuery = {};\n includeQuery = relationEntries;\n } else {\n // Neither select nor relations (should not happen in practice)\n selectQuery = {};\n includeQuery = {};\n }\n\n return {\n query: (hasSelect\n ? { select: selectQuery }\n : { include: includeQuery }) as TQuery extends { select: infer S }\n ? {\n select: S & {\n [K in keyof TRelations[TModel] & keyof TQuery]: TQuery[K] extends {\n select: infer S;\n }\n ? { select: S }\n : TQuery[K] extends { include: infer I }\n ? { include: I }\n : TQuery[K] extends true\n ? true\n : never;\n };\n }\n : {\n include: {\n [K in keyof TRelations[TModel] & keyof TQuery]: TQuery[K] extends {\n select: infer S;\n }\n ? { select: S }\n : TQuery[K] extends { include: infer I }\n ? { include: I }\n : TQuery[K] extends true\n ? true\n : never;\n };\n },\n parse: createParser(false) as (data: unknown) => ResultType,\n safeParse: ((data: unknown) => {\n try {\n return { success: true, data: createParser(false)(data) };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }) as (data: unknown) => SafeParseResult<ResultType>,\n array: () => ({\n parse: createParser(true) as (data: unknown[]) => ResultType[],\n safeParse: ((data: unknown[]) => {\n try {\n return { success: true, data: createParser(true)(data) };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }) as (data: unknown[]) => SafeParseResult<ResultType[]>,\n }),\n };\n };\n },\n };\n}\n"]}
@@ -0,0 +1,145 @@
1
+ import { ZodTypeAny, z } from 'zod';
2
+
3
+ type Simplify<T> = {
4
+ [K in keyof T]: T[K];
5
+ } & {};
6
+ type InferZodType<T extends ZodTypeAny> = z.infer<T>;
7
+ /**
8
+ * Result type for safeParse operations
9
+ */
10
+ type SafeParseResult<T> = {
11
+ success: true;
12
+ data: T;
13
+ } | {
14
+ success: false;
15
+ error: Error;
16
+ };
17
+ /**
18
+ * Generic model registry type - accepts any object with ZodTypeAny schemas
19
+ * @example
20
+ * const models = {
21
+ * user: UserSchema,
22
+ * post: PostSchema,
23
+ * } as const;
24
+ */
25
+ type ModelRegistry = Record<string, ZodTypeAny>;
26
+ /**
27
+ * Configuration for a single relation
28
+ */
29
+ type RelationConfig<TModelName extends string = string> = {
30
+ type: TModelName;
31
+ isArray: boolean;
32
+ relations?: Record<string, RelationConfig<TModelName>>;
33
+ };
34
+ /**
35
+ * Generic model relations type
36
+ * @example
37
+ * const modelRelations = {
38
+ * user: {
39
+ * posts: { type: 'post' as const, isArray: true as const }
40
+ * }
41
+ * } as const;
42
+ */
43
+ type ModelRelations = Record<string, Record<string, RelationConfig>>;
44
+ type ValidKeys<T> = keyof T;
45
+ type StrictSelect<T> = {
46
+ [K in keyof T]?: K extends ValidKeys<T> ? boolean : never;
47
+ };
48
+ type SelectQuery<T> = {
49
+ select: StrictSelect<T>;
50
+ };
51
+ type RelationQueryValue<TRelation extends RelationConfig> = boolean | {
52
+ select: Record<string, boolean>;
53
+ } | {
54
+ include: TRelation['relations'] extends Record<string, RelationConfig> ? {
55
+ [K in keyof TRelation['relations']]?: RelationQueryValue<TRelation['relations'][K]>;
56
+ } : never;
57
+ };
58
+ type QueryConfig<TModel extends ZodTypeAny, TRelations extends Record<string, RelationConfig>> = Partial<SelectQuery<InferZodType<TModel>>> & {
59
+ [K in keyof TRelations]?: RelationQueryValue<TRelations[K]>;
60
+ };
61
+ type QueryExecutor<TModel extends ZodTypeAny, TRelations extends Record<string, RelationConfig>, TQuery extends QueryConfig<TModel, TRelations>, TModels extends ModelRegistry = ModelRegistry> = {
62
+ query: TQuery extends {
63
+ select: infer S;
64
+ } ? {
65
+ select: S & {
66
+ [K in keyof TRelations & keyof TQuery]: TQuery[K] extends {
67
+ select: infer S;
68
+ } ? {
69
+ select: S;
70
+ } : TQuery[K] extends {
71
+ include: infer I;
72
+ } ? {
73
+ include: I;
74
+ } : TQuery[K] extends true ? true : never;
75
+ };
76
+ } : {
77
+ include: {
78
+ [K in keyof TRelations & keyof TQuery]: TQuery[K] extends {
79
+ select: infer S;
80
+ } ? {
81
+ select: S;
82
+ } : TQuery[K] extends {
83
+ include: infer I;
84
+ } ? {
85
+ include: I;
86
+ } : TQuery[K] extends true ? true : never;
87
+ };
88
+ };
89
+ parse: (data: unknown) => InferQueryResult<TModel, TRelations, TQuery, TModels>;
90
+ safeParse: (data: unknown) => SafeParseResult<InferQueryResult<TModel, TRelations, TQuery, TModels>>;
91
+ array: () => {
92
+ parse: (data: unknown[]) => InferQueryResult<TModel, TRelations, TQuery, TModels>[];
93
+ safeParse: (data: unknown[]) => SafeParseResult<InferQueryResult<TModel, TRelations, TQuery, TModels>[]>;
94
+ };
95
+ };
96
+ type InferQueryResult<TModel extends ZodTypeAny, TRelations extends Record<string, RelationConfig>, TQuery extends QueryConfig<TModel, TRelations>, TModels extends ModelRegistry = ModelRegistry> = Simplify<(TQuery extends {
97
+ select: infer Select;
98
+ } ? Pick<InferZodType<TModel>, keyof Select & keyof InferZodType<TModel>> : InferZodType<TModel>) & {
99
+ [K in keyof TQuery & keyof TRelations]: TQuery[K] extends {
100
+ select: Record<infer SelectKey, boolean>;
101
+ } ? TRelations[K]['isArray'] extends true ? Pick<InferZodType<TModels[TRelations[K]['type']]>, SelectKey & keyof InferZodType<TModels[TRelations[K]['type']]>>[] : Pick<InferZodType<TModels[TRelations[K]['type']]>, SelectKey & keyof InferZodType<TModels[TRelations[K]['type']]>> : TQuery[K] extends {
102
+ include: infer Include;
103
+ } ? TRelations[K] extends {
104
+ relations: Record<string, RelationConfig>;
105
+ } ? InferZodType<TModels[TRelations[K]['type']]> & {
106
+ [NK in keyof Include & keyof TRelations[K]['relations']]: Include[NK] extends {
107
+ select: Record<infer SelectKey, boolean>;
108
+ } ? TRelations[K]['relations'][NK] extends RelationConfig ? TRelations[K]['relations'][NK]['isArray'] extends true ? Pick<InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>, SelectKey & keyof InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>>[] : Pick<InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>, SelectKey & keyof InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>> : never : Include[NK] extends true ? TRelations[K]['relations'][NK] extends RelationConfig ? TRelations[K]['relations'][NK]['isArray'] extends true ? InferZodType<TModels[TRelations[K]['relations'][NK]['type']]>[] : InferZodType<TModels[TRelations[K]['relations'][NK]['type']]> : never : never;
109
+ } : InferZodType<TModels[TRelations[K]['type']]> : TQuery[K] extends true ? TRelations[K]['isArray'] extends true ? InferZodType<TModels[TRelations[K]['type']]>[] : InferZodType<TModels[TRelations[K]['type']]> : never;
110
+ }>;
111
+ /**
112
+ * Create a type-safe query registry for your Prisma models
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * import { createRegistry } from 'zodipus/queryEngine';
117
+ * import { models, modelRelations } from './generated/generated-index';
118
+ *
119
+ * const registry = createRegistry({
120
+ * models,
121
+ * relations: modelRelations,
122
+ * });
123
+ *
124
+ * export const userQuery = registry.createQuery('user');
125
+ * export const postQuery = registry.createQuery('post');
126
+ * ```
127
+ */
128
+ declare function createRegistry<TModels extends ModelRegistry, TRelations extends ModelRelations>(config: {
129
+ models: TModels;
130
+ relations: TRelations;
131
+ }): {
132
+ createQuery: <TModel extends keyof TModels & string>(model: TModel) => <TQuery extends Partial<SelectQuery<InferZodType<TModels[TModel]>>> & Partial<TRelations[TModel] extends infer T extends Record<string, RelationConfig<string>> ? { [K in keyof T]: T[K]["type"] extends keyof TModels ? boolean | {
133
+ select: { [F in keyof InferZodType<TModels[T[K]["type"]]>]?: boolean | undefined; };
134
+ } | {
135
+ include: T[K]["relations"] extends Record<string, RelationConfig<string>> ? { [NK in keyof T[K]["relations"]]?: (T[K]["relations"][NK]["type"] extends keyof TModels ? boolean | {
136
+ select: { [F_1 in keyof InferZodType<TModels[T[K]["relations"][NK]["type"]]>]?: boolean | undefined; };
137
+ } : boolean | {
138
+ select: Record<string, boolean>;
139
+ }) | undefined; } : never;
140
+ } : boolean | {
141
+ select: Record<string, boolean>;
142
+ }; } : never>>(query: TQuery) => QueryExecutor<TModels[TModel], TRelations[TModel], TQuery & QueryConfig<TModels[TModel], TRelations[TModel]>, TModels>;
143
+ };
144
+
145
+ export { type ModelRegistry, type ModelRelations, type QueryExecutor, type RelationConfig, type SafeParseResult, createRegistry };
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "zodipus",
3
+ "version": "0.1.0",
4
+ "description": "Zodipus: solves your schema tragedies - A Prisma generator for clean Zod schemas with custom JSON field support",
5
+ "keywords": ["prisma", "generator", "zod", "validation", "schema", "typescript", "relations"],
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/bratsos/zodipus.git",
9
+ "directory": "packages/zodipus"
10
+ },
11
+ "license": "MIT",
12
+ "author": "Alex Bratsos",
13
+ "type": "module",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.cts",
17
+ "require": "./dist/index.cjs",
18
+ "default": "./dist/index.cjs"
19
+ },
20
+ "./queryEngine": {
21
+ "types": "./dist/queryEngine.d.cts",
22
+ "require": "./dist/queryEngine.cjs",
23
+ "default": "./dist/queryEngine.cjs"
24
+ },
25
+ "./errors": {
26
+ "types": "./dist/errors.d.cts",
27
+ "require": "./dist/errors.cjs",
28
+ "default": "./dist/errors.cjs"
29
+ }
30
+ },
31
+ "main": "./dist/index.cjs",
32
+ "types": "./dist/index.d.cts",
33
+ "bin": {
34
+ "zodipus": "./dist/cli.cjs"
35
+ },
36
+ "files": ["dist", "README.md", "LICENSE"],
37
+ "scripts": {
38
+ "build": "tsup",
39
+ "dev": "tsup --watch",
40
+ "clean": "rimraf dist .turbo node_modules",
41
+ "typecheck": "tsc --noEmit",
42
+ "lint": "biome check .",
43
+ "lint:fix": "biome check --write .",
44
+ "format": "biome format --write .",
45
+ "prepublishOnly": "pnpm run build && pnpm run typecheck && pnpm run test",
46
+ "test:setup": "pnpm db:start && sleep 2 && pnpm db:migrate",
47
+ "test": "dotenv -o -e .env.test -- vitest run",
48
+ "test:watch": "dotenv -o -e .env.test -- vitest",
49
+ "db:start": "docker compose up -d",
50
+ "db:stop": "docker compose down",
51
+ "db:reset": "docker compose down -v && docker compose up -d",
52
+ "db:migrate": "dotenv -o -e .env.test -- prisma migrate deploy",
53
+ "db:generate": "dotenv -o -e .env.test -- prisma generate"
54
+ },
55
+ "dependencies": {
56
+ "commander": "^14.0.2"
57
+ },
58
+ "devDependencies": {
59
+ "@biomejs/biome": "^1.9.4",
60
+ "@prisma/client": "^6.17.1",
61
+ "@prisma/generator-helper": "^6.17.1",
62
+ "@types/node": "^22.10.2",
63
+ "dotenv-cli": "^8.0.0",
64
+ "prisma": "^6.17.1",
65
+ "rimraf": "^5.0.5",
66
+ "tsup": "^8.3.5",
67
+ "typescript": "^5.7.2",
68
+ "vitest": "^3.2.4",
69
+ "zod": "^3.25.0"
70
+ },
71
+ "peerDependencies": {
72
+ "@prisma/generator-helper": "^6.0.0 || ^7.0.0",
73
+ "prisma": "^6.0.0 || ^7.0.0",
74
+ "zod": "^3.25.0 || ^4.0.0"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "zod": {
78
+ "optional": false
79
+ },
80
+ "prisma": {
81
+ "optional": true
82
+ }
83
+ },
84
+ "publishConfig": {
85
+ "access": "public"
86
+ },
87
+ "engines": {
88
+ "node": ">=18.0.0"
89
+ }
90
+ }