@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
52 lines (49 loc) • 2.89 kB
JavaScript
;
var tslib_es6 = require('../../../../external/tslib/tslib.es6.js');
var base_class = require('./base.class.js');
var registry_class = require('./registry.class.js');
var decorator_constant = require('../../../../constant/class/authorization/policy/decorator.constant.js');
var common = require('@nestjs/common');
var core = require('@nestjs/core');
var logger_utility = require('../../../../utility/logger.utility.js');
const policyDiscoveryLogger = logger_utility.LoggerUtility.getLogger("ApiAuthorizationPolicyDiscoveryService");
exports.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 base_class.ApiAuthorizationPolicyBase && Reflect.hasMetadata(decorator_constant.AUTHORIZATION_POLICY_DECORATOR_CONSTANT.METADATA_KEY, wrapper.metatype)));
for (const wrapper of policyProviders) {
if (!wrapper.metatype) {
continue;
}
const metadata = Reflect.getMetadata(decorator_constant.AUTHORIZATION_POLICY_DECORATOR_CONSTANT.METADATA_KEY, wrapper.metatype);
const properties = metadata;
if (!properties) {
continue;
}
const policyId = properties.policyId ?? `${properties.entity.name?.toLowerCase() ?? "unknown"}${decorator_constant.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.`);
}
};
exports.ApiAuthorizationPolicyDiscoveryService = tslib_es6.__decorate([
common.Injectable(),
tslib_es6.__metadata("design:paramtypes", [core.DiscoveryService,
registry_class.ApiAuthorizationPolicyRegistry])
], exports.ApiAuthorizationPolicyDiscoveryService);
//# sourceMappingURL=discovery-service.class.js.map