| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | 
							- 'use strict';
 
- var uncurryThis = require('../internals/function-uncurry-this');
 
- var defineBuiltIns = require('../internals/define-built-ins');
 
- var getWeakData = require('../internals/internal-metadata').getWeakData;
 
- var anInstance = require('../internals/an-instance');
 
- var anObject = require('../internals/an-object');
 
- var isNullOrUndefined = require('../internals/is-null-or-undefined');
 
- var isObject = require('../internals/is-object');
 
- var iterate = require('../internals/iterate');
 
- var ArrayIterationModule = require('../internals/array-iteration');
 
- var hasOwn = require('../internals/has-own-property');
 
- var InternalStateModule = require('../internals/internal-state');
 
- var setInternalState = InternalStateModule.set;
 
- var internalStateGetterFor = InternalStateModule.getterFor;
 
- var find = ArrayIterationModule.find;
 
- var findIndex = ArrayIterationModule.findIndex;
 
- var splice = uncurryThis([].splice);
 
- var id = 0;
 
- // fallback for uncaught frozen keys
 
- var uncaughtFrozenStore = function (state) {
 
-   return state.frozen || (state.frozen = new UncaughtFrozenStore());
 
- };
 
- var UncaughtFrozenStore = function () {
 
-   this.entries = [];
 
- };
 
- var findUncaughtFrozen = function (store, key) {
 
-   return find(store.entries, function (it) {
 
-     return it[0] === key;
 
-   });
 
- };
 
- UncaughtFrozenStore.prototype = {
 
-   get: function (key) {
 
-     var entry = findUncaughtFrozen(this, key);
 
-     if (entry) return entry[1];
 
-   },
 
-   has: function (key) {
 
-     return !!findUncaughtFrozen(this, key);
 
-   },
 
-   set: function (key, value) {
 
-     var entry = findUncaughtFrozen(this, key);
 
-     if (entry) entry[1] = value;
 
-     else this.entries.push([key, value]);
 
-   },
 
-   'delete': function (key) {
 
-     var index = findIndex(this.entries, function (it) {
 
-       return it[0] === key;
 
-     });
 
-     if (~index) splice(this.entries, index, 1);
 
-     return !!~index;
 
-   }
 
- };
 
- module.exports = {
 
-   getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
 
-     var Constructor = wrapper(function (that, iterable) {
 
-       anInstance(that, Prototype);
 
-       setInternalState(that, {
 
-         type: CONSTRUCTOR_NAME,
 
-         id: id++,
 
-         frozen: undefined
 
-       });
 
-       if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
 
-     });
 
-     var Prototype = Constructor.prototype;
 
-     var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
 
-     var define = function (that, key, value) {
 
-       var state = getInternalState(that);
 
-       var data = getWeakData(anObject(key), true);
 
-       if (data === true) uncaughtFrozenStore(state).set(key, value);
 
-       else data[state.id] = value;
 
-       return that;
 
-     };
 
-     defineBuiltIns(Prototype, {
 
-       // `{ WeakMap, WeakSet }.prototype.delete(key)` methods
 
-       // https://tc39.es/ecma262/#sec-weakmap.prototype.delete
 
-       // https://tc39.es/ecma262/#sec-weakset.prototype.delete
 
-       'delete': function (key) {
 
-         var state = getInternalState(this);
 
-         if (!isObject(key)) return false;
 
-         var data = getWeakData(key);
 
-         if (data === true) return uncaughtFrozenStore(state)['delete'](key);
 
-         return data && hasOwn(data, state.id) && delete data[state.id];
 
-       },
 
-       // `{ WeakMap, WeakSet }.prototype.has(key)` methods
 
-       // https://tc39.es/ecma262/#sec-weakmap.prototype.has
 
-       // https://tc39.es/ecma262/#sec-weakset.prototype.has
 
-       has: function has(key) {
 
-         var state = getInternalState(this);
 
-         if (!isObject(key)) return false;
 
-         var data = getWeakData(key);
 
-         if (data === true) return uncaughtFrozenStore(state).has(key);
 
-         return data && hasOwn(data, state.id);
 
-       }
 
-     });
 
-     defineBuiltIns(Prototype, IS_MAP ? {
 
-       // `WeakMap.prototype.get(key)` method
 
-       // https://tc39.es/ecma262/#sec-weakmap.prototype.get
 
-       get: function get(key) {
 
-         var state = getInternalState(this);
 
-         if (isObject(key)) {
 
-           var data = getWeakData(key);
 
-           if (data === true) return uncaughtFrozenStore(state).get(key);
 
-           return data ? data[state.id] : undefined;
 
-         }
 
-       },
 
-       // `WeakMap.prototype.set(key, value)` method
 
-       // https://tc39.es/ecma262/#sec-weakmap.prototype.set
 
-       set: function set(key, value) {
 
-         return define(this, key, value);
 
-       }
 
-     } : {
 
-       // `WeakSet.prototype.add(value)` method
 
-       // https://tc39.es/ecma262/#sec-weakset.prototype.add
 
-       add: function add(value) {
 
-         return define(this, value, true);
 
-       }
 
-     });
 
-     return Constructor;
 
-   }
 
- };
 
 
  |