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