UNPKG

@silverwind/ioredis-mock

Version:

This library emulates ioredis by performing all operations in-memory.

98 lines (75 loc) 2.19 kB
"use strict"; 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; }