@bazuka5801/prisma-zod-generator
Version:
Prisma 2+ generator to emit Zod schemas from your Prisma schema
78 lines (71 loc) • 2.06 kB
text/typescript
import { DMMF } from '@prisma/generator-helper';
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 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: `${modelName}Args`,
constraints: {
maxNumFields: null,
minNumFields: null,
},
fields,
};
modelArgsInputObjectTypes.push(modelArgsInputObjectType);
}
return modelArgsInputObjectTypes;
}