@djeka07/nestjs-azure-service-bus
Version:
NestJS Azure service bus based on @azure/service-bus package
109 lines • 5.36 kB
JavaScript
;
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