@silverwind/ioredis-mock
Version:
This library emulates ioredis by performing all operations in-memory.
98 lines (75 loc) • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createData;
var _lodash = require("lodash");
function createData(expiresInstance, initial = {}, keyPrefix = '') {
let raw = {};
function createInstance(prefix, expires) {
return Object.freeze({
clear() {
raw = {};
},
delete(key) {
if (expires.has(key)) {
expires.delete(key);
}
delete raw[`${prefix}${key}`];
},
get(key) {
if (expires.has(key) && expires.isExpired(key)) {
this.delete(key);
}
const value = raw[`${prefix}${key}`];
if (Array.isArray(value)) {
return value.slice();
}
if (Buffer.isBuffer(value)) {
return Buffer.from(value);
}
if (value instanceof Set) {
return new Set(value);
}
if (value instanceof Map) {
return new Map(value);
}
if (typeof value === 'object' && value) {
return (0, _lodash.assign)({}, value);
}
return value;
},
has(key) {
if (expires.has(key) && expires.isExpired(key)) {
this.delete(key);
}
return {}.hasOwnProperty.call(raw, `${prefix}${key}`);
},
keys() {
return Object.keys(raw);
},
set(key, val) {
let item = val;
if (Array.isArray(val)) {
item = val.slice();
} else if (Buffer.isBuffer(val)) {
item = Buffer.from(val);
} else if (val instanceof Set) {
item = new Set(val);
} else if (val instanceof Map) {
item = new Map(val);
} else if (typeof val === 'object' && val) {
item = (0, _lodash.assign)({}, val);
}
raw[`${prefix}${key}`] = item;
},
withKeyPrefix(newKeyPrefix) {
if (newKeyPrefix === prefix) return this;
return createInstance(newKeyPrefix, expires.withKeyPrefix(newKeyPrefix));
}
});
}
const data = createInstance(keyPrefix, expiresInstance);
Object.keys(initial).forEach(key => data.set(key, initial[key]));
return data;
}