@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
52 lines (49 loc) • 2.87 kB
JavaScript
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