@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.
66 lines • 3.72 kB
JavaScript
;
/**
* @module createBaseCrudModule
* @description Creates a dynamically generated NestJS module with CRUD operations for a specific model
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createBaseCrudModule = createBaseCrudModule;
const internalTypes_1 = require("./internalTypes");
const createBaseCrudService_1 = require("./createBaseCrudService");
const createBaseCrudResolver_1 = require("./createBaseCrudResolver");
const decorators_1 = require("./decorators");
const createCombinedRelationResolverClass_1 = require("./createCombinedRelationResolverClass");
const createSubscriptionResolver_1 = require("./createSubscriptionResolver");
/**
* Creates a NestJS dynamic module that provides CRUD operations for a specific model
*
* @template Item - The entity type this CRUD module will manage
* @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 {symbol} dataProviderToken - Symbol for the data provider token
* @param {symbol} fieldSelectionProviderToken - Symbol for the field selection provider token
* @param {CrudModuleOptions<Item, CreateInput, UpdateInput, UpdateManyInput, WhereInput>} options - Configuration options for the CRUD module
* @returns {DynamicModule} A dynamically generated NestJS module with CRUD capabilities
*/
function createBaseCrudModule(dataProviderToken, fieldSelectionProviderToken, options) {
const SubscriptionFilter = options.subscriptionResolver?.filter ?? internalTypes_1.DefaultSubscriptionFilter;
const serviceToken = Symbol(`${options.modelName}Service`);
const subscriptionResolversToken = Symbol(`${options.modelName}SubscriptionResolvers`);
const BaseCrudService = (0, createBaseCrudService_1.createBaseCrudService)(options.modelName, dataProviderToken, fieldSelectionProviderToken);
const BaseCrudResolver = (0, createBaseCrudResolver_1.createBaseCrudResolver)(serviceToken, subscriptionResolversToken, SubscriptionFilter, options);
const SubscriptionResolver = (0, createSubscriptionResolver_1.createSubscriptionResolver)(options.modelName, dataProviderToken, fieldSelectionProviderToken, options.subscriptionResolver?.resolver);
const BaseCrudServiceProvider = { provide: serviceToken, useClass: BaseCrudService };
const SubscriptionResolverProvider = { provide: subscriptionResolversToken, useClass: SubscriptionResolver };
const CrudResolver = (0, createCombinedRelationResolverClass_1.createCombinedRelationResolverClass)(options.modelName, options.entity, BaseCrudResolver, options.resolvers);
class BaseCrudModule {
/**
* Creates and configures the CRUD module with all necessary providers
*
* @returns {DynamicModule} Configured NestJS module
*/
static forRoot() {
return {
global: true,
module: BaseCrudModule,
imports: options.imports,
exports: options.exports,
controllers: options.controllers,
providers: [
CrudResolver,
BaseCrudServiceProvider,
SubscriptionResolverProvider,
...(options.providers ?? []),
],
};
}
}
Object.defineProperty(BaseCrudModule, 'name', {
value: `${(0, decorators_1.firstLetterUppercase)(options.modelName)}Module`,
writable: false,
});
return BaseCrudModule.forRoot();
}
//# sourceMappingURL=createBaseCrudModule.js.map