UNPKG

@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
"use strict"; /** * @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