| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | 
							- var hasOwnProperty = Object.prototype.hasOwnProperty
 
- module.exports = PseudoMap
 
- function PseudoMap (set) {
 
-   if (!(this instanceof PseudoMap)) // whyyyyyyy
 
-     throw new TypeError("Constructor PseudoMap requires 'new'")
 
-   this.clear()
 
-   if (set) {
 
-     if ((set instanceof PseudoMap) ||
 
-         (typeof Map === 'function' && set instanceof Map))
 
-       set.forEach(function (value, key) {
 
-         this.set(key, value)
 
-       }, this)
 
-     else if (Array.isArray(set))
 
-       set.forEach(function (kv) {
 
-         this.set(kv[0], kv[1])
 
-       }, this)
 
-     else
 
-       throw new TypeError('invalid argument')
 
-   }
 
- }
 
- PseudoMap.prototype.forEach = function (fn, thisp) {
 
-   thisp = thisp || this
 
-   Object.keys(this._data).forEach(function (k) {
 
-     if (k !== 'size')
 
-       fn.call(thisp, this._data[k].value, this._data[k].key)
 
-   }, this)
 
- }
 
- PseudoMap.prototype.has = function (k) {
 
-   return !!find(this._data, k)
 
- }
 
- PseudoMap.prototype.get = function (k) {
 
-   var res = find(this._data, k)
 
-   return res && res.value
 
- }
 
- PseudoMap.prototype.set = function (k, v) {
 
-   set(this._data, k, v)
 
- }
 
- PseudoMap.prototype.delete = function (k) {
 
-   var res = find(this._data, k)
 
-   if (res) {
 
-     delete this._data[res._index]
 
-     this._data.size--
 
-   }
 
- }
 
- PseudoMap.prototype.clear = function () {
 
-   var data = Object.create(null)
 
-   data.size = 0
 
-   Object.defineProperty(this, '_data', {
 
-     value: data,
 
-     enumerable: false,
 
-     configurable: true,
 
-     writable: false
 
-   })
 
- }
 
- Object.defineProperty(PseudoMap.prototype, 'size', {
 
-   get: function () {
 
-     return this._data.size
 
-   },
 
-   set: function (n) {},
 
-   enumerable: true,
 
-   configurable: true
 
- })
 
- PseudoMap.prototype.values =
 
- PseudoMap.prototype.keys =
 
- PseudoMap.prototype.entries = function () {
 
-   throw new Error('iterators are not implemented in this version')
 
- }
 
- // Either identical, or both NaN
 
- function same (a, b) {
 
-   return a === b || a !== a && b !== b
 
- }
 
- function Entry (k, v, i) {
 
-   this.key = k
 
-   this.value = v
 
-   this._index = i
 
- }
 
- function find (data, k) {
 
-   for (var i = 0, s = '_' + k, key = s;
 
-        hasOwnProperty.call(data, key);
 
-        key = s + i++) {
 
-     if (same(data[key].key, k))
 
-       return data[key]
 
-   }
 
- }
 
- function set (data, k, v) {
 
-   for (var i = 0, s = '_' + k, key = s;
 
-        hasOwnProperty.call(data, key);
 
-        key = s + i++) {
 
-     if (same(data[key].key, k)) {
 
-       data[key].value = v
 
-       return
 
-     }
 
-   }
 
-   data.size++
 
-   data[key] = new Entry(k, v, key)
 
- }
 
 
  |