@stryke/prisma-trpc-generator
Version:
A fork of the prisma-trpc-generator code to work in ESM with Prisma v6.
128 lines (126 loc) • 4.1 kB
JavaScript
const require_model_helpers = require('./model-helpers.cjs');
//#region src/zod/select-helpers.ts
function addMissingInputObjectTypesForSelect(inputObjectTypes, outputObjectTypes, models) {
const modelCountOutputTypes = getModelCountOutputTypes(outputObjectTypes);
const generatedInputObjectTypes = [
generateModelCountOutputTypeSelectInputObjectTypes(modelCountOutputTypes),
generateModelCountOutputTypeArgsInputObjectTypes(modelCountOutputTypes),
generateModelSelectInputObjectTypes(models)
].flat();
for (const inputObjectType of generatedInputObjectTypes) inputObjectTypes.push(inputObjectType);
}
function getModelCountOutputTypes(outputObjectTypes) {
return outputObjectTypes.filter(({ name }) => name.includes("CountOutputType"));
}
function generateModelCountOutputTypeSelectInputObjectTypes(modelCountOutputTypes) {
const modelCountOutputTypeSelectInputObjectTypes = [];
for (const modelCountOutputType of modelCountOutputTypes) {
const { name: modelCountOutputTypeName, fields: modelCountOutputTypeFields } = modelCountOutputType;
const modelCountOutputTypeSelectInputObjectType = {
name: `${modelCountOutputTypeName}Select`,
constraints: {
maxNumFields: null,
minNumFields: null
},
fields: modelCountOutputTypeFields.map(({ name }) => ({
name,
isRequired: false,
isNullable: false,
inputTypes: [{
isList: false,
type: `Boolean`,
location: "scalar"
}]
}))
};
modelCountOutputTypeSelectInputObjectTypes.push(modelCountOutputTypeSelectInputObjectType);
}
return modelCountOutputTypeSelectInputObjectTypes;
}
function generateModelCountOutputTypeArgsInputObjectTypes(modelCountOutputTypes) {
const modelCountOutputTypeArgsInputObjectTypes = [];
for (const modelCountOutputType of modelCountOutputTypes) {
const { name: modelCountOutputTypeName } = modelCountOutputType;
const modelCountOutputTypeArgsInputObjectType = {
name: `${modelCountOutputTypeName}DefaultArgs`,
constraints: {
maxNumFields: null,
minNumFields: null
},
fields: [{
name: "select",
isRequired: false,
isNullable: false,
inputTypes: [{
isList: false,
type: `${modelCountOutputTypeName}Select`,
location: "inputObjectTypes",
namespace: "prisma"
}]
}]
};
modelCountOutputTypeArgsInputObjectTypes.push(modelCountOutputTypeArgsInputObjectType);
}
return modelCountOutputTypeArgsInputObjectTypes;
}
function generateModelSelectInputObjectTypes(models) {
const modelSelectInputObjectTypes = [];
for (const model of models) {
const { name: modelName, fields: modelFields } = model;
const fields = [];
for (const modelField of modelFields) {
const { name: modelFieldName, isList, type } = modelField;
const isRelationField = require_model_helpers.checkIsModelRelationField(modelField);
const field = {
name: modelFieldName,
isRequired: false,
isNullable: false,
inputTypes: [{
isList: false,
type: "Boolean",
location: "scalar"
}]
};
if (isRelationField) {
const schemaArgInputType = {
isList: false,
type: isList ? `${type}FindManyArgs` : `${type}DefaultArgs`,
location: "inputObjectTypes",
namespace: "prisma"
};
field.inputTypes.push(schemaArgInputType);
}
fields.push(field);
}
if (require_model_helpers.checkModelHasManyModelRelation(model)) {
const _countField = {
name: "_count",
isRequired: false,
isNullable: false,
inputTypes: [{
isList: false,
type: "Boolean",
location: "scalar"
}, {
isList: false,
type: `${modelName}CountOutputTypeDefaultArgs`,
location: "inputObjectTypes",
namespace: "prisma"
}]
};
fields.push(_countField);
}
const modelSelectInputObjectType = {
name: `${modelName}Select`,
constraints: {
maxNumFields: null,
minNumFields: null
},
fields
};
modelSelectInputObjectTypes.push(modelSelectInputObjectType);
}
return modelSelectInputObjectTypes;
}
//#endregion
exports.addMissingInputObjectTypesForSelect = addMissingInputObjectTypesForSelect;