massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / core-js / internals / collection-weak.js
1 'use strict';
2 var uncurryThis = require('../internals/function-uncurry-this');
3 var redefineAll = require('../internals/redefine-all');
4 var getWeakData = require('../internals/internal-metadata').getWeakData;
5 var anObject = require('../internals/an-object');
6 var isObject = require('../internals/is-object');
7 var anInstance = require('../internals/an-instance');
8 var iterate = require('../internals/iterate');
9 var ArrayIterationModule = require('../internals/array-iteration');
10 var hasOwn = require('../internals/has-own-property');
11 var InternalStateModule = require('../internals/internal-state');
12
13 var setInternalState = InternalStateModule.set;
14 var internalStateGetterFor = InternalStateModule.getterFor;
15 var find = ArrayIterationModule.find;
16 var findIndex = ArrayIterationModule.findIndex;
17 var splice = uncurryThis([].splice);
18 var id = 0;
19
20 // fallback for uncaught frozen keys
21 var uncaughtFrozenStore = function (store) {
22   return store.frozen || (store.frozen = new UncaughtFrozenStore());
23 };
24
25 var UncaughtFrozenStore = function () {
26   this.entries = [];
27 };
28
29 var findUncaughtFrozen = function (store, key) {
30   return find(store.entries, function (it) {
31     return it[0] === key;
32   });
33 };
34
35 UncaughtFrozenStore.prototype = {
36   get: function (key) {
37     var entry = findUncaughtFrozen(this, key);
38     if (entry) return entry[1];
39   },
40   has: function (key) {
41     return !!findUncaughtFrozen(this, key);
42   },
43   set: function (key, value) {
44     var entry = findUncaughtFrozen(this, key);
45     if (entry) entry[1] = value;
46     else this.entries.push([key, value]);
47   },
48   'delete': function (key) {
49     var index = findIndex(this.entries, function (it) {
50       return it[0] === key;
51     });
52     if (~index) splice(this.entries, index, 1);
53     return !!~index;
54   }
55 };
56
57 module.exports = {
58   getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
59     var Constructor = wrapper(function (that, iterable) {
60       anInstance(that, Prototype);
61       setInternalState(that, {
62         type: CONSTRUCTOR_NAME,
63         id: id++,
64         frozen: undefined
65       });
66       if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
67     });
68
69     var Prototype = Constructor.prototype;
70
71     var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
72
73     var define = function (that, key, value) {
74       var state = getInternalState(that);
75       var data = getWeakData(anObject(key), true);
76       if (data === true) uncaughtFrozenStore(state).set(key, value);
77       else data[state.id] = value;
78       return that;
79     };
80
81     redefineAll(Prototype, {
82       // `{ WeakMap, WeakSet }.prototype.delete(key)` methods
83       // https://tc39.es/ecma262/#sec-weakmap.prototype.delete
84       // https://tc39.es/ecma262/#sec-weakset.prototype.delete
85       'delete': function (key) {
86         var state = getInternalState(this);
87         if (!isObject(key)) return false;
88         var data = getWeakData(key);
89         if (data === true) return uncaughtFrozenStore(state)['delete'](key);
90         return data && hasOwn(data, state.id) && delete data[state.id];
91       },
92       // `{ WeakMap, WeakSet }.prototype.has(key)` methods
93       // https://tc39.es/ecma262/#sec-weakmap.prototype.has
94       // https://tc39.es/ecma262/#sec-weakset.prototype.has
95       has: function has(key) {
96         var state = getInternalState(this);
97         if (!isObject(key)) return false;
98         var data = getWeakData(key);
99         if (data === true) return uncaughtFrozenStore(state).has(key);
100         return data && hasOwn(data, state.id);
101       }
102     });
103
104     redefineAll(Prototype, IS_MAP ? {
105       // `WeakMap.prototype.get(key)` method
106       // https://tc39.es/ecma262/#sec-weakmap.prototype.get
107       get: function get(key) {
108         var state = getInternalState(this);
109         if (isObject(key)) {
110           var data = getWeakData(key);
111           if (data === true) return uncaughtFrozenStore(state).get(key);
112           return data ? data[state.id] : undefined;
113         }
114       },
115       // `WeakMap.prototype.set(key, value)` method
116       // https://tc39.es/ecma262/#sec-weakmap.prototype.set
117       set: function set(key, value) {
118         return define(this, key, value);
119       }
120     } : {
121       // `WeakSet.prototype.add(value)` method
122       // https://tc39.es/ecma262/#sec-weakset.prototype.add
123       add: function add(value) {
124         return define(this, value, true);
125       }
126     });
127
128     return Constructor;
129   }
130 };