UNPKG

@nestjs-redis/client

Version:

Flexible, production-ready Redis client module for NestJS with multi-connection support, built on the modern node-redis client

89 lines (88 loc) 3.63 kB
"use strict"; var RedisModule_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.RedisModule = void 0; const tslib_1 = require("tslib"); const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const redis_1 = require("redis"); const redis_client_module_definition_1 = require("./redis-client.module-definition"); const tokens_1 = require("./tokens"); let RedisModule = RedisModule_1 = class RedisModule extends redis_client_module_definition_1.ConfigurableModuleClass { constructor(moduleRef) { super(); this.moduleRef = moduleRef; } static forRoot(options = {}) { const baseModule = super.forRoot(options); return { global: options?.isGlobal ?? false, module: class extends RedisModule_1 { constructor() { super(...arguments); this.connectionToken = (0, tokens_1.RedisToken)(options?.connectionName); } }, providers: [ ...(baseModule.providers || []), this.getRedisClientProvider(options?.connectionName), ], exports: [(0, tokens_1.RedisToken)(options?.connectionName)], }; } static forRootAsync(options) { const baseModule = super.forRootAsync(options); return { global: options.isGlobal ?? false, module: class extends RedisModule_1 { constructor() { super(...arguments); this.connectionToken = (0, tokens_1.RedisToken)(options.connectionName); } }, imports: options.imports || [], providers: [ ...(baseModule.providers || []), this.getRedisClientProvider(options.connectionName), ], exports: [(0, tokens_1.RedisToken)(options.connectionName)], }; } static getRedisClientProvider(connectionName) { return { provide: (0, tokens_1.RedisToken)(connectionName), useFactory: async (config) => { function getClient() { switch (config?.type) { case 'client': case undefined: return (0, redis_1.createClient)(config?.options); case 'cluster': return (0, redis_1.createCluster)(config.options); case 'sentinel': return (0, redis_1.createSentinel)(config.options); default: throw new Error( // @ts-expect-error check for config type `Unsupported Redis type: ${config?.type}. Supported types are 'client', 'cluster' and 'sentinel'`); } } const client = getClient(); await client.connect(); return client; }, inject: [redis_client_module_definition_1.MODULE_OPTIONS_TOKEN], }; } async onApplicationShutdown() { if (!this.connectionToken) { throw new Error('Connection token is not defined. Ensure to call forRoot or forRootAsync.'); } await this.moduleRef.get(this.connectionToken).quit(); } }; exports.RedisModule = RedisModule; exports.RedisModule = RedisModule = RedisModule_1 = tslib_1.__decorate([ (0, common_1.Module)({}), tslib_1.__metadata("design:paramtypes", [core_1.ModuleRef]) ], RedisModule);