@eleven-am/nestjs-graphql-crud
Version:
nestjs-graphql-crud is a library that aims to reduce the boilerplate code needed to create a GraphQL CRUD API.
54 lines • 2.64 kB
JavaScript
;
/**
* @module createCombinedRelationResolverClass
* @description Creates a resolver class that handles all relations for an entity
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCombinedRelationResolverClass = createCombinedRelationResolverClass;
const decorators_1 = require("./decorators");
const createCustomResolver_1 = require("./createCustomResolver");
const createOneToManyResolver_1 = require("./createOneToManyResolver");
const createOneToOneResolver_1 = require("./createOneToOneResolver");
/**
* Creates a combined resolver class that handles all relation types for an entity
*
* @template Item - The parent entity type
* @template Target - The related entity type
* @template WhereInput - The input type for query filters
*
* @param {string} modelName - The name of the model
* @param {Type<Item>} item - The parent entity class
* @param {RelationResolverConfig<Item, Target, WhereInput>[]} relationConfigs - Array of relation configurations
* @param {Type<IResolver<any, any, any, any, any, Target, any, any>>} ParentClass - The parent resolver class to extend
* @returns {Constructor<IResolver<Item, Target, WhereInput>>} A class that handles all relations
*/
function createCombinedRelationResolverClass(modelName, item, ParentClass, relationConfigs) {
if (!relationConfigs) {
return ParentClass;
}
const MapCustomResolver = (options) => {
if (!options) {
return ParentClass;
}
const { customResolvers, factoryClass } = options;
return customResolvers
.reduce((AccumulatorClass, config) => (0, createCustomResolver_1.createCustomResolver)(item, modelName, factoryClass, config, AccumulatorClass), ParentClass);
};
const MapRelationResolver = (config, ParentClass) => config
.reduce((AccumulatorClass, config) => {
if ('oneToOneRelation' in config) {
return (0, createOneToOneResolver_1.createOneToOneResolver)(modelName, item, config, AccumulatorClass);
}
else {
return (0, createOneToManyResolver_1.createOneToManyResolver)(modelName, item, config, AccumulatorClass);
}
}, ParentClass);
const FirstClass = MapCustomResolver(relationConfigs.customResolvers);
const FinalClass = MapRelationResolver(relationConfigs.relationResolvers, FirstClass);
Object.defineProperty(FinalClass, 'name', {
value: `${(0, decorators_1.firstLetterUppercase)(modelName)}RelationsResolver`,
writable: false,
});
return FinalClass;
}
//# sourceMappingURL=createCombinedRelationResolverClass.js.map