diff --git a/Libraries/AppState/AppState.js b/Libraries/AppState/AppState.js index 459205c7562ae4..8cf1fc9443969b 100644 --- a/Libraries/AppState/AppState.js +++ b/Libraries/AppState/AppState.js @@ -10,7 +10,7 @@ 'use strict'; -const MissingNativeEventEmitterShim = require('MissingNativeEventEmitterShim'); +const EventEmitter = require('EventEmitter'); const NativeEventEmitter = require('NativeEventEmitter'); const NativeModules = require('NativeModules'); const RCTAppState = NativeModules.AppState; @@ -27,7 +27,7 @@ const invariant = require('invariant'); class AppState extends NativeEventEmitter { _eventHandlers: Object; currentState: ?string; - isAvailable: boolean = true; + isAvailable: boolean; constructor() { super(RCTAppState); @@ -114,32 +114,48 @@ class AppState extends NativeEventEmitter { } } -if (__DEV__ && !RCTAppState) { - class MissingNativeAppStateShim extends MissingNativeEventEmitterShim { - constructor() { - super('RCTAppState', 'AppState'); - } +function throwMissingNativeModule() { + invariant( + false, + 'Cannot use AppState module when native RCTAppState is not included in the build.\n' + + 'Either include it, or check AppState.isAvailable before calling any methods.', + ); +} - get currentState(): ?string { - this.throwMissingNativeModule(); - } +class MissingNativeAppStateShim extends EventEmitter { + // AppState + isAvailable: boolean = false; + currentState: ?string = null; - addEventListener(...args: Array) { - this.throwMissingNativeModule(); - } + addEventListener() { + throwMissingNativeModule(); + } - removeEventListener(...args: Array) { - this.throwMissingNativeModule(); - } + removeEventListener() { + throwMissingNativeModule(); } - // This module depends on the native `RCTAppState` module. If you don't - // include it, `AppState.isAvailable` will return `false`, and any method - // calls will throw. We reassign the class variable to keep the autodoc - // generator happy. - AppState = new MissingNativeAppStateShim(); -} else { + // EventEmitter + addListener() { + throwMissingNativeModule(); + } + + removeAllListeners() { + throwMissingNativeModule(); + } + + removeSubscription() { + throwMissingNativeModule(); + } +} + +// This module depends on the native `RCTAppState` module. If you don't include it, +// `AppState.isAvailable` will return `false`, and any method calls will throw. +// We reassign the class variable to keep the autodoc generator happy. +if (RCTAppState) { AppState = new AppState(); +} else { + AppState = new MissingNativeAppStateShim(); } module.exports = AppState; diff --git a/Libraries/Core/Devtools/setupDevtools.js b/Libraries/Core/Devtools/setupDevtools.js index d2b2a77db27bb7..4c9d76e0b66ad2 100644 --- a/Libraries/Core/Devtools/setupDevtools.js +++ b/Libraries/Core/Devtools/setupDevtools.js @@ -16,33 +16,29 @@ let register = function() { if (__DEV__) { const AppState = require('AppState'); - const WebSocket = require('WebSocket'); const reactDevTools = require('react-devtools-core'); const getDevServer = require('getDevServer'); - // Initialize dev tools only if the native module for WebSocket is available - if (WebSocket.isAvailable) { - // Don't steal the DevTools from currently active app. - // Note: if you add any AppState subscriptions to this file, - // you will also need to guard against `AppState.isAvailable`, - // or the code will throw for bundles that don't have it. - const isAppActive = () => AppState.currentState !== 'background'; + // Don't steal the DevTools from currently active app. + // Note: if you add any AppState subscriptions to this file, + // you will also need to guard against `AppState.isAvailable`, + // or the code will throw for bundles that don't have it. + const isAppActive = () => AppState.currentState !== 'background'; - // Get hostname from development server (packager) - const devServer = getDevServer(); - const host = devServer.bundleLoadedFromServer - ? devServer.url.replace(/https?:\/\//, '').split(':')[0] - : 'localhost'; + // Get hostname from development server (packager) + const devServer = getDevServer(); + const host = devServer.bundleLoadedFromServer + ? devServer.url.replace(/https?:\/\//, '').split(':')[0] + : 'localhost'; - reactDevTools.connectToDevTools({ - isAppActive, - host, - // Read the optional global variable for backward compatibility. - // It was added in https://github.com/facebook/react-native/commit/bf2b435322e89d0aeee8792b1c6e04656c2719a0. - port: window.__REACT_DEVTOOLS_PORT__, - resolveRNStyle: require('flattenStyle'), - }); - } + reactDevTools.connectToDevTools({ + isAppActive, + host, + // Read the optional global variable for backward compatibility. + // It was added in https://github.com/facebook/react-native/commit/bf2b435322e89d0aeee8792b1c6e04656c2719a0. + port: window.__REACT_DEVTOOLS_PORT__, + resolveRNStyle: require('flattenStyle'), + }); } module.exports = { diff --git a/Libraries/EventEmitter/MissingNativeEventEmitterShim.js b/Libraries/EventEmitter/MissingNativeEventEmitterShim.js deleted file mode 100644 index b7568027876af4..00000000000000 --- a/Libraries/EventEmitter/MissingNativeEventEmitterShim.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * 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. - * - * @format - * @flow - */ - -'use strict'; - -const EmitterSubscription = require('EmitterSubscription'); -const EventEmitter = require('EventEmitter'); - -const invariant = require('invariant'); - -class MissingNativeEventEmitterShim extends EventEmitter { - isAvailable: boolean = false; - _nativeModuleName: string; - _nativeEventEmitterName: string; - - constructor(nativeModuleName: string, nativeEventEmitterName: string) { - super(null); - this._nativeModuleName = nativeModuleName; - this._nativeEventEmitterName = nativeEventEmitterName; - } - - throwMissingNativeModule() { - invariant( - false, - `Cannot use '${this._nativeEventEmitterName}' module when ` + - `native '${this._nativeModuleName}' is not included in the build. ` + - `Either include it, or check '${ - this._nativeEventEmitterName - }'.isAvailable ` + - 'before calling any methods.', - ); - } - - // EventEmitter - addListener(eventType: string, listener: Function, context: ?Object) { - this.throwMissingNativeModule(); - } - - removeAllListeners(eventType: string) { - this.throwMissingNativeModule(); - } - - removeSubscription(subscription: EmitterSubscription) { - this.throwMissingNativeModule(); - } -} - -module.exports = MissingNativeEventEmitterShim; diff --git a/Libraries/Network/RCTNetworking.android.js b/Libraries/Network/RCTNetworking.android.js index f58e00d5571fb9..fc963a692c5748 100644 --- a/Libraries/Network/RCTNetworking.android.js +++ b/Libraries/Network/RCTNetworking.android.js @@ -12,7 +12,6 @@ // Do not require the native RCTNetworking module directly! Use this wrapper module instead. // It will add the necessary requestId, so that you don't have to generate it yourself. -const MissingNativeEventEmitterShim = require('MissingNativeEventEmitterShim'); const NativeEventEmitter = require('NativeEventEmitter'); const RCTNetworkingNative = require('NativeModules').Networking; const convertRequestBody = require('convertRequestBody'); @@ -41,8 +40,6 @@ function generateRequestId(): number { * requestId to each network request that can be used to abort that request later on. */ class RCTNetworking extends NativeEventEmitter { - isAvailable: boolean = true; - constructor() { super(RCTNetworkingNative); } @@ -90,31 +87,4 @@ class RCTNetworking extends NativeEventEmitter { } } -if (__DEV__ && !RCTNetworkingNative) { - class MissingNativeRCTNetworkingShim extends MissingNativeEventEmitterShim { - constructor() { - super('RCTNetworking', 'Networking'); - } - - sendRequest(...args: Array) { - this.throwMissingNativeModule(); - } - - abortRequest(...args: Array) { - this.throwMissingNativeModule(); - } - - clearCookies(...args: Array) { - this.throwMissingNativeModule(); - } - } - - // This module depends on the native `RCTNetworkingNative` module. If you don't include it, - // `RCTNetworking.isAvailable` will return `false`, and any method calls will throw. - // We reassign the class variable to keep the autodoc generator happy. - RCTNetworking = new MissingNativeRCTNetworkingShim(); -} else { - RCTNetworking = new RCTNetworking(); -} - -module.exports = RCTNetworking; +module.exports = new RCTNetworking(); diff --git a/Libraries/Network/RCTNetworking.ios.js b/Libraries/Network/RCTNetworking.ios.js index b41e63cd7b5e59..2e3cac37df3648 100644 --- a/Libraries/Network/RCTNetworking.ios.js +++ b/Libraries/Network/RCTNetworking.ios.js @@ -10,7 +10,6 @@ 'use strict'; -const MissingNativeEventEmitterShim = require('MissingNativeEventEmitterShim'); const NativeEventEmitter = require('NativeEventEmitter'); const RCTNetworkingNative = require('NativeModules').Networking; const convertRequestBody = require('convertRequestBody'); @@ -20,8 +19,6 @@ import type {RequestBody} from 'convertRequestBody'; import type {NativeResponseType} from './XMLHttpRequest'; class RCTNetworking extends NativeEventEmitter { - isAvailable: boolean = true; - constructor() { super(RCTNetworkingNative); } @@ -63,31 +60,4 @@ class RCTNetworking extends NativeEventEmitter { } } -if (__DEV__ && !RCTNetworkingNative) { - class MissingNativeRCTNetworkingShim extends MissingNativeEventEmitterShim { - constructor() { - super('RCTNetworking', 'Networking'); - } - - sendRequest(...args: Array) { - this.throwMissingNativeModule(); - } - - abortRequest(...args: Array) { - this.throwMissingNativeModule(); - } - - clearCookies(...args: Array) { - this.throwMissingNativeModule(); - } - } - - // This module depends on the native `RCTNetworkingNative` module. If you don't include it, - // `RCTNetworking.isAvailable` will return `false`, and any method calls will throw. - // We reassign the class variable to keep the autodoc generator happy. - RCTNetworking = new MissingNativeRCTNetworkingShim(); -} else { - RCTNetworking = new RCTNetworking(); -} - -module.exports = RCTNetworking; +module.exports = new RCTNetworking(); diff --git a/Libraries/WebSocket/WebSocket.js b/Libraries/WebSocket/WebSocket.js index 8ec13bedcf5a32..7d8c083ffe9af0 100644 --- a/Libraries/WebSocket/WebSocket.js +++ b/Libraries/WebSocket/WebSocket.js @@ -84,10 +84,6 @@ class WebSocket extends EventTarget(...WEBSOCKET_EVENTS) { readyState: number = CONNECTING; url: ?string; - // This module depends on the native `WebSocketModule` module. If you don't include it, - // `WebSocket.isAvailable` will return `false`, and WebSocket constructor will throw an error - static isAvailable: boolean = !!WebSocketModule; - constructor( url: string, protocols: ?string | ?Array, @@ -132,13 +128,6 @@ class WebSocket extends EventTarget(...WEBSOCKET_EVENTS) { protocols = null; } - if (!WebSocket.isAvailable) { - throw new Error( - 'Cannot initialize WebSocket module. ' + - 'Native module WebSocketModule is missing.', - ); - } - this._eventEmitter = new NativeEventEmitter(WebSocketModule); this._socketId = nextWebSocketId++; this._registerEvents();