function MemoryCache() { this.cache = {}; this.size = 0; } MemoryCache.prototype.add = function (key, value, time, timeoutCallback) { var old = this.cache[key]; var instance = this; var entry = { value: value, expire: time + Date.now(), timeout: setTimeout(function () { instance.delete(key); return ( timeoutCallback && typeof timeoutCallback === 'function' && timeoutCallback(value, key) ); }, time), }; this.cache[key] = entry; this.size = Object.keys(this.cache).length; return entry; }; MemoryCache.prototype.delete = function (key) { var entry = this.cache[key]; if (entry) { clearTimeout(entry.timeout); } delete this.cache[key]; this.size = Object.keys(this.cache).length; return null; }; MemoryCache.prototype.get = function (key) { var entry = this.cache[key]; return entry; }; MemoryCache.prototype.getValue = function (key) { var entry = this.get(key); return entry && entry.value; }; MemoryCache.prototype.clear = function () { Object.keys(this.cache).forEach(function (key) { this.delete(key); }, this); return true; }; module.exports = MemoryCache;