unstorage
Version:
Universal Storage Layer
65 lines (64 loc) • 1.93 kB
JavaScript
;
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;