From 7516fa56d7676e96c34cdfd26f5afe43ecc1190e Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Fri, 23 Jun 2017 10:19:17 -0700 Subject: [PATCH] Reorder module setup in InitializeCore Reviewed By: fromcelticpark Differential Revision: D5292888 fbshipit-source-id: 1f1e2f4fcd22f5471117aafdf3b7d73745c14e6b --- Libraries/Core/InitializeCore.js | 107 +++++++++++++++---------------- 1 file changed, 51 insertions(+), 56 deletions(-) diff --git a/Libraries/Core/InitializeCore.js b/Libraries/Core/InitializeCore.js index 3312ce265..630c5642c 100644 --- a/Libraries/Core/InitializeCore.js +++ b/Libraries/Core/InitializeCore.js @@ -13,7 +13,6 @@ /* eslint-disable strict */ /* globals window: true */ - /** * Sets up global variables typical in most JavaScript environments. * @@ -96,33 +95,21 @@ if (!global.process.env.NODE_ENV) { global.process.env.NODE_ENV = __DEV__ ? 'development' : 'production'; } -// Set up profile -const Systrace = require('Systrace'); -Systrace.setEnabled(global.__RCTProfileIsProfiling || false); -if (__DEV__) { - if (global.performance === undefined) { - global.performance = Systrace.getUserTimingPolyfill(); - } +// Setup the Systrace profiling hooks if necessary +if (global.__RCTProfileIsProfiling) { + const Systrace = require('Systrace'); + Systrace.setEnabled(true); +} + +if (__DEV__ && global.performance === undefined) { + const Systrace = require('Systrace'); + global.performance = Systrace.getUserTimingPolyfill(); } // Set up console const ExceptionsManager = require('ExceptionsManager'); ExceptionsManager.installConsoleErrorReporter(); -// TODO: Move these around to solve the cycle in a cleaner way -const BatchedBridge = require('BatchedBridge'); -BatchedBridge.registerLazyCallableModule('Systrace', () => require('Systrace')); -BatchedBridge.registerLazyCallableModule('JSTimers', () => require('JSTimers')); -BatchedBridge.registerLazyCallableModule('HeapCapture', () => require('HeapCapture')); -BatchedBridge.registerLazyCallableModule('SamplingProfiler', () => require('SamplingProfiler')); -BatchedBridge.registerLazyCallableModule('RCTLog', () => require('RCTLog')); - -if (__DEV__) { - if (!global.__RCTProfileIsProfiling) { - BatchedBridge.registerCallableModule('HMRClient', require('HMRClient')); - } -} - // Set up error handler if (!global.__fbDisableExceptionsManager) { const handleError = (e, isFatal) => { @@ -140,29 +127,11 @@ if (!global.__fbDisableExceptionsManager) { ErrorUtils.setGlobalHandler(handleError); } -// Set up timers -const defineLazyTimer = name => { - defineProperty(global, name, () => require('JSTimers')[name]); -}; -defineLazyTimer('setTimeout'); -defineLazyTimer('setInterval'); -defineLazyTimer('setImmediate'); -defineLazyTimer('clearTimeout'); -defineLazyTimer('clearInterval'); -defineLazyTimer('clearImmediate'); -defineLazyTimer('requestAnimationFrame'); -defineLazyTimer('cancelAnimationFrame'); -defineLazyTimer('requestIdleCallback'); -defineLazyTimer('cancelIdleCallback'); - -// Set up alert -if (!global.alert) { - global.alert = function(text) { - // Require Alert on demand. Requiring it too early can lead to issues - // with things like Platform not being fully initialized. - require('Alert').alert('Alert', '' + text); - }; -} +// Set up collections +// We can't make these lazy because `Map` checks for `global.Map` (which wouldc +// not exist if it were lazily defined). +defineProperty(global, 'Map', () => require('Map'), true); +defineProperty(global, 'Set', () => require('Set'), true); // Set up Promise // The native Promise implementation throws the following error: @@ -178,6 +147,21 @@ defineProperty(global, 'regeneratorRuntime', () => { return global.regeneratorRuntime; }); +// Set up timers +const defineLazyTimer = name => { + defineProperty(global, name, () => require('JSTimers')[name]); +}; +defineLazyTimer('setTimeout'); +defineLazyTimer('setInterval'); +defineLazyTimer('setImmediate'); +defineLazyTimer('clearTimeout'); +defineLazyTimer('clearInterval'); +defineLazyTimer('clearImmediate'); +defineLazyTimer('requestAnimationFrame'); +defineLazyTimer('cancelAnimationFrame'); +defineLazyTimer('requestIdleCallback'); +defineLazyTimer('cancelIdleCallback'); + // Set up XHR // The native XMLHttpRequest in Chrome dev tools is CORS aware and won't // let you fetch anything from the internet @@ -190,6 +174,15 @@ defineProperty(global, 'Request', () => require('fetch').Request); defineProperty(global, 'Response', () => require('fetch').Response); defineProperty(global, 'WebSocket', () => require('WebSocket')); +// Set up alert +if (!global.alert) { + global.alert = function(text) { + // Require Alert on demand. Requiring it too early can lead to issues + // with things like Platform not being fully initialized. + require('Alert').alert('Alert', '' + text); + }; +} + // Set up Geolocation let navigator = global.navigator; if (navigator === undefined) { @@ -200,15 +193,23 @@ if (navigator === undefined) { defineProperty(navigator, 'product', () => 'ReactNative', true); defineProperty(navigator, 'geolocation', () => require('Geolocation')); -// Set up collections -// We can't make these lazy because `Map` checks for `global.Map` (which wouldc -// not exist if it were lazily defined). -defineProperty(global, 'Map', () => require('Map'), true); -defineProperty(global, 'Set', () => require('Set'), true); +// Just to make sure the JS gets packaged up. Wait until the JS environment has +// been initialized before requiring them. +const BatchedBridge = require('BatchedBridge'); +BatchedBridge.registerLazyCallableModule('Systrace', () => require('Systrace')); +BatchedBridge.registerLazyCallableModule('JSTimers', () => require('JSTimers')); +BatchedBridge.registerLazyCallableModule('HeapCapture', () => require('HeapCapture')); +BatchedBridge.registerLazyCallableModule('SamplingProfiler', () => require('SamplingProfiler')); +BatchedBridge.registerLazyCallableModule('RCTLog', () => require('RCTLog')); +BatchedBridge.registerLazyCallableModule('RCTDeviceEventEmitter', () => require('RCTDeviceEventEmitter')); +BatchedBridge.registerLazyCallableModule('RCTNativeAppEventEmitter', () => require('RCTNativeAppEventEmitter')); +BatchedBridge.registerLazyCallableModule('PerformanceLogger', () => require('PerformanceLogger')); // Set up devtools if (__DEV__) { if (!global.__RCTProfileIsProfiling) { + BatchedBridge.registerCallableModule('HMRClient', require('HMRClient')); + // not when debugging in chrome // TODO(t12832058) This check is broken if (!window.document) { @@ -222,9 +223,3 @@ if (__DEV__) { JSInspector.registerAgent(require('NetworkAgent')); } } - -// Just to make sure the JS gets packaged up. Wait until the JS environment has -// been initialized before requiring them. -BatchedBridge.registerLazyCallableModule('RCTDeviceEventEmitter', () => require('RCTDeviceEventEmitter')); -BatchedBridge.registerLazyCallableModule('RCTNativeAppEventEmitter', () => require('RCTNativeAppEventEmitter')); -BatchedBridge.registerLazyCallableModule('PerformanceLogger', () => require('PerformanceLogger'));