81 lines · 1.1 KB · JavaScript
RawDownload
 /*! * Connect - Cache * Copyright(c) 2011 Sencha Inc. * MIT Licensed */ /** * Expose `Cache`. */ module.exports = Cache; /** * LRU cache store. * * @param {Number} limit * @api private */ function Cache(limit) {  this.store = {};  this.keys = [];  this.limit = limit;} /** * Touch `key`, promoting the object. * * @param {String} key * @param {Number} i * @api private */ Cache.prototype.touch = function(key, i){  this.keys.splice(i,1);  this.keys.push(key);}; /** * Remove `key`. * * @param {String} key * @api private */ Cache.prototype.remove = function(key){  delete this.store[key];}; /** * Get the object stored for `key`. * * @param {String} key * @return {Array} * @api private */ Cache.prototype.get = function(key){  return this.store[key];}; /** * Add a cache `key`. * * @param {String} key * @return {Array} * @api private */ Cache.prototype.add = function(key){  // initialize store  var len = this.keys.push(key);   // limit reached, invalid LRU  if (len > this.limit) this.remove(this.keys.shift());   var arr = this.store[key] = [];  arr.createdAt = new Date;  return arr;};