UNPKG

@nestjstools/messaging

Version:

Simplifies asynchronous and synchronous message handling with support for buses, handlers, channels, and consumers. Build scalable, decoupled applications with ease and reliability.

190 lines 10.1 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 MessagingModule_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessagingModule = void 0; const common_1 = require("@nestjs/common"); const config_1 = require("./config"); const service_1 = require("./dependency-injection/service"); const composite_channel_factory_1 = require("./channel/factory/composite-channel.factory"); const channel_registry_1 = require("./channel/channel.registry"); const composite_message_bus_factory_1 = require("./bus/composite-message-bus.factory"); const distributed_message_bus_1 = require("./bus/distributed-message.bus"); const core_1 = require("@nestjs/core"); const in_memory_message_bus_1 = require("./bus/in-memory-message.bus"); const message_handler_registry_1 = require("./handler/message-handler.registry"); const nest_logger_1 = require("./logger/nest-logger"); const in_memory_channel_factory_1 = require("./channel/factory/in-memory-channel.factory"); const distributed_consumer_1 = require("./consumer/distributed.consumer"); const register_1 = require("./dependency-injection/register"); const middleware_registry_1 = require("./middleware/middleware.registry"); const in_memory_message_bus_factory_1 = require("./bus/in-memory-message-bus.factory"); const in_memory_channel_1 = require("./channel/in-memory.channel"); const handler_middleware_1 = require("./middleware/handler-middleware"); const message_bus_collection_1 = require("./bus/message-bus.collection"); const normalizer_registry_1 = require("./normalizer/normalizer.registry"); const object_forward_message_normalizer_1 = require("./normalizer/object-forward-message.normalizer"); const exception_listener_registry_1 = require("./exception-listener/exception-listener.registry"); const exception_listener_handler_1 = require("./exception-listener/exception-listener-handler"); let MessagingModule = MessagingModule_1 = class MessagingModule { static forRoot(options) { const channels = options.channels ?? []; const registerChannels = { provide: service_1.Service.CHANNELS, useFactory: (compositeChannelFactory) => { return channels.map((channelConfig) => compositeChannelFactory.create(channelConfig)); }, inject: [composite_channel_factory_1.CompositeChannelFactory], }; return MessagingModule_1.createDynamicModule(options, [registerChannels]); } static forRootAsync(options) { const registerAsyncConfig = { provide: service_1.Service.MESSAGING_MODULE_ASYNC_CHANNEL_OPTIONS, useFactory: options.useChannelFactory, inject: options.inject ?? [], }; const registerChannels = { provide: service_1.Service.CHANNELS, useFactory: (compositeChannelFactory, channels) => { return (channels ?? []).map((channelConfig) => compositeChannelFactory.create(channelConfig)); }, inject: [ composite_channel_factory_1.CompositeChannelFactory, service_1.Service.MESSAGING_MODULE_ASYNC_CHANNEL_OPTIONS, ], }; return MessagingModule_1.createDynamicModule(options, [registerAsyncConfig, registerChannels], options.imports ?? []); } static createDynamicModule(options, providers = [], imports = []) { const buses = options.buses ?? []; const registerBuses = () => { return buses.map((bus) => ({ provide: `${bus.name}`, useFactory: (channelRegistry, busFactory, logger, normalizerRegistry) => { const messageBusCollection = new message_bus_collection_1.MessageBusCollection(); for (const channelName of bus.channels) { const channel = channelRegistry.getByName(channelName); messageBusCollection.add({ messageBus: busFactory.create(channel), channel: channel, }); } const messageBus = new distributed_message_bus_1.DistributedMessageBus(messageBusCollection, normalizerRegistry); logger.log(`MessageBus [${bus.name}] was created successfully`); return messageBus; }, inject: [ service_1.Service.CHANNEL_REGISTRY, composite_message_bus_factory_1.CompositeMessageBusFactory, service_1.Service.LOGGER, service_1.Service.MESSAGE_NORMALIZERS_REGISTRY, ], })); }; const defaultMessageBus = () => { return { provide: service_1.Service.DEFAULT_MESSAGE_BUS, useFactory: (messageHandlerRegistry, middlewareRegistry, normalizerRegistry) => { return new in_memory_message_bus_1.InMemoryMessageBus(messageHandlerRegistry, middlewareRegistry, new in_memory_channel_1.InMemoryChannel(new config_1.InMemoryChannelConfig({ name: 'default.bus', middlewares: [], avoidErrorsForNotExistedHandlers: true, })), normalizerRegistry); }, inject: [ service_1.Service.MESSAGE_HANDLERS_REGISTRY, service_1.Service.MIDDLEWARE_REGISTRY, service_1.Service.MESSAGE_NORMALIZERS_REGISTRY, ], }; }; return { global: options.global ?? true, module: MessagingModule_1, imports: [core_1.DiscoveryModule, ...imports], providers: [ ...providers, defaultMessageBus(), ...registerBuses(), { provide: service_1.Service.MESSAGE_HANDLERS_REGISTRY, useClass: message_handler_registry_1.MessageHandlerRegistry, }, { provide: service_1.Service.EXCEPTION_LISTENER_REGISTRY, useClass: exception_listener_registry_1.ExceptionListenerRegistry, }, { provide: service_1.Service.MESSAGE_NORMALIZERS_REGISTRY, useClass: normalizer_registry_1.NormalizerRegistry, }, { provide: service_1.Service.MIDDLEWARE_REGISTRY, useClass: middleware_registry_1.MiddlewareRegistry, }, { provide: service_1.Service.EXCEPTION_LISTENER_HANDLER, useClass: exception_listener_handler_1.ExceptionListenerHandler, }, { provide: service_1.Service.CHANNEL_REGISTRY, useFactory: (channels, logger) => { return new channel_registry_1.ChannelRegistry(channels, logger); }, inject: [service_1.Service.CHANNELS, service_1.Service.LOGGER], }, { provide: service_1.Service.LOGGER, useValue: new nest_logger_1.NestLogger(new common_1.Logger(), options.debug ?? false, options.logging ?? true), }, handler_middleware_1.HandlerMiddleware, composite_channel_factory_1.CompositeChannelFactory, composite_message_bus_factory_1.CompositeMessageBusFactory, in_memory_message_bus_factory_1.InMemoryMessageBusFactory, in_memory_channel_factory_1.InMemoryChannelFactory, distributed_consumer_1.DistributedConsumer, object_forward_message_normalizer_1.ObjectForwardMessageNormalizer, ], exports: [ service_1.Service.DEFAULT_MESSAGE_BUS, ...registerBuses().map((bus) => bus.provide), distributed_consumer_1.DistributedConsumer, object_forward_message_normalizer_1.ObjectForwardMessageNormalizer, ], }; } constructor(moduleRef, discoveryService) { this.moduleRef = moduleRef; this.discoveryService = discoveryService; } onApplicationBootstrap() { (0, register_1.registerHandlers)(this.moduleRef, this.discoveryService); (0, register_1.registerMiddlewares)(this.moduleRef, this.discoveryService); (0, register_1.registerMessageNormalizers)(this.moduleRef, this.discoveryService); (0, register_1.registerExceptionListener)(this.moduleRef, this.discoveryService); const consumer = this.moduleRef.get(distributed_consumer_1.DistributedConsumer); consumer.run(); } async onModuleDestroy() { const channels = this.moduleRef.get(service_1.Service.CHANNELS); for (const channel of channels) { await channel.onChannelDestroy(); } } }; exports.MessagingModule = MessagingModule; exports.MessagingModule = MessagingModule = MessagingModule_1 = __decorate([ (0, common_1.Module)({}), __metadata("design:paramtypes", [core_1.ModuleRef, core_1.DiscoveryService]) ], MessagingModule); //# sourceMappingURL=messaging.module.js.map