| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');var global = require('../internals/global');var isObject = require('../internals/is-object');var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');var hasOwn = require('../internals/has-own-property');var shared = require('../internals/shared-store');var sharedKey = require('../internals/shared-key');var hiddenKeys = require('../internals/hidden-keys');var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';var TypeError = global.TypeError;var WeakMap = global.WeakMap;var set, get, has;var enforce = function (it) {  return has(it) ? get(it) : set(it, {});};var getterFor = function (TYPE) {  return function (it) {    var state;    if (!isObject(it) || (state = get(it)).type !== TYPE) {      throw TypeError('Incompatible receiver, ' + TYPE + ' required');    } return state;  };};if (NATIVE_WEAK_MAP || shared.state) {  var store = shared.state || (shared.state = new WeakMap());  /* eslint-disable no-self-assign -- prototype methods protection */  store.get = store.get;  store.has = store.has;  store.set = store.set;  /* eslint-enable no-self-assign -- prototype methods protection */  set = function (it, metadata) {    if (store.has(it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);    metadata.facade = it;    store.set(it, metadata);    return metadata;  };  get = function (it) {    return store.get(it) || {};  };  has = function (it) {    return store.has(it);  };} else {  var STATE = sharedKey('state');  hiddenKeys[STATE] = true;  set = function (it, metadata) {    if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);    metadata.facade = it;    createNonEnumerableProperty(it, STATE, metadata);    return metadata;  };  get = function (it) {    return hasOwn(it, STATE) ? it[STATE] : {};  };  has = function (it) {    return hasOwn(it, STATE);  };}module.exports = {  set: set,  get: get,  has: has,  enforce: enforce,  getterFor: getterFor};
 |