UNPKG

unstorage

Version:
65 lines (64 loc) 1.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); module.exports = void 0; var _utils = require("./utils/index.cjs"); var _ioredis = _interopRequireDefault(require("ioredis")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _default = (0, _utils.defineDriver)((opts = {}) => { let redisClient; const getRedisClient = () => { if (redisClient) { return redisClient; } if (opts.cluster) { redisClient = new _ioredis.default.Cluster(opts.cluster, opts.clusterOptions); } else if (opts.url) { redisClient = new _ioredis.default(opts.url, opts); } else { redisClient = new _ioredis.default(opts); } return redisClient; }; const base = (opts.base || "").replace(/:$/, ""); const p = key => base ? `${base}:${key}` : key; const d = key => base ? key.replace(base, "") : key; return { name: "redis", options: opts, async hasItem(key) { return Boolean(await getRedisClient().exists(p(key))); }, async getItem(key) { const value = await getRedisClient().get(p(key)); return value === null ? null : value; }, async setItem(key, value, tOptions) { let ttl = tOptions?.ttl ?? opts.ttl; if (ttl) { await getRedisClient().set(p(key), value, "EX", ttl); } else { await getRedisClient().set(p(key), value); } }, async removeItem(key) { await getRedisClient().del(p(key)); }, async getKeys() { const keys = await getRedisClient().keys(p("*")); return keys.map(key => d(key)); }, async clear() { const keys = await getRedisClient().keys(p("*")); if (keys.length === 0) { return; } return getRedisClient().del(keys).then(() => {}); }, dispose() { return getRedisClient().disconnect(); } }; }); module.exports = _default;