@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
51 lines (48 loc) • 3.22 kB
JavaScript
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