Software zum Installieren eines Smart-Mirror Frameworks , zum Nutzen von hochschulrelevanten Informationen, auf einem Raspberry-Pi.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

es.symbol.js 13KB

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