massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / core-js / modules / es.symbol.js
1 'use strict';
2 var $ = require('../internals/export');
3 var global = require('../internals/global');
4 var getBuiltIn = require('../internals/get-built-in');
5 var apply = require('../internals/function-apply');
6 var call = require('../internals/function-call');
7 var uncurryThis = require('../internals/function-uncurry-this');
8 var IS_PURE = require('../internals/is-pure');
9 var DESCRIPTORS = require('../internals/descriptors');
10 var NATIVE_SYMBOL = require('../internals/native-symbol');
11 var fails = require('../internals/fails');
12 var hasOwn = require('../internals/has-own-property');
13 var isArray = require('../internals/is-array');
14 var isCallable = require('../internals/is-callable');
15 var isObject = require('../internals/is-object');
16 var isPrototypeOf = require('../internals/object-is-prototype-of');
17 var isSymbol = require('../internals/is-symbol');
18 var anObject = require('../internals/an-object');
19 var toObject = require('../internals/to-object');
20 var toIndexedObject = require('../internals/to-indexed-object');
21 var toPropertyKey = require('../internals/to-property-key');
22 var $toString = require('../internals/to-string');
23 var createPropertyDescriptor = require('../internals/create-property-descriptor');
24 var nativeObjectCreate = require('../internals/object-create');
25 var objectKeys = require('../internals/object-keys');
26 var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');
27 var getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');
28 var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');
29 var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
30 var definePropertyModule = require('../internals/object-define-property');
31 var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
32 var arraySlice = require('../internals/array-slice');
33 var redefine = require('../internals/redefine');
34 var shared = require('../internals/shared');
35 var sharedKey = require('../internals/shared-key');
36 var hiddenKeys = require('../internals/hidden-keys');
37 var uid = require('../internals/uid');
38 var wellKnownSymbol = require('../internals/well-known-symbol');
39 var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');
40 var defineWellKnownSymbol = require('../internals/define-well-known-symbol');
41 var setToStringTag = require('../internals/set-to-string-tag');
42 var InternalStateModule = require('../internals/internal-state');
43 var $forEach = require('../internals/array-iteration').forEach;
44
45 var HIDDEN = sharedKey('hidden');
46 var SYMBOL = 'Symbol';
47 var PROTOTYPE = 'prototype';
48 var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
49
50 var setInternalState = InternalStateModule.set;
51 var getInternalState = InternalStateModule.getterFor(SYMBOL);
52
53 var ObjectPrototype = Object[PROTOTYPE];
54 var $Symbol = global.Symbol;
55 var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
56 var TypeError = global.TypeError;
57 var QObject = global.QObject;
58 var $stringify = getBuiltIn('JSON', 'stringify');
59 var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
60 var nativeDefineProperty = definePropertyModule.f;
61 var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
62 var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
63 var push = uncurryThis([].push);
64
65 var AllSymbols = shared('symbols');
66 var ObjectPrototypeSymbols = shared('op-symbols');
67 var StringToSymbolRegistry = shared('string-to-symbol-registry');
68 var SymbolToStringRegistry = shared('symbol-to-string-registry');
69 var WellKnownSymbolsStore = shared('wks');
70
71 // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
72 var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
73
74 // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
75 var setSymbolDescriptor = DESCRIPTORS && fails(function () {
76   return nativeObjectCreate(nativeDefineProperty({}, 'a', {
77     get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
78   })).a != 7;
79 }) ? function (O, P, Attributes) {
80   var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
81   if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
82   nativeDefineProperty(O, P, Attributes);
83   if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
84     nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
85   }
86 } : nativeDefineProperty;
87
88 var wrap = function (tag, description) {
89   var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
90   setInternalState(symbol, {
91     type: SYMBOL,
92     tag: tag,
93     description: description
94   });
95   if (!DESCRIPTORS) symbol.description = description;
96   return symbol;
97 };
98
99 var $defineProperty = function defineProperty(O, P, Attributes) {
100   if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
101   anObject(O);
102   var key = toPropertyKey(P);
103   anObject(Attributes);
104   if (hasOwn(AllSymbols, key)) {
105     if (!Attributes.enumerable) {
106       if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
107       O[HIDDEN][key] = true;
108     } else {
109       if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
110       Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
111     } return setSymbolDescriptor(O, key, Attributes);
112   } return nativeDefineProperty(O, key, Attributes);
113 };
114
115 var $defineProperties = function defineProperties(O, Properties) {
116   anObject(O);
117   var properties = toIndexedObject(Properties);
118   var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
119   $forEach(keys, function (key) {
120     if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
121   });
122   return O;
123 };
124
125 var $create = function create(O, Properties) {
126   return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
127 };
128
129 var $propertyIsEnumerable = function propertyIsEnumerable(V) {
130   var P = toPropertyKey(V);
131   var enumerable = call(nativePropertyIsEnumerable, this, P);
132   if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
133   return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]
134     ? enumerable : true;
135 };
136
137 var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
138   var it = toIndexedObject(O);
139   var key = toPropertyKey(P);
140   if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
141   var descriptor = nativeGetOwnPropertyDescriptor(it, key);
142   if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
143     descriptor.enumerable = true;
144   }
145   return descriptor;
146 };
147
148 var $getOwnPropertyNames = function getOwnPropertyNames(O) {
149   var names = nativeGetOwnPropertyNames(toIndexedObject(O));
150   var result = [];
151   $forEach(names, function (key) {
152     if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
153   });
154   return result;
155 };
156
157 var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
158   var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
159   var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
160   var result = [];
161   $forEach(names, function (key) {
162     if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
163       push(result, AllSymbols[key]);
164     }
165   });
166   return result;
167 };
168
169 // `Symbol` constructor
170 // https://tc39.es/ecma262/#sec-symbol-constructor
171 if (!NATIVE_SYMBOL) {
172   $Symbol = function Symbol() {
173     if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');
174     var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
175     var tag = uid(description);
176     var setter = function (value) {
177       if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
178       if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
179       setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
180     };
181     if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
182     return wrap(tag, description);
183   };
184
185   SymbolPrototype = $Symbol[PROTOTYPE];
186
187   redefine(SymbolPrototype, 'toString', function toString() {
188     return getInternalState(this).tag;
189   });
190
191   redefine($Symbol, 'withoutSetter', function (description) {
192     return wrap(uid(description), description);
193   });
194
195   propertyIsEnumerableModule.f = $propertyIsEnumerable;
196   definePropertyModule.f = $defineProperty;
197   getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
198   getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
199   getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
200
201   wrappedWellKnownSymbolModule.f = function (name) {
202     return wrap(wellKnownSymbol(name), name);
203   };
204
205   if (DESCRIPTORS) {
206     // https://github.com/tc39/proposal-Symbol-description
207     nativeDefineProperty(SymbolPrototype, 'description', {
208       configurable: true,
209       get: function description() {
210         return getInternalState(this).description;
211       }
212     });
213     if (!IS_PURE) {
214       redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
215     }
216   }
217 }
218
219 $({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
220   Symbol: $Symbol
221 });
222
223 $forEach(objectKeys(WellKnownSymbolsStore), function (name) {
224   defineWellKnownSymbol(name);
225 });
226
227 $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
228   // `Symbol.for` method
229   // https://tc39.es/ecma262/#sec-symbol.for
230   'for': function (key) {
231     var string = $toString(key);
232     if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
233     var symbol = $Symbol(string);
234     StringToSymbolRegistry[string] = symbol;
235     SymbolToStringRegistry[symbol] = string;
236     return symbol;
237   },
238   // `Symbol.keyFor` method
239   // https://tc39.es/ecma262/#sec-symbol.keyfor
240   keyFor: function keyFor(sym) {
241     if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');
242     if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
243   },
244   useSetter: function () { USE_SETTER = true; },
245   useSimple: function () { USE_SETTER = false; }
246 });
247
248 $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
249   // `Object.create` method
250   // https://tc39.es/ecma262/#sec-object.create
251   create: $create,
252   // `Object.defineProperty` method
253   // https://tc39.es/ecma262/#sec-object.defineproperty
254   defineProperty: $defineProperty,
255   // `Object.defineProperties` method
256   // https://tc39.es/ecma262/#sec-object.defineproperties
257   defineProperties: $defineProperties,
258   // `Object.getOwnPropertyDescriptor` method
259   // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
260   getOwnPropertyDescriptor: $getOwnPropertyDescriptor
261 });
262
263 $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {
264   // `Object.getOwnPropertyNames` method
265   // https://tc39.es/ecma262/#sec-object.getownpropertynames
266   getOwnPropertyNames: $getOwnPropertyNames,
267   // `Object.getOwnPropertySymbols` method
268   // https://tc39.es/ecma262/#sec-object.getownpropertysymbols
269   getOwnPropertySymbols: $getOwnPropertySymbols
270 });
271
272 // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
273 // https://bugs.chromium.org/p/v8/issues/detail?id=3443
274 $({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {
275   getOwnPropertySymbols: function getOwnPropertySymbols(it) {
276     return getOwnPropertySymbolsModule.f(toObject(it));
277   }
278 });
279
280 // `JSON.stringify` method behavior with symbols
281 // https://tc39.es/ecma262/#sec-json.stringify
282 if ($stringify) {
283   var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {
284     var symbol = $Symbol();
285     // MS Edge converts symbol values to JSON as {}
286     return $stringify([symbol]) != '[null]'
287       // WebKit converts symbol values to JSON as null
288       || $stringify({ a: symbol }) != '{}'
289       // V8 throws on boxed symbols
290       || $stringify(Object(symbol)) != '{}';
291   });
292
293   $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {
294     // eslint-disable-next-line no-unused-vars -- required for `.length`
295     stringify: function stringify(it, replacer, space) {
296       var args = arraySlice(arguments);
297       var $replacer = replacer;
298       if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
299       if (!isArray(replacer)) replacer = function (key, value) {
300         if (isCallable($replacer)) value = call($replacer, this, key, value);
301         if (!isSymbol(value)) return value;
302       };
303       args[1] = replacer;
304       return apply($stringify, null, args);
305     }
306   });
307 }
308
309 // `Symbol.prototype[@@toPrimitive]` method
310 // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
311 if (!SymbolPrototype[TO_PRIMITIVE]) {
312   var valueOf = SymbolPrototype.valueOf;
313   // eslint-disable-next-line no-unused-vars -- required for .length
314   redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {
315     // TODO: improve hint logic
316     return call(valueOf, this);
317   });
318 }
319 // `Symbol.prototype[@@toStringTag]` property
320 // https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
321 setToStringTag($Symbol, SYMBOL);
322
323 hiddenKeys[HIDDEN] = true;