{"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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"}