UNPKG

@elsikora/nestjs-crud-automator

Version:

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

51 lines (48 loc) 2.64 kB
import { CONTROLLER_API_DECORATOR_CONSTANT } from '../../../constant/decorator/api/controller.constant.js'; import { SERVICE_API_DECORATOR_CONSTANT } from '../../../constant/decorator/api/service.constant.js'; import { CapitalizeString } from '../../../utility/capitalize-string.utility.js'; import { LoggerUtility } from '../../../utility/logger.utility.js'; import { apiSubscriberRegistry } from './registry.class.js'; const subscriberLogger = LoggerUtility.getLogger("ApiSubscriberExecutor"); class ApiSubscriberExecutor { static async executeFunctionSubscribers(constructor, entity, functionType, onType, context, error) { if (!Reflect.hasMetadata(SERVICE_API_DECORATOR_CONSTANT.OBSERVABLE_METADATA_KEY, constructor)) { return context.result; } const subscribers = apiSubscriberRegistry.getFunctionSubscribers(entity.constructor.name); let result = context.result; for (const subscriber of subscribers) { const hookName = `on${onType}${CapitalizeString(functionType)}`; const hook = subscriber[hookName]; if (typeof hook === "function") { subscriberLogger.verbose(`Executing function hook ${hookName} from ${subscriber.constructor.name} for entity ${entity.constructor.name}`); const hookResult = (await hook.call(subscriber, { ...context, result }, error)); if (hookResult !== undefined) { result = hookResult; } } } return result; } static async executeRouteSubscribers(constructor, entity, routeType, onType, context, error) { if (!Reflect.hasMetadata(CONTROLLER_API_DECORATOR_CONSTANT.OBSERVABLE_METADATA_KEY, constructor)) { return context.result; } const subscribers = apiSubscriberRegistry.getRouteSubscribers(entity.constructor.name); let result = context.result; for (const subscriber of subscribers) { const hookName = `on${onType}${CapitalizeString(routeType)}`; const hook = subscriber[hookName]; if (typeof hook === "function") { subscriberLogger.verbose(`Executing route hook ${hookName} from ${subscriber.constructor.name} for entity ${entity.constructor.name}`); const hookResult = (await hook.call(subscriber, { ...context, result }, error)); if (hookResult !== undefined) { result = hookResult; } } } return result; } } export { ApiSubscriberExecutor }; //# sourceMappingURL=executor.class.js.map