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.

102 lines 4.63 kB
"use strict"; /** * @module crudModulesFactory * @description Factory for creating and registering CRUD modules */ Object.defineProperty(exports, "__esModule", { value: true }); exports.CrudModulesFactory = void 0; const createBaseCrudModule_1 = require("./createBaseCrudModule"); const graphql_subscriptions_1 = require("graphql-subscriptions"); const crudModuleConfig_1 = require("./crudModuleConfig"); const decorators_1 = require("./decorators"); /** * Factory class for creating and registering CRUD modules */ class CrudModulesFactory { /** * Creates a factory builder for a specific entity type * * @template Item - The entity type * @param {Type<Item>} entity - The entity class */ static forEntity(entity) { return { /** * Configures a CRUD module for this entity * * @template CreateInput - The input type for create operations * @template UpdateInput - The input type for update operations * @template UpdateManyInput - The input type for update many operations * @template WhereInput - The input type for query filters * * @param {{ modelName: string; createInput: Type<CreateInput>; updateInput: Type<UpdateInput>; updateManyInput: Type<UpdateManyInput>; whereInput: Type<WhereInput> }} config - Configuration for the CRUD module * @returns {CrudModuleConfig<Item, CreateInput, UpdateInput, UpdateManyInput, WhereInput>} A configuration builder for further customization */ withConfig(config) { return new crudModuleConfig_1.CrudModuleConfig({ ...config, findManyArgs: (0, decorators_1.createFindMany)(config.whereInput, config.modelName), entity, }); } }; } /** * Creates a factory with specified provider implementations * * @param {Type<DataProvider>} dataProvider - The data provider implementation * @param {Type<FieldSelectionProvider>} fieldSelectionProvider - The field selection provider implementation * @returns An object with methods to configure and create modules */ static using(dataProvider, fieldSelectionProvider) { return { /** * Creates and registers all CRUD modules using the specified providers * * @param {CrudModuleConfig<any, any, any, any, any>[]} configBuilders - Array of CRUD module configurations * @param {any} [configBuilders] - Optional provider-specific configuration * @returns {DynamicModule} A NestJS dynamic module incorporating all configured CRUD modules */ forRoot(configBuilders) { // Create tokens for the providers const dataProviderToken = Symbol('DataProvider'); const fieldSelectionProviderToken = Symbol('FieldSelectionProvider'); // Create providers const pubSubProvider = { provide: decorators_1.PUB_SUB_SYMBOL, useValue: new graphql_subscriptions_1.PubSub() }; const dataProviderInstanceProvider = { provide: dataProviderToken, useClass: dataProvider }; const fieldSelectionProviderInstanceProvider = { provide: fieldSelectionProviderToken, useClass: fieldSelectionProvider }; // Create each CRUD module const crudModules = configBuilders.map(builder => { return (0, createBaseCrudModule_1.createBaseCrudModule)(dataProviderToken, fieldSelectionProviderToken, builder.options); }); // Return the combined module return { global: true, imports: crudModules, module: CrudModulesFactory, providers: [ pubSubProvider, dataProviderInstanceProvider, fieldSelectionProviderInstanceProvider ], exports: [ pubSubProvider, dataProviderInstanceProvider, fieldSelectionProviderInstanceProvider ], }; } }; } } exports.CrudModulesFactory = CrudModulesFactory; //# sourceMappingURL=crudModulesFactory.js.map