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