@stryke/prisma-trpc-generator
Version:
A fork of the prisma-trpc-generator code to work in ESM with Prisma v6.
1 lines • 45.8 kB
Source Map (JSON)
{"version":3,"file":"transformer.mjs","names":[],"sources":["../../src/zod/transformer.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type {\n ConnectorType,\n DMMF as PrismaDMMF\n} from \"@prisma/generator-helper\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport { upperCaseFirst } from \"@stryke/string-format/upper-case-first\";\nimport path from \"node:path\";\nimport type {\n AggregateOperationSupport,\n TransformerParams,\n Writeable\n} from \"../types\";\nimport { writeFileSafely, writeIndexFile } from \"../utils/write-file-safely\";\nimport { isAggregateInputType } from \"./aggregate-helpers\";\nimport { checkModelHasModelRelation, findModelByName } from \"./model-helpers\";\nimport { isMongodbRawOp } from \"./mongodb-helpers\";\n\nexport default class Transformer {\n name: string;\n\n fields: Writeable<PrismaDMMF.SchemaArg[]>;\n\n schemaImports = new Set<string>();\n\n models: Writeable<PrismaDMMF.Model[]>;\n\n modelOperations: Writeable<PrismaDMMF.ModelMapping[]>;\n\n aggregateOperationSupport: AggregateOperationSupport;\n\n enumTypes: Writeable<PrismaDMMF.SchemaEnum[]>;\n\n static enumNames: string[] = [];\n\n static rawOpsMap: { [name: string]: string } = {};\n\n static provider: ConnectorType;\n\n static previewFeatures: string[] | undefined;\n\n private static outputPath: string = \"./generated\";\n\n private hasJson = false;\n\n private static prismaClientOutputPath: string = \"@prisma/client\";\n\n private static isCustomPrismaClientOutputPath: boolean = false;\n\n private static isGenerateSelect: boolean = true;\n\n private static isGenerateInclude: boolean = true;\n\n constructor(params: Writeable<TransformerParams>) {\n this.name = params.name ?? \"\";\n this.fields = params.fields ?? [];\n this.models = params.models ?? [];\n this.modelOperations = params.modelOperations ?? [];\n this.aggregateOperationSupport = params.aggregateOperationSupport ?? {};\n this.enumTypes = params.enumTypes ?? [];\n }\n\n static setOutputPath(outPath: string) {\n this.outputPath = outPath;\n }\n\n static setIsGenerateSelect(isGenerateSelect: boolean) {\n this.isGenerateSelect = isGenerateSelect;\n }\n\n static setIsGenerateInclude(isGenerateInclude: boolean) {\n this.isGenerateInclude = isGenerateInclude;\n }\n\n static getOutputPath() {\n return this.outputPath;\n }\n\n static setPrismaClientOutputPath(prismaClientCustomPath: string) {\n this.prismaClientOutputPath = prismaClientCustomPath;\n this.isCustomPrismaClientOutputPath =\n prismaClientCustomPath !== \"@prisma/client\";\n }\n\n static async generateIndex() {\n const indexPath = path.join(Transformer.outputPath, \"schemas/index.ts\");\n await writeIndexFile(indexPath);\n }\n\n async generateEnumSchemas() {\n for (const enumType of this.enumTypes) {\n const { name, values } = enumType;\n\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/enums/${lowerCaseFirst(name)}.schema.ts`\n ),\n `${this.generateImportZodStatement()}\\n${this.generateExportSchemaStatement(\n `${lowerCaseFirst(name)}`,\n `z.enum(${JSON.stringify(values)})`\n )}`\n );\n }\n }\n\n generateImportZodStatement() {\n return \"import { z } from 'zod';\\n\";\n }\n\n generateExportSchemaStatement(name: string, schema: string) {\n return `export const ${lowerCaseFirst(name)}Schema = ${schema}`;\n }\n\n async generateObjectSchema() {\n const zodObjectSchemaFields = this.generateObjectSchemaFields();\n const objectSchema = this.prepareObjectSchema(zodObjectSchemaFields);\n const objectSchemaName = this.resolveObjectSchemaName();\n\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/objects/${lowerCaseFirst(objectSchemaName)}.schema.ts`\n ),\n objectSchema\n );\n }\n\n generateObjectSchemaFields() {\n const zodObjectSchemaFields = this.fields\n .map(field => this.generateObjectSchemaField(field))\n .flatMap(item => item)\n .map(item => {\n const [zodStringWithMainType, field, skipValidators] = item;\n\n const value = skipValidators\n ? zodStringWithMainType\n : this.generateFieldValidators(zodStringWithMainType, field);\n\n return value.trim();\n });\n\n return zodObjectSchemaFields;\n }\n\n generateObjectSchemaField(\n field: PrismaDMMF.SchemaArg\n ): [string, PrismaDMMF.SchemaArg, boolean][] {\n const lines = field.inputTypes;\n\n if (lines.length === 0) {\n return [];\n }\n\n let alternatives = lines.reduce<string[]>((result, inputType) => {\n if (inputType.type === \"String\") {\n result.push(this.wrapWithZodValidators(\"z.string()\", field));\n } else if (\n inputType.type === \"Int\" ||\n inputType.type === \"Float\" ||\n inputType.type === \"Decimal\"\n ) {\n result.push(this.wrapWithZodValidators(\"z.number()\", field));\n } else if (inputType.type === \"BigInt\") {\n result.push(this.wrapWithZodValidators(\"z.bigint()\", field));\n } else if (inputType.type === \"Boolean\") {\n result.push(this.wrapWithZodValidators(\"z.boolean()\", field));\n } else if (inputType.type === \"DateTime\") {\n result.push(this.wrapWithZodValidators(\"z.coerce.date()\", field));\n } else if (inputType.type === \"Json\") {\n this.hasJson = true;\n\n result.push(this.wrapWithZodValidators(\"jsonSchema\", field));\n } else if (inputType.type === \"True\") {\n result.push(this.wrapWithZodValidators(\"z.literal(true)\", field));\n } else if (inputType.type === \"Bytes\") {\n result.push(this.wrapWithZodValidators(\"z.instanceof(Buffer)\", field));\n } else if (!inputType.type.endsWith(\"FieldRefInput\")) {\n const isEnum = inputType.location === \"enumTypes\";\n\n if (inputType.namespace === \"prisma\" || isEnum) {\n if (\n inputType.type !== this.name &&\n typeof inputType.type === \"string\"\n ) {\n this.addSchemaImport(inputType.type);\n }\n\n result.push(\n this.generatePrismaStringLine(field, inputType, lines.length)\n );\n }\n }\n\n return result;\n }, []);\n\n if (alternatives.length === 0) {\n return [];\n }\n\n if (alternatives.length > 1) {\n alternatives = alternatives.map(alter =>\n alter.replace(\".optional()\", \"\")\n );\n }\n\n const fieldName = alternatives.some(alt => alt.includes(\":\"))\n ? \"\"\n : ` ${field.name}:`;\n\n const opt = !field.isRequired ? \".optional()\" : \"\";\n\n let resString =\n alternatives.length === 1\n ? alternatives.join(\",\\r\\n\")\n : `z.union([${alternatives.join(\",\\r\\n\")}])${opt}`;\n\n if (field.isNullable) {\n resString += \".nullable()\";\n }\n\n return [[` ${fieldName} ${resString} `, field, true]];\n }\n\n wrapWithZodValidators(mainValidator: string, field: PrismaDMMF.SchemaArg) {\n let line: string = \"\";\n line = mainValidator;\n\n if (field.inputTypes.some(inputType => inputType.isList)) {\n line += \".array()\";\n }\n\n if (!field.isRequired) {\n line += \".optional()\";\n }\n\n return line;\n }\n\n addSchemaImport(name: string) {\n this.schemaImports.add(name);\n }\n\n generatePrismaStringLine(\n field: PrismaDMMF.SchemaArg,\n inputType: PrismaDMMF.InputTypeRef,\n inputsLength: number\n ) {\n // if (field.inputTypes.length === 0 || !field.inputTypes[0]) {\n // return \"\";\n // }\n\n // const inputType = field.inputTypes[0];\n\n const isEnum = inputType.location === \"enumTypes\";\n\n const inputTypeString = inputType.type;\n const { isModelQueryType, modelName, queryName } =\n this.checkIsModelQueryType(inputTypeString);\n\n const objectSchemaLine = isModelQueryType\n ? this.resolveModelQuerySchemaName(modelName!, queryName!)\n : `${inputTypeString}ObjectSchema`;\n const enumSchemaLine = `${inputTypeString}Schema`;\n\n const schema =\n inputType.type === this.name\n ? objectSchemaLine\n : isEnum\n ? enumSchemaLine\n : objectSchemaLine;\n const arr = inputType.isList ? \".array()\" : \"\";\n const opt = !field.isRequired ? \".optional()\" : \"\";\n\n return inputsLength === 1\n ? ` ${field.name}: z.lazy(() => ${lowerCaseFirst(schema)})${arr}${opt}`\n : `z.lazy(() => ${lowerCaseFirst(schema)})${arr}${opt}`;\n }\n\n generateFieldValidators(\n zodStringWithMainType: string,\n field: PrismaDMMF.SchemaArg\n ) {\n const { isRequired, isNullable } = field;\n\n if (!isRequired) {\n zodStringWithMainType += \".optional()\";\n }\n\n if (isNullable) {\n zodStringWithMainType += \".nullable()\";\n }\n\n return zodStringWithMainType;\n }\n\n prepareObjectSchema(zodObjectSchemaFields: string[]) {\n const objectSchema = `${this.generateExportObjectSchemaStatement(\n this.addFinalWrappers({ zodStringFields: zodObjectSchemaFields })\n )}\\n`;\n\n const prismaImportStatement = this.generateImportPrismaStatement();\n\n const json = this.generateJsonSchemaImplementation();\n\n return `${this.generateObjectSchemaImportStatements()}${prismaImportStatement}${json}${objectSchema}`;\n }\n\n generateExportObjectSchemaStatement(schema: string) {\n let name = this.name;\n let exportName = this.name;\n if (Transformer.provider === \"mongodb\") {\n if (isMongodbRawOp(name)) {\n name = Transformer.rawOpsMap[name]!;\n exportName = name.replace(\"Args\", \"\");\n }\n }\n\n if (isAggregateInputType(name)) {\n name = `${name}Type`;\n }\n const end = `export const ${lowerCaseFirst(exportName)}ObjectSchema = schema`;\n\n return `const schema: z.ZodType<Prisma.${name}> = ${schema};\\n\\n ${end}`;\n }\n\n addFinalWrappers({ zodStringFields }: { zodStringFields: string[] }) {\n const fields = [...zodStringFields];\n\n return `${this.wrapWithZodObject(fields)}.strict()`;\n }\n\n generateImportPrismaStatement() {\n let prismaClientImportPath: string;\n if (Transformer.isCustomPrismaClientOutputPath) {\n /**\n * If a custom location was designated for the prisma client, we need to figure out the\n * relative path from \\{outputPath\\}/schemas/objects to \\{prismaClientCustomPath\\}\n */\n const fromPath = path.join(Transformer.outputPath, \"schemas\", \"objects\");\n const toPath = Transformer.prismaClientOutputPath;\n const relativePathFromOutputToPrismaClient = path\n .relative(fromPath, toPath)\n .split(path.sep)\n .join(path.posix.sep);\n prismaClientImportPath = relativePathFromOutputToPrismaClient;\n } else {\n /**\n * If the default output path for prisma client (\\@prisma/client) is being used, we can import from it directly\n * without having to resolve a relative path\n */\n prismaClientImportPath = Transformer.prismaClientOutputPath;\n }\n return `import type { Prisma } from '${prismaClientImportPath}';\\n\\n`;\n }\n\n generateJsonSchemaImplementation() {\n let jsonSchemaImplementation = \"\";\n\n if (this.hasJson) {\n jsonSchemaImplementation += `\\n`;\n jsonSchemaImplementation += `const literalSchema = z.union([z.string(), z.number(), z.boolean()]);\\n`;\n jsonSchemaImplementation += `const jsonSchema: z.ZodType<Prisma.InputJsonValue> = z.lazy(() =>\\n`;\n jsonSchemaImplementation += ` z.union([literalSchema, z.array(jsonSchema.nullable()), z.record(jsonSchema.nullable())])\\n`;\n jsonSchemaImplementation += `);\\n\\n`;\n }\n\n return jsonSchemaImplementation;\n }\n\n generateObjectSchemaImportStatements() {\n let generatedImports = this.generateImportZodStatement();\n generatedImports += this.generateSchemaImports();\n generatedImports += \"\\n\\n\";\n return generatedImports;\n }\n\n generateSchemaImports() {\n return [...this.schemaImports]\n .map(name => {\n const { isModelQueryType, modelName, queryName } =\n this.checkIsModelQueryType(name);\n if (isModelQueryType) {\n return `import { ${this.resolveModelQuerySchemaName(\n modelName!,\n queryName!\n )} } from '../${queryName}${modelName}.schema'`;\n } else if (Transformer.enumNames.includes(name)) {\n return `import { ${lowerCaseFirst(name)}Schema } from '../enums/${lowerCaseFirst(name)}.schema'`;\n } else {\n return `import { ${lowerCaseFirst(name)}ObjectSchema } from './${lowerCaseFirst(name)}.schema'`;\n }\n })\n .join(\";\\r\\n\");\n }\n\n checkIsModelQueryType(type: string) {\n const modelQueryTypeSuffixToQueryName: Record<string, string> = {\n FindManyArgs: \"findMany\"\n };\n for (const modelQueryType of [\"FindManyArgs\"]) {\n if (type.includes(modelQueryType)) {\n const modelQueryTypeSuffixIndex = type.indexOf(modelQueryType);\n\n return {\n isModelQueryType: true,\n modelName: type.substring(0, modelQueryTypeSuffixIndex),\n queryName: modelQueryTypeSuffixToQueryName[modelQueryType]\n };\n }\n }\n return { isModelQueryType: false };\n }\n\n resolveModelQuerySchemaName(modelName: string, queryName: string) {\n const modelNameUncapitalized = lowerCaseFirst(modelName);\n const queryNameCapitalized = upperCaseFirst(queryName);\n\n return `${modelNameUncapitalized}${queryNameCapitalized}Schema`;\n }\n\n wrapWithZodUnion(zodStringFields: string[]) {\n let wrapped = \"\";\n\n wrapped += \"z.union([\";\n wrapped += \"\\n\";\n wrapped += ` ${zodStringFields.join(\",\")}`;\n wrapped += \"\\n\";\n wrapped += \"])\";\n return wrapped;\n }\n\n wrapWithZodObject(zodStringFields: string | string[]) {\n let wrapped = \"\";\n\n wrapped += \"z.object({\";\n wrapped += \"\\n\";\n wrapped += ` ${typeof zodStringFields === \"string\" ? zodStringFields : zodStringFields.join(\",\\n \")}`;\n wrapped += \"\\n\";\n wrapped += \"})\";\n return wrapped;\n }\n\n resolveObjectSchemaName() {\n let name = this.name;\n let exportName = this.name;\n if (isMongodbRawOp(name)) {\n name = Transformer.rawOpsMap[name]!;\n exportName = name.replace(\"Args\", \"\");\n }\n\n return lowerCaseFirst(exportName);\n }\n\n async generateModelSchemas() {\n for (const modelOperation of this.modelOperations) {\n const {\n findUnique,\n findFirst,\n findMany,\n // @ts-ignore\n createOne,\n createMany,\n createManyAndReturn,\n // @ts-ignore\n deleteOne,\n // @ts-ignore\n updateOne,\n deleteMany,\n updateMany,\n updateManyAndReturn,\n // @ts-ignore\n upsertOne,\n aggregate,\n groupBy\n } = modelOperation;\n\n const model = findModelByName(this.models, modelOperation.model)!;\n const modelName = lowerCaseFirst(modelOperation.model);\n\n const {\n selectImport,\n includeImport,\n selectZodSchemaLine,\n includeZodSchemaLine,\n selectZodSchemaLineLazy,\n includeZodSchemaLineLazy\n } = this.resolveSelectIncludeImportAndZodSchemaLine(model);\n\n const { orderByImport, orderByZodSchemaLine } =\n this.resolveOrderByWithRelationImportAndZodSchemaLine(model);\n\n if (findUnique) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findUnique}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindUnique`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (findFirst) {\n const imports = [\n selectImport,\n includeImport,\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findFirst}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindFirst`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), distinct: z.array(${modelName}ScalarFieldEnumSchema).optional() })`\n )}`\n );\n }\n\n if (findMany) {\n const imports = [\n selectImport,\n includeImport,\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindMany`,\n `z.object({ ${selectZodSchemaLineLazy} ${includeZodSchemaLineLazy} ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), distinct: z.array(${modelName}ScalarFieldEnumSchema).optional() })`\n )}`\n );\n }\n\n if (createOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}CreateInputObjectSchema } from './objects/${modelName}CreateInput.schema'`,\n `import { ${modelName}UncheckedCreateInputObjectSchema } from './objects/${modelName}UncheckedCreateInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${createOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} data: z.union([${modelName}CreateInputObjectSchema, ${modelName}UncheckedCreateInputObjectSchema]) })`\n )}`\n );\n }\n\n if (createMany) {\n const imports = [\n `import { ${modelName}CreateManyInputObjectSchema } from './objects/${modelName}CreateManyInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${createMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateMany`,\n `z.object({ data: z.union([ ${modelName}CreateManyInputObjectSchema, z.array(${modelName}CreateManyInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (createManyAndReturn) {\n const imports = [\n `import { ${modelName}CreateManyAndReturnInputObjectSchema } from './objects/${modelName}CreateManyAndReturnInput.schema'`\n ];\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/${createManyAndReturn}.schema.ts`\n ),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateManyAndReturn`,\n `z.object({ data: z.union([ ${modelName}CreateManyAndReturnInputObjectSchema, z.array(${modelName}CreateManyAndReturnInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (deleteOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${deleteOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}DeleteOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (deleteMany) {\n const imports = [\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${deleteMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}DeleteMany`,\n `z.object({ where: ${modelName}WhereInputObjectSchema.optional() })`\n )}`\n );\n }\n\n if (updateOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}UpdateInputObjectSchema } from './objects/${modelName}UpdateInput.schema'`,\n `import { ${modelName}UncheckedUpdateInputObjectSchema } from './objects/${modelName}UncheckedUpdateInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${updateOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} data: z.union([${modelName}UpdateInputObjectSchema, ${modelName}UncheckedUpdateInputObjectSchema]), where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (updateMany) {\n const imports = [\n `import { ${modelName}UpdateManyMutationInputObjectSchema } from './objects/${modelName}UpdateManyMutationInput.schema'`,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${updateMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateMany`,\n `z.object({ data: ${modelName}UpdateManyMutationInputObjectSchema, where: ${modelName}WhereInputObjectSchema.optional() })`\n )}`\n );\n }\n\n if (updateManyAndReturn) {\n const imports = [\n `import { ${modelName}UpdateManyAndReturnInputObjectSchema } from './objects/${modelName}UpdateManyAndReturnInput.schema'`\n ];\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/${updateManyAndReturn}.schema.ts`\n ),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateManyAndReturn`,\n `z.object({ data: z.union([ ${modelName}UpdateManyAndReturnInputObjectSchema, z.array(${modelName}UpdateManyAndReturnInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (upsertOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}CreateInputObjectSchema } from './objects/${modelName}CreateInput.schema'`,\n `import { ${modelName}UncheckedCreateInputObjectSchema } from './objects/${modelName}UncheckedCreateInput.schema'`,\n `import { ${modelName}UpdateInputObjectSchema } from './objects/${modelName}UpdateInput.schema'`,\n `import { ${modelName}UncheckedUpdateInputObjectSchema } from './objects/${modelName}UncheckedUpdateInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${upsertOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}Upsert`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema, create: z.union([ ${modelName}CreateInputObjectSchema, ${modelName}UncheckedCreateInputObjectSchema ]), update: z.union([ ${modelName}UpdateInputObjectSchema, ${modelName}UncheckedUpdateInputObjectSchema ]) })`\n )}`\n );\n }\n\n if (aggregate) {\n const imports = [\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n const aggregateOperations = [];\n if (this.aggregateOperationSupport[modelName]) {\n if (this.aggregateOperationSupport[modelName].count) {\n imports.push(\n `import { ${modelName}CountAggregateInputObjectSchema } from './objects/${modelName}CountAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_count: z.union([ z.literal(true), ${modelName}CountAggregateInputObjectSchema ]).optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].min) {\n imports.push(\n `import { ${modelName}MinAggregateInputObjectSchema } from './objects/${modelName}MinAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_min: ${modelName}MinAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].max) {\n imports.push(\n `import { ${modelName}MaxAggregateInputObjectSchema } from './objects/${modelName}MaxAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_max: ${modelName}MaxAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].avg) {\n imports.push(\n `import { ${modelName}AvgAggregateInputObjectSchema } from './objects/${modelName}AvgAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_avg: ${modelName}AvgAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].sum) {\n imports.push(\n `import { ${modelName}SumAggregateInputObjectSchema } from './objects/${modelName}SumAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_sum: ${modelName}SumAggregateInputObjectSchema.optional()`\n );\n }\n }\n\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${aggregate}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}Aggregate`,\n `z.object({ ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), ${aggregateOperations.join(\n \", \"\n )} })`\n )}`\n );\n }\n\n if (groupBy) {\n const imports = [\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}OrderByWithAggregationInputObjectSchema } from './objects/${modelName}OrderByWithAggregationInput.schema'`,\n `import { ${modelName}ScalarWhereWithAggregatesInputObjectSchema } from './objects/${modelName}ScalarWhereWithAggregatesInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${groupBy}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}GroupBy`,\n `z.object({ where: ${modelName}WhereInputObjectSchema.optional(), orderBy: z.union([${modelName}OrderByWithAggregationInputObjectSchema, ${modelName}OrderByWithAggregationInputObjectSchema.array()]).optional(), having: ${modelName}ScalarWhereWithAggregatesInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), by: z.array(${modelName}ScalarFieldEnumSchema) })`\n )}`\n );\n }\n }\n }\n\n generateImportStatements(imports: (string | undefined)[]) {\n let generatedImports = this.generateImportZodStatement();\n generatedImports +=\n imports?.filter(importItem => !!importItem).join(\";\\r\\n\") ?? \"\";\n generatedImports += \"\\n\\n\";\n return generatedImports;\n }\n\n resolveSelectIncludeImportAndZodSchemaLine(model: PrismaDMMF.Model) {\n const { name: modelName } = model;\n\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n\n const selectImport = Transformer.isGenerateSelect\n ? `import { ${lowerCaseFirst(modelName)}SelectObjectSchema } from './objects/${lowerCaseFirst(modelName)}Select.schema'`\n : \"\";\n\n const includeImport =\n Transformer.isGenerateInclude && hasRelationToAnotherModel\n ? `import { ${lowerCaseFirst(modelName)}IncludeObjectSchema } from './objects/${lowerCaseFirst(modelName)}Include.schema'`\n : \"\";\n\n let selectZodSchemaLine = \"\";\n let includeZodSchemaLine = \"\";\n let selectZodSchemaLineLazy = \"\";\n let includeZodSchemaLineLazy = \"\";\n\n if (Transformer.isGenerateSelect) {\n const zodSelectObjectSchema = `${lowerCaseFirst(modelName)}SelectObjectSchema.optional()`;\n selectZodSchemaLine = `select: ${zodSelectObjectSchema},`;\n selectZodSchemaLineLazy = `select: z.lazy(() => ${zodSelectObjectSchema}),`;\n }\n\n if (Transformer.isGenerateInclude && hasRelationToAnotherModel) {\n const zodIncludeObjectSchema = `${lowerCaseFirst(modelName)}IncludeObjectSchema.optional()`;\n includeZodSchemaLine = `include: ${zodIncludeObjectSchema},`;\n includeZodSchemaLineLazy = `include: z.lazy(() => ${zodIncludeObjectSchema}),`;\n }\n\n return {\n selectImport,\n includeImport,\n selectZodSchemaLine,\n includeZodSchemaLine,\n selectZodSchemaLineLazy,\n includeZodSchemaLineLazy\n };\n }\n\n resolveOrderByWithRelationImportAndZodSchemaLine(model: PrismaDMMF.Model) {\n const { name: modelName } = model;\n let modelOrderBy = \"\";\n\n if (\n [\"postgresql\", \"mysql\"].includes(Transformer.provider) &&\n Transformer.previewFeatures?.includes(\"fullTextSearch\")\n ) {\n modelOrderBy = `${lowerCaseFirst(modelName)}OrderByWithRelationAndSearchRelevanceInput`;\n } else {\n modelOrderBy = `${lowerCaseFirst(modelName)}OrderByWithRelationInput`;\n }\n\n const orderByImport = `import { ${modelOrderBy}ObjectSchema } from './objects/${modelOrderBy}.schema'`;\n const orderByZodSchemaLine = `orderBy: z.union([${modelOrderBy}ObjectSchema, ${modelOrderBy}ObjectSchema.array()]).optional(),`;\n\n return { orderByImport, orderByZodSchemaLine };\n }\n}\n"],"mappings":"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"}