66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"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"));
 |