You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
1.9 KiB
100 lines
1.9 KiB
/*! |
|
* map-cache <https://github.com/jonschlinkert/map-cache> |
|
* |
|
* Copyright (c) 2015, Jon Schlinkert. |
|
* Licensed under the MIT License. |
|
*/ |
|
|
|
'use strict'; |
|
|
|
var hasOwn = Object.prototype.hasOwnProperty; |
|
|
|
/** |
|
* Expose `MapCache` |
|
*/ |
|
|
|
module.exports = MapCache; |
|
|
|
/** |
|
* Creates a cache object to store key/value pairs. |
|
* |
|
* ```js |
|
* var cache = new MapCache(); |
|
* ``` |
|
* |
|
* @api public |
|
*/ |
|
|
|
function MapCache(data) { |
|
this.__data__ = data || {}; |
|
} |
|
|
|
/** |
|
* Adds `value` to `key` on the cache. |
|
* |
|
* ```js |
|
* cache.set('foo', 'bar'); |
|
* ``` |
|
* |
|
* @param {String} `key` The key of the value to cache. |
|
* @param {*} `value` The value to cache. |
|
* @returns {Object} Returns the `Cache` object for chaining. |
|
* @api public |
|
*/ |
|
|
|
MapCache.prototype.set = function mapSet(key, value) { |
|
if (key !== '__proto__') { |
|
this.__data__[key] = value; |
|
} |
|
return this; |
|
}; |
|
|
|
/** |
|
* Gets the cached value for `key`. |
|
* |
|
* ```js |
|
* cache.get('foo'); |
|
* //=> 'bar' |
|
* ``` |
|
* |
|
* @param {String} `key` The key of the value to get. |
|
* @returns {*} Returns the cached value. |
|
* @api public |
|
*/ |
|
|
|
MapCache.prototype.get = function mapGet(key) { |
|
return key === '__proto__' ? undefined : this.__data__[key]; |
|
}; |
|
|
|
/** |
|
* Checks if a cached value for `key` exists. |
|
* |
|
* ```js |
|
* cache.has('foo'); |
|
* //=> true |
|
* ``` |
|
* |
|
* @param {String} `key` The key of the entry to check. |
|
* @returns {Boolean} Returns `true` if an entry for `key` exists, else `false`. |
|
* @api public |
|
*/ |
|
|
|
MapCache.prototype.has = function mapHas(key) { |
|
return key !== '__proto__' && hasOwn.call(this.__data__, key); |
|
}; |
|
|
|
/** |
|
* Removes `key` and its value from the cache. |
|
* |
|
* ```js |
|
* cache.del('foo'); |
|
* ``` |
|
* @title .del |
|
* @param {String} `key` The key of the value to remove. |
|
* @returns {Boolean} Returns `true` if the entry was removed successfully, else `false`. |
|
* @api public |
|
*/ |
|
|
|
MapCache.prototype.del = function mapDelete(key) { |
|
return this.has(key) && delete this.__data__[key]; |
|
};
|
|
|