From cb45eaa0e8cab0f8a4b1c507494b0483e344b682 Mon Sep 17 00:00:00 2001 From: Nick Lockwood Date: Wed, 20 Jan 2016 08:26:46 -0800 Subject: [PATCH] Made Map & Set polyfills available globally Summary: public Map and Set are a standard JavaScript features, but are only supported in a subset of JSC versions that we target (e.g. iOS 7's JSC doesn't support Set). The consequence of this is that failing to require('Set') before using it won't error during testing on a modern OS, but will fail on older OS versions. This diff makes the Map and Set polyfills available globally to all RN apps to avoid that problem. Reviewed By: davidaurelio Differential Revision: D2833997 fb-gh-sync-id: 713d8b69f6a1bce2472a1b2e6b84f69d75f30289 --- Libraries/AppStateIOS/AppStateIOS.ios.js | 1 - Libraries/CustomComponents/Navigator/Navigator.js | 1 - .../Initialization/InitializeJavaScriptAppEngine.js | 7 ++++++- Libraries/LinkingIOS/LinkingIOS.js | 1 - Libraries/PushNotificationIOS/PushNotificationIOS.js | 1 - Libraries/ReactIOS/YellowBox.js | 1 - Libraries/Utilities/BackAndroid.android.js | 1 - 7 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Libraries/AppStateIOS/AppStateIOS.ios.js b/Libraries/AppStateIOS/AppStateIOS.ios.js index f7dddcd57..d482b4e7d 100644 --- a/Libraries/AppStateIOS/AppStateIOS.ios.js +++ b/Libraries/AppStateIOS/AppStateIOS.ios.js @@ -11,7 +11,6 @@ */ 'use strict'; -var Map = require('Map'); var NativeModules = require('NativeModules'); var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter'); var RCTAppState = NativeModules.AppState; diff --git a/Libraries/CustomComponents/Navigator/Navigator.js b/Libraries/CustomComponents/Navigator/Navigator.js index b87532e58..df6940f3a 100644 --- a/Libraries/CustomComponents/Navigator/Navigator.js +++ b/Libraries/CustomComponents/Navigator/Navigator.js @@ -30,7 +30,6 @@ var AnimationsDebugModule = require('NativeModules').AnimationsDebugModule; var Dimensions = require('Dimensions'); var InteractionMixin = require('InteractionMixin'); -var Map = require('Map'); var NavigationContext = require('NavigationContext'); var NavigatorBreadcrumbNavigationBar = require('NavigatorBreadcrumbNavigationBar'); var NavigatorNavigationBar = require('NavigatorNavigationBar'); diff --git a/Libraries/JavaScriptAppEngine/Initialization/InitializeJavaScriptAppEngine.js b/Libraries/JavaScriptAppEngine/Initialization/InitializeJavaScriptAppEngine.js index 5f5f2e491..37f507c2e 100644 --- a/Libraries/JavaScriptAppEngine/Initialization/InitializeJavaScriptAppEngine.js +++ b/Libraries/JavaScriptAppEngine/Initialization/InitializeJavaScriptAppEngine.js @@ -150,11 +150,15 @@ function setUpGeolocation() { polyfillGlobal('geolocation', require('Geolocation'), GLOBAL.navigator); } +function setUpMapAndSet() { + polyfillGlobal('Map', require('Map')); + polyfillGlobal('Set', require('Set')); +} + function setUpProduct() { Object.defineProperty(GLOBAL.navigator, 'product', {value: 'ReactNative'}); } - function setUpWebSockets() { polyfillGlobal('WebSocket', require('WebSocket')); } @@ -198,6 +202,7 @@ setUpPromise(); setUpErrorHandler(); setUpXHR(); setUpGeolocation(); +setUpMapAndSet(); setUpProduct(); setUpWebSockets(); setUpProfile(); diff --git a/Libraries/LinkingIOS/LinkingIOS.js b/Libraries/LinkingIOS/LinkingIOS.js index 1d186ccbf..a4832f268 100644 --- a/Libraries/LinkingIOS/LinkingIOS.js +++ b/Libraries/LinkingIOS/LinkingIOS.js @@ -13,7 +13,6 @@ var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter'); var RCTLinkingManager = require('NativeModules').LinkingManager; -var Map = require('Map'); var invariant = require('invariant'); var _notifHandlers = new Map(); diff --git a/Libraries/PushNotificationIOS/PushNotificationIOS.js b/Libraries/PushNotificationIOS/PushNotificationIOS.js index 4432f7ea1..cab4ba362 100644 --- a/Libraries/PushNotificationIOS/PushNotificationIOS.js +++ b/Libraries/PushNotificationIOS/PushNotificationIOS.js @@ -11,7 +11,6 @@ */ 'use strict'; -var Map = require('Map'); var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter'); var RCTPushNotificationManager = require('NativeModules').PushNotificationManager; var invariant = require('invariant'); diff --git a/Libraries/ReactIOS/YellowBox.js b/Libraries/ReactIOS/YellowBox.js index 762428ee2..692cd4f6e 100644 --- a/Libraries/ReactIOS/YellowBox.js +++ b/Libraries/ReactIOS/YellowBox.js @@ -14,7 +14,6 @@ const EventEmitter = require('EventEmitter'); import type EmitterSubscription from 'EmitterSubscription'; -const Map = require('Map'); const Platform = require('Platform'); const React = require('React'); const StyleSheet = require('StyleSheet'); diff --git a/Libraries/Utilities/BackAndroid.android.js b/Libraries/Utilities/BackAndroid.android.js index f828f2f7e..ed920e22c 100644 --- a/Libraries/Utilities/BackAndroid.android.js +++ b/Libraries/Utilities/BackAndroid.android.js @@ -11,7 +11,6 @@ 'use strict'; -var Set = require('Set'); var DeviceEventManager = require('NativeModules').DeviceEventManager; var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');