source: frontend/node_modules/core-js-pure/modules/es.symbol.constructor.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 11.0 KB
Line 
1'use strict';
2var $ = require('../internals/export');
3var globalThis = require('../internals/global-this');
4var call = require('../internals/function-call');
5var uncurryThis = require('../internals/function-uncurry-this');
6var IS_PURE = require('../internals/is-pure');
7var DESCRIPTORS = require('../internals/descriptors');
8var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');
9var fails = require('../internals/fails');
10var hasOwn = require('../internals/has-own-property');
11var isPrototypeOf = require('../internals/object-is-prototype-of');
12var anObject = require('../internals/an-object');
13var toIndexedObject = require('../internals/to-indexed-object');
14var toPropertyKey = require('../internals/to-property-key');
15var $toString = require('../internals/to-string');
16var createPropertyDescriptor = require('../internals/create-property-descriptor');
17var nativeObjectCreate = require('../internals/object-create');
18var objectKeys = require('../internals/object-keys');
19var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');
20var getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');
21var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');
22var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
23var definePropertyModule = require('../internals/object-define-property');
24var definePropertiesModule = require('../internals/object-define-properties');
25var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
26var defineBuiltIn = require('../internals/define-built-in');
27var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
28var shared = require('../internals/shared');
29var sharedKey = require('../internals/shared-key');
30var hiddenKeys = require('../internals/hidden-keys');
31var uid = require('../internals/uid');
32var wellKnownSymbol = require('../internals/well-known-symbol');
33var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');
34var defineWellKnownSymbol = require('../internals/well-known-symbol-define');
35var defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');
36var setToStringTag = require('../internals/set-to-string-tag');
37var InternalStateModule = require('../internals/internal-state');
38var $forEach = require('../internals/array-iteration').forEach;
39
40var HIDDEN = sharedKey('hidden');
41var SYMBOL = 'Symbol';
42var PROTOTYPE = 'prototype';
43
44var setInternalState = InternalStateModule.set;
45var getInternalState = InternalStateModule.getterFor(SYMBOL);
46
47var ObjectPrototype = Object[PROTOTYPE];
48var $Symbol = globalThis.Symbol;
49var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
50var RangeError = globalThis.RangeError;
51var TypeError = globalThis.TypeError;
52var QObject = globalThis.QObject;
53var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
54var nativeDefineProperty = definePropertyModule.f;
55var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
56var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
57var push = uncurryThis([].push);
58
59var AllSymbols = shared('symbols');
60var ObjectPrototypeSymbols = shared('op-symbols');
61var WellKnownSymbolsStore = shared('wks');
62
63// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
64var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
65
66// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
67var fallbackDefineProperty = function (O, P, Attributes) {
68 var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
69 if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
70 nativeDefineProperty(O, P, Attributes);
71 if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
72 nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
73 } return O;
74};
75
76var setSymbolDescriptor = DESCRIPTORS && fails(function () {
77 return nativeObjectCreate(nativeDefineProperty({}, 'a', {
78 get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
79 })).a !== 7;
80}) ? fallbackDefineProperty : nativeDefineProperty;
81
82var wrap = function (tag, description) {
83 var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
84 setInternalState(symbol, {
85 type: SYMBOL,
86 tag: tag,
87 description: description
88 });
89 if (!DESCRIPTORS) symbol.description = description;
90 return symbol;
91};
92
93var $defineProperty = function defineProperty(O, P, Attributes) {
94 if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
95 anObject(O);
96 var key = toPropertyKey(P);
97 anObject(Attributes);
98 if (hasOwn(AllSymbols, key)) {
99 // first definition - default non-enumerable; redefinition - preserve existing state
100 if (!('enumerable' in Attributes) ? !hasOwn(O, key) || (hasOwn(O, HIDDEN) && O[HIDDEN][key]) : !Attributes.enumerable) {
101 if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));
102 O[HIDDEN][key] = true;
103 } else {
104 if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
105 Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
106 } return setSymbolDescriptor(O, key, Attributes);
107 } return nativeDefineProperty(O, key, Attributes);
108};
109
110var $defineProperties = function defineProperties(O, Properties) {
111 anObject(O);
112 var properties = toIndexedObject(Properties);
113 var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
114 $forEach(keys, function (key) {
115 if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
116 });
117 return O;
118};
119
120var $create = function create(O, Properties) {
121 return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
122};
123
124var $propertyIsEnumerable = function propertyIsEnumerable(V) {
125 var P = toPropertyKey(V);
126 var enumerable = call(nativePropertyIsEnumerable, this, P);
127 if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
128 return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]
129 ? enumerable : true;
130};
131
132var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
133 var it = toIndexedObject(O);
134 var key = toPropertyKey(P);
135 if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
136 var descriptor = nativeGetOwnPropertyDescriptor(it, key);
137 if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
138 descriptor.enumerable = true;
139 }
140 return descriptor;
141};
142
143var $getOwnPropertyNames = function getOwnPropertyNames(O) {
144 var names = nativeGetOwnPropertyNames(toIndexedObject(O));
145 var result = [];
146 $forEach(names, function (key) {
147 if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
148 });
149 return result;
150};
151
152var $getOwnPropertySymbols = function (O) {
153 var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
154 var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
155 var result = [];
156 $forEach(names, function (key) {
157 if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
158 push(result, AllSymbols[key]);
159 }
160 });
161 return result;
162};
163
164// `Symbol` constructor
165// https://tc39.es/ecma262/#sec-symbol-constructor
166if (!NATIVE_SYMBOL) {
167 $Symbol = function Symbol() {
168 if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');
169 var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
170 var tag = uid(description);
171 var setter = function (value) {
172 var $this = this === undefined ? globalThis : this;
173 if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
174 if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;
175 var descriptor = createPropertyDescriptor(1, value);
176 try {
177 setSymbolDescriptor($this, tag, descriptor);
178 } catch (error) {
179 if (!(error instanceof RangeError)) throw error;
180 fallbackDefineProperty($this, tag, descriptor);
181 }
182 };
183 if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
184 return wrap(tag, description);
185 };
186
187 SymbolPrototype = $Symbol[PROTOTYPE];
188
189 defineBuiltIn(SymbolPrototype, 'toString', function toString() {
190 return getInternalState(this).tag;
191 });
192
193 defineBuiltIn($Symbol, 'withoutSetter', function (description) {
194 return wrap(uid(description), description);
195 });
196
197 propertyIsEnumerableModule.f = $propertyIsEnumerable;
198 definePropertyModule.f = $defineProperty;
199 definePropertiesModule.f = $defineProperties;
200 getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
201 getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
202 getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
203
204 wrappedWellKnownSymbolModule.f = function (name) {
205 return wrap(wellKnownSymbol(name), name);
206 };
207
208 if (DESCRIPTORS) {
209 // https://tc39.es/ecma262/#sec-symbol.prototype.description
210 defineBuiltInAccessor(SymbolPrototype, 'description', {
211 configurable: true,
212 get: function description() {
213 return getInternalState(this).description;
214 }
215 });
216 if (!IS_PURE) {
217 defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
218 }
219 }
220}
221
222$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
223 Symbol: $Symbol
224});
225
226$forEach(objectKeys(WellKnownSymbolsStore), function (name) {
227 defineWellKnownSymbol(name);
228});
229
230$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
231 useSetter: function () { USE_SETTER = true; },
232 useSimple: function () { USE_SETTER = false; }
233});
234
235$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
236 // `Object.create` method
237 // https://tc39.es/ecma262/#sec-object.create
238 create: $create,
239 // `Object.defineProperty` method
240 // https://tc39.es/ecma262/#sec-object.defineproperty
241 defineProperty: $defineProperty,
242 // `Object.defineProperties` method
243 // https://tc39.es/ecma262/#sec-object.defineproperties
244 defineProperties: $defineProperties,
245 // `Object.getOwnPropertyDescriptor` method
246 // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
247 getOwnPropertyDescriptor: $getOwnPropertyDescriptor
248});
249
250$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {
251 // `Object.getOwnPropertyNames` method
252 // https://tc39.es/ecma262/#sec-object.getownpropertynames
253 getOwnPropertyNames: $getOwnPropertyNames
254});
255
256// `Symbol.prototype[@@toPrimitive]` method
257// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
258defineSymbolToPrimitive();
259
260// `Symbol.prototype[@@toStringTag]` property
261// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
262setToStringTag($Symbol, SYMBOL);
263
264hiddenKeys[HIDDEN] = true;
Note: See TracBrowser for help on using the repository browser.