mirror of
https://github.com/status-im/react-native.git
synced 2025-02-19 12:57:00 +00:00
JS: Remove Throwing Collection Checks (rFBOBJC)
Reviewed By: sebmarkbage Differential Revision: D2650824 fb-gh-sync-id: eb944a2086f1efff05215c9f6bd332d0a832606e
This commit is contained in:
parent
5041171b78
commit
c47116273d
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @generated SignedSource<<6c1a82d2f5918f03f3f0e5825e1f32f3>>
|
* @generated SignedSource<<bf0749e529897a7c9687fff37310d4d2>>
|
||||||
*
|
*
|
||||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
* !! This file is a check-in of a static_upstream project! !!
|
* !! This file is a check-in of a static_upstream project! !!
|
||||||
@ -12,67 +12,42 @@
|
|||||||
* !! static_upstream. !!
|
* !! static_upstream. !!
|
||||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
*
|
*
|
||||||
* Copyright 2013-2014 Facebook, Inc.
|
* Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
*
|
||||||
* @providesModule _shouldPolyfillES6Collection
|
* @providesModule _shouldPolyfillES6Collection
|
||||||
* @preventMunge
|
* @preventMunge
|
||||||
* @typechecks
|
* @flow
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given a collection class name (Map or Set) return whether it's safe to use
|
* Checks whether a collection name (e.g. "Map" or "Set") has a native polyfill
|
||||||
* the native polyfill.
|
* that is safe to be used.
|
||||||
*
|
|
||||||
* @param {string} collectionName
|
|
||||||
*/
|
*/
|
||||||
function shouldPolyfillES6Collection(collectionName) {
|
function shouldPolyfillES6Collection(collectionName: string): boolean {
|
||||||
var Collection = global[collectionName];
|
var Collection = global[collectionName];
|
||||||
if (Collection == null) {
|
if (Collection == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The iterator protocol depends on `Symbol.iterator`. If a collection is
|
||||||
|
// implemented, but `Symbol` is not, it's going to break iteration because
|
||||||
|
// we'll be using custom "@@iterator" instead, which is not implemented on
|
||||||
|
// native collections.
|
||||||
|
if (typeof global.Symbol !== 'function') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
var proto = Collection.prototype;
|
var proto = Collection.prototype;
|
||||||
|
|
||||||
// These checks are adapted from es6-shim https://fburl.com/34437854
|
// These checks are adapted from es6-shim: https://fburl.com/34437854
|
||||||
|
// NOTE: `isCallableWithoutNew` and `!supportsSubclassing` are not checked
|
||||||
|
// because they make debugging with "break on exceptions" difficult.
|
||||||
return Collection == null ||
|
return Collection == null ||
|
||||||
typeof Collection !== 'function' ||
|
typeof Collection !== 'function' ||
|
||||||
typeof proto.clear !== 'function' ||
|
typeof proto.clear !== 'function' ||
|
||||||
new Collection().size !== 0 ||
|
new Collection().size !== 0 ||
|
||||||
typeof proto.keys !== 'function' ||
|
typeof proto.keys !== 'function' ||
|
||||||
typeof proto.forEach !== 'function' ||
|
typeof proto.forEach !== 'function';
|
||||||
isCallableWithoutNew(Collection) ||
|
|
||||||
!supportsSubclassing(Collection);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given a class can we subclass it?
|
|
||||||
*
|
|
||||||
* @param {function} Collection
|
|
||||||
*/
|
|
||||||
function supportsSubclassing(Collection) {
|
|
||||||
class SubCollection extends Collection {}
|
|
||||||
try {
|
|
||||||
var s = (new SubCollection([]));
|
|
||||||
// Firefox 32 will throw a type error when any operation is called on a
|
|
||||||
// subclass.
|
|
||||||
s.size;
|
|
||||||
return s instanceof Collection;
|
|
||||||
} catch (e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given a constructor can we call it without `new`?
|
|
||||||
*
|
|
||||||
* @param {function} Collection
|
|
||||||
*/
|
|
||||||
function isCallableWithoutNew(Collection) {
|
|
||||||
try {
|
|
||||||
Collection();
|
|
||||||
} catch (e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = shouldPolyfillES6Collection;
|
module.exports = shouldPolyfillES6Collection;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user