@office-iss/react-native-win32 0.79.1 → 0.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/.flowconfig +10 -3
  2. package/CHANGELOG.json +117 -24
  3. package/CHANGELOG.md +49 -14
  4. package/IntegrationTests/ImageCachePolicyTest.js +1 -1
  5. package/IntegrationTests/LayoutEventsTest.js +1 -4
  6. package/Libraries/Alert/Alert.d.ts +4 -1
  7. package/Libraries/Alert/Alert.js +3 -0
  8. package/Libraries/Alert/RCTAlertManager.js +17 -0
  9. package/Libraries/Animated/Animated.js.flow +1 -3
  10. package/Libraries/Animated/AnimatedEvent.js +4 -3
  11. package/Libraries/Animated/AnimatedExports.js +2 -2
  12. package/Libraries/Animated/AnimatedExports.js.flow +140 -0
  13. package/Libraries/Animated/AnimatedImplementation.js +2 -123
  14. package/Libraries/Animated/Easing.js +13 -15
  15. package/Libraries/Animated/animations/Animation.js +8 -4
  16. package/Libraries/Animated/components/AnimatedFlatList.js +7 -6
  17. package/Libraries/Animated/components/AnimatedScrollView.js +48 -42
  18. package/Libraries/Animated/components/AnimatedSectionList.js +11 -7
  19. package/Libraries/Animated/createAnimatedComponent.js +105 -57
  20. package/Libraries/Animated/nodes/AnimatedNode.js +4 -3
  21. package/Libraries/Animated/nodes/AnimatedProps.js +46 -26
  22. package/Libraries/Animated/nodes/AnimatedValue.js +16 -7
  23. package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -1
  24. package/Libraries/AppState/AppState.js +7 -2
  25. package/Libraries/BatchedBridge/MessageQueue.js +2 -2
  26. package/Libraries/BatchedBridge/NativeModules.js +2 -0
  27. package/Libraries/Blob/BlobManager.js +1 -0
  28. package/Libraries/Blob/FileReader.js +219 -8
  29. package/Libraries/Blob/URL.js +37 -12
  30. package/Libraries/Blob/URLSearchParams.js +106 -31
  31. package/Libraries/Blob/URLSearchParams.js.flow +12 -7
  32. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +1 -1
  33. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +1 -1
  34. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.js +17 -0
  35. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +1 -0
  36. package/Libraries/Components/Button.js +1 -1
  37. package/Libraries/Components/Button.win32.js +1 -1
  38. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -3
  39. package/Libraries/{NewAppScreen/components/Colors.js → Components/DrawerAndroid/DrawerLayoutAndroid.ios.js} +6 -10
  40. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +6 -66
  41. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js.flow +18 -0
  42. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidFallback.js +71 -0
  43. package/Libraries/Components/Keyboard/Keyboard.js +5 -3
  44. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +6 -3
  45. package/Libraries/Components/Pressable/Pressable.js +20 -4
  46. package/Libraries/Components/Pressable/Pressable.win32.js +20 -4
  47. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +25 -3
  48. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +29 -20
  49. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  50. package/Libraries/Components/ScrollView/ScrollView.d.ts +3 -3
  51. package/Libraries/Components/ScrollView/ScrollView.js +132 -122
  52. package/Libraries/Components/StaticRenderer.js +1 -1
  53. package/Libraries/Components/Switch/Switch.d.ts +3 -0
  54. package/Libraries/Components/Switch/Switch.js +8 -4
  55. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +2 -1
  56. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -4
  57. package/Libraries/Components/TextInput/Tests/TextInputTest.d.ts +2 -1
  58. package/Libraries/Components/TextInput/Tests/TextInputTest.js.map +1 -1
  59. package/Libraries/Components/TextInput/TextInput.d.ts +70 -33
  60. package/Libraries/Components/TextInput/TextInput.flow.js +100 -51
  61. package/Libraries/Components/TextInput/TextInput.flow.win32.js +1208 -0
  62. package/Libraries/Components/TextInput/TextInput.js +88 -1027
  63. package/Libraries/Components/TextInput/TextInput.win32.js +89 -1059
  64. package/Libraries/Components/TextInput/TextInputState.js +1 -1
  65. package/Libraries/Components/TextInput/TextInputState.win32.js +1 -1
  66. package/Libraries/{Modal/ModalInjection.js → Components/ToastAndroid/ToastAndroid.ios.js} +3 -5
  67. package/Libraries/Components/ToastAndroid/ToastAndroid.js +4 -32
  68. package/Libraries/Components/ToastAndroid/ToastAndroid.js.flow +109 -0
  69. package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +4 -32
  70. package/Libraries/Components/ToastAndroid/ToastAndroidFallback.js +45 -0
  71. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.d.ts +2 -1
  72. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  73. package/Libraries/Components/Touchable/Touchable.js +5 -5
  74. package/Libraries/Components/Touchable/Touchable.win32.js +5 -5
  75. package/Libraries/Components/Touchable/TouchableBounce.js +14 -7
  76. package/Libraries/Components/Touchable/TouchableHighlight.js +10 -7
  77. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +6 -6
  78. package/Libraries/Components/Touchable/TouchableNativeFeedback.win32.js +6 -6
  79. package/Libraries/Components/Touchable/TouchableOpacity.js +13 -6
  80. package/Libraries/Components/View/View.js +18 -21
  81. package/Libraries/Components/View/View.win32.js +21 -24
  82. package/Libraries/Components/View/ViewAccessibility.js +25 -1
  83. package/Libraries/Components/View/ViewAccessibility.win32.js +9 -1
  84. package/Libraries/Components/View/ViewPropTypes.js +49 -3
  85. package/Libraries/Components/View/ViewPropTypes.win32.js +49 -3
  86. package/Libraries/Core/ReactNativeVersion.js +1 -1
  87. package/Libraries/Core/setUpReactDevTools.js +5 -5
  88. package/Libraries/Debugging/DebuggingOverlayRegistry.js +3 -3
  89. package/Libraries/EventEmitter/NativeEventEmitter.js +9 -4
  90. package/Libraries/Image/AssetSourceResolver.js +17 -4
  91. package/Libraries/Image/Image.d.ts +26 -10
  92. package/Libraries/Image/Image.js +17 -0
  93. package/Libraries/Image/Image.js.flow +5 -5
  94. package/Libraries/Image/ImageBackground.js +2 -0
  95. package/Libraries/Image/ImageInjection.js +1 -1
  96. package/Libraries/Image/ImageProps.js +22 -17
  97. package/Libraries/Image/ImageSource.js +3 -1
  98. package/Libraries/Image/ImageSourceUtils.js +4 -2
  99. package/Libraries/Image/ImageTypes.flow.js +1 -1
  100. package/Libraries/Image/Tests/ImageWin32Test.d.ts +2 -1
  101. package/Libraries/Image/Tests/ImageWin32Test.js.map +1 -1
  102. package/Libraries/Interaction/InteractionManager.d.ts +13 -0
  103. package/Libraries/Interaction/InteractionManager.js +1 -1
  104. package/Libraries/Interaction/PanResponder.js +3 -3
  105. package/Libraries/Interaction/TaskQueue.js +1 -0
  106. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
  107. package/Libraries/Linking/Linking.js +1 -1
  108. package/Libraries/Lists/FlatList.d.ts +2 -2
  109. package/Libraries/Lists/FlatList.js +8 -11
  110. package/Libraries/Lists/SectionList.js +39 -42
  111. package/Libraries/Lists/SectionListModern.js +25 -34
  112. package/Libraries/Lists/VirtualizedList.js +1 -0
  113. package/Libraries/Lists/VirtualizedSectionList.js +1 -0
  114. package/Libraries/LogBox/Data/LogBoxData.js +1 -1
  115. package/Libraries/LogBox/LogBoxNotificationContainer.js +1 -1
  116. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js +140 -0
  117. package/Libraries/Modal/Modal.js +33 -7
  118. package/Libraries/NativeComponent/BaseViewConfig.android.js +2 -0
  119. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -0
  120. package/Libraries/NativeComponent/BaseViewConfig.js +17 -0
  121. package/Libraries/NativeComponent/BaseViewConfig.win32.js +1 -0
  122. package/Libraries/NativeComponent/PlatformBaseViewConfig.js +2 -2
  123. package/Libraries/NativeModules/specs/NativeDevMenu.js +2 -2
  124. package/Libraries/Network/RCTNetworking.android.js +1 -1
  125. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  126. package/Libraries/Network/RCTNetworking.js +17 -0
  127. package/Libraries/Network/RCTNetworking.js.flow +1 -1
  128. package/Libraries/Network/RCTNetworking.win32.js +1 -1
  129. package/Libraries/Network/XMLHttpRequest.js +781 -10
  130. package/Libraries/Performance/Systrace.js +7 -7
  131. package/Libraries/Pressability/Pressability.js +1 -1
  132. package/Libraries/Pressability/Pressability.win32.js +1 -1
  133. package/Libraries/ReactNative/AppContainer-dev.js +5 -4
  134. package/Libraries/ReactNative/AppRegistry.flow.js +49 -0
  135. package/Libraries/ReactNative/AppRegistry.js +2 -322
  136. package/Libraries/ReactNative/AppRegistry.js.flow +23 -0
  137. package/Libraries/ReactNative/AppRegistryImpl.js +316 -0
  138. package/Libraries/ReactNative/FabricUIManager.js +10 -0
  139. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -4
  140. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +1 -4
  141. package/Libraries/ReactNative/RendererImplementation.js +10 -5
  142. package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -0
  143. package/Libraries/ReactNative/renderApplication.js +9 -0
  144. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +3 -3
  145. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js.flow +51 -0
  146. package/Libraries/Renderer/implementations/ReactFabric-dev.js +4840 -4748
  147. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4947 -4829
  148. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3998 -3888
  149. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5005 -4948
  150. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +2744 -2652
  151. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +5020 -4933
  152. package/Libraries/Renderer/shims/ReactNativeTypes.js +3 -3
  153. package/Libraries/Settings/Settings.ios.js +1 -0
  154. package/Libraries/Settings/Settings.js +13 -19
  155. package/Libraries/Settings/Settings.win32.js +19 -20
  156. package/Libraries/Settings/SettingsFallback.js +33 -0
  157. package/Libraries/StyleSheet/PlatformColorValueTypes.js +15 -0
  158. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.js +6 -0
  159. package/Libraries/StyleSheet/Rect.js +1 -0
  160. package/Libraries/StyleSheet/StyleSheet.js +31 -200
  161. package/Libraries/StyleSheet/StyleSheet.js.flow +188 -0
  162. package/Libraries/StyleSheet/{StyleSheet.win32.js → StyleSheetExports.js} +2 -151
  163. package/Libraries/StyleSheet/StyleSheetExports.js.flow +112 -0
  164. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
  165. package/Libraries/StyleSheet/StyleSheetTypes.js +130 -52
  166. package/Libraries/StyleSheet/flattenStyle.js +14 -4
  167. package/Libraries/StyleSheet/private/_TransformStyle.js +49 -21
  168. package/Libraries/StyleSheet/processBackgroundImage.js +670 -214
  169. package/Libraries/Text/Text.d.ts +2 -5
  170. package/Libraries/Text/Text.js +3 -3
  171. package/Libraries/Text/Text.win32.js +3 -3
  172. package/Libraries/Text/TextNativeComponent.js +0 -4
  173. package/Libraries/Text/TextNativeComponent.win32.js +0 -4
  174. package/Libraries/Text/TextProps.js +5 -33
  175. package/Libraries/Text/TextProps.win32.js +5 -30
  176. package/Libraries/Types/CodegenTypesNamespace.d.ts +45 -0
  177. package/Libraries/{Blob/__mocks__/BlobModule.js → Types/CodegenTypesNamespace.js} +4 -6
  178. package/Libraries/Types/CoreEventTypes.d.ts +6 -1
  179. package/Libraries/Types/CoreEventTypes.js +1 -1
  180. package/Libraries/Types/CoreEventTypes.win32.js +1 -1
  181. package/Libraries/Utilities/Appearance.js +2 -0
  182. package/Libraries/Utilities/BackHandler.js +17 -0
  183. package/Libraries/Utilities/DeviceInfo.js +2 -0
  184. package/Libraries/Utilities/Dimensions.js +1 -1
  185. package/Libraries/Utilities/Dimensions.win32.js +1 -1
  186. package/Libraries/Utilities/Platform.js +17 -0
  187. package/Libraries/Utilities/PlatformTypes.js +11 -3
  188. package/Libraries/Utilities/ReactNativeTestTools.js +2 -2
  189. package/Libraries/Utilities/codegenNativeCommands.d.ts +18 -0
  190. package/Libraries/Utilities/codegenNativeComponent.d.ts +26 -0
  191. package/Libraries/WebSocket/WebSocket.js +313 -8
  192. package/Libraries/vendor/core/ErrorUtils.js +28 -2
  193. package/Libraries/vendor/emitter/EventEmitter.js +6 -2
  194. package/flow/global.js +1 -0
  195. package/index.js +51 -331
  196. package/index.win32.js +71 -352
  197. package/interface.js +0 -4
  198. package/jest/resolver.js +31 -0
  199. package/overrides.json +45 -47
  200. package/package.json +25 -25
  201. package/src/private/animated/NativeAnimatedHelper.js +21 -8
  202. package/src/private/animated/NativeAnimatedHelper.win32.js +21 -8
  203. package/src/private/animated/createAnimatedPropsHook.js +11 -16
  204. package/src/private/animated/createAnimatedPropsMemoHook.js +1 -2
  205. package/src/private/components/{SafeAreaView_INTERNAL_DO_NOT_USE.js → safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js} +6 -6
  206. package/src/private/components/{HScrollViewNativeComponents.js → scrollview/HScrollViewNativeComponents.js} +8 -8
  207. package/src/private/components/scrollview/VScrollViewNativeComponents.js +25 -0
  208. package/src/private/{devmenu → devsupport/devmenu}/DevMenu.js +1 -1
  209. package/src/private/{inspector → devsupport/devmenu/elementinspector}/BorderBox.js +3 -3
  210. package/src/private/{inspector → devsupport/devmenu/elementinspector}/BoxInspector.js +6 -5
  211. package/src/private/{inspector → devsupport/devmenu/elementinspector}/ElementBox.js +8 -6
  212. package/src/private/{inspector → devsupport/devmenu/elementinspector}/ElementProperties.js +11 -10
  213. package/src/private/{inspector → devsupport/devmenu/elementinspector}/Inspector.js +14 -12
  214. package/src/private/{inspector → devsupport/devmenu/elementinspector}/InspectorOverlay.js +5 -4
  215. package/src/private/{inspector → devsupport/devmenu/elementinspector}/InspectorPanel.js +9 -8
  216. package/src/private/{inspector → devsupport/devmenu/elementinspector}/NetworkOverlay.js +10 -9
  217. package/src/private/{inspector → devsupport/devmenu/elementinspector}/ReactDevToolsOverlay.js +7 -7
  218. package/src/private/{inspector → devsupport/devmenu/elementinspector}/StyleInspector.js +7 -6
  219. package/src/private/{inspector → devsupport/devmenu/elementinspector}/XHRInterceptor.js +2 -2
  220. package/src/private/{inspector → devsupport/devmenu/elementinspector}/getInspectorDataForViewAtPoint.js +4 -4
  221. package/src/private/{inspector → devsupport/devmenu/elementinspector}/resolveBoxStyle.js +1 -1
  222. package/src/private/{inspector → devsupport/devmenu/perfmonitor}/PerformanceOverlay.js +6 -5
  223. package/src/private/{specs_DEPRECATED/modules → devsupport/devmenu/specs}/NativeDevMenu.js +2 -2
  224. package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.android.js +1 -1
  225. package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.ios.js +1 -1
  226. package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.win32.js +1 -1
  227. package/src/private/{debugging → devsupport/rndevtools}/setUpFuseboxReactDevToolsDispatcher.js +1 -1
  228. package/src/private/{fusebox → devsupport/rndevtools}/specs/NativeReactDevToolsRuntimeSettingsModule.js +2 -2
  229. package/src/private/{specs_DEPRECATED/modules → devsupport/rndevtools/specs}/NativeReactDevToolsSettingsManager.js +2 -2
  230. package/src/private/featureflags/ReactNativeFeatureFlags.js +82 -80
  231. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +9 -1
  232. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -13
  233. package/src/private/renderer/errorhandling/ErrorHandlers.js +2 -2
  234. package/src/private/specs_DEPRECATED/modules/NativeAnimatedModule.js +1 -1
  235. package/src/private/specs_DEPRECATED/modules/NativeAnimatedTurboModule.js +1 -1
  236. package/src/private/specs_DEPRECATED/modules/NativeSampleTurboModule.js +3 -0
  237. package/src/private/styles/composeStyles.js +12 -5
  238. package/src/private/types/HostComponent.js +1 -1
  239. package/src/private/types/HostInstance.js +67 -1
  240. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -5
  241. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -18
  242. package/src/private/webapis/dom/nodes/internals/NodeInternals.js +6 -0
  243. package/src/private/webapis/performance/Performance.js +1 -3
  244. package/src/private/webapis/performance/PerformanceEntry.js +6 -1
  245. package/src/private/webapis/performance/internals/RawPerformanceEntry.js +3 -0
  246. package/src/private/webapis/performance/specs/NativePerformance.js +10 -1
  247. package/src/types/globals.d.ts +42 -0
  248. package/src-win/Libraries/Components/TextInput/Tests/TextInputTest.tsx +7 -7
  249. package/src-win/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +3 -3
  250. package/src-win/Libraries/Image/Tests/ImageWin32Test.tsx +1 -1
  251. package/src-win/Libraries/Text/Text.d.ts +2 -5
  252. package/types/index.d.ts +6 -3
  253. package/types/public/ReactNativeTypes.d.ts +2 -2
  254. package/Libraries/BatchedBridge/__mocks__/MessageQueueTestConfig.js +0 -38
  255. package/Libraries/BatchedBridge/__mocks__/MessageQueueTestModule.js +0 -22
  256. package/Libraries/Blob/FileReader_new.js +0 -231
  257. package/Libraries/Blob/FileReader_old.js +0 -186
  258. package/Libraries/Blob/__mocks__/FileReaderModule.js +0 -20
  259. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +0 -32
  260. package/Libraries/Core/__mocks__/ErrorUtils.js +0 -33
  261. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -19
  262. package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +0 -49
  263. package/Libraries/Events/CustomEvent.js +0 -32
  264. package/Libraries/Events/EventPolyfill.js +0 -239
  265. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +0 -118
  266. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +0 -134
  267. package/Libraries/Network/XMLHttpRequest_new.js +0 -794
  268. package/Libraries/Network/XMLHttpRequest_old.js +0 -701
  269. package/Libraries/NewAppScreen/components/DebugInstructions.js +0 -41
  270. package/Libraries/NewAppScreen/components/Header.js +0 -77
  271. package/Libraries/NewAppScreen/components/HermesBadge.js +0 -53
  272. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +0 -148
  273. package/Libraries/NewAppScreen/components/ReloadInstructions.js +0 -39
  274. package/Libraries/NewAppScreen/components/logo.png +0 -0
  275. package/Libraries/NewAppScreen/index.js +0 -25
  276. package/Libraries/StyleSheet/__flowtests__/StyleSheet-flowtest.js +0 -58
  277. package/Libraries/Utilities/DeviceInfo.win32.js +0 -19
  278. package/Libraries/Utilities/__mocks__/BackHandler.js +0 -45
  279. package/Libraries/Utilities/__mocks__/GlobalPerformanceLogger.js +0 -16
  280. package/Libraries/Utilities/__mocks__/PixelRatio.js +0 -25
  281. package/Libraries/WebSocket/WebSocketEvent.js +0 -30
  282. package/Libraries/WebSocket/WebSocket_new.js +0 -325
  283. package/Libraries/WebSocket/WebSocket_old.js +0 -297
  284. package/Libraries/WebSocket/__mocks__/event-target-shim.js +0 -27
  285. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +0 -30
  286. package/Libraries/vendor/emitter/__flowtests__/EventEmitter-flowtest.js +0 -81
  287. package/flow/jest.js +0 -1287
  288. package/jest/__tests__/setup-test.js +0 -18
  289. package/src/private/components/VScrollViewNativeComponents.js +0 -25
  290. package/src/private/utilities/ensureInstance.js +0 -21
  291. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +0 -267
  292. package/types/modules/LaunchScreen.d.ts +0 -18
  293. /package/src/private/{devmenu → devsupport/devmenu}/DevMenu.d.ts +0 -0
  294. /package/src/private/{debugging → devsupport/rndevtools}/FuseboxSessionObserver.js +0 -0
@@ -8,13 +8,318 @@
8
8
  * @flow
9
9
  */
10
10
 
11
- import typeof WebSocket from './WebSocket_old';
11
+ import type {EventCallback} from '../../src/private/webapis/dom/events/EventTarget';
12
+ import type {BlobData} from '../Blob/BlobTypes';
13
+ import type {EventSubscription} from '../vendor/emitter/EventEmitter';
12
14
 
13
- // Use a global instead of a flag from ReactNativeFeatureFlags because this will
14
- // be read before apps have a chance to set overrides.
15
- const useBuiltInEventTarget = global.RN$useBuiltInEventTarget?.();
15
+ import Event from '../../src/private/webapis/dom/events/Event';
16
+ import {
17
+ getEventHandlerAttribute,
18
+ setEventHandlerAttribute,
19
+ } from '../../src/private/webapis/dom/events/EventHandlerAttributes';
20
+ import EventTarget from '../../src/private/webapis/dom/events/EventTarget';
21
+ import MessageEvent from '../../src/private/webapis/html/events/MessageEvent';
22
+ import CloseEvent from '../../src/private/webapis/websockets/events/CloseEvent';
23
+ import Blob from '../Blob/Blob';
24
+ import BlobManager from '../Blob/BlobManager';
25
+ import NativeEventEmitter from '../EventEmitter/NativeEventEmitter';
26
+ import binaryToBase64 from '../Utilities/binaryToBase64';
27
+ import Platform from '../Utilities/Platform';
28
+ import NativeWebSocketModule from './NativeWebSocketModule';
29
+ import base64 from 'base64-js';
30
+ import invariant from 'invariant';
16
31
 
17
- export default (useBuiltInEventTarget
18
- ? // $FlowExpectedError[incompatible-cast]
19
- require('./WebSocket_new').default
20
- : require('./WebSocket_old').default) as WebSocket;
32
+ type ArrayBufferView =
33
+ | Int8Array
34
+ | Uint8Array
35
+ | Uint8ClampedArray
36
+ | Int16Array
37
+ | Uint16Array
38
+ | Int32Array
39
+ | Uint32Array
40
+ | Float32Array
41
+ | Float64Array
42
+ | DataView;
43
+
44
+ type BinaryType = 'blob' | 'arraybuffer';
45
+
46
+ const CONNECTING = 0;
47
+ const OPEN = 1;
48
+ const CLOSING = 2;
49
+ const CLOSED = 3;
50
+
51
+ const CLOSE_NORMAL = 1000;
52
+
53
+ // Abnormal closure where no code is provided in a control frame
54
+ // https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5
55
+ const CLOSE_ABNORMAL = 1006;
56
+
57
+ let nextWebSocketId = 0;
58
+
59
+ type WebSocketEventDefinitions = {
60
+ websocketOpen: [{id: number, protocol: string}],
61
+ websocketClosed: [{id: number, code: number, reason: string}],
62
+ websocketMessage: [
63
+ | {type: 'binary', id: number, data: string}
64
+ | {type: 'text', id: number, data: string}
65
+ | {type: 'blob', id: number, data: BlobData},
66
+ ],
67
+ websocketFailed: [{id: number, message: string}],
68
+ };
69
+
70
+ /**
71
+ * Browser-compatible WebSockets implementation.
72
+ *
73
+ * See https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
74
+ * See https://github.com/websockets/ws
75
+ */
76
+ class WebSocket extends EventTarget {
77
+ static CONNECTING: number = CONNECTING;
78
+ static OPEN: number = OPEN;
79
+ static CLOSING: number = CLOSING;
80
+ static CLOSED: number = CLOSED;
81
+
82
+ CONNECTING: number = CONNECTING;
83
+ OPEN: number = OPEN;
84
+ CLOSING: number = CLOSING;
85
+ CLOSED: number = CLOSED;
86
+
87
+ _socketId: number;
88
+ _eventEmitter: NativeEventEmitter<WebSocketEventDefinitions>;
89
+ _subscriptions: Array<EventSubscription>;
90
+ _binaryType: ?BinaryType;
91
+
92
+ bufferedAmount: number;
93
+ extension: ?string;
94
+ protocol: ?string;
95
+ readyState: number = CONNECTING;
96
+ url: ?string;
97
+
98
+ constructor(
99
+ url: string,
100
+ protocols: ?string | ?Array<string>,
101
+ options: ?{headers?: {origin?: string, ...}, ...},
102
+ ) {
103
+ super();
104
+ this.url = url;
105
+ if (typeof protocols === 'string') {
106
+ protocols = [protocols];
107
+ }
108
+
109
+ const {headers = {}, ...unrecognized} = options || {};
110
+
111
+ // Preserve deprecated backwards compatibility for the 'origin' option
112
+ // $FlowFixMe[prop-missing]
113
+ if (unrecognized && typeof unrecognized.origin === 'string') {
114
+ console.warn(
115
+ 'Specifying `origin` as a WebSocket connection option is deprecated. Include it under `headers` instead.',
116
+ );
117
+ /* $FlowFixMe[prop-missing] (>=0.54.0 site=react_native_fb,react_native_
118
+ * oss) This comment suppresses an error found when Flow v0.54 was
119
+ * deployed. To see the error delete this comment and run Flow. */
120
+ headers.origin = unrecognized.origin;
121
+ /* $FlowFixMe[prop-missing] (>=0.54.0 site=react_native_fb,react_native_
122
+ * oss) This comment suppresses an error found when Flow v0.54 was
123
+ * deployed. To see the error delete this comment and run Flow. */
124
+ delete unrecognized.origin;
125
+ }
126
+
127
+ // Warn about and discard anything else
128
+ if (Object.keys(unrecognized).length > 0) {
129
+ console.warn(
130
+ 'Unrecognized WebSocket connection option(s) `' +
131
+ Object.keys(unrecognized).join('`, `') +
132
+ '`. ' +
133
+ 'Did you mean to put these under `headers`?',
134
+ );
135
+ }
136
+
137
+ if (!Array.isArray(protocols)) {
138
+ protocols = null;
139
+ }
140
+
141
+ this._eventEmitter = new NativeEventEmitter(
142
+ // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior
143
+ // If you want to use the native module on other platforms, please remove this condition and test its behavior
144
+ Platform.OS !== 'ios' ? null : NativeWebSocketModule,
145
+ );
146
+ this._socketId = nextWebSocketId++;
147
+ this._registerEvents();
148
+ NativeWebSocketModule.connect(url, protocols, {headers}, this._socketId);
149
+ }
150
+
151
+ get binaryType(): ?BinaryType {
152
+ return this._binaryType;
153
+ }
154
+
155
+ set binaryType(binaryType: BinaryType): void {
156
+ if (binaryType !== 'blob' && binaryType !== 'arraybuffer') {
157
+ throw new Error("binaryType must be either 'blob' or 'arraybuffer'");
158
+ }
159
+ if (this._binaryType === 'blob' || binaryType === 'blob') {
160
+ invariant(
161
+ BlobManager.isAvailable,
162
+ 'Native module BlobModule is required for blob support',
163
+ );
164
+ if (binaryType === 'blob') {
165
+ BlobManager.addWebSocketHandler(this._socketId);
166
+ } else {
167
+ BlobManager.removeWebSocketHandler(this._socketId);
168
+ }
169
+ }
170
+ this._binaryType = binaryType;
171
+ }
172
+
173
+ close(code?: number, reason?: string): void {
174
+ if (this.readyState === this.CLOSING || this.readyState === this.CLOSED) {
175
+ return;
176
+ }
177
+
178
+ this.readyState = this.CLOSING;
179
+ this._close(code, reason);
180
+ }
181
+
182
+ send(data: string | ArrayBuffer | ArrayBufferView | Blob): void {
183
+ if (this.readyState === this.CONNECTING) {
184
+ throw new Error('INVALID_STATE_ERR');
185
+ }
186
+
187
+ if (data instanceof Blob) {
188
+ invariant(
189
+ BlobManager.isAvailable,
190
+ 'Native module BlobModule is required for blob support',
191
+ );
192
+ BlobManager.sendOverSocket(data, this._socketId);
193
+ return;
194
+ }
195
+
196
+ if (typeof data === 'string') {
197
+ NativeWebSocketModule.send(data, this._socketId);
198
+ return;
199
+ }
200
+
201
+ if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {
202
+ NativeWebSocketModule.sendBinary(binaryToBase64(data), this._socketId);
203
+ return;
204
+ }
205
+
206
+ throw new Error('Unsupported data type');
207
+ }
208
+
209
+ ping(): void {
210
+ if (this.readyState === this.CONNECTING) {
211
+ throw new Error('INVALID_STATE_ERR');
212
+ }
213
+
214
+ NativeWebSocketModule.ping(this._socketId);
215
+ }
216
+
217
+ _close(code?: number, reason?: string): void {
218
+ // See https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent
219
+ const statusCode = typeof code === 'number' ? code : CLOSE_NORMAL;
220
+ const closeReason = typeof reason === 'string' ? reason : '';
221
+ NativeWebSocketModule.close(statusCode, closeReason, this._socketId);
222
+
223
+ if (BlobManager.isAvailable && this._binaryType === 'blob') {
224
+ BlobManager.removeWebSocketHandler(this._socketId);
225
+ }
226
+ }
227
+
228
+ _unregisterEvents(): void {
229
+ this._subscriptions.forEach(e => e.remove());
230
+ this._subscriptions = [];
231
+ }
232
+
233
+ _registerEvents(): void {
234
+ this._subscriptions = [
235
+ this._eventEmitter.addListener('websocketMessage', ev => {
236
+ if (ev.id !== this._socketId) {
237
+ return;
238
+ }
239
+ let data: Blob | BlobData | ArrayBuffer | string = ev.data;
240
+ switch (ev.type) {
241
+ case 'binary':
242
+ data = base64.toByteArray(ev.data).buffer;
243
+ break;
244
+ case 'blob':
245
+ data = BlobManager.createFromOptions(ev.data);
246
+ break;
247
+ }
248
+ this.dispatchEvent(new MessageEvent('message', {data}));
249
+ }),
250
+ this._eventEmitter.addListener('websocketOpen', ev => {
251
+ if (ev.id !== this._socketId) {
252
+ return;
253
+ }
254
+ this.readyState = this.OPEN;
255
+ this.protocol = ev.protocol;
256
+ this.dispatchEvent(new Event('open'));
257
+ }),
258
+ this._eventEmitter.addListener('websocketClosed', ev => {
259
+ if (ev.id !== this._socketId) {
260
+ return;
261
+ }
262
+ this.readyState = this.CLOSED;
263
+ this.dispatchEvent(
264
+ new CloseEvent('close', {
265
+ code: ev.code,
266
+ reason: ev.reason,
267
+ // TODO: missing `wasClean` (exposed on iOS as `clean` but missing on Android)
268
+ }),
269
+ );
270
+ this._unregisterEvents();
271
+ this.close();
272
+ }),
273
+ this._eventEmitter.addListener('websocketFailed', ev => {
274
+ if (ev.id !== this._socketId) {
275
+ return;
276
+ }
277
+ this.readyState = this.CLOSED;
278
+ this.dispatchEvent(new Event('error'));
279
+ this.dispatchEvent(
280
+ new CloseEvent('close', {
281
+ code: CLOSE_ABNORMAL,
282
+ reason: ev.message,
283
+ // TODO: Expose `wasClean`
284
+ }),
285
+ );
286
+ this._unregisterEvents();
287
+ this.close();
288
+ }),
289
+ ];
290
+ }
291
+
292
+ get onclose(): EventCallback | null {
293
+ return getEventHandlerAttribute(this, 'close');
294
+ }
295
+
296
+ set onclose(listener: ?EventCallback) {
297
+ setEventHandlerAttribute(this, 'close', listener);
298
+ }
299
+
300
+ get onerror(): EventCallback | null {
301
+ return getEventHandlerAttribute(this, 'error');
302
+ }
303
+
304
+ set onerror(listener: ?EventCallback) {
305
+ setEventHandlerAttribute(this, 'error', listener);
306
+ }
307
+
308
+ get onmessage(): EventCallback | null {
309
+ return getEventHandlerAttribute(this, 'message');
310
+ }
311
+
312
+ set onmessage(listener: ?EventCallback) {
313
+ setEventHandlerAttribute(this, 'message', listener);
314
+ }
315
+
316
+ get onopen(): EventCallback | null {
317
+ return getEventHandlerAttribute(this, 'open');
318
+ }
319
+
320
+ set onopen(listener: ?EventCallback) {
321
+ setEventHandlerAttribute(this, 'open', listener);
322
+ }
323
+ }
324
+
325
+ export default WebSocket;
@@ -8,7 +8,33 @@
8
8
  * @flow strict
9
9
  */
10
10
 
11
- import type {ErrorUtilsT} from '@react-native/js-polyfills/error-guard';
11
+ // From @react-native/js-polyfills
12
+ type ErrorHandler = (error: mixed, isFatal: boolean) => void;
13
+ type Fn<Args: $ReadOnlyArray<mixed>, Return> = (...Args) => Return;
14
+ export type ErrorUtils = {
15
+ applyWithGuard<TArgs: $ReadOnlyArray<mixed>, TOut>(
16
+ fun: Fn<TArgs, TOut>,
17
+ context?: mixed,
18
+ args?: ?TArgs,
19
+ unused_onError?: null,
20
+ unused_name?: ?string,
21
+ ): ?TOut,
22
+ applyWithGuardIfNeeded<TArgs: $ReadOnlyArray<mixed>, TOut>(
23
+ fun: Fn<TArgs, TOut>,
24
+ context?: mixed,
25
+ args?: ?TArgs,
26
+ ): ?TOut,
27
+ getGlobalHandler(): ErrorHandler,
28
+ guard<TArgs: $ReadOnlyArray<mixed>, TOut>(
29
+ fun: Fn<TArgs, TOut>,
30
+ name?: ?string,
31
+ context?: mixed,
32
+ ): ?(...TArgs) => ?TOut,
33
+ inGuard(): boolean,
34
+ reportError(error: mixed): void,
35
+ reportFatalError(error: mixed): void,
36
+ setGlobalHandler(fun: ErrorHandler): void,
37
+ };
12
38
 
13
39
  /**
14
40
  * The particular require runtime that we are using looks for a global
@@ -22,4 +48,4 @@ import type {ErrorUtilsT} from '@react-native/js-polyfills/error-guard';
22
48
  * that use it aren't just using a global variable, so simply export the global
23
49
  * variable here. ErrorUtils is originally defined in a file named error-guard.js.
24
50
  */
25
- export default (global.ErrorUtils: ErrorUtilsT);
51
+ export default global.ErrorUtils as ErrorUtils;
@@ -72,8 +72,12 @@ export default class EventEmitter<
72
72
  > = $ReadOnly<Record<string, $ReadOnlyArray<UnsafeObject>>>,
73
73
  > implements IEventEmitter<TEventToArgsMap>
74
74
  {
75
- // $FlowFixMe[incompatible-type]
76
- #registry: Registry<TEventToArgsMap> = {};
75
+ #registry: Registry<TEventToArgsMap>;
76
+
77
+ constructor() {
78
+ // $FlowFixMe[incompatible-type]
79
+ this.#registry = {};
80
+ }
77
81
 
78
82
  /**
79
83
  * Registers a listener that is called when the supplied event is emitted.
package/flow/global.js CHANGED
@@ -15,6 +15,7 @@
15
15
  * when defining the types here. Consider both presence (`?`) as well as
16
16
  * writeability (`+`) when defining types.
17
17
  */
18
+ // $FlowFixMe[libdef-override]
18
19
  declare var global: {
19
20
  // setUpGlobals
20
21
  +window: typeof global,