massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / core-js / internals / internal-state.js
1 var NATIVE_WEAK_MAP = require('../internals/native-weak-map');
2 var global = require('../internals/global');
3 var uncurryThis = require('../internals/function-uncurry-this');
4 var isObject = require('../internals/is-object');
5 var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
6 var hasOwn = require('../internals/has-own-property');
7 var shared = require('../internals/shared-store');
8 var sharedKey = require('../internals/shared-key');
9 var hiddenKeys = require('../internals/hidden-keys');
10
11 var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
12 var TypeError = global.TypeError;
13 var WeakMap = global.WeakMap;
14 var set, get, has;
15
16 var enforce = function (it) {
17   return has(it) ? get(it) : set(it, {});
18 };
19
20 var getterFor = function (TYPE) {
21   return function (it) {
22     var state;
23     if (!isObject(it) || (state = get(it)).type !== TYPE) {
24       throw TypeError('Incompatible receiver, ' + TYPE + ' required');
25     } return state;
26   };
27 };
28
29 if (NATIVE_WEAK_MAP || shared.state) {
30   var store = shared.state || (shared.state = new WeakMap());
31   var wmget = uncurryThis(store.get);
32   var wmhas = uncurryThis(store.has);
33   var wmset = uncurryThis(store.set);
34   set = function (it, metadata) {
35     if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
36     metadata.facade = it;
37     wmset(store, it, metadata);
38     return metadata;
39   };
40   get = function (it) {
41     return wmget(store, it) || {};
42   };
43   has = function (it) {
44     return wmhas(store, it);
45   };
46 } else {
47   var STATE = sharedKey('state');
48   hiddenKeys[STATE] = true;
49   set = function (it, metadata) {
50     if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
51     metadata.facade = it;
52     createNonEnumerableProperty(it, STATE, metadata);
53     return metadata;
54   };
55   get = function (it) {
56     return hasOwn(it, STATE) ? it[STATE] : {};
57   };
58   has = function (it) {
59     return hasOwn(it, STATE);
60   };
61 }
62
63 module.exports = {
64   set: set,
65   get: get,
66   has: has,
67   enforce: enforce,
68   getterFor: getterFor
69 };