UNPKG

@elsikora/nestjs-crud-automator

Version:

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

44 lines (40 loc) 2.07 kB
'use strict'; var onType_enum = require('../../../../enum/class/authorization/policy/on-type.enum.js'); var routeType_enum = require('../../../../enum/decorator/api/route-type.enum.js'); var capitalizeString_utility = require('../../../../utility/capitalize-string.utility.js'); var logger_utility = require('../../../../utility/logger.utility.js'); const policyExecutorLogger = logger_utility.LoggerUtility.getLogger("ApiAuthorizationPolicyExecutor"); class ApiAuthorizationPolicyExecutor { static async execute(subscriber, action, context) { const routeType = context.routeType ?? this.resolveRouteType(action); if (routeType) { const hookName = `on${onType_enum.EApiAuthorizationPolicyOnType.BEFORE}${capitalizeString_utility.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(routeType_enum.EApiRouteType); return routeTypes.find((routeType) => routeType === action); } } exports.ApiAuthorizationPolicyExecutor = ApiAuthorizationPolicyExecutor; //# sourceMappingURL=executor.class.js.map