'use strict'; 
 | 
var FREEZING = require('../internals/freezing'); 
 | 
var globalThis = require('../internals/global-this'); 
 | 
var uncurryThis = require('../internals/function-uncurry-this'); 
 | 
var defineBuiltIns = require('../internals/define-built-ins'); 
 | 
var InternalMetadataModule = require('../internals/internal-metadata'); 
 | 
var collection = require('../internals/collection'); 
 | 
var collectionWeak = require('../internals/collection-weak'); 
 | 
var isObject = require('../internals/is-object'); 
 | 
var enforceInternalState = require('../internals/internal-state').enforce; 
 | 
var fails = require('../internals/fails'); 
 | 
var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection'); 
 | 
  
 | 
var $Object = Object; 
 | 
// eslint-disable-next-line es/no-array-isarray -- safe 
 | 
var isArray = Array.isArray; 
 | 
// eslint-disable-next-line es/no-object-isextensible -- safe 
 | 
var isExtensible = $Object.isExtensible; 
 | 
// eslint-disable-next-line es/no-object-isfrozen -- safe 
 | 
var isFrozen = $Object.isFrozen; 
 | 
// eslint-disable-next-line es/no-object-issealed -- safe 
 | 
var isSealed = $Object.isSealed; 
 | 
// eslint-disable-next-line es/no-object-freeze -- safe 
 | 
var freeze = $Object.freeze; 
 | 
// eslint-disable-next-line es/no-object-seal -- safe 
 | 
var seal = $Object.seal; 
 | 
  
 | 
var IS_IE11 = !globalThis.ActiveXObject && 'ActiveXObject' in globalThis; 
 | 
var InternalWeakMap; 
 | 
  
 | 
var wrapper = function (init) { 
 | 
  return function WeakMap() { 
 | 
    return init(this, arguments.length ? arguments[0] : undefined); 
 | 
  }; 
 | 
}; 
 | 
  
 | 
// `WeakMap` constructor 
 | 
// https://tc39.es/ecma262/#sec-weakmap-constructor 
 | 
var $WeakMap = collection('WeakMap', wrapper, collectionWeak); 
 | 
var WeakMapPrototype = $WeakMap.prototype; 
 | 
var nativeSet = uncurryThis(WeakMapPrototype.set); 
 | 
  
 | 
// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them 
 | 
var hasMSEdgeFreezingBug = function () { 
 | 
  return FREEZING && fails(function () { 
 | 
    var frozenArray = freeze([]); 
 | 
    nativeSet(new $WeakMap(), frozenArray, 1); 
 | 
    return !isFrozen(frozenArray); 
 | 
  }); 
 | 
}; 
 | 
  
 | 
// IE11 WeakMap frozen keys fix 
 | 
// We can't use feature detection because it crash some old IE builds 
 | 
// https://github.com/zloirock/core-js/issues/485 
 | 
if (NATIVE_WEAK_MAP) if (IS_IE11) { 
 | 
  InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true); 
 | 
  InternalMetadataModule.enable(); 
 | 
  var nativeDelete = uncurryThis(WeakMapPrototype['delete']); 
 | 
  var nativeHas = uncurryThis(WeakMapPrototype.has); 
 | 
  var nativeGet = uncurryThis(WeakMapPrototype.get); 
 | 
  defineBuiltIns(WeakMapPrototype, { 
 | 
    'delete': function (key) { 
 | 
      if (isObject(key) && !isExtensible(key)) { 
 | 
        var state = enforceInternalState(this); 
 | 
        if (!state.frozen) state.frozen = new InternalWeakMap(); 
 | 
        return nativeDelete(this, key) || state.frozen['delete'](key); 
 | 
      } return nativeDelete(this, key); 
 | 
    }, 
 | 
    has: function has(key) { 
 | 
      if (isObject(key) && !isExtensible(key)) { 
 | 
        var state = enforceInternalState(this); 
 | 
        if (!state.frozen) state.frozen = new InternalWeakMap(); 
 | 
        return nativeHas(this, key) || state.frozen.has(key); 
 | 
      } return nativeHas(this, key); 
 | 
    }, 
 | 
    get: function get(key) { 
 | 
      if (isObject(key) && !isExtensible(key)) { 
 | 
        var state = enforceInternalState(this); 
 | 
        if (!state.frozen) state.frozen = new InternalWeakMap(); 
 | 
        return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key); 
 | 
      } return nativeGet(this, key); 
 | 
    }, 
 | 
    set: function set(key, value) { 
 | 
      if (isObject(key) && !isExtensible(key)) { 
 | 
        var state = enforceInternalState(this); 
 | 
        if (!state.frozen) state.frozen = new InternalWeakMap(); 
 | 
        nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value); 
 | 
      } else nativeSet(this, key, value); 
 | 
      return this; 
 | 
    } 
 | 
  }); 
 | 
// Chakra Edge frozen keys fix 
 | 
} else if (hasMSEdgeFreezingBug()) { 
 | 
  defineBuiltIns(WeakMapPrototype, { 
 | 
    set: function set(key, value) { 
 | 
      var arrayIntegrityLevel; 
 | 
      if (isArray(key)) { 
 | 
        if (isFrozen(key)) arrayIntegrityLevel = freeze; 
 | 
        else if (isSealed(key)) arrayIntegrityLevel = seal; 
 | 
      } 
 | 
      nativeSet(this, key, value); 
 | 
      if (arrayIntegrityLevel) arrayIntegrityLevel(key); 
 | 
      return this; 
 | 
    } 
 | 
  }); 
 | 
} 
 |