foop
Version:
interfaces that describe their intentions.
123 lines (122 loc) • 7.87 kB
JavaScript
// /** @ignore 🚧 wip */
//
// const Hash = require('./Hash')
// const ListCache = require('./ListCache')
//
// /**
// * Gets the data for `map`.
// *
// * @private
// * @param {Object} map The map to query.
// * @param {string} key The reference key.
// * @returns {*} Returns the map data.
// */
// function getMapData({__data__}, key) {
// const data = __data__
// return isKeyable(key)
// ? data[typeof key === 'string' ? 'string' : 'hash']
// : data.map
// }
//
// /**
// * Checks if `value` is suitable for use as unique object key.
// *
// * @private
// * @param {*} value The value to check.
// * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
// */
// function isKeyable(value) {
// const type = typeof value
// return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
// ? (value !== '__proto__')
// : (value === null)
// }
//
// class MapCache {
// /**
// * Creates a map cache object to store key-value pairs.
// *
// * @private
// * @constructor
// * @param {Array} [entries] The key-value pairs to cache.
// */
// constructor(entries) {
// let index = -1
// const length = entries == null ? 0 : entries.length
//
// this.clear()
// while (++index < length) {
// const entry = entries[index]
// this.set(entry[0], entry[1])
// }
// }
//
// /**
// * Removes all key-value entries from the map.
// *
// * @memberOf MapCache
// */
// clear() {
// this.size = 0
// this.__data__ = {
// 'hash': new Hash(),
// 'map': new (Map || ListCache)(),
// 'string': new Hash(),
// }
// }
//
// /**
// * Removes `key` and its value from the map.
// *
// * @memberOf MapCache
// * @param {string} key The key of the value to remove.
// * @returns {boolean} Returns `true` if the entry was removed, else `false`.
// */
// delete(key) {
// const result = getMapData(this, key).delete(key)
// this.size -= result ? 1 : 0
// return result
// }
//
// /**
// * Gets the map value for `key`.
// *
// * @memberOf MapCache
// * @param {string} key The key of the value to get.
// * @returns {*} Returns the entry value.
// */
// get(key) {
// return getMapData(this, key).get(key)
// }
//
// /**
// * Checks if a map value for `key` exists.
// *
// * @memberOf MapCache
// * @param {string} key The key of the entry to check.
// * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
// */
// has(key) {
// return getMapData(this, key).has(key)
// }
//
// /**
// * Sets the map `key` to `value`.
// *
// * @memberOf MapCache
// * @param {string} key The key of the value to set.
// * @param {*} value The value to set.
// * @returns {Object} Returns the map cache instance.
// */
// set(key, value) {
// const data = getMapData(this, key)
// const size = data.size
//
// data.set(key, value)
// this.size += data.size === size ? 0 : 1
// return this
// }
// }
//
// module.exports = MapCache
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFwQ2FjaGUuanMiLCJzb3VyY2VzIjpbIk1hcENhY2hlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC8qKiBAaWdub3JlIPCfmqcgd2lwICovXG4vL1xuLy8gY29uc3QgSGFzaCA9IHJlcXVpcmUoJy4vSGFzaCcpXG4vLyBjb25zdCBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL0xpc3RDYWNoZScpXG4vL1xuLy8gLyoqXG4vLyAgKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbi8vICAqXG4vLyAgKiBAcHJpdmF0ZVxuLy8gICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuLy8gICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbi8vICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbi8vICAqL1xuLy8gZnVuY3Rpb24gZ2V0TWFwRGF0YSh7X19kYXRhX199LCBrZXkpIHtcbi8vICAgY29uc3QgZGF0YSA9IF9fZGF0YV9fXG4vLyAgIHJldHVybiBpc0tleWFibGUoa2V5KVxuLy8gICAgID8gZGF0YVt0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuLy8gICAgIDogZGF0YS5tYXBcbi8vIH1cbi8vXG4vLyAvKipcbi8vICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4vLyAgKlxuLy8gICogQHByaXZhdGVcbi8vICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuLy8gICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbi8vICAqL1xuLy8gZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4vLyAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWVcbi8vICAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbi8vICAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4vLyAgICAgOiAodmFsdWUgPT09IG51bGwpXG4vLyB9XG4vL1xuLy8gY2xhc3MgTWFwQ2FjaGUge1xuLy8gICAvKipcbi8vICAgICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuLy8gICAgKlxuLy8gICAgKiBAcHJpdmF0ZVxuLy8gICAgKiBAY29uc3RydWN0b3Jcbi8vICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4vLyAgICAqL1xuLy8gICBjb25zdHJ1Y3RvcihlbnRyaWVzKSB7XG4vLyAgICAgbGV0IGluZGV4ID0gLTFcbi8vICAgICBjb25zdCBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGhcbi8vXG4vLyAgICAgdGhpcy5jbGVhcigpXG4vLyAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbi8vICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1tpbmRleF1cbi8vICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSlcbi8vICAgICB9XG4vLyAgIH1cbi8vXG4vLyAgIC8qKlxuLy8gICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4vLyAgICAqXG4vLyAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuLy8gICAgKi9cbi8vICAgY2xlYXIoKSB7XG4vLyAgICAgdGhpcy5zaXplID0gMFxuLy8gICAgIHRoaXMuX19kYXRhX18gPSB7XG4vLyAgICAgICAnaGFzaCc6IG5ldyBIYXNoKCksXG4vLyAgICAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSgpLFxuLy8gICAgICAgJ3N0cmluZyc6IG5ldyBIYXNoKCksXG4vLyAgICAgfVxuLy8gICB9XG4vL1xuLy8gICAvKipcbi8vICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbi8vICAgICpcbi8vICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4vLyAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuLy8gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4vLyAgICAqL1xuLy8gICBkZWxldGUoa2V5KSB7XG4vLyAgICAgY29uc3QgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmRlbGV0ZShrZXkpXG4vLyAgICAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwXG4vLyAgICAgcmV0dXJuIHJlc3VsdFxuLy8gICB9XG4vL1xuLy8gICAvKipcbi8vICAgICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbi8vICAgICpcbi8vICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4vLyAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuLy8gICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4vLyAgICAqL1xuLy8gICBnZXQoa2V5KSB7XG4vLyAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KVxuLy8gICB9XG4vL1xuLy8gICAvKipcbi8vICAgICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4vLyAgICAqXG4vLyAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuLy8gICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuLy8gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuLy8gICAgKi9cbi8vICAgaGFzKGtleSkge1xuLy8gICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSlcbi8vICAgfVxuLy9cbi8vICAgLyoqXG4vLyAgICAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuLy8gICAgKlxuLy8gICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbi8vICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4vLyAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbi8vICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuLy8gICAgKi9cbi8vICAgc2V0KGtleSwgdmFsdWUpIHtcbi8vICAgICBjb25zdCBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpXG4vLyAgICAgY29uc3Qgc2l6ZSA9IGRhdGEuc2l6ZVxuLy9cbi8vICAgICBkYXRhLnNldChrZXksIHZhbHVlKVxuLy8gICAgIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT09IHNpemUgPyAwIDogMVxuLy8gICAgIHJldHVybiB0aGlzXG4vLyAgIH1cbi8vIH1cbi8vXG4vLyBtb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=