UNPKG

@xnestjs/rabbitmq

Version:

NestJS extension library for RabbitMQ

119 lines (118 loc) 4.64 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 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 types_js_1 = require("./types.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 ?? types_js_1.RmqClient; // const name = typeof token === 'string' ? token : 'RabbitMQ'; const logger = typeof opts.logger === 'string' ? new common_1.Logger(opts.logger) : opts.logger; 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(), }, { provide: token, inject: [constants_js_1.RMQ_CONNECTION_OPTIONS], useFactory: async (connectionOptions) => { const client = new types_js_1.RmqClient(connectionOptions); if (logger) { client.on('connection', () => { logger.log('RabbitMQ client connected'); }); client.on('error', err => { logger.error('RabbitMQ connection error: ' + err?.message); }); } return client; }, }, ]; return { global: opts.global, module: RabbitmqCoreModule_1, imports: opts.imports, providers, exports: [constants_js_1.RMQ_CONNECTION_OPTIONS, token, ...(metadata.exports ?? [])], }; } /** * * @constructor */ constructor(client, connectionOptions, logger) { this.client = client; this.connectionOptions = connectionOptions; this.logger = logger; } async onApplicationBootstrap() { const options = this.connectionOptions; if (options.lazyConnect || !options.hosts?.length) return; this.logger?.log('Connecting to RabbitMQ at ' + ansi_colors_1.default.blue(options.hosts.toString())); common_1.Logger.flush(); await this.client.onConnect(); } 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", [types_js_1.RmqClient, Object, common_1.Logger]) ], RabbitmqCoreModule);