keyv-anyredis
Version:
Storage adapter for Keyv that works with multiple Redis clients, including cluster clients
70 lines • 3.84 kB
JavaScript
"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