UNPKG

1.62 kBJavaScriptView Raw
1'use strict';
2var shared = require('../internals/shared');
3var getBuiltIn = require('../internals/get-built-in');
4var uncurryThis = require('../internals/function-uncurry-this');
5var isSymbol = require('../internals/is-symbol');
6var wellKnownSymbol = require('../internals/well-known-symbol');
7
8var Symbol = getBuiltIn('Symbol');
9var $isWellKnownSymbol = Symbol.isWellKnownSymbol;
10var getOwnPropertyNames = getBuiltIn('Object', 'getOwnPropertyNames');
11var thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);
12var WellKnownSymbolsStore = shared('wks');
13
14for (var i = 0, symbolKeys = getOwnPropertyNames(Symbol), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) {
15 // some old engines throws on access to some keys like `arguments` or `caller`
16 try {
17 var symbolKey = symbolKeys[i];
18 if (isSymbol(Symbol[symbolKey])) wellKnownSymbol(symbolKey);
19 } catch (error) { /* empty */ }
20}
21
22// `Symbol.isWellKnownSymbol` method
23// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol
24// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected
25module.exports = function isWellKnownSymbol(value) {
26 if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true;
27 try {
28 var symbol = thisSymbolValue(value);
29 for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {
30 // eslint-disable-next-line eqeqeq -- polyfilled symbols case
31 if (WellKnownSymbolsStore[keys[j]] == symbol) return true;
32 }
33 } catch (error) { /* empty */ }
34 return false;
35};