UNPKG

@elsikora/nestjs-crud-automator

Version:

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

42 lines (39 loc) 1.97 kB
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