@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
42 lines (39 loc) • 1.97 kB
JavaScript
import { EApiAuthorizationPolicyOnType } from '../../../../enum/class/authorization/policy/on-type.enum.js';
import { EApiRouteType } from '../../../../enum/decorator/api/route-type.enum.js';
import { CapitalizeString } from '../../../../utility/capitalize-string.utility.js';
import { LoggerUtility } from '../../../../utility/logger.utility.js';
const policyExecutorLogger = LoggerUtility.getLogger("ApiAuthorizationPolicyExecutor");
class ApiAuthorizationPolicyExecutor {
static async execute(subscriber, action, context) {
const routeType = context.routeType ?? this.resolveRouteType(action);
if (routeType) {
const hookName = `on${EApiAuthorizationPolicyOnType.BEFORE}${CapitalizeString(routeType)}`;
const hook = subscriber[hookName];
if (typeof hook === "function") {
policyExecutorLogger.verbose(`Executing authorization policy hook ${hookName} from ${subscriber.constructor.name} for action "${action}"`);
const typedHook = hook;
const result = typedHook.call(subscriber, context);
return this.normalizeRuleResult(await result);
}
return [];
}
if (typeof subscriber.getCustomActionRule !== "function") {
return [];
}
const customActionHook = subscriber.getCustomActionRule.bind(subscriber);
const customResult = customActionHook(action, context);
return this.normalizeRuleResult(await customResult);
}
static normalizeRuleResult(result) {
if (Array.isArray(result)) {
return result.filter((rule) => rule != null);
}
return result ? [result] : [];
}
static resolveRouteType(action) {
const routeTypes = Object.values(EApiRouteType);
return routeTypes.find((routeType) => routeType === action);
}
}
export { ApiAuthorizationPolicyExecutor };
//# sourceMappingURL=executor.class.js.map