UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

51 lines (48 loc) 3.22 kB
import { __decorate, __metadata } from '../../../external/tslib/tslib.es6.js'; import { SUBSCRIBER_API_DECORATOR_CONSTANT } from '../../../constant/decorator/api/subscriber.constant.js'; import { Injectable } from '@nestjs/common'; import { DiscoveryService } from '@nestjs/core'; import { LoggerUtility } from '../../../utility/logger.utility.js'; import { ApiFunctionSubscriberBase } from './function-base.class.js'; import { apiSubscriberRegistry } from './registry.class.js'; import { ApiRouteSubscriberBase } from './route-base.class.js'; const subscriberLogger = LoggerUtility.getLogger("ApiSubscriberDiscoveryService"); let ApiSubscriberDiscoveryService = class ApiSubscriberDiscoveryService { discoveryService; constructor(discoveryService) { this.discoveryService = discoveryService; } onModuleInit() { subscriberLogger.verbose("Starting subscriber discovery..."); const providers = this.discoveryService.getProviders(); this.registerFunctionSubscribers(providers); this.registerRouteSubscribers(providers); subscriberLogger.verbose("Subscriber discovery finished."); } registerFunctionSubscribers(providers) { const functionSubscribers = providers.filter((wrapper) => wrapper.instance && wrapper.metatype && wrapper.instance instanceof ApiFunctionSubscriberBase && Reflect.hasMetadata(SUBSCRIBER_API_DECORATOR_CONSTANT.FUNCTION_METADATA_KEY, wrapper.metatype)); for (const wrapper of functionSubscribers) { // eslint-disable-next-line @elsikora/typescript/no-non-null-assertion const properties = Reflect.getMetadata(SUBSCRIBER_API_DECORATOR_CONSTANT.FUNCTION_METADATA_KEY, wrapper.metatype); // eslint-disable-next-line @elsikora/typescript/no-unsafe-argument apiSubscriberRegistry.registerFunctionSubscriber(properties, wrapper.instance); subscriberLogger.verbose(`Registered function subscriber ${wrapper.name} for entity ${properties.entity.name} with priority ${properties.priority ?? 0}`); } } registerRouteSubscribers(providers) { const routeSubscribers = providers.filter((wrapper) => wrapper.instance && wrapper.metatype && wrapper.instance instanceof ApiRouteSubscriberBase && Reflect.hasMetadata(SUBSCRIBER_API_DECORATOR_CONSTANT.ROUTE_METADATA_KEY, wrapper.metatype)); for (const wrapper of routeSubscribers) { // eslint-disable-next-line @elsikora/typescript/no-non-null-assertion const properties = Reflect.getMetadata(SUBSCRIBER_API_DECORATOR_CONSTANT.ROUTE_METADATA_KEY, wrapper.metatype); // eslint-disable-next-line @elsikora/typescript/no-unsafe-argument apiSubscriberRegistry.registerRouteSubscriber(properties, wrapper.instance); subscriberLogger.verbose(`Registered route subscriber ${wrapper.name} for entity ${properties.entity.name} with priority ${properties.priority ?? 0}`); } } }; ApiSubscriberDiscoveryService = __decorate([ Injectable(), __metadata("design:paramtypes", [DiscoveryService]) ], ApiSubscriberDiscoveryService); export { ApiSubscriberDiscoveryService }; //# sourceMappingURL=discovery-service.class.js.map