UNPKG

@digicroz/node-backend-utils

Version:

Backend utilities for Node.js applications - Redis client wrappers and more utilities for TypeScript/JavaScript projects

120 lines (117 loc) 3.18 kB
'use strict'; var redis = require('redis'); // src/redis/redisBase.ts var RedisDatabase = class _RedisDatabase { constructor() { this.client = null; this.isConnecting = false; this.isConnected = false; this.initializationAttempted = false; this.redisUrl = null; } static getInstance() { if (!_RedisDatabase.instance) { _RedisDatabase.instance = new _RedisDatabase(); } return _RedisDatabase.instance; } async initialize(config) { if (this.initializationAttempted) { return; } this.initializationAttempted = true; this.redisUrl = config.url; try { await this.connect(); console.log("Redis initialized successfully at application startup"); } catch (error) { console.warn( "Redis initialization failed (non-critical), app will continue without Redis:", error ); } } getClient() { if (this.isConnected && this.client) { return this.client; } return null; } async connect() { if (this.isConnecting || this.isConnected && this.client) { return this.client; } if (!this.redisUrl) { throw new Error( "Redis URL is required. Call initialize() with config first." ); } this.isConnecting = true; try { this.client = redis.createClient({ url: this.redisUrl }); this.client.on("error", (err) => { console.warn("Redis Client Error (non-critical):", err); this.isConnected = false; }); this.client.on("connect", () => { console.log("Redis Client Connected"); this.isConnected = true; }); this.client.on("disconnect", () => { console.log("Redis Client Disconnected"); this.isConnected = false; }); await this.client.connect(); this.isConnected = true; this.isConnecting = false; return this.client; } catch (error) { console.warn("Failed to connect to Redis (non-critical):", error); this.isConnecting = false; this.isConnected = false; this.client = null; throw error; } } async disconnect() { try { if (this.client && this.isConnected) { await this.client.quit(); this.isConnected = false; this.client = null; } } catch (error) { console.warn("Error disconnecting from Redis (non-critical):", error); this.isConnected = false; this.client = null; } } isClientConnected() { return this.isConnected && this.client !== null; } async safeExecute(operation) { try { const client = this.getClient(); if (!client) { return null; } return await operation(client); } catch (error) { console.warn("Redis operation failed (non-critical):", error); return null; } } getStatus() { return { isConnected: this.isConnected, isConnecting: this.isConnecting, initializationAttempted: this.initializationAttempted }; } }; var redisBase = RedisDatabase.getInstance(); exports.redisBase = redisBase; //# sourceMappingURL=redisBase.cjs.map //# sourceMappingURL=redisBase.cjs.map