UNPKG

keyv-anyredis

Version:

Storage adapter for Keyv that works with multiple Redis clients, including cluster clients

70 lines 3.84 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _KeyvAnyRedis_client; Object.defineProperty(exports, "__esModule", { value: true }); exports.KeyvAnyRedis = void 0; const events_1 = __importDefault(require("events")); const redis_promise_adapter_1 = require("./redis-promise-adapter"); class KeyvAnyRedis extends events_1.default { constructor(client) { super(); this.opts = {}; this.dialect = 'anyredis'; this.namespace = ''; _KeyvAnyRedis_client.set(this, void 0); __classPrivateFieldSet(this, _KeyvAnyRedis_client, redis_promise_adapter_1.RedisPromiseAdapter.create(client), "f"); if (__classPrivateFieldGet(this, _KeyvAnyRedis_client, "f") instanceof events_1.default) { __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").on('error', error => this.emit('error', error)); } } get ttlSupport() { return true; } _getNamespace() { return `namespace:${this.namespace}`; } async get(key) { const result = await __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").get(key); return result ?? undefined; } async set(key, value, ttl) { await (typeof ttl === 'number' ? __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").set(key, value, 'PX', ttl) : __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").set(key, value)); await __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").sadd(this._getNamespace(), key); } async delete(key) { const items = await __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").del(key); await __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").srem(this._getNamespace(), key); return items > 0; } async clear() { const keys = await __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").smembers(this._getNamespace()); // Keys must be deleted individually for compatibility with cluster mode, // in which all keys passed to a single del command must exist on the same // cluster slot. const promises = keys.map(async (key) => __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").del(key)); await Promise.all(promises); await __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").del(this._getNamespace()); } async has(key) { const result = await __classPrivateFieldGet(this, _KeyvAnyRedis_client, "f").sismember(this._getNamespace(), key); return Boolean(result); } } exports.KeyvAnyRedis = KeyvAnyRedis; _KeyvAnyRedis_client = new WeakMap(); //# sourceMappingURL=keyv-any-redis.js.map