@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
53 lines (49 loc) • 2.77 kB
JavaScript
;
var controller_constant = require('../../../constant/decorator/api/controller.constant.js');
var service_constant = require('../../../constant/decorator/api/service.constant.js');
var capitalizeString_utility = require('../../../utility/capitalize-string.utility.js');
var logger_utility = require('../../../utility/logger.utility.js');
var registry_class = require('./registry.class.js');
const subscriberLogger = logger_utility.LoggerUtility.getLogger("ApiSubscriberExecutor");
class ApiSubscriberExecutor {
static async executeFunctionSubscribers(constructor, entity, functionType, onType, context, error) {
if (!Reflect.hasMetadata(service_constant.SERVICE_API_DECORATOR_CONSTANT.OBSERVABLE_METADATA_KEY, constructor)) {
return context.result;
}
const subscribers = registry_class.apiSubscriberRegistry.getFunctionSubscribers(entity.constructor.name);
let result = context.result;
for (const subscriber of subscribers) {
const hookName = `on${onType}${capitalizeString_utility.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_constant.CONTROLLER_API_DECORATOR_CONSTANT.OBSERVABLE_METADATA_KEY, constructor)) {
return context.result;
}
const subscribers = registry_class.apiSubscriberRegistry.getRouteSubscribers(entity.constructor.name);
let result = context.result;
for (const subscriber of subscribers) {
const hookName = `on${onType}${capitalizeString_utility.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;
}
}
exports.ApiSubscriberExecutor = ApiSubscriberExecutor;
//# sourceMappingURL=executor.class.js.map