From 2c7d492f5c49a7d9642eaa1023660a2462ca3345 Mon Sep 17 00:00:00 2001 From: Eric Lewis Date: Thu, 16 May 2019 19:18:18 -0400 Subject: [PATCH] [TM] add spec for RedBox --- Libraries/BugReporting/BugReporting.js | 8 +++---- Libraries/NativeModules/specs/NativeRedBox.js | 24 +++++++++++++++++++ Libraries/Utilities/HMRClient.js | 11 ++++++--- 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 Libraries/NativeModules/specs/NativeRedBox.js diff --git a/Libraries/BugReporting/BugReporting.js b/Libraries/BugReporting/BugReporting.js index ed5bdfc61d6b..ff6cb920b5b1 100644 --- a/Libraries/BugReporting/BugReporting.js +++ b/Libraries/BugReporting/BugReporting.js @@ -14,6 +14,7 @@ const RCTDeviceEventEmitter = require('../EventEmitter/RCTDeviceEventEmitter'); const infoLog = require('../Utilities/infoLog'); import type EmitterSubscription from '../vendor/emitter/EmitterSubscription'; +import NativeRedBox from '../NativeModules/specs/NativeRedBox'; type ExtraData = {[key: string]: string}; type SourceCallback = () => string; @@ -127,10 +128,9 @@ class BugReporting { BugReportingNativeModule.setExtraData && BugReportingNativeModule.setExtraData(extraData, fileData); - const RedBoxNativeModule = require('../BatchedBridge/NativeModules').RedBox; - RedBoxNativeModule && - RedBoxNativeModule.setExtraData && - RedBoxNativeModule.setExtraData(extraData, 'From BugReporting.js'); + if (NativeRedBox != null && NativeRedBox.setExtraData != null) { + NativeRedBox.setExtraData(extraData, 'From BugReporting.js'); + } return {extras: extraData, files: fileData}; } diff --git a/Libraries/NativeModules/specs/NativeRedBox.js b/Libraries/NativeModules/specs/NativeRedBox.js new file mode 100644 index 000000000000..2d9ede505cb4 --- /dev/null +++ b/Libraries/NativeModules/specs/NativeRedBox.js @@ -0,0 +1,24 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + * @format + */ + +'use strict'; + +import type {TurboModule} from 'RCTExport'; +import * as TurboModuleRegistry from 'TurboModuleRegistry'; +import {Platform} from 'react-native'; + +export interface Spec extends TurboModule { + +setExtraData: (extraData: Object, identifier: string) => void; + +dismiss: () => void; +} + +export default (Platform.OS === 'ios' + ? TurboModuleRegistry.getEnforcing('RedBox') + : null); diff --git a/Libraries/Utilities/HMRClient.js b/Libraries/Utilities/HMRClient.js index 0c192a7092d0..bb5b3ab69bcd 100644 --- a/Libraries/Utilities/HMRClient.js +++ b/Libraries/Utilities/HMRClient.js @@ -14,6 +14,8 @@ const invariant = require('invariant'); const MetroHMRClient = require('metro/src/lib/bundle-modules/HMRClient'); +import NativeRedBox from '../NativeModules/specs/NativeRedBox'; + /** * HMR Client that receives from the server HMR updates and propagates them * runtime to reflects those changes. @@ -72,9 +74,12 @@ Error: ${e.message}`; }); hmrClient.on('update', () => { - if (Platform.OS === 'ios') { - const RCTRedBox = require('../BatchedBridge/NativeModules').RedBox; - RCTRedBox && RCTRedBox.dismiss && RCTRedBox.dismiss(); + if ( + Platform.OS === 'ios' && + NativeRedBox != null && + NativeRedBox.dismiss != null + ) { + NativeRedBox.dismiss(); } else { const RCTExceptionsManager = require('../BatchedBridge/NativeModules') .ExceptionsManager;