UNPKG

@djeka07/nestjs-azure-service-bus

Version:

NestJS Azure service bus based on @azure/service-bus package

109 lines 5.36 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExplorerService = void 0; const common_1 = require("@nestjs/common"); const modules_container_1 = require("@nestjs/core/injector/modules-container"); const metadata_scanner_1 = require("@nestjs/core/metadata-scanner"); const constants_1 = require("@nestjs/core/injector/constants"); const lodash_isnil_1 = __importDefault(require("lodash.isnil")); const lodash_flatmap_1 = __importDefault(require("lodash.flatmap")); const lodash_get_1 = __importDefault(require("lodash.get")); const clients_1 = require("../clients"); const azure_service_bus_constants_1 = require("../constants/azure-service-bus.constants"); let ExplorerService = class ExplorerService { constructor(modulesContainer, metadataScanner) { this.modulesContainer = modulesContainer; this.metadataScanner = metadataScanner; } classMethodsWithMetaAtKey(component, metaKey) { const { instance } = component; if (!instance) { return []; } const prototype = Object.getPrototypeOf(instance); return this.metadataScanner .getAllMethodNames(prototype) .map((name) => this.extractMethodMetaAtKey(metaKey, component, prototype, name)) .filter((x) => !(0, lodash_isnil_1.default)(x.meta)); } async getMethodsWithSubscriberKey() { const methods = this.getProviderMethods(azure_service_bus_constants_1.AZURE_SERVICE_BUS_SUBSCRIBER); return methods; } async getAzureServiceBusClientProviders() { return this.getExploredClasses(true, (x) => x.instance instanceof clients_1.AzureServiceBusClient); } async getExploredClasses(excludeControllers = false, filter = () => true) { if (!this.exploredClasses) { this.exploredClasses = this.explore(excludeControllers); } return (await this.exploredClasses).filter((x) => filter(x)); } async getProviderMethods(metaKey, excludeControllers = false) { const providers = await this.getExploredClasses(excludeControllers); return (0, lodash_flatmap_1.default)(providers, (provider) => this.classMethodsWithMetaAtKey(provider, metaKey)); } extractMethodMetaAtKey(metaKey, exploredClass, prototype, methodName) { const handler = prototype[methodName]; const meta = Reflect.getMetadata(metaKey, handler); return { meta, discoveredMethod: { handler, methodName, parentClass: exploredClass, }, }; } async toExploredClass(nestModule, wrapper) { const instanceHost = wrapper.getInstanceByContextId(constants_1.STATIC_CONTEXT, wrapper && wrapper.id ? wrapper.id : undefined); if (instanceHost.isPending && !instanceHost.isResolved) { await instanceHost.donePromise; } return { name: wrapper.name, instance: instanceHost.instance, injectType: wrapper.metatype, dependencyType: (0, lodash_get_1.default)(instanceHost, 'instance.constructor'), parentModule: { name: nestModule.metatype.name, instance: nestModule.instance, injectType: nestModule.metatype, dependencyType: nestModule.instance.constructor, }, }; } async explore(excludeControllers = false) { const modulesMap = [...this.modulesContainer.entries()]; return Promise.all((0, lodash_flatmap_1.default)(modulesMap, ([key, nestModule]) => { const controllerComponents = excludeControllers ? [] : [...(nestModule?.['controllers']?.values() || [])]; const providerComponents = [ ...(nestModule?.['providers']?.values() || []), ]; return [...controllerComponents, ...providerComponents] .filter((component) => component.scope !== common_1.Scope.REQUEST) .map((component) => this.toExploredClass(nestModule, component)); })); } }; exports.ExplorerService = ExplorerService; exports.ExplorerService = ExplorerService = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [modules_container_1.ModulesContainer, metadata_scanner_1.MetadataScanner]) ], ExplorerService); //# sourceMappingURL=explorer.service.js.map