UNPKG

@ladislaogarcia/prisma-zod-generator

Version:

Prisma 2+ generator to emit Zod schemas from your Prisma schema

83 lines (77 loc) 2.32 kB
import { DMMF } from '@prisma/generator-helper'; import PRISMA_VERSION from '../utils/getPrismaVersion'; import { checkModelHasModelRelation } from './model-helpers'; export function addMissingInputObjectTypesForModelArgs( inputObjectTypes: DMMF.InputType[], models: DMMF.Model[], isGenerateSelect: boolean, isGenerateInclude: boolean, ) { const modelArgsInputObjectTypes = generateModelArgsInputObjectTypes( models, isGenerateSelect, isGenerateInclude, ); for (const modelArgsInputObjectType of modelArgsInputObjectTypes) { inputObjectTypes.push(modelArgsInputObjectType); } } function getModelArgsTypeName(modelName: string) { const modelArgsPrepend = PRISMA_VERSION && PRISMA_VERSION >= 6 ? 'Default' : ''; return `${modelName}${modelArgsPrepend}Args`; } function generateModelArgsInputObjectTypes( models: DMMF.Model[], isGenerateSelect: boolean, isGenerateInclude: boolean, ) { const modelArgsInputObjectTypes: DMMF.InputType[] = []; for (const model of models) { const { name: modelName } = model; const fields: DMMF.SchemaArg[] = []; if (isGenerateSelect) { const selectField: DMMF.SchemaArg = { name: 'select', isRequired: false, isNullable: false, inputTypes: [ { isList: false, type: `${modelName}Select`, location: 'inputObjectTypes', namespace: 'prisma', }, ], }; fields.push(selectField); } const hasRelationToAnotherModel = checkModelHasModelRelation(model); if (isGenerateInclude && hasRelationToAnotherModel) { const includeField: DMMF.SchemaArg = { name: 'include', isRequired: false, isNullable: false, inputTypes: [ { isList: false, type: `${modelName}Include`, location: 'inputObjectTypes', namespace: 'prisma', }, ], }; fields.push(includeField); } const modelArgsInputObjectType: DMMF.InputType = { name: getModelArgsTypeName(modelName), constraints: { maxNumFields: null, minNumFields: null, }, fields, }; modelArgsInputObjectTypes.push(modelArgsInputObjectType); } return modelArgsInputObjectTypes; }