@diy0r/nestjs-rabbitmq
Version:
Nestjs rabbitMQ module
105 lines • 5.11 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);
};
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