1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- "use strict";
- 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"));
|