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