-
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
55 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
'use strict'; | ||
|
||
var origSymbol = global.Symbol; | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
ljharb
Author
Member
|
||
var hasSymbolSham = require('./shams'); | ||
|
||
module.exports = function hasNativeSymbols() { | ||
if (typeof origSymbol !== 'function') { return false; } | ||
if (typeof Symbol !== 'function') { return false; } | ||
if (typeof origSymbol('foo') !== 'symbol') { return false; } | ||
if (typeof Symbol('bar') !== 'symbol') { return false; } | ||
|
||
return hasSymbolSham(); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
'use strict'; | ||
|
||
/* eslint complexity: [2, 17], max-statements: [2, 33] */ | ||
module.exports = function hasSymbols() { | ||
if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } | ||
if (typeof Symbol.iterator === 'symbol') { return true; } | ||
|
||
var obj = {}; | ||
var sym = Symbol('test'); | ||
var symObj = Object(sym); | ||
if (typeof sym === 'string') { return false; } | ||
|
||
if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } | ||
if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } | ||
|
||
// temp disabled per https://github.com/ljharb/object.assign/issues/17 | ||
// if (sym instanceof Symbol) { return false; } | ||
// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 | ||
// if (!(symObj instanceof Symbol)) { return false; } | ||
|
||
// if (typeof Symbol.prototype.toString !== 'function') { return false; } | ||
// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } | ||
|
||
var symVal = 42; | ||
obj[sym] = symVal; | ||
for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax | ||
if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } | ||
|
||
if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } | ||
|
||
var syms = Object.getOwnPropertySymbols(obj); | ||
if (syms.length !== 1 || syms[0] !== sym) { return false; } | ||
|
||
if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } | ||
|
||
if (typeof Object.getOwnPropertyDescriptor === 'function') { | ||
var descriptor = Object.getOwnPropertyDescriptor(obj, sym); | ||
if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } | ||
} | ||
|
||
return true; | ||
}; |
Angular 6+ is not using global anymore