UNPKG

@xnestjs/rabbitmq

Version:

NestJS extension library for RabbitMQ

133 lines (132 loc) 5.06 kB
"use strict"; var RabbitmqCoreModule_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.RabbitmqCoreModule = void 0; const tslib_1 = require("tslib"); const node_assert_1 = tslib_1.__importDefault(require("node:assert")); const crypto = tslib_1.__importStar(require("node:crypto")); const common_1 = require("@nestjs/common"); const microservices_1 = require("@nestjs/microservices"); const ansi_colors_1 = tslib_1.__importDefault(require("ansi-colors")); const constants_js_1 = require("./constants.js"); const get_rabbitmq_config_js_1 = require("./get-rabbitmq-config.js"); const CLIENT_TOKEN = Symbol('CLIENT_TOKEN'); let RabbitmqCoreModule = RabbitmqCoreModule_1 = class RabbitmqCoreModule { /** * */ static forRoot(moduleOptions) { const connectionOptions = (0, get_rabbitmq_config_js_1.getRabbitmqConfig)(moduleOptions.useValue || {}, moduleOptions.envPrefix); return this._createDynamicModule(moduleOptions, { global: moduleOptions.global, providers: [ { provide: constants_js_1.RMQ_CONNECTION_OPTIONS, useValue: connectionOptions, }, ], }); } /** * */ static forRootAsync(asyncOptions) { node_assert_1.default.ok(asyncOptions.useFactory, 'useFactory is required'); return this._createDynamicModule(asyncOptions, { global: asyncOptions.global, providers: [ { provide: constants_js_1.RMQ_CONNECTION_OPTIONS, inject: asyncOptions.inject, useFactory: async (...args) => { const opts = await asyncOptions.useFactory(...args); return (0, get_rabbitmq_config_js_1.getRabbitmqConfig)(opts, asyncOptions.envPrefix); }, }, ], }); } static _createDynamicModule(opts, metadata) { const token = opts.token ?? microservices_1.ClientRMQ; const name = typeof token === 'string' ? token : 'RabbitMQ'; const logger = typeof opts.logger === 'string' ? new common_1.Logger(opts.logger) : opts.logger; const exports = [constants_js_1.RMQ_CONNECTION_OPTIONS, ...(metadata.exports ?? [])]; const providers = [ ...(metadata.providers ?? []), { provide: common_1.Logger, useValue: logger, }, { provide: CLIENT_TOKEN, useExisting: token, }, { provide: constants_js_1.RMQ_MODULE_ID, useValue: crypto.randomUUID(), }, ]; if (name !== token) { exports.push(token); providers.push({ provide: token, useExisting: name, }); } return { module: RabbitmqCoreModule_1, providers, imports: [ /** Import ClientsModule */ microservices_1.ClientsModule.registerAsync({ clients: [ { name, extraProviders: metadata.providers, inject: [constants_js_1.RMQ_CONNECTION_OPTIONS], useFactory: (connectionOptions) => { return { transport: microservices_1.Transport.RMQ, options: connectionOptions, }; }, }, ], }), ], exports, }; } /** * * @constructor */ constructor(client, connectionOptions, logger) { this.client = client; this.connectionOptions = connectionOptions; this.logger = logger; } async onApplicationBootstrap() { const options = this.connectionOptions; this.client.on('error', e => { console.log(e); }); if (options.lazyConnect || !options.urls?.length) return; this.logger?.log('Connecting to RabbitMQ at ' + ansi_colors_1.default.blue(options.urls.join(','))); common_1.Logger.flush(); await this.client.connect().catch(e => { this.logger?.error('RabbitMQ connection failed: ' + e.message); throw e; }); } onApplicationShutdown() { return this.client.close(); } }; exports.RabbitmqCoreModule = RabbitmqCoreModule; exports.RabbitmqCoreModule = RabbitmqCoreModule = RabbitmqCoreModule_1 = tslib_1.__decorate([ tslib_1.__param(0, (0, common_1.Inject)(CLIENT_TOKEN)), tslib_1.__param(1, (0, common_1.Inject)(constants_js_1.RMQ_CONNECTION_OPTIONS)), tslib_1.__metadata("design:paramtypes", [microservices_1.ClientRMQ, Object, common_1.Logger]) ], RabbitmqCoreModule);