UNPKG

@diy0r/nestjs-rabbitmq

Version:
105 lines 5.11 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); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MetaTagsScannerService = void 0; const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const constants_1 = require("../constants"); const logger_1 = require("./logger"); let MetaTagsScannerService = class MetaTagsScannerService { constructor(metadataScanner, reflector, modulesContainer) { this.metadataScanner = metadataScanner; this.reflector = reflector; this.modulesContainer = modulesContainer; this.logger = new logger_1.RQMColorLogger(false); } findModulesByProviderValue(tokenValue) { for (const module of this.modulesContainer.values()) { for (const importedModule of module.imports.values()) { const provider = importedModule.providers.get(constants_1.MODULE_TOKEN); if (provider && provider.instance === tokenValue) return module; } } return null; } scan(metaTag, tokenValue) { const rmqMessagesMap = new Map(); const currentModule = this.findModulesByProviderValue(tokenValue); if (!currentModule) return rmqMessagesMap; const providersAndControllers = this.getProvidersAndControllers(currentModule); providersAndControllers.forEach((provider) => { const { instance } = provider; if (instance instanceof Object) { const allMethodNames = this.metadataScanner.getAllMethodNames(instance); allMethodNames.forEach((name) => this.lookupMethods(metaTag, rmqMessagesMap, instance, name, currentModule.injectables)); } }); return rmqMessagesMap; } getProvidersAndControllers(module) { return [...module.providers.values(), ...module.controllers.values()]; } lookupMethods(metaTag, rmqMessagesMap, instance, methodName, injectables) { const method = instance[methodName]; const event = this.getMetaData(metaTag, method); if (event) { const boundHandler = method.bind(instance); const serdes = this.getSerDesMetaData(method, instance.constructor); const middlewares = this.getLinesMetaDate(method, instance.constructor, constants_1.MIDDLEWARES_METADATA); const interceptors = this.getInterceptors(injectables, method, instance.constructor); const validate = this.getValidation(instance, method); rmqMessagesMap.set(event, { handler: boundHandler, serdes, interceptors, middlewares, validate, }); this.logger.log('Mapped ' + event, constants_1.MESSAGE_ROUTER); } } getSerDesMetaData(method, target) { return (this.getMetaData(constants_1.SER_DAS_KEY, method) || this.getMetaData(constants_1.SER_DAS_KEY, target)); } getLinesMetaDate(method, classProvider, key) { const methodMeta = this.getMetaData(key, method); const targetMeta = this.getMetaData(key, classProvider); return [targetMeta, methodMeta].filter(meta => meta !== undefined); } getInterceptors(injectables, method, classProvider) { const interceptors = this.getLinesMetaDate(method, classProvider, constants_1.INTERCEPTOR_CUSTOM_METADATA); return interceptors.map(interceptor => { const instance = injectables.get(interceptor[0]).instance; return instance.intercept.bind(instance); }); } getValidation(instance, method) { const validator = this.reflector.get(constants_1.RMQ_VALIDATE, method); if (!validator) return null; const paramTypes = Reflect.getMetadata('design:paramtypes', Object.getPrototypeOf(instance), method.name); return paramTypes[0]; } getMetaData(key, target) { return this.reflector.get(key, target); } }; exports.MetaTagsScannerService = MetaTagsScannerService; exports.MetaTagsScannerService = MetaTagsScannerService = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [core_1.MetadataScanner, core_1.Reflector, core_1.ModulesContainer]) ], MetaTagsScannerService); //# sourceMappingURL=events.discovery.js.map