264 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			264 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| var $ = require('../internals/export');
 | |
| var global = require('../internals/global');
 | |
| var call = require('../internals/function-call');
 | |
| var uncurryThis = require('../internals/function-uncurry-this');
 | |
| var IS_PURE = require('../internals/is-pure');
 | |
| var DESCRIPTORS = require('../internals/descriptors');
 | |
| var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');
 | |
| var fails = require('../internals/fails');
 | |
| var hasOwn = require('../internals/has-own-property');
 | |
| var isPrototypeOf = require('../internals/object-is-prototype-of');
 | |
| var anObject = require('../internals/an-object');
 | |
| var toIndexedObject = require('../internals/to-indexed-object');
 | |
| var toPropertyKey = require('../internals/to-property-key');
 | |
| var $toString = require('../internals/to-string');
 | |
| var createPropertyDescriptor = require('../internals/create-property-descriptor');
 | |
| var nativeObjectCreate = require('../internals/object-create');
 | |
| var objectKeys = require('../internals/object-keys');
 | |
| var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');
 | |
| var getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');
 | |
| var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');
 | |
| var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
 | |
| var definePropertyModule = require('../internals/object-define-property');
 | |
| var definePropertiesModule = require('../internals/object-define-properties');
 | |
| var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
 | |
| var defineBuiltIn = require('../internals/define-built-in');
 | |
| var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
 | |
| var shared = require('../internals/shared');
 | |
| var sharedKey = require('../internals/shared-key');
 | |
| var hiddenKeys = require('../internals/hidden-keys');
 | |
| var uid = require('../internals/uid');
 | |
| var wellKnownSymbol = require('../internals/well-known-symbol');
 | |
| var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');
 | |
| var defineWellKnownSymbol = require('../internals/well-known-symbol-define');
 | |
| var defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');
 | |
| var setToStringTag = require('../internals/set-to-string-tag');
 | |
| var InternalStateModule = require('../internals/internal-state');
 | |
| var $forEach = require('../internals/array-iteration').forEach;
 | |
| 
 | |
| var HIDDEN = sharedKey('hidden');
 | |
| var SYMBOL = 'Symbol';
 | |
| var PROTOTYPE = 'prototype';
 | |
| 
 | |
| var setInternalState = InternalStateModule.set;
 | |
| var getInternalState = InternalStateModule.getterFor(SYMBOL);
 | |
| 
 | |
| var ObjectPrototype = Object[PROTOTYPE];
 | |
| var $Symbol = global.Symbol;
 | |
| var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
 | |
| var RangeError = global.RangeError;
 | |
| var TypeError = global.TypeError;
 | |
| var QObject = global.QObject;
 | |
| var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
 | |
| var nativeDefineProperty = definePropertyModule.f;
 | |
| var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
 | |
| var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
 | |
| var push = uncurryThis([].push);
 | |
| 
 | |
| var AllSymbols = shared('symbols');
 | |
| var ObjectPrototypeSymbols = shared('op-symbols');
 | |
| var WellKnownSymbolsStore = shared('wks');
 | |
| 
 | |
| // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
 | |
| var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
 | |
| 
 | |
| // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
 | |
| var fallbackDefineProperty = function (O, P, Attributes) {
 | |
|   var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
 | |
|   if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
 | |
|   nativeDefineProperty(O, P, Attributes);
 | |
|   if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
 | |
|     nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
 | |
|   }
 | |
| };
 | |
| 
 | |
| var setSymbolDescriptor = DESCRIPTORS && fails(function () {
 | |
|   return nativeObjectCreate(nativeDefineProperty({}, 'a', {
 | |
|     get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
 | |
|   })).a !== 7;
 | |
| }) ? fallbackDefineProperty : nativeDefineProperty;
 | |
| 
 | |
| var wrap = function (tag, description) {
 | |
|   var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
 | |
|   setInternalState(symbol, {
 | |
|     type: SYMBOL,
 | |
|     tag: tag,
 | |
|     description: description
 | |
|   });
 | |
|   if (!DESCRIPTORS) symbol.description = description;
 | |
|   return symbol;
 | |
| };
 | |
| 
 | |
| var $defineProperty = function defineProperty(O, P, Attributes) {
 | |
|   if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
 | |
|   anObject(O);
 | |
|   var key = toPropertyKey(P);
 | |
|   anObject(Attributes);
 | |
|   if (hasOwn(AllSymbols, key)) {
 | |
|     if (!Attributes.enumerable) {
 | |
|       if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));
 | |
|       O[HIDDEN][key] = true;
 | |
|     } else {
 | |
|       if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
 | |
|       Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
 | |
|     } return setSymbolDescriptor(O, key, Attributes);
 | |
|   } return nativeDefineProperty(O, key, Attributes);
 | |
| };
 | |
| 
 | |
| var $defineProperties = function defineProperties(O, Properties) {
 | |
|   anObject(O);
 | |
|   var properties = toIndexedObject(Properties);
 | |
|   var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
 | |
|   $forEach(keys, function (key) {
 | |
|     if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
 | |
|   });
 | |
|   return O;
 | |
| };
 | |
| 
 | |
| var $create = function create(O, Properties) {
 | |
|   return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
 | |
| };
 | |
| 
 | |
| var $propertyIsEnumerable = function propertyIsEnumerable(V) {
 | |
|   var P = toPropertyKey(V);
 | |
|   var enumerable = call(nativePropertyIsEnumerable, this, P);
 | |
|   if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
 | |
|   return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]
 | |
|     ? enumerable : true;
 | |
| };
 | |
| 
 | |
| var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
 | |
|   var it = toIndexedObject(O);
 | |
|   var key = toPropertyKey(P);
 | |
|   if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
 | |
|   var descriptor = nativeGetOwnPropertyDescriptor(it, key);
 | |
|   if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
 | |
|     descriptor.enumerable = true;
 | |
|   }
 | |
|   return descriptor;
 | |
| };
 | |
| 
 | |
| var $getOwnPropertyNames = function getOwnPropertyNames(O) {
 | |
|   var names = nativeGetOwnPropertyNames(toIndexedObject(O));
 | |
|   var result = [];
 | |
|   $forEach(names, function (key) {
 | |
|     if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
 | |
|   });
 | |
|   return result;
 | |
| };
 | |
| 
 | |
| var $getOwnPropertySymbols = function (O) {
 | |
|   var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
 | |
|   var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
 | |
|   var result = [];
 | |
|   $forEach(names, function (key) {
 | |
|     if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
 | |
|       push(result, AllSymbols[key]);
 | |
|     }
 | |
|   });
 | |
|   return result;
 | |
| };
 | |
| 
 | |
| // `Symbol` constructor
 | |
| // https://tc39.es/ecma262/#sec-symbol-constructor
 | |
| if (!NATIVE_SYMBOL) {
 | |
|   $Symbol = function Symbol() {
 | |
|     if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');
 | |
|     var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
 | |
|     var tag = uid(description);
 | |
|     var setter = function (value) {
 | |
|       var $this = this === undefined ? global : this;
 | |
|       if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
 | |
|       if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;
 | |
|       var descriptor = createPropertyDescriptor(1, value);
 | |
|       try {
 | |
|         setSymbolDescriptor($this, tag, descriptor);
 | |
|       } catch (error) {
 | |
|         if (!(error instanceof RangeError)) throw error;
 | |
|         fallbackDefineProperty($this, tag, descriptor);
 | |
|       }
 | |
|     };
 | |
|     if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
 | |
|     return wrap(tag, description);
 | |
|   };
 | |
| 
 | |
|   SymbolPrototype = $Symbol[PROTOTYPE];
 | |
| 
 | |
|   defineBuiltIn(SymbolPrototype, 'toString', function toString() {
 | |
|     return getInternalState(this).tag;
 | |
|   });
 | |
| 
 | |
|   defineBuiltIn($Symbol, 'withoutSetter', function (description) {
 | |
|     return wrap(uid(description), description);
 | |
|   });
 | |
| 
 | |
|   propertyIsEnumerableModule.f = $propertyIsEnumerable;
 | |
|   definePropertyModule.f = $defineProperty;
 | |
|   definePropertiesModule.f = $defineProperties;
 | |
|   getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
 | |
|   getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
 | |
|   getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
 | |
| 
 | |
|   wrappedWellKnownSymbolModule.f = function (name) {
 | |
|     return wrap(wellKnownSymbol(name), name);
 | |
|   };
 | |
| 
 | |
|   if (DESCRIPTORS) {
 | |
|     // https://github.com/tc39/proposal-Symbol-description
 | |
|     defineBuiltInAccessor(SymbolPrototype, 'description', {
 | |
|       configurable: true,
 | |
|       get: function description() {
 | |
|         return getInternalState(this).description;
 | |
|       }
 | |
|     });
 | |
|     if (!IS_PURE) {
 | |
|       defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| $({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
 | |
|   Symbol: $Symbol
 | |
| });
 | |
| 
 | |
| $forEach(objectKeys(WellKnownSymbolsStore), function (name) {
 | |
|   defineWellKnownSymbol(name);
 | |
| });
 | |
| 
 | |
| $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
 | |
|   useSetter: function () { USE_SETTER = true; },
 | |
|   useSimple: function () { USE_SETTER = false; }
 | |
| });
 | |
| 
 | |
| $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
 | |
|   // `Object.create` method
 | |
|   // https://tc39.es/ecma262/#sec-object.create
 | |
|   create: $create,
 | |
|   // `Object.defineProperty` method
 | |
|   // https://tc39.es/ecma262/#sec-object.defineproperty
 | |
|   defineProperty: $defineProperty,
 | |
|   // `Object.defineProperties` method
 | |
|   // https://tc39.es/ecma262/#sec-object.defineproperties
 | |
|   defineProperties: $defineProperties,
 | |
|   // `Object.getOwnPropertyDescriptor` method
 | |
|   // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
 | |
|   getOwnPropertyDescriptor: $getOwnPropertyDescriptor
 | |
| });
 | |
| 
 | |
| $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {
 | |
|   // `Object.getOwnPropertyNames` method
 | |
|   // https://tc39.es/ecma262/#sec-object.getownpropertynames
 | |
|   getOwnPropertyNames: $getOwnPropertyNames
 | |
| });
 | |
| 
 | |
| // `Symbol.prototype[@@toPrimitive]` method
 | |
| // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
 | |
| defineSymbolToPrimitive();
 | |
| 
 | |
| // `Symbol.prototype[@@toStringTag]` property
 | |
| // https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
 | |
| setToStringTag($Symbol, SYMBOL);
 | |
| 
 | |
| hiddenKeys[HIDDEN] = true;
 | 
