UNPKG

@elsikora/nestjs-crud-automator

Version:

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

52 lines (49 loc) 2.87 kB
import { __decorate, __metadata } from '../../../../external/tslib/tslib.es6.js'; import { ApiAuthorizationPolicyBase } from './base.class.js'; import { ApiAuthorizationPolicyRegistry } from './registry.class.js'; import { AUTHORIZATION_POLICY_DECORATOR_CONSTANT } from '../../../../constant/class/authorization/policy/decorator.constant.js'; import { Injectable } from '@nestjs/common'; import { DiscoveryService } from '@nestjs/core'; import { LoggerUtility } from '../../../../utility/logger.utility.js'; const policyDiscoveryLogger = LoggerUtility.getLogger("ApiAuthorizationPolicyDiscoveryService"); let ApiAuthorizationPolicyDiscoveryService = class ApiAuthorizationPolicyDiscoveryService { discoveryService; registry; constructor(discoveryService, registry) { this.discoveryService = discoveryService; this.registry = registry; } onModuleInit() { policyDiscoveryLogger.verbose("Starting authorization policy discovery..."); const providers = this.discoveryService.getProviders(); const policyProviders = providers.filter((wrapper) => Boolean(wrapper.instance && wrapper.metatype && wrapper.instance instanceof ApiAuthorizationPolicyBase && Reflect.hasMetadata(AUTHORIZATION_POLICY_DECORATOR_CONSTANT.METADATA_KEY, wrapper.metatype))); for (const wrapper of policyProviders) { if (!wrapper.metatype) { continue; } const metadata = Reflect.getMetadata(AUTHORIZATION_POLICY_DECORATOR_CONSTANT.METADATA_KEY, wrapper.metatype); const properties = metadata; if (!properties) { continue; } const policyId = properties.policyId ?? `${properties.entity.name?.toLowerCase() ?? "unknown"}${AUTHORIZATION_POLICY_DECORATOR_CONSTANT.DEFAULT_POLICY_ID_SUFFIX}`; this.registry.registerSubscriber({ cache: properties.cache, description: properties.description, entity: properties.entity, policyId, priority: properties.priority ?? 0, subscriber: wrapper.instance, }); policyDiscoveryLogger.verbose(`Registered authorization policy ${wrapper.name ?? properties.entity.name ?? "UnknownPolicy"} for entity ${properties.entity.name ?? "UnknownEntity"} with priority ${properties.priority ?? 0}`); } policyDiscoveryLogger.verbose(`Authorization policy discovery finished. Registered ${policyProviders.length} providers.`); } }; ApiAuthorizationPolicyDiscoveryService = __decorate([ Injectable(), __metadata("design:paramtypes", [DiscoveryService, ApiAuthorizationPolicyRegistry]) ], ApiAuthorizationPolicyDiscoveryService); export { ApiAuthorizationPolicyDiscoveryService }; //# sourceMappingURL=discovery-service.class.js.map