1234567891011121314151617181920212223242526272829303132333435 |
- 'use strict';
- var shared = require('../internals/shared');
- var getBuiltIn = require('../internals/get-built-in');
- var uncurryThis = require('../internals/function-uncurry-this');
- var isSymbol = require('../internals/is-symbol');
- var wellKnownSymbol = require('../internals/well-known-symbol');
-
- var Symbol = getBuiltIn('Symbol');
- var $isWellKnownSymbol = Symbol.isWellKnownSymbol;
- var getOwnPropertyNames = getBuiltIn('Object', 'getOwnPropertyNames');
- var thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);
- var WellKnownSymbolsStore = shared('wks');
-
- for (var i = 0, symbolKeys = getOwnPropertyNames(Symbol), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) {
- // some old engines throws on access to some keys like `arguments` or `caller`
- try {
- var symbolKey = symbolKeys[i];
- if (isSymbol(Symbol[symbolKey])) wellKnownSymbol(symbolKey);
- } catch (error) { /* empty */ }
- }
-
- // `Symbol.isWellKnownSymbol` method
- // https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol
- // We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected
- module.exports = function isWellKnownSymbol(value) {
- if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true;
- try {
- var symbol = thisSymbolValue(value);
- for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {
- // eslint-disable-next-line eqeqeq -- polyfilled symbols case
- if (WellKnownSymbolsStore[keys[j]] == symbol) return true;
- }
- } catch (error) { /* empty */ }
- return false;
- };
|