Spaces:
Runtime error
Runtime error
; | |
var isValue = require("es5-ext/object/is-value") | |
, setPrototypeOf = require("es5-ext/object/set-prototype-of") | |
, object = require("es5-ext/object/valid-object") | |
, ensureValue = require("es5-ext/object/valid-value") | |
, randomUniq = require("es5-ext/string/random-uniq") | |
, d = require("d") | |
, getIterator = require("es6-iterator/get") | |
, forOf = require("es6-iterator/for-of") | |
, toStringTagSymbol = require("es6-symbol").toStringTag | |
, isNative = require("./is-native-implemented") | |
, isArray = Array.isArray, defineProperty = Object.defineProperty | |
, objHasOwnProperty = Object.prototype.hasOwnProperty, getPrototypeOf = Object.getPrototypeOf | |
, WeakMapPoly; | |
module.exports = WeakMapPoly = function (/* Iterable*/) { | |
var iterable = arguments[0], self; | |
if (!(this instanceof WeakMapPoly)) throw new TypeError("Constructor requires 'new'"); | |
self = isNative && setPrototypeOf && (WeakMap !== WeakMapPoly) | |
? setPrototypeOf(new WeakMap(), getPrototypeOf(this)) : this; | |
if (isValue(iterable)) { | |
if (!isArray(iterable)) iterable = getIterator(iterable); | |
} | |
defineProperty(self, "__weakMapData__", d("c", "$weakMap$" + randomUniq())); | |
if (!iterable) return self; | |
forOf(iterable, function (val) { | |
ensureValue(val); | |
self.set(val[0], val[1]); | |
}); | |
return self; | |
}; | |
if (isNative) { | |
if (setPrototypeOf) setPrototypeOf(WeakMapPoly, WeakMap); | |
WeakMapPoly.prototype = Object.create(WeakMap.prototype, { constructor: d(WeakMapPoly) }); | |
} | |
Object.defineProperties(WeakMapPoly.prototype, { | |
delete: d(function (key) { | |
if (objHasOwnProperty.call(object(key), this.__weakMapData__)) { | |
delete key[this.__weakMapData__]; | |
return true; | |
} | |
return false; | |
}), | |
get: d(function (key) { | |
if (!objHasOwnProperty.call(object(key), this.__weakMapData__)) return undefined; | |
return key[this.__weakMapData__]; | |
}), | |
has: d(function (key) { | |
return objHasOwnProperty.call(object(key), this.__weakMapData__); | |
}), | |
set: d(function (key, value) { | |
defineProperty(object(key), this.__weakMapData__, d("c", value)); | |
return this; | |
}), | |
toString: d(function () { | |
return "[object WeakMap]"; | |
}) | |
}); | |
defineProperty(WeakMapPoly.prototype, toStringTagSymbol, d("c", "WeakMap")); | |