@stryke/prisma-trpc-generator 0.13.87 → 0.13.89

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.
Files changed (37) hide show
  1. package/dist/_virtual/{rolldown_runtime.cjs → _rolldown/runtime.cjs} +2 -2
  2. package/dist/_virtual/{rolldown_runtime.mjs → _rolldown/runtime.mjs} +2 -2
  3. package/dist/config.cjs +23 -23
  4. package/dist/config.mjs +21 -21
  5. package/dist/config.mjs.map +1 -1
  6. package/dist/helpers.cjs +10 -10
  7. package/dist/helpers.mjs.map +1 -1
  8. package/dist/packages/env/src/get-env-paths.cjs +28 -28
  9. package/dist/packages/string-format/src/acronyms.cjs +0 -1
  10. package/dist/packages/string-format/src/acronyms.mjs +0 -1
  11. package/dist/packages/string-format/src/acronyms.mjs.map +1 -1
  12. package/dist/prisma-generator.cjs +13 -13
  13. package/dist/prisma-generator.mjs +1 -1
  14. package/dist/prisma-generator.mjs.map +1 -1
  15. package/dist/project.cjs +1 -1
  16. package/dist/project.mjs.map +1 -1
  17. package/dist/utils/format-file.cjs +2 -2
  18. package/dist/utils/format-file.mjs.map +1 -1
  19. package/dist/utils/get-jiti.cjs +5 -5
  20. package/dist/utils/get-jiti.mjs.map +1 -1
  21. package/dist/utils/write-file-safely.cjs +9 -9
  22. package/dist/utils/write-file-safely.mjs +3 -3
  23. package/dist/utils/write-file-safely.mjs.map +1 -1
  24. package/dist/zod/aggregate-helpers.mjs.map +1 -1
  25. package/dist/zod/comments-helpers.mjs.map +1 -1
  26. package/dist/zod/docs-helpers.cjs +2 -2
  27. package/dist/zod/docs-helpers.mjs.map +1 -1
  28. package/dist/zod/generator-helpers.mjs.map +1 -1
  29. package/dist/zod/include-helpers.mjs.map +1 -1
  30. package/dist/zod/model-helpers.cjs +2 -2
  31. package/dist/zod/model-helpers.mjs.map +1 -1
  32. package/dist/zod/modelArgs-helpers.mjs.map +1 -1
  33. package/dist/zod/mongodb-helpers.mjs.map +1 -1
  34. package/dist/zod/select-helpers.mjs.map +1 -1
  35. package/dist/zod/transformer.cjs +2 -2
  36. package/dist/zod/transformer.mjs.map +1 -1
  37. package/package.json +139 -10
@@ -1 +1 @@
1
- {"version":3,"file":"include-helpers.mjs","names":["modelIncludeInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","field: DMMF.SchemaArg","inputTypes: SchemaArgInputTypes","_countField: DMMF.SchemaArg","modelIncludeInputObjectType: DMMF.InputType"],"sources":["../../src/zod/include-helpers.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 { DMMF } from \"@prisma/generator-helper\";\nimport type { SchemaArgInputTypes } from \"../types\";\nimport {\n checkIsModelRelationField,\n checkModelHasManyModelRelation,\n checkModelHasModelRelation\n} from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForInclude(\n inputObjectTypes: DMMF.InputType[],\n models: DMMF.Model[],\n isGenerateSelect: boolean\n) {\n // generate input object types necessary to support ModelInclude with relation support\n const generatedIncludeInputObjectTypes = generateModelIncludeInputObjectTypes(\n models,\n isGenerateSelect\n );\n\n for (const includeInputObjectType of generatedIncludeInputObjectTypes) {\n inputObjectTypes.push(includeInputObjectType);\n }\n}\n\nfunction generateModelIncludeInputObjectTypes(\n models: DMMF.Model[],\n isGenerateSelect: boolean\n) {\n const modelIncludeInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName, fields: modelFields } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n for (const modelField of modelFields) {\n const { name: modelFieldName, isList, type } = modelField;\n\n const isRelationField = checkIsModelRelationField(modelField);\n\n if (isRelationField) {\n const field: DMMF.SchemaArg = {\n name: modelFieldName,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" },\n {\n isList: false,\n type: isList ? `${type}FindManyArgs` : `${type}DefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(field);\n }\n }\n\n /**\n * include is not generated for models that do not have a relation with any other models continue onto the next model\n */\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n if (!hasRelationToAnotherModel) {\n continue;\n }\n\n const hasManyRelationToAnotherModel = checkModelHasManyModelRelation(model);\n\n const shouldAddCountField = hasManyRelationToAnotherModel;\n if (shouldAddCountField) {\n const inputTypes: SchemaArgInputTypes = [\n { isList: false, type: \"Boolean\", location: \"scalar\" }\n ];\n if (isGenerateSelect) {\n inputTypes.push({\n isList: false,\n type: `${modelName}CountOutputTypeDefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n });\n }\n const _countField: DMMF.SchemaArg = {\n name: \"_count\",\n isRequired: false,\n isNullable: false,\n inputTypes\n };\n fields.push(_countField);\n }\n\n const modelIncludeInputObjectType: DMMF.InputType = {\n name: `${modelName}Include`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelIncludeInputObjectTypes.push(modelIncludeInputObjectType);\n }\n return modelIncludeInputObjectTypes;\n}\n"],"mappings":";;;AA0BA,SAAgB,qCACd,kBACA,QACA,kBACA;CAEA,MAAM,mCAAmC,qCACvC,QACA,iBACD;AAED,MAAK,MAAM,0BAA0B,iCACnC,kBAAiB,KAAK,uBAAuB;;AAIjD,SAAS,qCACP,QACA,kBACA;CACA,MAAMA,+BAAiD,EAAE;AACzD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,WAAW,QAAQ,gBAAgB;EACjD,MAAMC,SAA2B,EAAE;AAEnC,OAAK,MAAM,cAAc,aAAa;GACpC,MAAM,EAAE,MAAM,gBAAgB,QAAQ,SAAS;AAI/C,OAFwB,0BAA0B,WAAW,EAExC;IACnB,MAAMC,QAAwB;KAC5B,MAAM;KACN,YAAY;KACZ,YAAY;KACZ,YAAY,CACV;MAAE,QAAQ;MAAO,MAAM;MAAW,UAAU;MAAU,EACtD;MACE,QAAQ;MACR,MAAM,SAAS,GAAG,KAAK,gBAAgB,GAAG,KAAK;MAC/C,UAAU;MACV,WAAW;MACZ,CACF;KACF;AACD,WAAO,KAAK,MAAM;;;AAQtB,MAAI,CAD8B,2BAA2B,MAAM,CAEjE;AAMF,MAHsC,+BAA+B,MAAM,EAGlD;GACvB,MAAMC,aAAkC,CACtC;IAAE,QAAQ;IAAO,MAAM;IAAW,UAAU;IAAU,CACvD;AACD,OAAI,iBACF,YAAW,KAAK;IACd,QAAQ;IACR,MAAM,GAAG,UAAU;IACnB,UAAU;IACV,WAAW;IACZ,CAAC;GAEJ,MAAMC,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ;IACD;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAMC,8BAA8C;GAClD,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,+BAA6B,KAAK,4BAA4B;;AAEhE,QAAO"}
1
+ {"version":3,"file":"include-helpers.mjs","names":[],"sources":["../../src/zod/include-helpers.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 { DMMF } from \"@prisma/generator-helper\";\nimport type { SchemaArgInputTypes } from \"../types\";\nimport {\n checkIsModelRelationField,\n checkModelHasManyModelRelation,\n checkModelHasModelRelation\n} from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForInclude(\n inputObjectTypes: DMMF.InputType[],\n models: DMMF.Model[],\n isGenerateSelect: boolean\n) {\n // generate input object types necessary to support ModelInclude with relation support\n const generatedIncludeInputObjectTypes = generateModelIncludeInputObjectTypes(\n models,\n isGenerateSelect\n );\n\n for (const includeInputObjectType of generatedIncludeInputObjectTypes) {\n inputObjectTypes.push(includeInputObjectType);\n }\n}\n\nfunction generateModelIncludeInputObjectTypes(\n models: DMMF.Model[],\n isGenerateSelect: boolean\n) {\n const modelIncludeInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName, fields: modelFields } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n for (const modelField of modelFields) {\n const { name: modelFieldName, isList, type } = modelField;\n\n const isRelationField = checkIsModelRelationField(modelField);\n\n if (isRelationField) {\n const field: DMMF.SchemaArg = {\n name: modelFieldName,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" },\n {\n isList: false,\n type: isList ? `${type}FindManyArgs` : `${type}DefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(field);\n }\n }\n\n /**\n * include is not generated for models that do not have a relation with any other models continue onto the next model\n */\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n if (!hasRelationToAnotherModel) {\n continue;\n }\n\n const hasManyRelationToAnotherModel = checkModelHasManyModelRelation(model);\n\n const shouldAddCountField = hasManyRelationToAnotherModel;\n if (shouldAddCountField) {\n const inputTypes: SchemaArgInputTypes = [\n { isList: false, type: \"Boolean\", location: \"scalar\" }\n ];\n if (isGenerateSelect) {\n inputTypes.push({\n isList: false,\n type: `${modelName}CountOutputTypeDefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n });\n }\n const _countField: DMMF.SchemaArg = {\n name: \"_count\",\n isRequired: false,\n isNullable: false,\n inputTypes\n };\n fields.push(_countField);\n }\n\n const modelIncludeInputObjectType: DMMF.InputType = {\n name: `${modelName}Include`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelIncludeInputObjectTypes.push(modelIncludeInputObjectType);\n }\n return modelIncludeInputObjectTypes;\n}\n"],"mappings":";;;AA0BA,SAAgB,qCACd,kBACA,QACA,kBACA;CAEA,MAAM,mCAAmC,qCACvC,QACA,iBACD;AAED,MAAK,MAAM,0BAA0B,iCACnC,kBAAiB,KAAK,uBAAuB;;AAIjD,SAAS,qCACP,QACA,kBACA;CACA,MAAM,+BAAiD,EAAE;AACzD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,WAAW,QAAQ,gBAAgB;EACjD,MAAM,SAA2B,EAAE;AAEnC,OAAK,MAAM,cAAc,aAAa;GACpC,MAAM,EAAE,MAAM,gBAAgB,QAAQ,SAAS;AAI/C,OAFwB,0BAA0B,WAE/B,EAAE;IACnB,MAAM,QAAwB;KAC5B,MAAM;KACN,YAAY;KACZ,YAAY;KACZ,YAAY,CACV;MAAE,QAAQ;MAAO,MAAM;MAAW,UAAU;MAAU,EACtD;MACE,QAAQ;MACR,MAAM,SAAS,GAAG,KAAK,gBAAgB,GAAG,KAAK;MAC/C,UAAU;MACV,WAAW;MACZ,CACF;KACF;AACD,WAAO,KAAK,MAAM;;;AAQtB,MAAI,CAD8B,2BAA2B,MAC/B,CAC5B;AAMF,MAHsC,+BAA+B,MAG9C,EAAE;GACvB,MAAM,aAAkC,CACtC;IAAE,QAAQ;IAAO,MAAM;IAAW,UAAU;IAAU,CACvD;AACD,OAAI,iBACF,YAAW,KAAK;IACd,QAAQ;IACR,MAAM,GAAG,UAAU;IACnB,UAAU;IACV,WAAW;IACZ,CAAC;GAEJ,MAAM,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ;IACD;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAM,8BAA8C;GAClD,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,+BAA6B,KAAK,4BAA4B;;AAEhE,QAAO"}
@@ -1,9 +1,9 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
2
  const require_lower_case_first = require('../packages/string-format/src/lower-case-first.cjs');
3
3
  const require_get_prisma_internals = require('../utils/get-prisma-internals.cjs');
4
4
  const require_docs_helpers = require('./docs-helpers.cjs');
5
5
  let node_path = require("node:path");
6
- node_path = require_rolldown_runtime.__toESM(node_path);
6
+ node_path = require_runtime.__toESM(node_path, 1);
7
7
  let ts_morph = require("ts-morph");
8
8
 
9
9
  //#region src/zod/model-helpers.ts
@@ -1 +1 @@
1
- {"version":3,"file":"model-helpers.mjs","names":["importList: ImportDeclarationStructure[]","extraModifiers: string[]"],"sources":["../../src/zod/model-helpers.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 DMMF,\n EnvValue,\n GeneratorOptions\n} from \"@prisma/generator-helper\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport path from \"node:path\";\nimport type {\n CodeBlockWriter,\n ImportDeclarationStructure,\n SourceFile\n} from \"ts-morph\";\nimport { StructureKind, VariableDeclarationKind } from \"ts-morph\";\nimport type { Config } from \"../config\";\nimport { getPrismaInternals } from \"../utils/get-prisma-internals\";\nimport { getJSDocs, getZodDocElements } from \"./docs-helpers\";\n\nexport function checkModelHasModelRelation(model: DMMF.Model) {\n const { fields: modelFields } = model;\n for (const modelField of modelFields) {\n const isRelationField = checkIsModelRelationField(modelField);\n if (isRelationField) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkModelHasManyModelRelation(model: DMMF.Model) {\n const { fields: modelFields } = model;\n for (const modelField of modelFields) {\n const isManyRelationField = checkIsManyModelRelationField(modelField);\n if (isManyRelationField) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkIsModelRelationField(modelField: DMMF.Field) {\n const { kind, relationName } = modelField;\n\n return kind === \"object\" && !!relationName;\n}\n\nexport function checkIsManyModelRelationField(modelField: DMMF.Field) {\n return checkIsModelRelationField(modelField) && modelField.isList;\n}\n\nexport function findModelByName(models: DMMF.Model[], modelName: string) {\n return models.find(({ name }) => name === modelName);\n}\n\nexport const writeArray = (\n writer: CodeBlockWriter,\n array: string[],\n newLine = true\n) => array.forEach(line => writer.write(line).conditionalNewLine(newLine));\n\nexport const useModelNames = ({\n modelCase,\n modelSuffix,\n relationModel\n}: Config) => {\n const formatModelName = (name: string, prefix = \"\") => {\n if (modelCase === \"camelCase\") {\n name = name.slice(0, 1).toLowerCase() + name.slice(1);\n }\n return `${prefix}${name}${modelSuffix}`;\n };\n\n return {\n modelName: (name: string) =>\n formatModelName(name, relationModel === \"default\" ? \"_\" : \"\"),\n relatedModelName: (\n name: string | DMMF.SchemaEnum | DMMF.OutputType | DMMF.SchemaArg\n ) =>\n formatModelName(\n relationModel === \"default\"\n ? name.toString()\n : `Related${name.toString()}`\n )\n };\n};\n\nexport const dotSlash = (input: string) => {\n const converted = input\n .replace(/^\\\\\\\\\\?\\\\/, \"\")\n .replace(/\\\\/g, \"/\")\n .replace(/\\/{2,}/g, \"/\");\n\n if (converted.includes(`/node_modules/`))\n return converted.split(`/node_modules/`).slice(-1)[0];\n\n if (converted.startsWith(`../`)) return converted;\n\n return `./${converted}`;\n};\n\nexport const chunk = <T extends any[]>(input: T, size: number): T[] => {\n return input.reduce((arr, item, idx) => {\n return idx % size === 0\n ? [...arr, [item]]\n : [...(arr as T).slice(0, -1), [...(arr as T).slice(-1)[0], item]];\n }, []);\n};\n\nexport const needsRelatedModel = (model: DMMF.Model, config: Config) =>\n model.fields.some(field => field.kind === \"object\") &&\n config.relationModel !== false;\n\nexport const writeImportsForModel = async (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions\n) => {\n const internals = await getPrismaInternals();\n\n const outputPath = internals.parseEnvValue(\n options.generator.output as EnvValue\n );\n\n const { relatedModelName } = useModelNames(config);\n const importList: ImportDeclarationStructure[] = [\n {\n kind: StructureKind.ImportDeclaration,\n namespaceImport: \"z\",\n moduleSpecifier: \"zod\"\n }\n ];\n\n if (config.imports) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n namespaceImport: \"imports\",\n moduleSpecifier: dotSlash(\n path.relative(\n outputPath,\n path.resolve(path.dirname(options.schemaPath), config.imports)\n )\n )!\n });\n }\n\n if (config.useDecimalJs && model.fields.some(f => f.type === \"Decimal\")) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n namedImports: [\"Decimal\"],\n moduleSpecifier: \"decimal.js\"\n });\n }\n\n const enumFields = model.fields.filter(f => f.kind === \"enum\");\n const relationFields = model.fields.filter(f => f.kind === \"object\");\n\n const clientPath = options.otherGenerators.find(\n each => each.provider.value === \"prisma-client-js\"\n )!.output!.value!;\n\n const relativePath = path.relative(outputPath, clientPath);\n\n if (enumFields.length > 0) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n isTypeOnly: enumFields.length === 0,\n moduleSpecifier: dotSlash(relativePath)!,\n namedImports: enumFields.map(f => f.type)\n });\n }\n\n if (config.relationModel !== false && relationFields.length > 0) {\n const filteredFields = relationFields.filter(f => f.type !== model.name);\n\n if (filteredFields.length > 0) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n moduleSpecifier: \"./index\",\n namedImports: Array.from(\n new Set(\n filteredFields.flatMap(f => [`${f.type}`, relatedModelName(f.type)])\n )\n )\n });\n }\n }\n\n sourceFile.addImportDeclarations(importList);\n};\n\nexport const computeCustomSchema = (docString: string) => {\n return getZodDocElements(docString)\n .find(modifier => modifier.startsWith(\"custom(\"))\n ?.slice(7)\n .slice(0, -1);\n};\n\nexport const computeModifiers = (docString: string) => {\n return getZodDocElements(docString).filter(\n each => !each.startsWith(\"custom(\")\n );\n};\n\nexport const getZodConstructor = (\n field: DMMF.Field,\n getRelatedModelName = (\n name: string | DMMF.SchemaEnum | DMMF.OutputType | DMMF.SchemaArg\n ) => name.toString()\n) => {\n let zodType = \"z.unknown()\";\n const extraModifiers: string[] = [\"\"];\n if (field.kind === \"scalar\") {\n switch (field.type) {\n case \"String\":\n zodType = \"z.string()\";\n break;\n case \"Int\":\n zodType = \"z.number()\";\n extraModifiers.push(\"int()\");\n break;\n case \"BigInt\":\n zodType = \"z.bigint()\";\n break;\n case \"DateTime\":\n zodType = \"z.date()\";\n break;\n case \"Float\":\n zodType = \"z.number()\";\n break;\n case \"Decimal\":\n zodType = \"z.number()\";\n break;\n case \"Json\":\n zodType = \"jsonSchema\";\n break;\n case \"Boolean\":\n zodType = \"z.boolean()\";\n break;\n // TODO: Proper type for bytes fields\n case \"Bytes\":\n zodType = \"z.unknown()\";\n break;\n }\n } else if (field.kind === \"enum\") {\n zodType = `z.nativeEnum(${field.type})`;\n } else if (field.kind === \"object\") {\n zodType = getRelatedModelName(field.type);\n }\n\n if (field.isList) extraModifiers.push(\"array()\");\n if (field.documentation) {\n zodType = computeCustomSchema(field.documentation) ?? zodType;\n extraModifiers.push(...computeModifiers(field.documentation));\n }\n if (!field.isRequired && field.type !== \"Json\")\n extraModifiers.push(\"nullish()\");\n // if (field.hasDefaultValue) extraModifiers.push('optional()')\n\n return `${zodType}${extraModifiers.join(\".\")}`;\n};\n\nexport const writeTypeSpecificSchemas = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n if (model.fields.some(f => f.type === \"Json\")) {\n sourceFile.addStatements(writer => {\n writer.newLine();\n writeArray(writer, [\n \"// Helper schema for JSON fields\",\n `type Literal = boolean | number | string${\n config.prismaJsonNullability ? \"\" : \"| null\"\n }`,\n \"type Json = Literal | { [key: string]: Json } | Json[]\",\n `const literalSchema = z.union([z.string(), z.number(), z.boolean()${\n config.prismaJsonNullability ? \"\" : \", z.null()\"\n }])`,\n \"const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([literalSchema, z.array(jsonSchema), z.record(jsonSchema)]))\"\n ]);\n });\n }\n\n if (config.useDecimalJs && model.fields.some(f => f.type === \"Decimal\")) {\n sourceFile.addStatements(writer => {\n writer.newLine();\n writeArray(writer, [\n \"// Helper schema for Decimal fields\",\n \"z\",\n \".instanceof(Decimal)\",\n \".or(z.string())\",\n \".or(z.number())\",\n \".refine((value) => {\",\n \" try {\",\n \" return new Decimal(value);\",\n \" } catch (error) {\",\n \" return false;\",\n \" }\",\n \"})\",\n \".transform((value) => new Decimal(value));\"\n ]);\n });\n }\n};\n\nexport const generateSchemaForModel = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n const { modelName } = useModelNames(config);\n\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n leadingTrivia: writer => writer.blankLineIfLastNot(),\n declarations: [\n {\n name: modelName(model.name),\n initializer(writer) {\n writer\n .write(\"z.object(\")\n .inlineBlock(() => {\n model.fields\n .filter(f => f.kind !== \"object\")\n .forEach(field => {\n writeArray(writer, getJSDocs(field.documentation));\n writer\n .write(`${field.name}: ${getZodConstructor(field)}`)\n .write(\",\")\n .newLine();\n });\n })\n .write(\")\");\n }\n }\n ]\n });\n};\n\nexport const generateRelatedSchemaForModel = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n const { modelName, relatedModelName } = useModelNames(config);\n\n const relationFields = model.fields.filter(f => f.kind === \"object\");\n\n sourceFile.addInterface({\n name: `${model.name}`,\n isExported: true,\n extends: [`z.infer<typeof ${modelName(model.name)}>`],\n properties: relationFields.map(f => ({\n hasQuestionToken: !f.isRequired,\n name: f.name,\n type: `${f.type}${f.isList ? \"[]\" : \"\"}${!f.isRequired ? \" | null\" : \"\"}`\n }))\n });\n\n sourceFile.addStatements(writer =>\n writeArray(writer, [\n \"\",\n \"/**\",\n ` * ${relatedModelName(\n model.name\n )} contains all relations on your model in addition to the scalars`,\n \" *\",\n \" * NOTE: Lazy required in case of potential circular dependencies within schema\",\n \" */\"\n ])\n );\n\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: relatedModelName(model.name),\n type: `z.ZodSchema<${model.name}>`,\n initializer(writer) {\n writer\n .write(`z.lazy(() => ${modelName(model.name)}.extend(`)\n .inlineBlock(() => {\n relationFields.forEach(field => {\n writeArray(writer, getJSDocs(field.documentation));\n\n writer\n .write(\n `${field.name}: ${getZodConstructor(\n field,\n relatedModelName\n )}`\n )\n .write(\",\")\n .newLine();\n });\n })\n .write(\"))\");\n }\n }\n ]\n });\n};\n\nexport const populateModelFile = async (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions\n) => {\n await writeImportsForModel(model, sourceFile, config, options);\n writeTypeSpecificSchemas(model, sourceFile, config);\n generateSchemaForModel(model, sourceFile, config);\n if (needsRelatedModel(model, config))\n generateRelatedSchemaForModel(model, sourceFile, config);\n};\n\nexport const generateBarrelFile = (\n models: DMMF.Model[],\n indexFile: SourceFile\n) => {\n models.forEach(model =>\n indexFile.addExportDeclaration({\n moduleSpecifier: `./${lowerCaseFirst(model.name)}.schema`\n })\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"model-helpers.mjs","names":[],"sources":["../../src/zod/model-helpers.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 DMMF,\n EnvValue,\n GeneratorOptions\n} from \"@prisma/generator-helper\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport path from \"node:path\";\nimport type {\n CodeBlockWriter,\n ImportDeclarationStructure,\n SourceFile\n} from \"ts-morph\";\nimport { StructureKind, VariableDeclarationKind } from \"ts-morph\";\nimport type { Config } from \"../config\";\nimport { getPrismaInternals } from \"../utils/get-prisma-internals\";\nimport { getJSDocs, getZodDocElements } from \"./docs-helpers\";\n\nexport function checkModelHasModelRelation(model: DMMF.Model) {\n const { fields: modelFields } = model;\n for (const modelField of modelFields) {\n const isRelationField = checkIsModelRelationField(modelField);\n if (isRelationField) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkModelHasManyModelRelation(model: DMMF.Model) {\n const { fields: modelFields } = model;\n for (const modelField of modelFields) {\n const isManyRelationField = checkIsManyModelRelationField(modelField);\n if (isManyRelationField) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkIsModelRelationField(modelField: DMMF.Field) {\n const { kind, relationName } = modelField;\n\n return kind === \"object\" && !!relationName;\n}\n\nexport function checkIsManyModelRelationField(modelField: DMMF.Field) {\n return checkIsModelRelationField(modelField) && modelField.isList;\n}\n\nexport function findModelByName(models: DMMF.Model[], modelName: string) {\n return models.find(({ name }) => name === modelName);\n}\n\nexport const writeArray = (\n writer: CodeBlockWriter,\n array: string[],\n newLine = true\n) => array.forEach(line => writer.write(line).conditionalNewLine(newLine));\n\nexport const useModelNames = ({\n modelCase,\n modelSuffix,\n relationModel\n}: Config) => {\n const formatModelName = (name: string, prefix = \"\") => {\n if (modelCase === \"camelCase\") {\n name = name.slice(0, 1).toLowerCase() + name.slice(1);\n }\n return `${prefix}${name}${modelSuffix}`;\n };\n\n return {\n modelName: (name: string) =>\n formatModelName(name, relationModel === \"default\" ? \"_\" : \"\"),\n relatedModelName: (\n name: string | DMMF.SchemaEnum | DMMF.OutputType | DMMF.SchemaArg\n ) =>\n formatModelName(\n relationModel === \"default\"\n ? name.toString()\n : `Related${name.toString()}`\n )\n };\n};\n\nexport const dotSlash = (input: string) => {\n const converted = input\n .replace(/^\\\\\\\\\\?\\\\/, \"\")\n .replace(/\\\\/g, \"/\")\n .replace(/\\/{2,}/g, \"/\");\n\n if (converted.includes(`/node_modules/`))\n return converted.split(`/node_modules/`).slice(-1)[0];\n\n if (converted.startsWith(`../`)) return converted;\n\n return `./${converted}`;\n};\n\nexport const chunk = <T extends any[]>(input: T, size: number): T[] => {\n return input.reduce((arr, item, idx) => {\n return idx % size === 0\n ? [...arr, [item]]\n : [...(arr as T).slice(0, -1), [...(arr as T).slice(-1)[0], item]];\n }, []);\n};\n\nexport const needsRelatedModel = (model: DMMF.Model, config: Config) =>\n model.fields.some(field => field.kind === \"object\") &&\n config.relationModel !== false;\n\nexport const writeImportsForModel = async (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions\n) => {\n const internals = await getPrismaInternals();\n\n const outputPath = internals.parseEnvValue(\n options.generator.output as EnvValue\n );\n\n const { relatedModelName } = useModelNames(config);\n const importList: ImportDeclarationStructure[] = [\n {\n kind: StructureKind.ImportDeclaration,\n namespaceImport: \"z\",\n moduleSpecifier: \"zod\"\n }\n ];\n\n if (config.imports) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n namespaceImport: \"imports\",\n moduleSpecifier: dotSlash(\n path.relative(\n outputPath,\n path.resolve(path.dirname(options.schemaPath), config.imports)\n )\n )!\n });\n }\n\n if (config.useDecimalJs && model.fields.some(f => f.type === \"Decimal\")) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n namedImports: [\"Decimal\"],\n moduleSpecifier: \"decimal.js\"\n });\n }\n\n const enumFields = model.fields.filter(f => f.kind === \"enum\");\n const relationFields = model.fields.filter(f => f.kind === \"object\");\n\n const clientPath = options.otherGenerators.find(\n each => each.provider.value === \"prisma-client-js\"\n )!.output!.value!;\n\n const relativePath = path.relative(outputPath, clientPath);\n\n if (enumFields.length > 0) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n isTypeOnly: enumFields.length === 0,\n moduleSpecifier: dotSlash(relativePath)!,\n namedImports: enumFields.map(f => f.type)\n });\n }\n\n if (config.relationModel !== false && relationFields.length > 0) {\n const filteredFields = relationFields.filter(f => f.type !== model.name);\n\n if (filteredFields.length > 0) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n moduleSpecifier: \"./index\",\n namedImports: Array.from(\n new Set(\n filteredFields.flatMap(f => [`${f.type}`, relatedModelName(f.type)])\n )\n )\n });\n }\n }\n\n sourceFile.addImportDeclarations(importList);\n};\n\nexport const computeCustomSchema = (docString: string) => {\n return getZodDocElements(docString)\n .find(modifier => modifier.startsWith(\"custom(\"))\n ?.slice(7)\n .slice(0, -1);\n};\n\nexport const computeModifiers = (docString: string) => {\n return getZodDocElements(docString).filter(\n each => !each.startsWith(\"custom(\")\n );\n};\n\nexport const getZodConstructor = (\n field: DMMF.Field,\n getRelatedModelName = (\n name: string | DMMF.SchemaEnum | DMMF.OutputType | DMMF.SchemaArg\n ) => name.toString()\n) => {\n let zodType = \"z.unknown()\";\n const extraModifiers: string[] = [\"\"];\n if (field.kind === \"scalar\") {\n switch (field.type) {\n case \"String\":\n zodType = \"z.string()\";\n break;\n case \"Int\":\n zodType = \"z.number()\";\n extraModifiers.push(\"int()\");\n break;\n case \"BigInt\":\n zodType = \"z.bigint()\";\n break;\n case \"DateTime\":\n zodType = \"z.date()\";\n break;\n case \"Float\":\n zodType = \"z.number()\";\n break;\n case \"Decimal\":\n zodType = \"z.number()\";\n break;\n case \"Json\":\n zodType = \"jsonSchema\";\n break;\n case \"Boolean\":\n zodType = \"z.boolean()\";\n break;\n // TODO: Proper type for bytes fields\n case \"Bytes\":\n zodType = \"z.unknown()\";\n break;\n }\n } else if (field.kind === \"enum\") {\n zodType = `z.nativeEnum(${field.type})`;\n } else if (field.kind === \"object\") {\n zodType = getRelatedModelName(field.type);\n }\n\n if (field.isList) extraModifiers.push(\"array()\");\n if (field.documentation) {\n zodType = computeCustomSchema(field.documentation) ?? zodType;\n extraModifiers.push(...computeModifiers(field.documentation));\n }\n if (!field.isRequired && field.type !== \"Json\")\n extraModifiers.push(\"nullish()\");\n // if (field.hasDefaultValue) extraModifiers.push('optional()')\n\n return `${zodType}${extraModifiers.join(\".\")}`;\n};\n\nexport const writeTypeSpecificSchemas = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n if (model.fields.some(f => f.type === \"Json\")) {\n sourceFile.addStatements(writer => {\n writer.newLine();\n writeArray(writer, [\n \"// Helper schema for JSON fields\",\n `type Literal = boolean | number | string${\n config.prismaJsonNullability ? \"\" : \"| null\"\n }`,\n \"type Json = Literal | { [key: string]: Json } | Json[]\",\n `const literalSchema = z.union([z.string(), z.number(), z.boolean()${\n config.prismaJsonNullability ? \"\" : \", z.null()\"\n }])`,\n \"const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([literalSchema, z.array(jsonSchema), z.record(jsonSchema)]))\"\n ]);\n });\n }\n\n if (config.useDecimalJs && model.fields.some(f => f.type === \"Decimal\")) {\n sourceFile.addStatements(writer => {\n writer.newLine();\n writeArray(writer, [\n \"// Helper schema for Decimal fields\",\n \"z\",\n \".instanceof(Decimal)\",\n \".or(z.string())\",\n \".or(z.number())\",\n \".refine((value) => {\",\n \" try {\",\n \" return new Decimal(value);\",\n \" } catch (error) {\",\n \" return false;\",\n \" }\",\n \"})\",\n \".transform((value) => new Decimal(value));\"\n ]);\n });\n }\n};\n\nexport const generateSchemaForModel = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n const { modelName } = useModelNames(config);\n\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n leadingTrivia: writer => writer.blankLineIfLastNot(),\n declarations: [\n {\n name: modelName(model.name),\n initializer(writer) {\n writer\n .write(\"z.object(\")\n .inlineBlock(() => {\n model.fields\n .filter(f => f.kind !== \"object\")\n .forEach(field => {\n writeArray(writer, getJSDocs(field.documentation));\n writer\n .write(`${field.name}: ${getZodConstructor(field)}`)\n .write(\",\")\n .newLine();\n });\n })\n .write(\")\");\n }\n }\n ]\n });\n};\n\nexport const generateRelatedSchemaForModel = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n const { modelName, relatedModelName } = useModelNames(config);\n\n const relationFields = model.fields.filter(f => f.kind === \"object\");\n\n sourceFile.addInterface({\n name: `${model.name}`,\n isExported: true,\n extends: [`z.infer<typeof ${modelName(model.name)}>`],\n properties: relationFields.map(f => ({\n hasQuestionToken: !f.isRequired,\n name: f.name,\n type: `${f.type}${f.isList ? \"[]\" : \"\"}${!f.isRequired ? \" | null\" : \"\"}`\n }))\n });\n\n sourceFile.addStatements(writer =>\n writeArray(writer, [\n \"\",\n \"/**\",\n ` * ${relatedModelName(\n model.name\n )} contains all relations on your model in addition to the scalars`,\n \" *\",\n \" * NOTE: Lazy required in case of potential circular dependencies within schema\",\n \" */\"\n ])\n );\n\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: relatedModelName(model.name),\n type: `z.ZodSchema<${model.name}>`,\n initializer(writer) {\n writer\n .write(`z.lazy(() => ${modelName(model.name)}.extend(`)\n .inlineBlock(() => {\n relationFields.forEach(field => {\n writeArray(writer, getJSDocs(field.documentation));\n\n writer\n .write(\n `${field.name}: ${getZodConstructor(\n field,\n relatedModelName\n )}`\n )\n .write(\",\")\n .newLine();\n });\n })\n .write(\"))\");\n }\n }\n ]\n });\n};\n\nexport const populateModelFile = async (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions\n) => {\n await writeImportsForModel(model, sourceFile, config, options);\n writeTypeSpecificSchemas(model, sourceFile, config);\n generateSchemaForModel(model, sourceFile, config);\n if (needsRelatedModel(model, config))\n generateRelatedSchemaForModel(model, sourceFile, config);\n};\n\nexport const generateBarrelFile = (\n models: DMMF.Model[],\n indexFile: SourceFile\n) => {\n models.forEach(model =>\n indexFile.addExportDeclaration({\n moduleSpecifier: `./${lowerCaseFirst(model.name)}.schema`\n })\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"modelArgs-helpers.mjs","names":["modelArgsInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","selectField: DMMF.SchemaArg","includeField: DMMF.SchemaArg","modelArgsInputObjectType: DMMF.InputType"],"sources":["../../src/zod/modelArgs-helpers.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 { DMMF } from \"@prisma/generator-helper\";\nimport { checkModelHasModelRelation } from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForModelArgs(\n inputObjectTypes: DMMF.InputType[],\n models: DMMF.Model[],\n isGenerateSelect: boolean,\n isGenerateInclude: boolean\n) {\n const modelArgsInputObjectTypes = generateModelArgsInputObjectTypes(\n models,\n isGenerateSelect,\n isGenerateInclude\n );\n\n for (const modelArgsInputObjectType of modelArgsInputObjectTypes) {\n inputObjectTypes.push(modelArgsInputObjectType);\n }\n}\nfunction generateModelArgsInputObjectTypes(\n models: DMMF.Model[],\n isGenerateSelect: boolean,\n isGenerateInclude: boolean\n) {\n const modelArgsInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n if (isGenerateSelect) {\n const selectField: DMMF.SchemaArg = {\n name: \"select\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelName}Select`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(selectField);\n }\n\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n\n if (isGenerateInclude && hasRelationToAnotherModel) {\n const includeField: DMMF.SchemaArg = {\n name: \"include\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelName}Include`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(includeField);\n }\n\n const modelArgsInputObjectType: DMMF.InputType = {\n name: `${modelName}DefaultArgs`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelArgsInputObjectTypes.push(modelArgsInputObjectType);\n }\n\n return modelArgsInputObjectTypes;\n}\n"],"mappings":";;;AAqBA,SAAgB,uCACd,kBACA,QACA,kBACA,mBACA;CACA,MAAM,4BAA4B,kCAChC,QACA,kBACA,kBACD;AAED,MAAK,MAAM,4BAA4B,0BACrC,kBAAiB,KAAK,yBAAyB;;AAGnD,SAAS,kCACP,QACA,kBACA,mBACA;CACA,MAAMA,4BAA8C,EAAE;AACtD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,cAAc;EAC5B,MAAMC,SAA2B,EAAE;AAEnC,MAAI,kBAAkB;GACpB,MAAMC,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAM,4BAA4B,2BAA2B,MAAM;AAEnE,MAAI,qBAAqB,2BAA2B;GAClD,MAAMC,eAA+B;IACnC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,aAAa;;EAG3B,MAAMC,2BAA2C;GAC/C,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,4BAA0B,KAAK,yBAAyB;;AAG1D,QAAO"}
1
+ {"version":3,"file":"modelArgs-helpers.mjs","names":[],"sources":["../../src/zod/modelArgs-helpers.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 { DMMF } from \"@prisma/generator-helper\";\nimport { checkModelHasModelRelation } from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForModelArgs(\n inputObjectTypes: DMMF.InputType[],\n models: DMMF.Model[],\n isGenerateSelect: boolean,\n isGenerateInclude: boolean\n) {\n const modelArgsInputObjectTypes = generateModelArgsInputObjectTypes(\n models,\n isGenerateSelect,\n isGenerateInclude\n );\n\n for (const modelArgsInputObjectType of modelArgsInputObjectTypes) {\n inputObjectTypes.push(modelArgsInputObjectType);\n }\n}\nfunction generateModelArgsInputObjectTypes(\n models: DMMF.Model[],\n isGenerateSelect: boolean,\n isGenerateInclude: boolean\n) {\n const modelArgsInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n if (isGenerateSelect) {\n const selectField: DMMF.SchemaArg = {\n name: \"select\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelName}Select`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(selectField);\n }\n\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n\n if (isGenerateInclude && hasRelationToAnotherModel) {\n const includeField: DMMF.SchemaArg = {\n name: \"include\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelName}Include`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(includeField);\n }\n\n const modelArgsInputObjectType: DMMF.InputType = {\n name: `${modelName}DefaultArgs`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelArgsInputObjectTypes.push(modelArgsInputObjectType);\n }\n\n return modelArgsInputObjectTypes;\n}\n"],"mappings":";;;AAqBA,SAAgB,uCACd,kBACA,QACA,kBACA,mBACA;CACA,MAAM,4BAA4B,kCAChC,QACA,kBACA,kBACD;AAED,MAAK,MAAM,4BAA4B,0BACrC,kBAAiB,KAAK,yBAAyB;;AAGnD,SAAS,kCACP,QACA,kBACA,mBACA;CACA,MAAM,4BAA8C,EAAE;AACtD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,cAAc;EAC5B,MAAM,SAA2B,EAAE;AAEnC,MAAI,kBAAkB;GACpB,MAAM,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAM,4BAA4B,2BAA2B,MAAM;AAEnE,MAAI,qBAAqB,2BAA2B;GAClD,MAAM,eAA+B;IACnC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,aAAa;;EAG3B,MAAM,2BAA2C;GAC/C,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,4BAA0B,KAAK,yBAAyB;;AAG1D,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"mongodb-helpers.mjs","names":["rawOpsMap: { [name: string]: string }"],"sources":["../../src/zod/mongodb-helpers.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 { DMMF } from \"@prisma/generator-helper\";\nimport Transformer from \"./transformer\";\n\nexport function addMissingInputObjectTypesForMongoDbRawOpsAndQueries(\n modelOperations: DMMF.ModelMapping[],\n outputObjectTypes: DMMF.OutputType[],\n inputObjectTypes: DMMF.InputType[]\n) {\n const rawOpsMap = resolveMongoDbRawOperations(modelOperations);\n Transformer.rawOpsMap = rawOpsMap ?? {};\n\n const mongoDbRawQueryInputObjectTypes =\n resolveMongoDbRawQueryInputObjectTypes(outputObjectTypes);\n for (const mongoDbRawQueryInputType of mongoDbRawQueryInputObjectTypes) {\n inputObjectTypes.push(mongoDbRawQueryInputType);\n }\n}\n\nfunction resolveMongoDbRawOperations(modelOperations: DMMF.ModelMapping[]) {\n const rawOpsMap: { [name: string]: string } = {};\n const rawOpsNames = [\n ...new Set(\n modelOperations.reduce<string[]>((result, current) => {\n const keys = Object.keys(current);\n keys?.forEach(key => {\n if (key.includes(\"Raw\")) {\n result.push(key);\n }\n });\n return result;\n }, [])\n )\n ];\n\n const modelNames = modelOperations.map(item => item.model);\n\n rawOpsNames.forEach(opName => {\n modelNames.forEach(modelName => {\n const isFind = opName === \"findRaw\";\n const opWithModel = `${opName.replace(\"Raw\", \"\")}${modelName}Raw`;\n rawOpsMap[opWithModel] = isFind\n ? `${modelName}FindRawArgs`\n : `${modelName}AggregateRawArgs`;\n });\n });\n\n return rawOpsMap;\n}\n\nfunction resolveMongoDbRawQueryInputObjectTypes(\n outputObjectTypes: DMMF.OutputType[]\n) {\n const mongoDbRawQueries = getMongoDbRawQueries(outputObjectTypes);\n const mongoDbRawQueryInputObjectTypes = mongoDbRawQueries.map(item => ({\n name: item.name,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: item.args.map(arg => ({\n name: arg.name,\n isRequired: arg.isRequired,\n isNullable: arg.isNullable,\n inputTypes: arg.inputTypes\n }))\n }));\n\n return mongoDbRawQueryInputObjectTypes;\n}\n\nfunction getMongoDbRawQueries(outputObjectTypes: DMMF.OutputType[]) {\n const queryOutputTypes = outputObjectTypes.filter(\n item => item.name === \"Query\"\n );\n\n const mongodbRawQueries =\n queryOutputTypes?.[0]!.fields.filter(field => field.name.includes(\"Raw\")) ??\n [];\n\n return mongodbRawQueries;\n}\n\nexport const isMongodbRawOp = (name: string) =>\n /find[\\s\\S]*?Raw/.test(name) || /aggregate[\\s\\S]*?Raw/.test(name);\n"],"mappings":";;;AAqBA,SAAgB,qDACd,iBACA,mBACA,kBACA;AAEA,aAAY,YADM,4BAA4B,gBAAgB,IACzB,EAAE;CAEvC,MAAM,kCACJ,uCAAuC,kBAAkB;AAC3D,MAAK,MAAM,4BAA4B,gCACrC,kBAAiB,KAAK,yBAAyB;;AAInD,SAAS,4BAA4B,iBAAsC;CACzE,MAAMA,YAAwC,EAAE;CAChD,MAAM,cAAc,CAClB,GAAG,IAAI,IACL,gBAAgB,QAAkB,QAAQ,YAAY;AAEpD,EADa,OAAO,KAAK,QAAQ,EAC3B,SAAQ,QAAO;AACnB,OAAI,IAAI,SAAS,MAAM,CACrB,QAAO,KAAK,IAAI;IAElB;AACF,SAAO;IACN,EAAE,CAAC,CACP,CACF;CAED,MAAM,aAAa,gBAAgB,KAAI,SAAQ,KAAK,MAAM;AAE1D,aAAY,SAAQ,WAAU;AAC5B,aAAW,SAAQ,cAAa;GAC9B,MAAM,SAAS,WAAW;GAC1B,MAAM,cAAc,GAAG,OAAO,QAAQ,OAAO,GAAG,GAAG,UAAU;AAC7D,aAAU,eAAe,SACrB,GAAG,UAAU,eACb,GAAG,UAAU;IACjB;GACF;AAEF,QAAO;;AAGT,SAAS,uCACP,mBACA;AAgBA,QAf0B,qBAAqB,kBAAkB,CACP,KAAI,UAAS;EACrE,MAAM,KAAK;EACX,aAAa;GACX,cAAc;GACd,cAAc;GACf;EACD,QAAQ,KAAK,KAAK,KAAI,SAAQ;GAC5B,MAAM,IAAI;GACV,YAAY,IAAI;GAChB,YAAY,IAAI;GAChB,YAAY,IAAI;GACjB,EAAE;EACJ,EAAE;;AAKL,SAAS,qBAAqB,mBAAsC;AASlE,QARyB,kBAAkB,QACzC,SAAQ,KAAK,SAAS,QACvB,GAGoB,GAAI,OAAO,QAAO,UAAS,MAAM,KAAK,SAAS,MAAM,CAAC,IACzE,EAAE;;AAKN,MAAa,kBAAkB,SAC7B,kBAAkB,KAAK,KAAK,IAAI,uBAAuB,KAAK,KAAK"}
1
+ {"version":3,"file":"mongodb-helpers.mjs","names":[],"sources":["../../src/zod/mongodb-helpers.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 { DMMF } from \"@prisma/generator-helper\";\nimport Transformer from \"./transformer\";\n\nexport function addMissingInputObjectTypesForMongoDbRawOpsAndQueries(\n modelOperations: DMMF.ModelMapping[],\n outputObjectTypes: DMMF.OutputType[],\n inputObjectTypes: DMMF.InputType[]\n) {\n const rawOpsMap = resolveMongoDbRawOperations(modelOperations);\n Transformer.rawOpsMap = rawOpsMap ?? {};\n\n const mongoDbRawQueryInputObjectTypes =\n resolveMongoDbRawQueryInputObjectTypes(outputObjectTypes);\n for (const mongoDbRawQueryInputType of mongoDbRawQueryInputObjectTypes) {\n inputObjectTypes.push(mongoDbRawQueryInputType);\n }\n}\n\nfunction resolveMongoDbRawOperations(modelOperations: DMMF.ModelMapping[]) {\n const rawOpsMap: { [name: string]: string } = {};\n const rawOpsNames = [\n ...new Set(\n modelOperations.reduce<string[]>((result, current) => {\n const keys = Object.keys(current);\n keys?.forEach(key => {\n if (key.includes(\"Raw\")) {\n result.push(key);\n }\n });\n return result;\n }, [])\n )\n ];\n\n const modelNames = modelOperations.map(item => item.model);\n\n rawOpsNames.forEach(opName => {\n modelNames.forEach(modelName => {\n const isFind = opName === \"findRaw\";\n const opWithModel = `${opName.replace(\"Raw\", \"\")}${modelName}Raw`;\n rawOpsMap[opWithModel] = isFind\n ? `${modelName}FindRawArgs`\n : `${modelName}AggregateRawArgs`;\n });\n });\n\n return rawOpsMap;\n}\n\nfunction resolveMongoDbRawQueryInputObjectTypes(\n outputObjectTypes: DMMF.OutputType[]\n) {\n const mongoDbRawQueries = getMongoDbRawQueries(outputObjectTypes);\n const mongoDbRawQueryInputObjectTypes = mongoDbRawQueries.map(item => ({\n name: item.name,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: item.args.map(arg => ({\n name: arg.name,\n isRequired: arg.isRequired,\n isNullable: arg.isNullable,\n inputTypes: arg.inputTypes\n }))\n }));\n\n return mongoDbRawQueryInputObjectTypes;\n}\n\nfunction getMongoDbRawQueries(outputObjectTypes: DMMF.OutputType[]) {\n const queryOutputTypes = outputObjectTypes.filter(\n item => item.name === \"Query\"\n );\n\n const mongodbRawQueries =\n queryOutputTypes?.[0]!.fields.filter(field => field.name.includes(\"Raw\")) ??\n [];\n\n return mongodbRawQueries;\n}\n\nexport const isMongodbRawOp = (name: string) =>\n /find[\\s\\S]*?Raw/.test(name) || /aggregate[\\s\\S]*?Raw/.test(name);\n"],"mappings":";;;AAqBA,SAAgB,qDACd,iBACA,mBACA,kBACA;AAEA,aAAY,YADM,4BAA4B,gBACb,IAAI,EAAE;CAEvC,MAAM,kCACJ,uCAAuC,kBAAkB;AAC3D,MAAK,MAAM,4BAA4B,gCACrC,kBAAiB,KAAK,yBAAyB;;AAInD,SAAS,4BAA4B,iBAAsC;CACzE,MAAM,YAAwC,EAAE;CAChD,MAAM,cAAc,CAClB,GAAG,IAAI,IACL,gBAAgB,QAAkB,QAAQ,YAAY;AAEpD,EADa,OAAO,KAAK,QACrB,EAAE,SAAQ,QAAO;AACnB,OAAI,IAAI,SAAS,MAAM,CACrB,QAAO,KAAK,IAAI;IAElB;AACF,SAAO;IACN,EAAE,CAAC,CACP,CACF;CAED,MAAM,aAAa,gBAAgB,KAAI,SAAQ,KAAK,MAAM;AAE1D,aAAY,SAAQ,WAAU;AAC5B,aAAW,SAAQ,cAAa;GAC9B,MAAM,SAAS,WAAW;GAC1B,MAAM,cAAc,GAAG,OAAO,QAAQ,OAAO,GAAG,GAAG,UAAU;AAC7D,aAAU,eAAe,SACrB,GAAG,UAAU,eACb,GAAG,UAAU;IACjB;GACF;AAEF,QAAO;;AAGT,SAAS,uCACP,mBACA;AAgBA,QAf0B,qBAAqB,kBACU,CAAC,KAAI,UAAS;EACrE,MAAM,KAAK;EACX,aAAa;GACX,cAAc;GACd,cAAc;GACf;EACD,QAAQ,KAAK,KAAK,KAAI,SAAQ;GAC5B,MAAM,IAAI;GACV,YAAY,IAAI;GAChB,YAAY,IAAI;GAChB,YAAY,IAAI;GACjB,EAAE;EACJ,EAEqC;;AAGxC,SAAS,qBAAqB,mBAAsC;AASlE,QARyB,kBAAkB,QACzC,SAAQ,KAAK,SAAS,QAIN,GAAG,GAAI,OAAO,QAAO,UAAS,MAAM,KAAK,SAAS,MAAM,CAAC,IACzE,EAAE;;AAKN,MAAa,kBAAkB,SAC7B,kBAAkB,KAAK,KAAK,IAAI,uBAAuB,KAAK,KAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"select-helpers.mjs","names":["modelCountOutputTypeSelectInputObjectTypes: DMMF.InputType[]","modelCountOutputTypeSelectInputObjectType: DMMF.InputType","modelCountOutputTypeArgsInputObjectTypes: DMMF.InputType[]","modelCountOutputTypeArgsInputObjectType: DMMF.InputType","modelSelectInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","field: Writeable<DMMF.SchemaArg>","schemaArgInputType: ArrayValues<SchemaArgInputTypes>","_countField: DMMF.SchemaArg","modelSelectInputObjectType: DMMF.InputType"],"sources":["../../src/zod/select-helpers.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 { DMMF } from \"@prisma/generator-helper\";\nimport type { ArrayValues } from \"@stryke/types/array\";\nimport type { SchemaArgInputTypes, Writeable } from \"../types\";\nimport {\n checkIsModelRelationField,\n checkModelHasManyModelRelation\n} from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForSelect(\n inputObjectTypes: DMMF.InputType[],\n outputObjectTypes: DMMF.OutputType[],\n models: DMMF.Model[]\n) {\n // generate input object types necessary to support ModelSelect._count\n const modelCountOutputTypes = getModelCountOutputTypes(outputObjectTypes);\n const modelCountOutputTypeSelectInputObjectTypes =\n generateModelCountOutputTypeSelectInputObjectTypes(modelCountOutputTypes);\n const modelCountOutputTypeArgsInputObjectTypes =\n generateModelCountOutputTypeArgsInputObjectTypes(modelCountOutputTypes);\n\n const modelSelectInputObjectTypes =\n generateModelSelectInputObjectTypes(models);\n\n const generatedInputObjectTypes = [\n modelCountOutputTypeSelectInputObjectTypes,\n modelCountOutputTypeArgsInputObjectTypes,\n modelSelectInputObjectTypes\n ].flat();\n\n for (const inputObjectType of generatedInputObjectTypes) {\n inputObjectTypes.push(inputObjectType);\n }\n}\n\nfunction getModelCountOutputTypes(outputObjectTypes: DMMF.OutputType[]) {\n return outputObjectTypes.filter(({ name }) =>\n name.includes(\"CountOutputType\")\n );\n}\n\nfunction generateModelCountOutputTypeSelectInputObjectTypes(\n modelCountOutputTypes: DMMF.OutputType[]\n) {\n const modelCountOutputTypeSelectInputObjectTypes: DMMF.InputType[] = [];\n for (const modelCountOutputType of modelCountOutputTypes) {\n const {\n name: modelCountOutputTypeName,\n fields: modelCountOutputTypeFields\n } = modelCountOutputType;\n const modelCountOutputTypeSelectInputObjectType: DMMF.InputType = {\n name: `${modelCountOutputTypeName}Select`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: modelCountOutputTypeFields.map(({ name }) => ({\n name,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `Boolean`,\n location: \"scalar\"\n }\n ]\n }))\n };\n modelCountOutputTypeSelectInputObjectTypes.push(\n modelCountOutputTypeSelectInputObjectType\n );\n }\n\n return modelCountOutputTypeSelectInputObjectTypes;\n}\n\nfunction generateModelCountOutputTypeArgsInputObjectTypes(\n modelCountOutputTypes: DMMF.OutputType[]\n) {\n const modelCountOutputTypeArgsInputObjectTypes: DMMF.InputType[] = [];\n for (const modelCountOutputType of modelCountOutputTypes) {\n const { name: modelCountOutputTypeName } = modelCountOutputType;\n const modelCountOutputTypeArgsInputObjectType: DMMF.InputType = {\n name: `${modelCountOutputTypeName}DefaultArgs`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: [\n {\n name: \"select\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelCountOutputTypeName}Select`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n }\n ]\n };\n modelCountOutputTypeArgsInputObjectTypes.push(\n modelCountOutputTypeArgsInputObjectType\n );\n }\n\n return modelCountOutputTypeArgsInputObjectTypes;\n}\n\nfunction generateModelSelectInputObjectTypes(models: DMMF.Model[]) {\n const modelSelectInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName, fields: modelFields } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n for (const modelField of modelFields) {\n const { name: modelFieldName, isList, type } = modelField;\n\n const isRelationField = checkIsModelRelationField(modelField);\n\n const field: Writeable<DMMF.SchemaArg> = {\n name: modelFieldName,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" }\n ] as Writeable<DMMF.SchemaArg[\"inputTypes\"]>\n };\n\n if (isRelationField) {\n const schemaArgInputType: ArrayValues<SchemaArgInputTypes> = {\n isList: false,\n type: isList ? `${type}FindManyArgs` : `${type}DefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n };\n field.inputTypes.push(schemaArgInputType);\n }\n\n fields.push(field);\n }\n\n const hasManyRelationToAnotherModel = checkModelHasManyModelRelation(model);\n\n const shouldAddCountField = hasManyRelationToAnotherModel;\n if (shouldAddCountField) {\n const _countField: DMMF.SchemaArg = {\n name: \"_count\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" },\n {\n isList: false,\n type: `${modelName}CountOutputTypeDefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(_countField);\n }\n\n const modelSelectInputObjectType: DMMF.InputType = {\n name: `${modelName}Select`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelSelectInputObjectTypes.push(modelSelectInputObjectType);\n }\n\n return modelSelectInputObjectTypes;\n}\n"],"mappings":";;;AA0BA,SAAgB,oCACd,kBACA,mBACA,QACA;CAEA,MAAM,wBAAwB,yBAAyB,kBAAkB;CASzE,MAAM,4BAA4B;EAPhC,mDAAmD,sBAAsB;EAEzE,iDAAiD,sBAAsB;EAGvE,oCAAoC,OAAO;EAM5C,CAAC,MAAM;AAER,MAAK,MAAM,mBAAmB,0BAC5B,kBAAiB,KAAK,gBAAgB;;AAI1C,SAAS,yBAAyB,mBAAsC;AACtE,QAAO,kBAAkB,QAAQ,EAAE,WACjC,KAAK,SAAS,kBAAkB,CACjC;;AAGH,SAAS,mDACP,uBACA;CACA,MAAMA,6CAA+D,EAAE;AACvE,MAAK,MAAM,wBAAwB,uBAAuB;EACxD,MAAM,EACJ,MAAM,0BACN,QAAQ,+BACN;EACJ,MAAMC,4CAA4D;GAChE,MAAM,GAAG,yBAAyB;GAClC,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD,QAAQ,2BAA2B,KAAK,EAAE,YAAY;IACpD;IACA,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM;KACN,UAAU;KACX,CACF;IACF,EAAE;GACJ;AACD,6CAA2C,KACzC,0CACD;;AAGH,QAAO;;AAGT,SAAS,iDACP,uBACA;CACA,MAAMC,2CAA6D,EAAE;AACrE,MAAK,MAAM,wBAAwB,uBAAuB;EACxD,MAAM,EAAE,MAAM,6BAA6B;EAC3C,MAAMC,0CAA0D;GAC9D,MAAM,GAAG,yBAAyB;GAClC,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD,QAAQ,CACN;IACE,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,yBAAyB;KAClC,UAAU;KACV,WAAW;KACZ,CACF;IACF,CACF;GACF;AACD,2CAAyC,KACvC,wCACD;;AAGH,QAAO;;AAGT,SAAS,oCAAoC,QAAsB;CACjE,MAAMC,8BAAgD,EAAE;AACxD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,WAAW,QAAQ,gBAAgB;EACjD,MAAMC,SAA2B,EAAE;AAEnC,OAAK,MAAM,cAAc,aAAa;GACpC,MAAM,EAAE,MAAM,gBAAgB,QAAQ,SAAS;GAE/C,MAAM,kBAAkB,0BAA0B,WAAW;GAE7D,MAAMC,QAAmC;IACvC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KAAE,QAAQ;KAAO,MAAM;KAAW,UAAU;KAAU,CACvD;IACF;AAED,OAAI,iBAAiB;IACnB,MAAMC,qBAAuD;KAC3D,QAAQ;KACR,MAAM,SAAS,GAAG,KAAK,gBAAgB,GAAG,KAAK;KAC/C,UAAU;KACV,WAAW;KACZ;AACD,UAAM,WAAW,KAAK,mBAAmB;;AAG3C,UAAO,KAAK,MAAM;;AAMpB,MAHsC,+BAA+B,MAAM,EAGlD;GACvB,MAAMC,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KAAE,QAAQ;KAAO,MAAM;KAAW,UAAU;KAAU,EACtD;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAMC,6BAA6C;GACjD,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,8BAA4B,KAAK,2BAA2B;;AAG9D,QAAO"}
1
+ {"version":3,"file":"select-helpers.mjs","names":[],"sources":["../../src/zod/select-helpers.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 { DMMF } from \"@prisma/generator-helper\";\nimport type { ArrayValues } from \"@stryke/types/array\";\nimport type { SchemaArgInputTypes, Writeable } from \"../types\";\nimport {\n checkIsModelRelationField,\n checkModelHasManyModelRelation\n} from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForSelect(\n inputObjectTypes: DMMF.InputType[],\n outputObjectTypes: DMMF.OutputType[],\n models: DMMF.Model[]\n) {\n // generate input object types necessary to support ModelSelect._count\n const modelCountOutputTypes = getModelCountOutputTypes(outputObjectTypes);\n const modelCountOutputTypeSelectInputObjectTypes =\n generateModelCountOutputTypeSelectInputObjectTypes(modelCountOutputTypes);\n const modelCountOutputTypeArgsInputObjectTypes =\n generateModelCountOutputTypeArgsInputObjectTypes(modelCountOutputTypes);\n\n const modelSelectInputObjectTypes =\n generateModelSelectInputObjectTypes(models);\n\n const generatedInputObjectTypes = [\n modelCountOutputTypeSelectInputObjectTypes,\n modelCountOutputTypeArgsInputObjectTypes,\n modelSelectInputObjectTypes\n ].flat();\n\n for (const inputObjectType of generatedInputObjectTypes) {\n inputObjectTypes.push(inputObjectType);\n }\n}\n\nfunction getModelCountOutputTypes(outputObjectTypes: DMMF.OutputType[]) {\n return outputObjectTypes.filter(({ name }) =>\n name.includes(\"CountOutputType\")\n );\n}\n\nfunction generateModelCountOutputTypeSelectInputObjectTypes(\n modelCountOutputTypes: DMMF.OutputType[]\n) {\n const modelCountOutputTypeSelectInputObjectTypes: DMMF.InputType[] = [];\n for (const modelCountOutputType of modelCountOutputTypes) {\n const {\n name: modelCountOutputTypeName,\n fields: modelCountOutputTypeFields\n } = modelCountOutputType;\n const modelCountOutputTypeSelectInputObjectType: DMMF.InputType = {\n name: `${modelCountOutputTypeName}Select`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: modelCountOutputTypeFields.map(({ name }) => ({\n name,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `Boolean`,\n location: \"scalar\"\n }\n ]\n }))\n };\n modelCountOutputTypeSelectInputObjectTypes.push(\n modelCountOutputTypeSelectInputObjectType\n );\n }\n\n return modelCountOutputTypeSelectInputObjectTypes;\n}\n\nfunction generateModelCountOutputTypeArgsInputObjectTypes(\n modelCountOutputTypes: DMMF.OutputType[]\n) {\n const modelCountOutputTypeArgsInputObjectTypes: DMMF.InputType[] = [];\n for (const modelCountOutputType of modelCountOutputTypes) {\n const { name: modelCountOutputTypeName } = modelCountOutputType;\n const modelCountOutputTypeArgsInputObjectType: DMMF.InputType = {\n name: `${modelCountOutputTypeName}DefaultArgs`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: [\n {\n name: \"select\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelCountOutputTypeName}Select`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n }\n ]\n };\n modelCountOutputTypeArgsInputObjectTypes.push(\n modelCountOutputTypeArgsInputObjectType\n );\n }\n\n return modelCountOutputTypeArgsInputObjectTypes;\n}\n\nfunction generateModelSelectInputObjectTypes(models: DMMF.Model[]) {\n const modelSelectInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName, fields: modelFields } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n for (const modelField of modelFields) {\n const { name: modelFieldName, isList, type } = modelField;\n\n const isRelationField = checkIsModelRelationField(modelField);\n\n const field: Writeable<DMMF.SchemaArg> = {\n name: modelFieldName,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" }\n ] as Writeable<DMMF.SchemaArg[\"inputTypes\"]>\n };\n\n if (isRelationField) {\n const schemaArgInputType: ArrayValues<SchemaArgInputTypes> = {\n isList: false,\n type: isList ? `${type}FindManyArgs` : `${type}DefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n };\n field.inputTypes.push(schemaArgInputType);\n }\n\n fields.push(field);\n }\n\n const hasManyRelationToAnotherModel = checkModelHasManyModelRelation(model);\n\n const shouldAddCountField = hasManyRelationToAnotherModel;\n if (shouldAddCountField) {\n const _countField: DMMF.SchemaArg = {\n name: \"_count\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" },\n {\n isList: false,\n type: `${modelName}CountOutputTypeDefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(_countField);\n }\n\n const modelSelectInputObjectType: DMMF.InputType = {\n name: `${modelName}Select`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelSelectInputObjectTypes.push(modelSelectInputObjectType);\n }\n\n return modelSelectInputObjectTypes;\n}\n"],"mappings":";;;AA0BA,SAAgB,oCACd,kBACA,mBACA,QACA;CAEA,MAAM,wBAAwB,yBAAyB,kBAAkB;CASzE,MAAM,4BAA4B;EAPhC,mDAAmD,sBAQT;EAN1C,iDAAiD,sBAOT;EAJxC,oCAAoC,OAKT;EAC5B,CAAC,MAAM;AAER,MAAK,MAAM,mBAAmB,0BAC5B,kBAAiB,KAAK,gBAAgB;;AAI1C,SAAS,yBAAyB,mBAAsC;AACtE,QAAO,kBAAkB,QAAQ,EAAE,WACjC,KAAK,SAAS,kBAAkB,CACjC;;AAGH,SAAS,mDACP,uBACA;CACA,MAAM,6CAA+D,EAAE;AACvE,MAAK,MAAM,wBAAwB,uBAAuB;EACxD,MAAM,EACJ,MAAM,0BACN,QAAQ,+BACN;EACJ,MAAM,4CAA4D;GAChE,MAAM,GAAG,yBAAyB;GAClC,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD,QAAQ,2BAA2B,KAAK,EAAE,YAAY;IACpD;IACA,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM;KACN,UAAU;KACX,CACF;IACF,EAAE;GACJ;AACD,6CAA2C,KACzC,0CACD;;AAGH,QAAO;;AAGT,SAAS,iDACP,uBACA;CACA,MAAM,2CAA6D,EAAE;AACrE,MAAK,MAAM,wBAAwB,uBAAuB;EACxD,MAAM,EAAE,MAAM,6BAA6B;EAC3C,MAAM,0CAA0D;GAC9D,MAAM,GAAG,yBAAyB;GAClC,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD,QAAQ,CACN;IACE,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,yBAAyB;KAClC,UAAU;KACV,WAAW;KACZ,CACF;IACF,CACF;GACF;AACD,2CAAyC,KACvC,wCACD;;AAGH,QAAO;;AAGT,SAAS,oCAAoC,QAAsB;CACjE,MAAM,8BAAgD,EAAE;AACxD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,WAAW,QAAQ,gBAAgB;EACjD,MAAM,SAA2B,EAAE;AAEnC,OAAK,MAAM,cAAc,aAAa;GACpC,MAAM,EAAE,MAAM,gBAAgB,QAAQ,SAAS;GAE/C,MAAM,kBAAkB,0BAA0B,WAAW;GAE7D,MAAM,QAAmC;IACvC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KAAE,QAAQ;KAAO,MAAM;KAAW,UAAU;KAAU,CACvD;IACF;AAED,OAAI,iBAAiB;IACnB,MAAM,qBAAuD;KAC3D,QAAQ;KACR,MAAM,SAAS,GAAG,KAAK,gBAAgB,GAAG,KAAK;KAC/C,UAAU;KACV,WAAW;KACZ;AACD,UAAM,WAAW,KAAK,mBAAmB;;AAG3C,UAAO,KAAK,MAAM;;AAMpB,MAHsC,+BAA+B,MAG9C,EAAE;GACvB,MAAM,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KAAE,QAAQ;KAAO,MAAM;KAAW,UAAU;KAAU,EACtD;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAM,6BAA6C;GACjD,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,8BAA4B,KAAK,2BAA2B;;AAG9D,QAAO"}
@@ -1,4 +1,4 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
2
  const require_lower_case_first = require('../packages/string-format/src/lower-case-first.cjs');
3
3
  const require_upper_case_first = require('../packages/string-format/src/upper-case-first.cjs');
4
4
  const require_model_helpers = require('./model-helpers.cjs');
@@ -6,7 +6,7 @@ const require_write_file_safely = require('../utils/write-file-safely.cjs');
6
6
  const require_aggregate_helpers = require('./aggregate-helpers.cjs');
7
7
  const require_mongodb_helpers = require('./mongodb-helpers.cjs');
8
8
  let node_path = require("node:path");
9
- node_path = require_rolldown_runtime.__toESM(node_path);
9
+ node_path = require_runtime.__toESM(node_path, 1);
10
10
 
11
11
  //#region src/zod/transformer.ts
12
12
  var Transformer = class Transformer {
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.mjs","names":["line: string","prismaClientImportPath: string","modelQueryTypeSuffixToQueryName: Record<string, string>"],"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":";;;;;;;;;AAmCA,IAAqB,cAArB,MAAqB,YAAY;CAC/B;CAEA;CAEA,gCAAgB,IAAI,KAAa;CAEjC;CAEA;CAEA;CAEA;CAEA,OAAO,YAAsB,EAAE;CAE/B,OAAO,YAAwC,EAAE;CAEjD,OAAO;CAEP,OAAO;CAEP,OAAe,aAAqB;CAEpC,AAAQ,UAAU;CAElB,OAAe,yBAAiC;CAEhD,OAAe,iCAA0C;CAEzD,OAAe,mBAA4B;CAE3C,OAAe,oBAA6B;CAE5C,YAAY,QAAsC;AAChD,OAAK,OAAO,OAAO,QAAQ;AAC3B,OAAK,SAAS,OAAO,UAAU,EAAE;AACjC,OAAK,SAAS,OAAO,UAAU,EAAE;AACjC,OAAK,kBAAkB,OAAO,mBAAmB,EAAE;AACnD,OAAK,4BAA4B,OAAO,6BAA6B,EAAE;AACvE,OAAK,YAAY,OAAO,aAAa,EAAE;;CAGzC,OAAO,cAAc,SAAiB;AACpC,OAAK,aAAa;;CAGpB,OAAO,oBAAoB,kBAA2B;AACpD,OAAK,mBAAmB;;CAG1B,OAAO,qBAAqB,mBAA4B;AACtD,OAAK,oBAAoB;;CAG3B,OAAO,gBAAgB;AACrB,SAAO,KAAK;;CAGd,OAAO,0BAA0B,wBAAgC;AAC/D,OAAK,yBAAyB;AAC9B,OAAK,iCACH,2BAA2B;;CAG/B,aAAa,gBAAgB;AAE3B,QAAM,eADY,KAAK,KAAK,YAAY,YAAY,mBAAmB,CACxC;;CAGjC,MAAM,sBAAsB;AAC1B,OAAK,MAAM,YAAY,KAAK,WAAW;GACrC,MAAM,EAAE,MAAM,WAAW;AAEzB,SAAM,gBACJ,KAAK,KACH,YAAY,YACZ,iBAAiB,eAAe,KAAK,CAAC,YACvC,EACD,GAAG,KAAK,4BAA4B,CAAC,IAAI,KAAK,8BAC5C,GAAG,eAAe,KAAK,IACvB,UAAU,KAAK,UAAU,OAAO,CAAC,GAClC,GACF;;;CAIL,6BAA6B;AAC3B,SAAO;;CAGT,8BAA8B,MAAc,QAAgB;AAC1D,SAAO,gBAAgB,eAAe,KAAK,CAAC,WAAW;;CAGzD,MAAM,uBAAuB;EAC3B,MAAM,wBAAwB,KAAK,4BAA4B;EAC/D,MAAM,eAAe,KAAK,oBAAoB,sBAAsB;EACpE,MAAM,mBAAmB,KAAK,yBAAyB;AAEvD,QAAM,gBACJ,KAAK,KACH,YAAY,YACZ,mBAAmB,eAAe,iBAAiB,CAAC,YACrD,EACD,aACD;;CAGH,6BAA6B;AAc3B,SAb8B,KAAK,OAChC,KAAI,UAAS,KAAK,0BAA0B,MAAM,CAAC,CACnD,SAAQ,SAAQ,KAAK,CACrB,KAAI,SAAQ;GACX,MAAM,CAAC,uBAAuB,OAAO,kBAAkB;AAMvD,WAJc,iBACV,wBACA,KAAK,wBAAwB,uBAAuB,MAAM,EAEjD,MAAM;IACnB;;CAKN,0BACE,OAC2C;EAC3C,MAAM,QAAQ,MAAM;AAEpB,MAAI,MAAM,WAAW,EACnB,QAAO,EAAE;EAGX,IAAI,eAAe,MAAM,QAAkB,QAAQ,cAAc;AAC/D,OAAI,UAAU,SAAS,SACrB,QAAO,KAAK,KAAK,sBAAsB,cAAc,MAAM,CAAC;YAE5D,UAAU,SAAS,SACnB,UAAU,SAAS,WACnB,UAAU,SAAS,UAEnB,QAAO,KAAK,KAAK,sBAAsB,cAAc,MAAM,CAAC;YACnD,UAAU,SAAS,SAC5B,QAAO,KAAK,KAAK,sBAAsB,cAAc,MAAM,CAAC;YACnD,UAAU,SAAS,UAC5B,QAAO,KAAK,KAAK,sBAAsB,eAAe,MAAM,CAAC;YACpD,UAAU,SAAS,WAC5B,QAAO,KAAK,KAAK,sBAAsB,mBAAmB,MAAM,CAAC;YACxD,UAAU,SAAS,QAAQ;AACpC,SAAK,UAAU;AAEf,WAAO,KAAK,KAAK,sBAAsB,cAAc,MAAM,CAAC;cACnD,UAAU,SAAS,OAC5B,QAAO,KAAK,KAAK,sBAAsB,mBAAmB,MAAM,CAAC;YACxD,UAAU,SAAS,QAC5B,QAAO,KAAK,KAAK,sBAAsB,wBAAwB,MAAM,CAAC;YAC7D,CAAC,UAAU,KAAK,SAAS,gBAAgB,EAAE;IACpD,MAAM,SAAS,UAAU,aAAa;AAEtC,QAAI,UAAU,cAAc,YAAY,QAAQ;AAC9C,SACE,UAAU,SAAS,KAAK,QACxB,OAAO,UAAU,SAAS,SAE1B,MAAK,gBAAgB,UAAU,KAAK;AAGtC,YAAO,KACL,KAAK,yBAAyB,OAAO,WAAW,MAAM,OAAO,CAC9D;;;AAIL,UAAO;KACN,EAAE,CAAC;AAEN,MAAI,aAAa,WAAW,EAC1B,QAAO,EAAE;AAGX,MAAI,aAAa,SAAS,EACxB,gBAAe,aAAa,KAAI,UAC9B,MAAM,QAAQ,eAAe,GAAG,CACjC;EAGH,MAAM,YAAY,aAAa,MAAK,QAAO,IAAI,SAAS,IAAI,CAAC,GACzD,KACA,KAAK,MAAM,KAAK;EAEpB,MAAM,MAAM,CAAC,MAAM,aAAa,gBAAgB;EAEhD,IAAI,YACF,aAAa,WAAW,IACpB,aAAa,KAAK,QAAQ,GAC1B,YAAY,aAAa,KAAK,QAAQ,CAAC,IAAI;AAEjD,MAAI,MAAM,WACR,cAAa;AAGf,SAAO,CAAC;GAAC,KAAK,UAAU,GAAG,UAAU;GAAI;GAAO;GAAK,CAAC;;CAGxD,sBAAsB,eAAuB,OAA6B;EACxE,IAAIA,OAAe;AACnB,SAAO;AAEP,MAAI,MAAM,WAAW,MAAK,cAAa,UAAU,OAAO,CACtD,SAAQ;AAGV,MAAI,CAAC,MAAM,WACT,SAAQ;AAGV,SAAO;;CAGT,gBAAgB,MAAc;AAC5B,OAAK,cAAc,IAAI,KAAK;;CAG9B,yBACE,OACA,WACA,cACA;EAOA,MAAM,SAAS,UAAU,aAAa;EAEtC,MAAM,kBAAkB,UAAU;EAClC,MAAM,EAAE,kBAAkB,WAAW,cACnC,KAAK,sBAAsB,gBAAgB;EAE7C,MAAM,mBAAmB,mBACrB,KAAK,4BAA4B,WAAY,UAAW,GACxD,GAAG,gBAAgB;EACvB,MAAM,iBAAiB,GAAG,gBAAgB;EAE1C,MAAM,SACJ,UAAU,SAAS,KAAK,OACpB,mBACA,SACE,iBACA;EACR,MAAM,MAAM,UAAU,SAAS,aAAa;EAC5C,MAAM,MAAM,CAAC,MAAM,aAAa,gBAAgB;AAEhD,SAAO,iBAAiB,IACpB,KAAK,MAAM,KAAK,iBAAiB,eAAe,OAAO,CAAC,GAAG,MAAM,QACjE,gBAAgB,eAAe,OAAO,CAAC,GAAG,MAAM;;CAGtD,wBACE,uBACA,OACA;EACA,MAAM,EAAE,YAAY,eAAe;AAEnC,MAAI,CAAC,WACH,0BAAyB;AAG3B,MAAI,WACF,0BAAyB;AAG3B,SAAO;;CAGT,oBAAoB,uBAAiC;EACnD,MAAM,eAAe,GAAG,KAAK,oCAC3B,KAAK,iBAAiB,EAAE,iBAAiB,uBAAuB,CAAC,CAClE,CAAC;EAEF,MAAM,wBAAwB,KAAK,+BAA+B;EAElE,MAAM,OAAO,KAAK,kCAAkC;AAEpD,SAAO,GAAG,KAAK,sCAAsC,GAAG,wBAAwB,OAAO;;CAGzF,oCAAoC,QAAgB;EAClD,IAAI,OAAO,KAAK;EAChB,IAAI,aAAa,KAAK;AACtB,MAAI,YAAY,aAAa,WAC3B;OAAI,eAAe,KAAK,EAAE;AACxB,WAAO,YAAY,UAAU;AAC7B,iBAAa,KAAK,QAAQ,QAAQ,GAAG;;;AAIzC,MAAI,qBAAqB,KAAK,CAC5B,QAAO,GAAG,KAAK;EAEjB,MAAM,MAAM,gBAAgB,eAAe,WAAW,CAAC;AAEvD,SAAO,kCAAkC,KAAK,MAAM,OAAO,QAAQ;;CAGrE,iBAAiB,EAAE,mBAAkD;EACnE,MAAM,SAAS,CAAC,GAAG,gBAAgB;AAEnC,SAAO,GAAG,KAAK,kBAAkB,OAAO,CAAC;;CAG3C,gCAAgC;EAC9B,IAAIC;AACJ,MAAI,YAAY,gCAAgC;;;;;GAK9C,MAAM,WAAW,KAAK,KAAK,YAAY,YAAY,WAAW,UAAU;GACxE,MAAM,SAAS,YAAY;AAK3B,4BAJ6C,KAC1C,SAAS,UAAU,OAAO,CAC1B,MAAM,KAAK,IAAI,CACf,KAAK,KAAK,MAAM,IAAI;;;;;;AAOvB,2BAAyB,YAAY;AAEvC,SAAO,gCAAgC,uBAAuB;;CAGhE,mCAAmC;EACjC,IAAI,2BAA2B;AAE/B,MAAI,KAAK,SAAS;AAChB,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;;AAG9B,SAAO;;CAGT,uCAAuC;EACrC,IAAI,mBAAmB,KAAK,4BAA4B;AACxD,sBAAoB,KAAK,uBAAuB;AAChD,sBAAoB;AACpB,SAAO;;CAGT,wBAAwB;AACtB,SAAO,CAAC,GAAG,KAAK,cAAc,CAC3B,KAAI,SAAQ;GACX,MAAM,EAAE,kBAAkB,WAAW,cACnC,KAAK,sBAAsB,KAAK;AAClC,OAAI,iBACF,QAAO,YAAY,KAAK,4BACtB,WACA,UACD,CAAC,cAAc,YAAY,UAAU;YAC7B,YAAY,UAAU,SAAS,KAAK,CAC7C,QAAO,YAAY,eAAe,KAAK,CAAC,0BAA0B,eAAe,KAAK,CAAC;OAEvF,QAAO,YAAY,eAAe,KAAK,CAAC,yBAAyB,eAAe,KAAK,CAAC;IAExF,CACD,KAAK,QAAQ;;CAGlB,sBAAsB,MAAc;EAClC,MAAMC,kCAA0D,EAC9D,cAAc,YACf;AACD,OAAK,MAAM,kBAAkB,CAAC,eAAe,CAC3C,KAAI,KAAK,SAAS,eAAe,EAAE;GACjC,MAAM,4BAA4B,KAAK,QAAQ,eAAe;AAE9D,UAAO;IACL,kBAAkB;IAClB,WAAW,KAAK,UAAU,GAAG,0BAA0B;IACvD,WAAW,gCAAgC;IAC5C;;AAGL,SAAO,EAAE,kBAAkB,OAAO;;CAGpC,4BAA4B,WAAmB,WAAmB;AAIhE,SAAO,GAHwB,eAAe,UAAU,GAC3B,eAAe,UAAU,CAEE;;CAG1D,iBAAiB,iBAA2B;EAC1C,IAAI,UAAU;AAEd,aAAW;AACX,aAAW;AACX,aAAW,KAAK,gBAAgB,KAAK,IAAI;AACzC,aAAW;AACX,aAAW;AACX,SAAO;;CAGT,kBAAkB,iBAAoC;EACpD,IAAI,UAAU;AAEd,aAAW;AACX,aAAW;AACX,aAAW,KAAK,OAAO,oBAAoB,WAAW,kBAAkB,gBAAgB,KAAK,QAAQ;AACrG,aAAW;AACX,aAAW;AACX,SAAO;;CAGT,0BAA0B;EACxB,IAAI,OAAO,KAAK;EAChB,IAAI,aAAa,KAAK;AACtB,MAAI,eAAe,KAAK,EAAE;AACxB,UAAO,YAAY,UAAU;AAC7B,gBAAa,KAAK,QAAQ,QAAQ,GAAG;;AAGvC,SAAO,eAAe,WAAW;;CAGnC,MAAM,uBAAuB;AAC3B,OAAK,MAAM,kBAAkB,KAAK,iBAAiB;GACjD,MAAM,EACJ,YACA,WACA,UAEA,WACA,YACA,qBAEA,WAEA,WACA,YACA,YACA,qBAEA,WACA,WACA,YACE;GAEJ,MAAM,QAAQ,gBAAgB,KAAK,QAAQ,eAAe,MAAM;GAChE,MAAM,YAAY,eAAe,eAAe,MAAM;GAEtD,MAAM,EACJ,cACA,eACA,qBACA,sBACA,yBACA,6BACE,KAAK,2CAA2C,MAAM;GAE1D,MAAM,EAAE,eAAe,yBACrB,KAAK,iDAAiD,MAAM;AAE9D,OAAI,YAAY;IACd,MAAM,UAAU;KACd;KACA;KACA,YAAY,UAAU,iDAAiD,UAAU;KAClF;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,WAAW,YAAY,EACpE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,aACb,cAAc,oBAAoB,GAAG,qBAAqB,UAAU,UAAU,iCAC/E,GACF;;AAGH,OAAI,WAAW;IACb,MAAM,UAAU;KACd;KACA;KACA;KACA,YAAY,UAAU,2CAA2C,UAAU;KAC3E,YAAY,UAAU,iDAAiD,UAAU;KACjF,YAAY,UAAU,wCAAwC,UAAU;KACzE;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,UAAU,YAAY,EACnE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,YACb,cAAc,oBAAoB,GAAG,qBAAqB,GAAG,qBAAqB,UAAU,UAAU,6CAA6C,UAAU,uHAAuH,UAAU,sCAC/R,GACF;;AAGH,OAAI,UAAU;IACZ,MAAM,UAAU;KACd;KACA;KACA;KACA,YAAY,UAAU,2CAA2C,UAAU;KAC3E,YAAY,UAAU,iDAAiD,UAAU;KACjF,YAAY,UAAU,wCAAwC,UAAU;KACzE;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,SAAS,YAAY,EAClE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,WACb,cAAc,wBAAwB,GAAG,yBAAyB,GAAG,qBAAqB,UAAU,UAAU,6CAA6C,UAAU,uHAAuH,UAAU,uCACvS,GACF;;AAGH,OAAI,WAAW;IACb,MAAM,UAAU;KACd;KACA;KACA,YAAY,UAAU,4CAA4C,UAAU;KAC5E,YAAY,UAAU,qDAAqD,UAAU;KACtF;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,UAAU,YAAY,EACnE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,YACb,cAAc,oBAAoB,GAAG,qBAAqB,kBAAkB,UAAU,2BAA2B,UAAU,wCAC5H,GACF;;AAGH,OAAI,YAAY;IACd,MAAM,UAAU,CACd,YAAY,UAAU,gDAAgD,UAAU,yBACjF;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,WAAW,YAAY,EACpE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,aACb,8BAA8B,UAAU,uCAAuC,UAAU,mCACvF,YAAY,aAAa,aACzB,YAAY,aAAa,cACrB,KACA,yCACL,KACF,GACF;;AAGH,OAAI,qBAAqB;IACvB,MAAM,UAAU,CACd,YAAY,UAAU,yDAAyD,UAAU,kCAC1F;AACD,UAAM,gBACJ,KAAK,KACH,YAAY,YACZ,WAAW,oBAAoB,YAChC,EACD,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,sBACb,8BAA8B,UAAU,gDAAgD,UAAU,4CAChG,YAAY,aAAa,aACzB,YAAY,aAAa,cACrB,KACA,yCACL,KACF,GACF;;AAGH,OAAI,WAAW;IACb,MAAM,UAAU;KACd;KACA;KACA,YAAY,UAAU,iDAAiD,UAAU;KAClF;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,UAAU,YAAY,EACnE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,YACb,cAAc,oBAAoB,GAAG,qBAAqB,UAAU,UAAU,kCAC/E,GACF;;AAGH,OAAI,YAAY;IACd,MAAM,UAAU,CACd,YAAY,UAAU,2CAA2C,UAAU,oBAC5E;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,WAAW,YAAY,EACpE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,aACb,qBAAqB,UAAU,uCAChC,GACF;;AAGH,OAAI,WAAW;IACb,MAAM,UAAU;KACd;KACA;KACA,YAAY,UAAU,4CAA4C,UAAU;KAC5E,YAAY,UAAU,qDAAqD,UAAU;KACrF,YAAY,UAAU,iDAAiD,UAAU;KAClF;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,UAAU,YAAY,EACnE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,YACb,cAAc,oBAAoB,GAAG,qBAAqB,kBAAkB,UAAU,2BAA2B,UAAU,6CAA6C,UAAU,kCACnL,GACF;;AAGH,OAAI,YAAY;IACd,MAAM,UAAU,CACd,YAAY,UAAU,wDAAwD,UAAU,kCACxF,YAAY,UAAU,2CAA2C,UAAU,oBAC5E;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,WAAW,YAAY,EACpE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,aACb,oBAAoB,UAAU,8CAA8C,UAAU,uCACvF,GACF;;AAGH,OAAI,qBAAqB;IACvB,MAAM,UAAU,CACd,YAAY,UAAU,yDAAyD,UAAU,kCAC1F;AACD,UAAM,gBACJ,KAAK,KACH,YAAY,YACZ,WAAW,oBAAoB,YAChC,EACD,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,sBACb,8BAA8B,UAAU,gDAAgD,UAAU,4CAChG,YAAY,aAAa,aACzB,YAAY,aAAa,cACrB,KACA,yCACL,KACF,GACF;;AAGH,OAAI,WAAW;IACb,MAAM,UAAU;KACd;KACA;KACA,YAAY,UAAU,iDAAiD,UAAU;KACjF,YAAY,UAAU,4CAA4C,UAAU;KAC5E,YAAY,UAAU,qDAAqD,UAAU;KACrF,YAAY,UAAU,4CAA4C,UAAU;KAC5E,YAAY,UAAU,qDAAqD,UAAU;KACtF;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,UAAU,YAAY,EACnE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,SACb,cAAc,oBAAoB,GAAG,qBAAqB,UAAU,UAAU,kDAAkD,UAAU,2BAA2B,UAAU,yDAAyD,UAAU,2BAA2B,UAAU,yCACxR,GACF;;AAGH,OAAI,WAAW;IACb,MAAM,UAAU;KACd;KACA,YAAY,UAAU,2CAA2C,UAAU;KAC3E,YAAY,UAAU,iDAAiD,UAAU;KAClF;IACD,MAAM,sBAAsB,EAAE;AAC9B,QAAI,KAAK,0BAA0B,YAAY;AAC7C,SAAI,KAAK,0BAA0B,WAAW,OAAO;AACnD,cAAQ,KACN,YAAY,UAAU,oDAAoD,UAAU,6BACrF;AACD,0BAAoB,KAClB,sCAAsC,UAAU,+CACjD;;AAEH,SAAI,KAAK,0BAA0B,WAAW,KAAK;AACjD,cAAQ,KACN,YAAY,UAAU,kDAAkD,UAAU,2BACnF;AACD,0BAAoB,KAClB,SAAS,UAAU,0CACpB;;AAEH,SAAI,KAAK,0BAA0B,WAAW,KAAK;AACjD,cAAQ,KACN,YAAY,UAAU,kDAAkD,UAAU,2BACnF;AACD,0BAAoB,KAClB,SAAS,UAAU,0CACpB;;AAEH,SAAI,KAAK,0BAA0B,WAAW,KAAK;AACjD,cAAQ,KACN,YAAY,UAAU,kDAAkD,UAAU,2BACnF;AACD,0BAAoB,KAClB,SAAS,UAAU,0CACpB;;AAEH,SAAI,KAAK,0BAA0B,WAAW,KAAK;AACjD,cAAQ,KACN,YAAY,UAAU,kDAAkD,UAAU,2BACnF;AACD,0BAAoB,KAClB,SAAS,UAAU,0CACpB;;;AAIL,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,UAAU,YAAY,EACnE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,YACb,cAAc,qBAAqB,UAAU,UAAU,6CAA6C,UAAU,qGAAqG,oBAAoB,KACrO,KACD,CAAC,KACH,GACF;;AAGH,OAAI,SAAS;IACX,MAAM,UAAU;KACd,YAAY,UAAU,2CAA2C,UAAU;KAC3E,YAAY,UAAU,4DAA4D,UAAU;KAC5F,YAAY,UAAU,+DAA+D,UAAU;KAC/F,YAAY,UAAU,wCAAwC,UAAU;KACzE;AACD,UAAM,gBACJ,KAAK,KAAK,YAAY,YAAY,WAAW,QAAQ,YAAY,EACjE,GAAG,KAAK,yBACN,QACD,GAAG,KAAK,8BACP,GAAG,UAAU,UACb,qBAAqB,UAAU,uDAAuD,UAAU,2CAA2C,UAAU,wEAAwE,UAAU,+HAA+H,UAAU,4BACjX,GACF;;;;CAKP,yBAAyB,SAAiC;EACxD,IAAI,mBAAmB,KAAK,4BAA4B;AACxD,sBACE,SAAS,QAAO,eAAc,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ,IAAI;AAC/D,sBAAoB;AACpB,SAAO;;CAGT,2CAA2C,OAAyB;EAClE,MAAM,EAAE,MAAM,cAAc;EAE5B,MAAM,4BAA4B,2BAA2B,MAAM;EAEnE,MAAM,eAAe,YAAY,mBAC7B,YAAY,eAAe,UAAU,CAAC,uCAAuC,eAAe,UAAU,CAAC,kBACvG;EAEJ,MAAM,gBACJ,YAAY,qBAAqB,4BAC7B,YAAY,eAAe,UAAU,CAAC,wCAAwC,eAAe,UAAU,CAAC,mBACxG;EAEN,IAAI,sBAAsB;EAC1B,IAAI,uBAAuB;EAC3B,IAAI,0BAA0B;EAC9B,IAAI,2BAA2B;AAE/B,MAAI,YAAY,kBAAkB;GAChC,MAAM,wBAAwB,GAAG,eAAe,UAAU,CAAC;AAC3D,yBAAsB,WAAW,sBAAsB;AACvD,6BAA0B,wBAAwB,sBAAsB;;AAG1E,MAAI,YAAY,qBAAqB,2BAA2B;GAC9D,MAAM,yBAAyB,GAAG,eAAe,UAAU,CAAC;AAC5D,0BAAuB,YAAY,uBAAuB;AAC1D,8BAA2B,yBAAyB,uBAAuB;;AAG7E,SAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACD;;CAGH,iDAAiD,OAAyB;EACxE,MAAM,EAAE,MAAM,cAAc;EAC5B,IAAI,eAAe;AAEnB,MACE,CAAC,cAAc,QAAQ,CAAC,SAAS,YAAY,SAAS,IACtD,YAAY,iBAAiB,SAAS,iBAAiB,CAEvD,gBAAe,GAAG,eAAe,UAAU,CAAC;MAE5C,gBAAe,GAAG,eAAe,UAAU,CAAC;AAM9C,SAAO;GAAE,eAHa,YAAY,aAAa,iCAAiC,aAAa;GAGrE,sBAFK,qBAAqB,aAAa,gBAAgB,aAAa;GAE9C"}
1
+ {"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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"}