react-native 0.71.6 → 0.72.0-rc.1

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 (1274) hide show
  1. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +1 -1
  2. package/Libraries/ActionSheetIOS/React-RCTActionSheet.podspec +1 -1
  3. package/Libraries/Alert/Alert.d.ts +4 -4
  4. package/Libraries/Animated/Animated.d.ts +17 -6
  5. package/Libraries/Animated/NativeAnimatedHelper.js +18 -6
  6. package/Libraries/Animated/bezier.js +1 -1
  7. package/Libraries/Animated/components/AnimatedFlatList.js +8 -3
  8. package/Libraries/Animated/components/AnimatedScrollView.js +4 -1
  9. package/Libraries/Animated/components/AnimatedSectionList.js +12 -3
  10. package/Libraries/Animated/createAnimatedComponent.js +26 -239
  11. package/Libraries/Animated/nodes/AnimatedColor.js +47 -80
  12. package/Libraries/Animated/nodes/AnimatedInterpolation.js +167 -121
  13. package/Libraries/Animated/nodes/AnimatedNode.js +3 -5
  14. package/Libraries/Animated/nodes/AnimatedProps.js +7 -6
  15. package/Libraries/Animated/nodes/AnimatedStyle.js +42 -8
  16. package/Libraries/Animated/nodes/AnimatedTransform.js +1 -1
  17. package/Libraries/Animated/nodes/AnimatedValue.js +8 -12
  18. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -1
  19. package/Libraries/Animated/useAnimatedProps.js +7 -10
  20. package/Libraries/AppDelegate/RCTAppDelegate.h +1 -8
  21. package/Libraries/AppDelegate/RCTAppDelegate.mm +49 -25
  22. package/{React/AppSetup → Libraries/AppDelegate}/RCTAppSetupUtils.h +7 -1
  23. package/{React/AppSetup → Libraries/AppDelegate}/RCTAppSetupUtils.mm +16 -9
  24. package/{React/Base/RCTWeakProxy.h → Libraries/AppDelegate/RCTLegacyInteropComponents.h} +5 -3
  25. package/{React/Views/RCTSliderManager.h → Libraries/AppDelegate/RCTLegacyInteropComponents.mm} +7 -2
  26. package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +26 -5
  27. package/Libraries/BatchedBridge/MessageQueue.js +2 -1
  28. package/Libraries/BatchedBridge/NativeModules.d.ts +1 -1
  29. package/Libraries/BatchedBridge/NativeModules.js +1 -0
  30. package/Libraries/Blob/Blob.js +4 -0
  31. package/Libraries/Blob/FileReader.js +30 -2
  32. package/Libraries/Blob/React-RCTBlob.podspec +15 -2
  33. package/Libraries/Blob/URL.js +3 -1
  34. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +2 -2
  35. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +2 -3
  36. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +6 -4
  37. package/Libraries/Components/Button.js +3 -2
  38. package/Libraries/Components/Clipboard/Clipboard.js +1 -1
  39. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -0
  40. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -0
  41. package/Libraries/Components/Pressable/Pressable.d.ts +1 -1
  42. package/Libraries/Components/Pressable/Pressable.js +1 -1
  43. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -0
  44. package/Libraries/Components/SafeAreaView/SafeAreaView.js +1 -2
  45. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +12 -6
  46. package/Libraries/Components/ScrollView/ScrollView.d.ts +2 -2
  47. package/Libraries/Components/ScrollView/ScrollView.js +149 -91
  48. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -6
  49. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +5 -7
  50. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +1 -1
  51. package/Libraries/Components/StatusBar/StatusBar.js +3 -0
  52. package/Libraries/Components/Switch/Switch.js +3 -1
  53. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +21 -11
  54. package/Libraries/Components/TextInput/InputAccessoryView.d.ts +1 -1
  55. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +11 -5
  56. package/Libraries/Components/TextInput/TextInput.d.ts +15 -5
  57. package/Libraries/Components/TextInput/TextInput.flow.js +1 -1
  58. package/Libraries/Components/TextInput/TextInput.js +130 -103
  59. package/Libraries/Components/Touchable/Touchable.d.ts +1 -1
  60. package/Libraries/Components/Touchable/Touchable.flow.js +30 -4
  61. package/Libraries/Components/Touchable/Touchable.js +6 -3
  62. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  63. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -2
  64. package/Libraries/Components/Touchable/TouchableOpacity.js +3 -0
  65. package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +1 -1
  66. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
  67. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +179 -0
  68. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +43 -0
  69. package/Libraries/Components/View/ReactNativeStyleAttributes.js +26 -0
  70. package/Libraries/Components/View/View.js +35 -16
  71. package/Libraries/Components/View/ViewAccessibility.d.ts +6 -6
  72. package/Libraries/Components/View/ViewAccessibility.js +10 -1
  73. package/Libraries/Components/View/ViewNativeComponent.js +32 -8
  74. package/Libraries/Components/View/ViewPropTypes.d.ts +1 -1
  75. package/Libraries/Components/View/ViewPropTypes.js +1 -1
  76. package/Libraries/Core/Devtools/openFileInEditor.js +1 -0
  77. package/Libraries/Core/Devtools/openURLInBrowser.js +1 -0
  78. package/Libraries/Core/Devtools/parseErrorStack.js +2 -2
  79. package/Libraries/Core/Devtools/parseHermesStack.js +54 -34
  80. package/Libraries/Core/ExceptionsManager.js +2 -2
  81. package/Libraries/Core/InitializeCore.js +2 -1
  82. package/Libraries/Core/ReactNativeVersion.js +3 -3
  83. package/Libraries/Core/ReactNativeVersionCheck.js +4 -8
  84. package/Libraries/Core/Timers/JSTimers.js +1 -1
  85. package/Libraries/Core/Timers/immediateShim.js +1 -0
  86. package/Libraries/Core/Timers/queueMicrotask.js +1 -1
  87. package/Libraries/Core/setUpAlert.js +1 -1
  88. package/Libraries/Core/setUpDOM.js +18 -0
  89. package/Libraries/Core/setUpDeveloperTools.js +1 -1
  90. package/Libraries/Core/setUpGlobals.js +5 -2
  91. package/Libraries/Core/setUpNavigator.js +6 -5
  92. package/Libraries/Core/setUpPerformance.js +23 -13
  93. package/Libraries/Core/setUpReactDevTools.js +2 -0
  94. package/Libraries/Core/setUpSegmentFetcher.js +0 -41
  95. package/Libraries/Core/setUpTimers.js +2 -2
  96. package/Libraries/DOM/Geometry/DOMRect.js +82 -0
  97. package/Libraries/DOM/Geometry/DOMRectReadOnly.js +188 -0
  98. package/Libraries/DOM/Nodes/ReactNativeElement.js +75 -0
  99. package/Libraries/DOM/Nodes/ReadOnlyElement.js +89 -0
  100. package/Libraries/DOM/Nodes/ReadOnlyNode.js +167 -0
  101. package/Libraries/DOM/OldStyleCollections/ArrayLikeUtils.js +46 -0
  102. package/Libraries/DOM/OldStyleCollections/DOMRectList.js +76 -0
  103. package/Libraries/DOM/OldStyleCollections/DOMRectList.js.flow +27 -0
  104. package/Libraries/DOM/OldStyleCollections/HTMLCollection.js +82 -0
  105. package/Libraries/DOM/OldStyleCollections/HTMLCollection.js.flow +27 -0
  106. package/Libraries/DOM/OldStyleCollections/NodeList.js +104 -0
  107. package/Libraries/DOM/OldStyleCollections/NodeList.js.flow +31 -0
  108. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +35 -0
  109. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +20 -0
  110. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +49 -0
  111. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +24 -0
  112. package/Libraries/EventEmitter/NativeEventEmitter.d.ts +1 -2
  113. package/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts +1 -2
  114. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +9 -1
  115. package/Libraries/Events/EventPolyfill.js +1 -1
  116. package/Libraries/FBLazyVector/BUCK +2 -2
  117. package/Libraries/FBLazyVector/FBLazyVector.podspec +1 -1
  118. package/Libraries/Image/AssetRegistry.js +1 -1
  119. package/Libraries/Image/AssetSourceResolver.js +3 -3
  120. package/Libraries/Image/Image.android.js +4 -1
  121. package/Libraries/Image/Image.d.ts +63 -2
  122. package/Libraries/Image/Image.ios.js +3 -0
  123. package/Libraries/Image/ImageBackground.js +1 -0
  124. package/Libraries/Image/ImageProps.js +1 -1
  125. package/Libraries/Image/ImageViewNativeComponent.js +4 -4
  126. package/Libraries/Image/ImageViewNativeComponent.js.flow +1 -4
  127. package/Libraries/Image/RCTImageCache.h +1 -1
  128. package/Libraries/Image/RCTImageCache.m +4 -4
  129. package/Libraries/Image/RCTImageView.mm +1 -1
  130. package/Libraries/Image/React-RCTImage.podspec +15 -2
  131. package/Libraries/Image/RelativeImageStub.js +1 -1
  132. package/Libraries/Image/TextInlineImageNativeComponent.js +1 -1
  133. package/Libraries/Image/resolveAssetSource.js +1 -1
  134. package/Libraries/Inspector/DevtoolsOverlay.js +26 -19
  135. package/Libraries/Inspector/ElementBox.js +4 -1
  136. package/Libraries/Inspector/Inspector.js +5 -6
  137. package/Libraries/Inspector/InspectorOverlay.js +3 -3
  138. package/Libraries/Inspector/NetworkOverlay.js +1 -1
  139. package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -1
  140. package/Libraries/Interaction/PanResponder.js +5 -6
  141. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -1
  142. package/Libraries/Linking/Linking.js +1 -4
  143. package/Libraries/LinkingIOS/React-RCTLinking.podspec +15 -2
  144. package/Libraries/Lists/FillRateHelper.js +4 -238
  145. package/Libraries/Lists/FlatList.d.ts +15 -22
  146. package/Libraries/Lists/FlatList.js +9 -6
  147. package/Libraries/Lists/FlatList.js.flow +4 -3
  148. package/Libraries/Lists/SectionList.d.ts +10 -6
  149. package/Libraries/Lists/SectionList.js +5 -3
  150. package/Libraries/Lists/SectionListModern.js +3 -3
  151. package/Libraries/Lists/ViewabilityHelper.js +8 -344
  152. package/Libraries/Lists/VirtualizeUtils.js +4 -244
  153. package/Libraries/Lists/VirtualizedList.js +10 -1867
  154. package/Libraries/Lists/VirtualizedListContext.js +6 -104
  155. package/Libraries/Lists/VirtualizedSectionList.js +9 -602
  156. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +1 -0
  157. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  158. package/Libraries/LogBox/Data/LogBoxData.js +1 -1
  159. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  160. package/Libraries/LogBox/LogBox.js +1 -1
  161. package/Libraries/LogBox/UI/LogBoxInspector.js +1 -3
  162. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -0
  163. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +2 -2
  164. package/Libraries/LogBox/UI/LogBoxMessage.js +87 -5
  165. package/Libraries/LogBox/UI/LogBoxNotification.js +5 -7
  166. package/Libraries/Modal/Modal.js +2 -2
  167. package/Libraries/NativeAnimation/Nodes/RCTColorAnimatedNode.m +3 -2
  168. package/Libraries/NativeAnimation/Nodes/RCTInterpolationAnimatedNode.h +14 -0
  169. package/Libraries/NativeAnimation/Nodes/RCTInterpolationAnimatedNode.m +108 -102
  170. package/Libraries/NativeAnimation/Nodes/RCTPropsAnimatedNode.m +1 -1
  171. package/Libraries/NativeAnimation/Nodes/RCTStyleAnimatedNode.m +6 -1
  172. package/Libraries/NativeAnimation/Nodes/RCTValueAnimatedNode.h +1 -1
  173. package/Libraries/NativeAnimation/Nodes/RCTValueAnimatedNode.m +5 -0
  174. package/Libraries/NativeAnimation/RCTAnimationUtils.h +16 -11
  175. package/Libraries/NativeAnimation/RCTAnimationUtils.m +24 -6
  176. package/Libraries/NativeAnimation/React-RCTAnimation.podspec +15 -2
  177. package/Libraries/NativeComponent/BaseViewConfig.android.js +32 -12
  178. package/Libraries/NativeComponent/BaseViewConfig.ios.js +43 -19
  179. package/Libraries/NativeComponent/NativeComponentRegistryUnstable.js +4 -1
  180. package/Libraries/NativeComponent/ViewConfig.js +1 -0
  181. package/Libraries/NativeComponent/ViewConfigIgnore.js +1 -4
  182. package/Libraries/Network/RCTNetworking.android.js +2 -2
  183. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  184. package/Libraries/Network/RCTNetworking.mm +3 -2
  185. package/Libraries/Network/React-RCTNetwork.podspec +15 -2
  186. package/Libraries/Network/XMLHttpRequest.js +1 -1
  187. package/Libraries/Pressability/Pressability.js +10 -4
  188. package/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +15 -2
  189. package/Libraries/RCTRequired/BUCK +3 -2
  190. package/Libraries/RCTRequired/RCTRequired.podspec +1 -1
  191. package/Libraries/ReactNative/AppContainer.js +7 -1
  192. package/Libraries/ReactNative/AppRegistry.d.ts +1 -1
  193. package/Libraries/ReactNative/AppRegistry.js +10 -13
  194. package/Libraries/ReactNative/FabricUIManager.js +24 -8
  195. package/Libraries/ReactNative/NativeUIManager.js +5 -5
  196. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +10 -10
  197. package/Libraries/ReactNative/UIManager.js +168 -1
  198. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +5 -5
  199. package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -1
  200. package/Libraries/ReactNative/requireNativeComponent.d.ts +1 -1
  201. package/Libraries/ReactNative/requireNativeComponent.js +1 -1
  202. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -0
  203. package/Libraries/Renderer/REVISION +1 -1
  204. package/Libraries/Renderer/implementations/ReactFabric-dev.js +26 -3
  205. package/Libraries/Renderer/implementations/ReactFabric-prod.js +13 -1
  206. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +13 -1
  207. package/Libraries/Renderer/public/ReactFabricPublicInstanceUtils.js +38 -0
  208. package/Libraries/Renderer/shims/ReactNativeTypes.js +6 -6
  209. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -7
  210. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  211. package/Libraries/Settings/React-RCTSettings.podspec +15 -2
  212. package/Libraries/Share/Share.js +1 -1
  213. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
  214. package/Libraries/StyleSheet/StyleSheet.js +1 -1
  215. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +115 -76
  216. package/Libraries/StyleSheet/StyleSheetTypes.js +188 -33
  217. package/Libraries/StyleSheet/flattenStyle.js +2 -0
  218. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  219. package/Libraries/StyleSheet/processColor.js +1 -1
  220. package/Libraries/Text/React-RCTText.podspec +1 -1
  221. package/Libraries/Text/Text/NSTextStorage+FontScaling.m +3 -3
  222. package/Libraries/Text/Text/RCTTextView.m +4 -4
  223. package/Libraries/Text/Text.d.ts +12 -2
  224. package/Libraries/Text/Text.js +50 -41
  225. package/Libraries/Text/TextInput/Multiline/RCTUITextView.m +1 -1
  226. package/Libraries/Text/TextInput/RCTBaseTextInputView.m +12 -6
  227. package/Libraries/Text/TextProps.js +3 -4
  228. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
  229. package/Libraries/TypeSafety/RCTConvertHelpers.h +1 -1
  230. package/Libraries/TypeSafety/RCTTypeSafety.podspec +1 -1
  231. package/Libraries/Types/CodegenTypes.js +1 -0
  232. package/Libraries/UTFSequence.js +3 -1
  233. package/Libraries/Utilities/Appearance.d.ts +10 -0
  234. package/Libraries/Utilities/Appearance.js +13 -0
  235. package/Libraries/Utilities/Dimensions.js +1 -1
  236. package/Libraries/Utilities/GlobalPerformanceLogger.js +12 -1
  237. package/Libraries/Utilities/HMRClient.js +16 -10
  238. package/Libraries/Utilities/{createPerformanceLogger.d.ts → IPerformanceLogger.d.ts} +4 -4
  239. package/Libraries/Utilities/IPerformanceLogger.js +49 -0
  240. package/Libraries/Utilities/LoadingView.android.js +28 -11
  241. package/Libraries/Utilities/NativeAppearance.js +1 -0
  242. package/Libraries/Utilities/PixelRatio.js +2 -2
  243. package/Libraries/Utilities/ReactNativeTestTools.js +1 -1
  244. package/Libraries/Utilities/__mocks__/PixelRatio.js +1 -1
  245. package/Libraries/Utilities/codegenNativeCommands.js +2 -0
  246. package/Libraries/Utilities/createPerformanceLogger.js +55 -43
  247. package/Libraries/Utilities/stringifySafe.js +2 -7
  248. package/Libraries/Utilities/useWindowDimensions.js +3 -3
  249. package/Libraries/Vibration/React-RCTVibration.podspec +15 -2
  250. package/Libraries/WebPerformance/EventCounts.js +78 -0
  251. package/Libraries/WebPerformance/MemoryInfo.js +54 -0
  252. package/Libraries/WebPerformance/NativePerformance.cpp +74 -0
  253. package/Libraries/WebPerformance/NativePerformance.h +76 -0
  254. package/Libraries/WebPerformance/NativePerformance.js +38 -0
  255. package/Libraries/WebPerformance/NativePerformanceObserver.cpp +69 -11
  256. package/Libraries/WebPerformance/NativePerformanceObserver.h +38 -7
  257. package/Libraries/WebPerformance/NativePerformanceObserver.js +22 -7
  258. package/Libraries/WebPerformance/Performance.js +312 -0
  259. package/Libraries/WebPerformance/PerformanceEntry.js +45 -0
  260. package/Libraries/WebPerformance/PerformanceEntryReporter.cpp +408 -0
  261. package/Libraries/WebPerformance/PerformanceEntryReporter.h +219 -0
  262. package/Libraries/WebPerformance/PerformanceEventTiming.js +38 -0
  263. package/Libraries/WebPerformance/PerformanceObserver.js +196 -101
  264. package/Libraries/WebPerformance/RawPerformanceEntry.js +87 -0
  265. package/Libraries/WebPerformance/ReactNativeStartupTiming.js +65 -0
  266. package/Libraries/WebPerformance/__mocks__/NativePerformance.js +65 -0
  267. package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +101 -0
  268. package/Libraries/WebSocket/RCTReconnectingWebSocket.m +10 -10
  269. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
  270. package/Libraries/vendor/core/ErrorUtils.js +1 -1
  271. package/Libraries/vendor/emitter/EventEmitter.d.ts +2 -2
  272. package/Libraries/vendor/emitter/EventEmitter.js +9 -1
  273. package/README.md +1 -1
  274. package/React/Base/RCTBridge+Private.h +1 -1
  275. package/React/Base/RCTBridge.h +2 -11
  276. package/React/Base/RCTBridge.m +0 -34
  277. package/React/Base/RCTBridgeModuleDecorator.h +1 -1
  278. package/React/Base/RCTBundleURLProvider.mm +5 -1
  279. package/React/Base/RCTConvert.h +2 -1
  280. package/React/Base/RCTConvert.m +28 -15
  281. package/React/Base/RCTDefines.h +37 -8
  282. package/React/Base/RCTDisplayLink.m +7 -0
  283. package/React/Base/RCTJSScriptLoaderModule.h +5 -1
  284. package/React/Base/RCTRootContentView.h +1 -1
  285. package/React/Base/RCTRootContentView.m +1 -1
  286. package/React/Base/RCTRootView.m +1 -1
  287. package/React/Base/RCTVersion.m +3 -3
  288. package/React/Base/Surface/RCTSurfaceRootShadowViewDelegate.h +1 -1
  289. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h +3 -3
  290. package/React/CoreModules/BUCK +3 -6
  291. package/React/CoreModules/RCTAccessibilityManager+Internal.h +1 -1
  292. package/React/CoreModules/RCTAlertManager.mm +0 -14
  293. package/React/CoreModules/RCTAppearance.h +1 -0
  294. package/React/CoreModules/RCTAppearance.mm +12 -0
  295. package/React/CoreModules/RCTDevLoadingView.h +0 -1
  296. package/React/CoreModules/RCTDevMenu.mm +2 -2
  297. package/React/CoreModules/RCTDevSettings.mm +16 -2
  298. package/React/CoreModules/RCTDevSplitBundleLoader.mm +6 -4
  299. package/React/CoreModules/RCTExceptionsManager.mm +13 -6
  300. package/React/CoreModules/RCTFPSGraph.m +8 -3
  301. package/React/CoreModules/RCTPlatform.mm +2 -2
  302. package/React/CoreModules/RCTTiming.h +8 -4
  303. package/React/CoreModules/RCTWebSocketExecutor.mm +10 -10
  304. package/React/CoreModules/RCTWebSocketModule.mm +13 -13
  305. package/React/CoreModules/React-CoreModules.podspec +16 -2
  306. package/React/CxxBridge/RCTCxxBridge.mm +3 -2
  307. package/React/CxxBridge/RCTJSIExecutorRuntimeInstaller.mm +1 -10
  308. package/React/CxxModule/RCTNativeModule.mm +3 -2
  309. package/React/CxxUtils/RCTFollyConvert.mm +1 -0
  310. package/React/DevSupport/RCTInspectorDevServerHelper.h +1 -1
  311. package/React/DevSupport/RCTInspectorDevServerHelper.mm +1 -1
  312. package/React/DevSupport/RCTPackagerConnection.mm +1 -1
  313. package/React/FBReactNativeSpec/FBReactNativeSpec.podspec +1 -1
  314. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropCoordinatorAdapter.mm +1 -1
  315. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.h +1 -2
  316. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.mm +0 -1
  317. package/React/{Views/RCTDatePicker.h → Fabric/Mounting/ComponentViews/ScrollView/RCTCustomPullToRefreshViewProtocol.h} +4 -1
  318. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.h +2 -1
  319. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm +2 -2
  320. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +91 -1
  321. package/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm +14 -24
  322. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +9 -5
  323. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputUtils.h +0 -2
  324. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputUtils.mm +0 -2
  325. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.h +0 -6
  326. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +1 -2
  327. package/React/Fabric/Mounting/RCTComponentViewFactory.mm +16 -16
  328. package/React/Fabric/Mounting/RCTComponentViewRegistry.mm +4 -3
  329. package/React/Fabric/Mounting/RCTMountingManager.h +2 -1
  330. package/React/Fabric/Mounting/RCTMountingManager.mm +12 -14
  331. package/React/Fabric/RCTConversions.h +0 -1
  332. package/React/Fabric/RCTScheduler.h +1 -1
  333. package/React/Fabric/RCTScheduler.mm +2 -11
  334. package/React/Fabric/RCTSurfacePointerHandler.h +28 -0
  335. package/React/Fabric/RCTSurfacePointerHandler.mm +882 -0
  336. package/React/Fabric/RCTSurfacePresenter.h +1 -1
  337. package/React/Fabric/RCTSurfacePresenter.mm +16 -6
  338. package/React/Fabric/RCTSurfaceRegistry.mm +5 -6
  339. package/React/Fabric/RCTSurfaceTouchHandler.mm +27 -600
  340. package/React/Fabric/Utils/RCTIdentifierPool.h +44 -0
  341. package/React/Fabric/Utils/RCTReactTaggedView.h +1 -1
  342. package/React/Inspector/RCTInspector.h +1 -1
  343. package/React/Inspector/RCTInspector.mm +1 -2
  344. package/React/Inspector/RCTInspectorPackagerConnection.h +1 -1
  345. package/React/Inspector/RCTInspectorPackagerConnection.m +11 -11
  346. package/React/Modules/RCTEventEmitter.m +14 -11
  347. package/React/Profiler/RCTProfileTrampoline-x86_64.S +1 -1
  348. package/React/React-RCTFabric.podspec +31 -4
  349. package/React/Views/RCTComponentData.m +3 -15
  350. package/React/Views/RCTConvert+Transform.m +1 -1
  351. package/React/Views/RCTFont.mm +2 -2
  352. package/React/Views/RCTView.h +11 -0
  353. package/React/Views/RCTView.m +40 -18
  354. package/React/Views/RCTViewManager.m +17 -1
  355. package/React/Views/RefreshControl/RCTRefreshControl.h +1 -1
  356. package/React/Views/RefreshControl/RCTRefreshControl.m +7 -0
  357. package/React/Views/SafeAreaView/RCTSafeAreaShadowView.m +1 -1
  358. package/React/Views/ScrollView/RCTScrollView.m +17 -7
  359. package/React/Views/ScrollView/RCTScrollableProtocol.h +5 -1
  360. package/React-Core.podspec +15 -4
  361. package/React.podspec +1 -1
  362. package/ReactAndroid/build.gradle +82 -12
  363. package/ReactAndroid/cmake-utils/ReactNative-application.cmake +2 -0
  364. package/ReactAndroid/gradle.properties +6 -6
  365. package/ReactAndroid/hermes-engine/build.gradle +14 -5
  366. package/ReactAndroid/libs/BUCK +1 -1
  367. package/ReactAndroid/proguard-rules.pro +7 -0
  368. package/ReactAndroid/publish.gradle +1 -1
  369. package/ReactAndroid/src/main/java/com/facebook/BUCK +1 -3
  370. package/ReactAndroid/src/main/java/com/facebook/react/BUCK +15 -14
  371. package/ReactAndroid/src/main/java/com/facebook/react/DebugCorePackage.java +54 -2
  372. package/ReactAndroid/src/main/java/com/facebook/react/LazyReactPackage.java +7 -35
  373. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +12 -11
  374. package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +40 -1
  375. package/ReactAndroid/src/main/java/com/facebook/react/ReactFragment.java +22 -7
  376. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +10 -8
  377. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +11 -1
  378. package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +9 -0
  379. package/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.java +111 -14
  380. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +63 -55
  381. package/ReactAndroid/src/main/java/com/facebook/react/animated/AnimationDriver.java +1 -1
  382. package/ReactAndroid/src/main/java/com/facebook/react/animated/BUCK +5 -8
  383. package/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.java +143 -88
  384. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java +9 -22
  385. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java +7 -16
  386. package/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.java +3 -1
  387. package/ReactAndroid/src/main/java/com/facebook/react/animated/StyleAnimatedNode.java +8 -1
  388. package/ReactAndroid/src/main/java/com/facebook/react/animated/ValueAnimatedNode.java +1 -2
  389. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK +14 -19
  390. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java +1 -1
  391. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ColorPropConverter.java +11 -0
  392. package/ReactAndroid/src/main/java/com/facebook/react/bridge/DimensionPropConverter.java +33 -0
  393. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JSONArguments.java +110 -0
  394. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.java +1 -1
  395. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModule.java +2 -2
  396. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +30 -2
  397. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContextBaseJavaModule.java +3 -3
  398. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactMarker.java +13 -0
  399. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.java +11 -27
  400. package/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java +0 -12
  401. package/ReactAndroid/src/main/java/com/facebook/react/common/BUCK +4 -7
  402. package/ReactAndroid/src/main/java/com/facebook/react/common/JavascriptException.java +2 -0
  403. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/BUCK +0 -1
  404. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/MapBuffer.kt +18 -2
  405. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBuffer.kt +1 -1
  406. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/WritableMapBuffer.kt +5 -0
  407. package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +32 -25
  408. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +29 -7
  409. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactActivityDelegate.kt +20 -16
  410. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK +6 -9
  411. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java +18 -2
  412. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/{DevLoadingViewController.java → DefaultDevLoadingViewImplementation.java} +10 -33
  413. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DefaultDevSupportManagerFactory.java +15 -7
  414. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +38 -12
  415. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerFactory.java +3 -1
  416. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorPackagerConnection.java +4 -4
  417. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/JSCHeapCapture.java +1 -8
  418. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxModule.java +1 -6
  419. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/PerftestDevSupportManager.java +56 -0
  420. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.java +21 -0
  421. package/ReactAndroid/src/main/java/com/facebook/react/fabric/.clang-tidy +1 -0
  422. package/ReactAndroid/src/main/java/com/facebook/react/fabric/BUCK +10 -13
  423. package/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java +3 -24
  424. package/ReactAndroid/src/main/java/com/facebook/react/fabric/DevToolsReactPerfLogger.java +22 -3
  425. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java +1 -14
  426. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +6 -37
  427. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventEmitterWrapper.java +2 -5
  428. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.java +4 -0
  429. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java +0 -4
  430. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +9 -7
  431. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/IntBufferBatchMountItem.java +0 -11
  432. package/ReactAndroid/src/main/java/com/facebook/react/modules/.clang-tidy +1 -0
  433. package/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.java +12 -23
  434. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java +11 -9
  435. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/BUCK +1 -0
  436. package/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.java +3 -14
  437. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BUCK +5 -8
  438. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.java +1 -1
  439. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobModule.java +1 -8
  440. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/FileReaderModule.java +1 -7
  441. package/ReactAndroid/src/main/java/com/facebook/react/modules/bundleloader/BUCK +1 -3
  442. package/ReactAndroid/src/main/java/com/facebook/react/modules/bundleloader/NativeDevSplitBundleLoaderModule.java +1 -9
  443. package/ReactAndroid/src/main/java/com/facebook/react/modules/camera/ImageStoreManager.java +1 -7
  444. package/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.java +1 -8
  445. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.java +3 -12
  446. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ExceptionsManagerModule.java +1 -8
  447. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/HeadlessJsTaskSupportModule.java +1 -8
  448. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ReactChoreographer.java +1 -1
  449. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java +1 -8
  450. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/AnimationsDebugModule.java +1 -8
  451. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DevSettingsModule.java +2 -12
  452. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/SourceCodeModule.java +1 -8
  453. package/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.java +5 -15
  454. package/ReactAndroid/src/main/java/com/facebook/react/modules/devloading/BUCK +25 -0
  455. package/ReactAndroid/src/main/java/com/facebook/react/modules/devloading/DevLoadingModule.java +67 -0
  456. package/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolssettings/BUCK +25 -0
  457. package/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolssettings/DevToolsSettingsManagerModule.java +53 -0
  458. package/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/BUCK +2 -8
  459. package/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/DialogModule.java +2 -13
  460. package/ReactAndroid/src/main/java/com/facebook/react/modules/fabric/BUCK +0 -2
  461. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/BUCK +6 -9
  462. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.java +29 -11
  463. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/BUCK +5 -8
  464. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java +1 -9
  465. package/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java +1 -9
  466. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java +48 -14
  467. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/BUCK +5 -8
  468. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java +66 -63
  469. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/ResponseUtil.java +26 -25
  470. package/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java +1 -7
  471. package/ReactAndroid/src/main/java/com/facebook/react/modules/share/ShareModule.java +1 -7
  472. package/ReactAndroid/src/main/java/com/facebook/react/modules/sound/BUCK +0 -2
  473. package/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.java +1 -8
  474. package/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/BUCK +4 -7
  475. package/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java +1 -6
  476. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoHelpers.java +2 -1
  477. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java +1 -7
  478. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +3 -3
  479. package/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.java +1 -7
  480. package/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.java +1 -8
  481. package/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java +2 -14
  482. package/ReactAndroid/src/main/java/com/facebook/react/processing/BUCK +2 -1
  483. package/ReactAndroid/src/main/java/com/facebook/react/processing/ReactPropertyProcessor.java +47 -26
  484. package/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK +8 -10
  485. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +188 -4
  486. package/ReactAndroid/src/main/java/com/facebook/react/surface/BUCK +0 -1
  487. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/.clang-tidy +1 -0
  488. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java +57 -63
  489. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BUCK +7 -14
  490. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +12 -14
  491. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/IViewGroupManager.java +26 -0
  492. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/IViewManagerWithChildren.java +1 -1
  493. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java +95 -53
  494. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java +36 -20
  495. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +10 -1
  496. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java +355 -2
  497. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/Spacing.java +21 -3
  498. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java +9 -11
  499. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.java +3 -3
  500. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +16 -1
  501. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +1 -55
  502. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.java +5 -11
  503. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java +1 -1
  504. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java +15 -6
  505. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java +16 -0
  506. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/BUCK +4 -7
  507. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +1 -1
  508. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventCategoryDef.java +3 -0
  509. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEvent.java +23 -11
  510. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java +12 -38
  511. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.java +4 -4
  512. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/util/ReactFindViewUtil.java +0 -5
  513. package/ReactAndroid/src/main/java/com/facebook/react/views/common/BUCK +5 -8
  514. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/BUCK +7 -8
  515. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayout.java +30 -0
  516. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java +11 -5
  517. package/ReactAndroid/src/main/java/com/facebook/react/views/image/BUCK +10 -15
  518. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMode.java +10 -11
  519. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java +4 -3
  520. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/BUCK +2 -4
  521. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +15 -12
  522. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/BUCK +1 -0
  523. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.java +6 -4
  524. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/BUCK +4 -7
  525. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/MaintainVisibleScrollPositionHelper.java +181 -0
  526. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +77 -9
  527. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java +12 -2
  528. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +72 -13
  529. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java +9 -3
  530. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +10 -6
  531. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/BUCK +5 -7
  532. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/BUCK +5 -8
  533. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitch.java +5 -8
  534. package/ReactAndroid/src/main/java/com/facebook/react/views/text/BUCK +0 -1
  535. package/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomLetterSpacingSpan.java +4 -0
  536. package/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomLineHeightSpan.java +4 -0
  537. package/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java +4 -0
  538. package/ReactAndroid/src/main/java/com/facebook/react/views/text/DefaultStyleValuesUtil.java +1 -2
  539. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +8 -5
  540. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java +7 -6
  541. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +7 -0
  542. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java +1 -5
  543. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +9 -7
  544. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java +13 -5
  545. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +23 -20
  546. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributes.java +5 -3
  547. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +22 -16
  548. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java +17 -17
  549. package/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/BUCK +1 -0
  550. package/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageShadowNode.java +6 -5
  551. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +204 -117
  552. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +49 -23
  553. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java +4 -3
  554. package/ReactAndroid/src/main/java/com/facebook/react/views/{slider → traceupdateoverlay}/BUCK +7 -7
  555. package/ReactAndroid/src/main/java/com/facebook/react/views/traceupdateoverlay/TraceUpdateOverlay.java +70 -0
  556. package/ReactAndroid/src/main/java/com/facebook/react/views/traceupdateoverlay/TraceUpdateOverlayManager.java +83 -0
  557. package/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/BUCK +5 -8
  558. package/ReactAndroid/src/main/java/com/facebook/react/views/view/BUCK +6 -9
  559. package/ReactAndroid/src/main/java/com/facebook/react/views/view/CanvasUtil.java +2 -10
  560. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactMapBufferPropSetter.kt +17 -5
  561. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java +147 -32
  562. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundManager.java +5 -0
  563. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +18 -6
  564. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManagerWrapper.kt +5 -5
  565. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java +0 -8
  566. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.java +0 -11
  567. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaExperimentalFeature.java +5 -1
  568. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaLogLevel.java +1 -1
  569. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaLogger.java +1 -1
  570. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java +1 -2
  571. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +1 -8
  572. package/ReactAndroid/src/main/java/com/facebook/yoga/annotations/DoNotStrip.java +18 -0
  573. package/ReactAndroid/src/main/jni/CMakeLists.txt +112 -3
  574. package/ReactAndroid/src/main/jni/CircularDepsValidator.cmake +32 -0
  575. package/ReactAndroid/src/main/jni/first-party/.clang-tidy +1 -0
  576. package/ReactAndroid/src/main/jni/first-party/fb/CMakeLists.txt +3 -0
  577. package/ReactAndroid/src/main/jni/first-party/yogajni/BUCK +1 -1
  578. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNI.h +0 -1
  579. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp +0 -15
  580. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJTypesVanilla.h +4 -4
  581. package/ReactAndroid/src/main/jni/react/fabric/BUCK +0 -2
  582. package/ReactAndroid/src/main/jni/react/fabric/Binding.cpp +22 -48
  583. package/ReactAndroid/src/main/jni/react/fabric/Binding.h +5 -10
  584. package/ReactAndroid/src/main/jni/react/fabric/CMakeLists.txt +0 -2
  585. package/ReactAndroid/src/main/jni/react/fabric/ComponentFactory.h +1 -7
  586. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +2 -3
  587. package/ReactAndroid/src/main/jni/react/fabric/EventEmitterWrapper.cpp +3 -2
  588. package/ReactAndroid/src/main/jni/react/fabric/FabricMountItem.h +1 -2
  589. package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp +32 -66
  590. package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h +2 -6
  591. package/ReactAndroid/src/main/jni/react/fabric/JBackgroundExecutor.h +1 -3
  592. package/ReactAndroid/src/main/jni/react/fabric/JFabricUIManager.h +2 -3
  593. package/ReactAndroid/src/main/jni/react/fabric/OnLoad.cpp +0 -2
  594. package/ReactAndroid/src/main/jni/react/fabric/StateWrapperImpl.cpp +3 -7
  595. package/ReactAndroid/src/main/jni/react/fabric/SurfaceHandlerBinding.cpp +2 -2
  596. package/ReactAndroid/src/main/jni/react/fabric/SurfaceHandlerBinding.h +3 -1
  597. package/ReactAndroid/src/main/jni/react/fabric/viewPropConversions.h +10 -2
  598. package/ReactAndroid/src/main/jni/react/hermes/instrumentation/BUCK +1 -1
  599. package/ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt +1 -0
  600. package/ReactAndroid/src/main/jni/react/hermes/reactexecutor/OnLoad.cpp +1 -5
  601. package/ReactAndroid/src/main/jni/react/jni/.clang-tidy +1 -0
  602. package/ReactAndroid/src/main/jni/react/jni/BUCK +5 -4
  603. package/ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.cpp +2 -0
  604. package/ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.h +4 -8
  605. package/ReactAndroid/src/main/jni/react/jni/JReactMarker.cpp +9 -2
  606. package/ReactAndroid/src/main/jni/react/jni/JReactMarker.h +1 -0
  607. package/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.cpp +2 -2
  608. package/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.h +2 -2
  609. package/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp +2 -2
  610. package/ReactAndroid/src/main/jni/react/jni/NativeArray.cpp +1 -3
  611. package/ReactAndroid/src/main/jni/react/jni/NativeArray.h +13 -3
  612. package/ReactAndroid/src/main/jni/react/jni/NativeMap.cpp +2 -2
  613. package/ReactAndroid/src/main/jni/react/jni/NativeMap.h +10 -4
  614. package/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +6 -0
  615. package/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.cpp +0 -6
  616. package/ReactAndroid/src/main/jni/react/jni/ReadableNativeArray.h +4 -1
  617. package/ReactAndroid/src/main/jni/react/jni/ReadableNativeMap.cpp +11 -7
  618. package/ReactAndroid/src/main/jni/react/jni/ReadableNativeMap.h +2 -2
  619. package/ReactAndroid/src/main/jni/react/jscexecutor/OnLoad.cpp +1 -5
  620. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +9 -43
  621. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.h +2 -9
  622. package/ReactAndroid/src/main/libraries/fbcore/src/main/java/com/facebook/common/logging/BUCK +1 -1
  623. package/ReactAndroid/src/main/libraries/fresco/fresco-react-native/BUCK +15 -15
  624. package/ReactAndroid/src/main/res/devsupport/values-af/strings.xml +0 -1
  625. package/ReactAndroid/src/main/res/devsupport/values-ar/strings.xml +0 -1
  626. package/ReactAndroid/src/main/res/devsupport/values-as/strings.xml +0 -1
  627. package/ReactAndroid/src/main/res/devsupport/values-az/strings.xml +0 -1
  628. package/ReactAndroid/src/main/res/devsupport/values-be/strings.xml +6 -0
  629. package/ReactAndroid/src/main/res/devsupport/values-bg/strings.xml +0 -1
  630. package/ReactAndroid/src/main/res/devsupport/values-bn/strings.xml +0 -1
  631. package/ReactAndroid/src/main/res/devsupport/values-bs/strings.xml +0 -1
  632. package/ReactAndroid/src/main/res/devsupport/values-ca/strings.xml +0 -1
  633. package/ReactAndroid/src/main/res/devsupport/values-cb/strings.xml +0 -1
  634. package/ReactAndroid/src/main/res/devsupport/values-cs/strings.xml +0 -1
  635. package/ReactAndroid/src/main/res/devsupport/values-da/strings.xml +0 -1
  636. package/ReactAndroid/src/main/res/devsupport/values-de/strings.xml +0 -1
  637. package/ReactAndroid/src/main/res/devsupport/values-el/strings.xml +0 -1
  638. package/ReactAndroid/src/main/res/devsupport/values-en-rGB/strings.xml +0 -1
  639. package/ReactAndroid/src/main/res/devsupport/values-es/strings.xml +0 -1
  640. package/ReactAndroid/src/main/res/devsupport/values-es-rES/strings.xml +0 -1
  641. package/ReactAndroid/src/main/res/devsupport/values-et/strings.xml +0 -1
  642. package/ReactAndroid/src/main/res/devsupport/values-fa/strings.xml +0 -1
  643. package/ReactAndroid/src/main/res/devsupport/values-fb/strings.xml +0 -1
  644. package/ReactAndroid/src/main/res/devsupport/values-fb-rLS/strings.xml +0 -1
  645. package/ReactAndroid/src/main/res/devsupport/values-fi/strings.xml +0 -1
  646. package/ReactAndroid/src/main/res/devsupport/values-fr/strings.xml +0 -1
  647. package/ReactAndroid/src/main/res/devsupport/values-fr-rCA/strings.xml +0 -1
  648. package/ReactAndroid/src/main/res/devsupport/values-gu/strings.xml +0 -1
  649. package/ReactAndroid/src/main/res/devsupport/values-ha/strings.xml +6 -0
  650. package/ReactAndroid/src/main/res/devsupport/values-hi/strings.xml +0 -1
  651. package/ReactAndroid/src/main/res/devsupport/values-hr/strings.xml +0 -1
  652. package/ReactAndroid/src/main/res/devsupport/values-hu/strings.xml +0 -1
  653. package/ReactAndroid/src/main/res/devsupport/values-hy/strings.xml +6 -0
  654. package/ReactAndroid/src/main/res/devsupport/values-in/strings.xml +0 -1
  655. package/ReactAndroid/src/main/res/devsupport/values-is/strings.xml +0 -1
  656. package/ReactAndroid/src/main/res/devsupport/values-it/strings.xml +0 -1
  657. package/ReactAndroid/src/main/res/devsupport/values-iw/strings.xml +0 -1
  658. package/ReactAndroid/src/main/res/devsupport/values-ja/strings.xml +0 -1
  659. package/ReactAndroid/src/main/res/devsupport/values-jv/strings.xml +6 -0
  660. package/ReactAndroid/src/main/res/devsupport/values-ka/strings.xml +0 -1
  661. package/ReactAndroid/src/main/res/devsupport/values-kk/strings.xml +6 -0
  662. package/ReactAndroid/src/main/res/devsupport/values-km/strings.xml +0 -1
  663. package/ReactAndroid/src/main/res/devsupport/values-kn/strings.xml +0 -1
  664. package/ReactAndroid/src/main/res/devsupport/values-ko/strings.xml +0 -1
  665. package/ReactAndroid/src/main/res/devsupport/values-ku/strings.xml +6 -0
  666. package/ReactAndroid/src/main/res/devsupport/values-ky/strings.xml +6 -0
  667. package/ReactAndroid/src/main/res/devsupport/values-lo/strings.xml +0 -1
  668. package/ReactAndroid/src/main/res/devsupport/values-lt/strings.xml +0 -1
  669. package/ReactAndroid/src/main/res/devsupport/values-lv/strings.xml +0 -1
  670. package/ReactAndroid/src/main/res/devsupport/values-mk/strings.xml +0 -1
  671. package/ReactAndroid/src/main/res/devsupport/values-ml/strings.xml +0 -1
  672. package/ReactAndroid/src/main/res/devsupport/values-mn/strings.xml +0 -1
  673. package/ReactAndroid/src/main/res/devsupport/values-mr/strings.xml +0 -1
  674. package/ReactAndroid/src/main/res/devsupport/values-ms/strings.xml +0 -1
  675. package/ReactAndroid/src/main/res/devsupport/values-my/strings.xml +0 -1
  676. package/ReactAndroid/src/main/res/devsupport/values-nb/strings.xml +0 -1
  677. package/ReactAndroid/src/main/res/devsupport/values-ne/strings.xml +0 -1
  678. package/ReactAndroid/src/main/res/devsupport/values-nl/strings.xml +0 -1
  679. package/ReactAndroid/src/main/res/devsupport/values-pa/strings.xml +0 -1
  680. package/ReactAndroid/src/main/res/devsupport/values-pl/strings.xml +0 -1
  681. package/ReactAndroid/src/main/res/devsupport/values-ps/strings.xml +6 -0
  682. package/ReactAndroid/src/main/res/devsupport/values-pt/strings.xml +0 -1
  683. package/ReactAndroid/src/main/res/devsupport/values-pt-rPT/strings.xml +0 -1
  684. package/ReactAndroid/src/main/res/devsupport/values-qz/strings.xml +0 -1
  685. package/ReactAndroid/src/main/res/devsupport/values-ro/strings.xml +0 -1
  686. package/ReactAndroid/src/main/res/devsupport/values-ru/strings.xml +0 -1
  687. package/ReactAndroid/src/main/res/devsupport/values-si/strings.xml +0 -1
  688. package/ReactAndroid/src/main/res/devsupport/values-sk/strings.xml +0 -1
  689. package/ReactAndroid/src/main/res/devsupport/values-sl/strings.xml +0 -1
  690. package/ReactAndroid/src/main/res/devsupport/values-sn/strings.xml +0 -1
  691. package/ReactAndroid/src/main/res/devsupport/values-so/strings.xml +6 -0
  692. package/ReactAndroid/src/main/res/devsupport/values-sq/strings.xml +0 -1
  693. package/ReactAndroid/src/main/res/devsupport/values-sr/strings.xml +0 -1
  694. package/ReactAndroid/src/main/res/devsupport/values-sv/strings.xml +0 -1
  695. package/ReactAndroid/src/main/res/devsupport/values-sw/strings.xml +0 -1
  696. package/ReactAndroid/src/main/res/devsupport/values-ta/strings.xml +0 -1
  697. package/ReactAndroid/src/main/res/devsupport/values-te/strings.xml +0 -1
  698. package/ReactAndroid/src/main/res/devsupport/values-tg/strings.xml +6 -0
  699. package/ReactAndroid/src/main/res/devsupport/values-th/strings.xml +0 -1
  700. package/ReactAndroid/src/main/res/devsupport/values-tk/strings.xml +6 -0
  701. package/ReactAndroid/src/main/res/devsupport/values-tl/strings.xml +0 -1
  702. package/ReactAndroid/src/main/res/devsupport/values-tr/strings.xml +0 -1
  703. package/ReactAndroid/src/main/res/devsupport/values-uk/strings.xml +0 -1
  704. package/ReactAndroid/src/main/res/devsupport/values-ur/strings.xml +0 -1
  705. package/ReactAndroid/src/main/res/devsupport/values-uz/strings.xml +6 -0
  706. package/ReactAndroid/src/main/res/devsupport/values-vi/strings.xml +0 -1
  707. package/ReactAndroid/src/main/res/devsupport/values-wo/strings.xml +0 -1
  708. package/ReactAndroid/src/main/res/devsupport/values-zh-rCN/strings.xml +0 -1
  709. package/ReactAndroid/src/main/res/devsupport/values-zh-rHK/strings.xml +0 -1
  710. package/ReactAndroid/src/main/res/devsupport/values-zh-rTW/strings.xml +0 -1
  711. package/ReactAndroid/src/main/res/devsupport/values-zu/strings.xml +0 -1
  712. package/ReactAndroid/src/main/res/views/uimanager/values/ids.xml +4 -1
  713. package/ReactCommon/React-Fabric.podspec +43 -49
  714. package/ReactCommon/React-rncore.podspec +13 -4
  715. package/ReactCommon/ReactCommon.podspec +8 -17
  716. package/ReactCommon/butter/BUCK +1 -9
  717. package/ReactCommon/butter/function.h +51 -0
  718. package/ReactCommon/butter/map.h +3 -3
  719. package/ReactCommon/callinvoker/.clang-tidy +1 -0
  720. package/ReactCommon/callinvoker/BUCK +0 -1
  721. package/ReactCommon/callinvoker/React-callinvoker.podspec +1 -1
  722. package/ReactCommon/callinvoker/ReactCommon/CallInvoker.h +11 -2
  723. package/ReactCommon/{butter/mutex.h → callinvoker/ReactCommon/SchedulerPriority.h} +10 -6
  724. package/ReactCommon/cxxreact/.clang-tidy +1 -0
  725. package/ReactCommon/cxxreact/BUCK +3 -1
  726. package/ReactCommon/cxxreact/CMakeLists.txt +1 -0
  727. package/ReactCommon/cxxreact/Instance.h +2 -2
  728. package/ReactCommon/cxxreact/JSBigString.h +5 -5
  729. package/ReactCommon/cxxreact/JSExecutor.cpp +12 -0
  730. package/ReactCommon/cxxreact/JSExecutor.h +2 -0
  731. package/ReactCommon/cxxreact/MethodCall.cpp +3 -3
  732. package/ReactCommon/cxxreact/ModuleRegistry.cpp +5 -6
  733. package/ReactCommon/cxxreact/ModuleRegistry.h +3 -3
  734. package/ReactCommon/cxxreact/NativeModule.h +2 -2
  735. package/ReactCommon/cxxreact/React-cxxreact.podspec +3 -2
  736. package/ReactCommon/cxxreact/ReactMarker.cpp +55 -2
  737. package/ReactCommon/cxxreact/ReactMarker.h +36 -2
  738. package/ReactCommon/cxxreact/ReactNativeVersion.h +3 -3
  739. package/ReactCommon/hermes/.clang-tidy +1 -0
  740. package/ReactCommon/hermes/React-hermes.podspec +3 -2
  741. package/ReactCommon/hermes/executor/CMakeLists.txt +8 -1
  742. package/ReactCommon/hermes/executor/HermesExecutorFactory.cpp +6 -20
  743. package/ReactCommon/hermes/inspector/BUCK +12 -6
  744. package/ReactCommon/hermes/inspector/CMakeLists.txt +1 -1
  745. package/ReactCommon/hermes/inspector/DEFS.bzl +2 -2
  746. package/ReactCommon/hermes/inspector/Inspector.cpp +2 -2
  747. package/ReactCommon/hermes/inspector/Inspector.h +7 -7
  748. package/ReactCommon/hermes/inspector/InspectorState.h +5 -5
  749. package/ReactCommon/hermes/inspector/README.md +7 -7
  750. package/ReactCommon/hermes/inspector/RuntimeAdapter.h +1 -1
  751. package/ReactCommon/hermes/inspector/chrome/Connection.cpp +12 -12
  752. package/ReactCommon/hermes/inspector/chrome/MessageConverters.h +3 -3
  753. package/ReactCommon/hermes/inspector/chrome/MessageTypes.h +96 -97
  754. package/ReactCommon/hermes/inspector/chrome/MessageTypesInlines.h +4 -3
  755. package/ReactCommon/hermes/inspector/chrome/tests/ConnectionTests.cpp +39 -38
  756. package/ReactCommon/hermes/inspector/chrome/tests/MessageTests.cpp +67 -64
  757. package/ReactCommon/hermes/inspector/chrome/tests/SyncConnection.cpp +3 -3
  758. package/ReactCommon/hermes/inspector/chrome/tests/SyncConnection.h +3 -3
  759. package/ReactCommon/hermes/inspector/detail/SerialExecutor.h +1 -1
  760. package/ReactCommon/hermes/inspector/tools/format +1 -1
  761. package/ReactCommon/hermes/inspector/tools/sandcastle/build_and_test.sh +4 -4
  762. package/ReactCommon/jsc/CMakeLists.txt +4 -0
  763. package/ReactCommon/jsc/JSCRuntime.cpp +11 -9
  764. package/ReactCommon/jsc/React-jsc.podspec +1 -1
  765. package/ReactCommon/jsengineinstance/.clang-tidy +1 -0
  766. package/ReactCommon/jserrorhandler/BUCK +1 -1
  767. package/ReactCommon/jsi/.clang-tidy +1 -0
  768. package/ReactCommon/jsi/React-jsi.podspec +1 -1
  769. package/ReactCommon/jsi/jsi/decorator.h +16 -10
  770. package/ReactCommon/jsi/jsi/jsi-inl.h +7 -5
  771. package/ReactCommon/jsi/jsi/jsi.cpp +51 -61
  772. package/ReactCommon/jsi/jsi/jsi.h +22 -16
  773. package/ReactCommon/jsiexecutor/.clang-tidy +1 -0
  774. package/ReactCommon/jsiexecutor/CMakeLists.txt +5 -1
  775. package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +3 -2
  776. package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.cpp +16 -16
  777. package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.h +7 -7
  778. package/ReactCommon/jsiexecutor/jsireact/JSINativeModules.cpp +7 -7
  779. package/ReactCommon/jsiexecutor/jsireact/JSINativeModules.h +3 -3
  780. package/ReactCommon/jsinspector/.clang-tidy +1 -0
  781. package/ReactCommon/jsinspector/CMakeLists.txt +3 -1
  782. package/ReactCommon/jsinspector/React-jsinspector.podspec +2 -1
  783. package/ReactCommon/libraries/fbcore/src/test/java/com/facebook/powermock/BUCK +3 -3
  784. package/ReactCommon/logger/React-logger.podspec +1 -1
  785. package/ReactCommon/react/bridging/BUCK +1 -2
  786. package/ReactCommon/react/bridging/Base.h +3 -3
  787. package/ReactCommon/react/bridging/CallbackWrapper.h +3 -39
  788. package/ReactCommon/react/bridging/Function.h +36 -17
  789. package/ReactCommon/react/bridging/LongLivedObject.cpp +6 -13
  790. package/ReactCommon/react/bridging/LongLivedObject.h +9 -8
  791. package/ReactCommon/react/bridging/Number.h +11 -0
  792. package/ReactCommon/react/bridging/tests/BridgingTest.cpp +16 -1
  793. package/ReactCommon/react/config/.clang-tidy +1 -0
  794. package/ReactCommon/react/config/ReactNativeConfig.cpp +6 -0
  795. package/ReactCommon/react/config/ReactNativeConfig.h +1 -1
  796. package/ReactCommon/react/debug/CMakeLists.txt +4 -0
  797. package/ReactCommon/react/debug/flags.h +3 -1
  798. package/ReactCommon/react/debug/react_native_assert.h +6 -0
  799. package/ReactCommon/react/debug/react_native_expect.h +41 -0
  800. package/ReactCommon/react/nativemodule/.clang-tidy +1 -0
  801. package/ReactCommon/react/nativemodule/core/BUCK +3 -1
  802. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboCxxModule.cpp +6 -1
  803. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.cpp +26 -8
  804. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.h +31 -3
  805. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +39 -44
  806. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.h +5 -14
  807. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleUtils.cpp +2 -2
  808. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +1 -1
  809. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +28 -48
  810. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.h +3 -9
  811. package/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +56 -0
  812. package/ReactCommon/react/nativemodule/core/platform/ios/{RCTBlockGuard.h → ReactCommon/RCTBlockGuard.h} +1 -1
  813. package/ReactCommon/react/nativemodule/core/platform/ios/{RCTTurboModule.h → ReactCommon/RCTTurboModule.h} +0 -6
  814. package/ReactCommon/react/nativemodule/core/platform/ios/{RCTTurboModule.mm → ReactCommon/RCTTurboModule.mm} +24 -51
  815. package/ReactCommon/react/nativemodule/core/platform/ios/{RCTTurboModuleManager.h → ReactCommon/RCTTurboModuleManager.h} +5 -1
  816. package/ReactCommon/react/nativemodule/core/platform/ios/{RCTTurboModuleManager.mm → ReactCommon/RCTTurboModuleManager.mm} +14 -69
  817. package/ReactCommon/react/nativemodule/samples/BUCK +3 -1
  818. package/ReactCommon/react/nativemodule/samples/ReactCommon/NativeSampleTurboCxxModuleSpecJSI.cpp +12 -0
  819. package/ReactCommon/react/nativemodule/samples/ReactCommon/NativeSampleTurboCxxModuleSpecJSI.h +1 -0
  820. package/ReactCommon/react/nativemodule/samples/ReactCommon/SampleTurboCxxModule.cpp +4 -0
  821. package/ReactCommon/react/nativemodule/samples/ReactCommon/SampleTurboCxxModule.h +1 -0
  822. package/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec +59 -0
  823. package/ReactCommon/react/nativemodule/samples/platform/android/NativeSampleTurboModuleSpec.java +3 -0
  824. package/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp +15 -0
  825. package/ReactCommon/react/nativemodule/samples/platform/android/SampleTurboModule.java +8 -0
  826. package/ReactCommon/react/nativemodule/samples/platform/ios/{RCTNativeSampleTurboModuleSpec.h → ReactCommon/RCTNativeSampleTurboModuleSpec.h} +1 -0
  827. package/ReactCommon/react/nativemodule/samples/platform/ios/{RCTNativeSampleTurboModuleSpec.mm → ReactCommon/RCTNativeSampleTurboModuleSpec.mm} +11 -0
  828. package/ReactCommon/react/nativemodule/samples/platform/ios/{RCTSampleTurboModule.mm → ReactCommon/RCTSampleTurboModule.mm} +5 -0
  829. package/ReactCommon/react/nativemodule/samples/platform/ios/{SampleTurboCxxModuleLegacyImpl.cpp → ReactCommon/SampleTurboCxxModuleLegacyImpl.cpp} +10 -0
  830. package/ReactCommon/react/nativemodule/samples/platform/ios/{SampleTurboCxxModuleLegacyImpl.h → ReactCommon/SampleTurboCxxModuleLegacyImpl.h} +1 -0
  831. package/ReactCommon/react/renderer/.clang-tidy +7 -0
  832. package/ReactCommon/react/renderer/animations/BUCK +2 -0
  833. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.cpp +41 -65
  834. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.h +3 -20
  835. package/ReactCommon/react/renderer/attributedstring/AttributedString.h +1 -1
  836. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.cpp +1 -1
  837. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.h +1 -1
  838. package/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +1 -1
  839. package/ReactCommon/react/renderer/attributedstring/TextAttributes.h +2 -1
  840. package/ReactCommon/react/renderer/attributedstring/conversions.h +48 -49
  841. package/ReactCommon/react/renderer/attributedstring/tests/AttributedStringTest.cpp +1 -1
  842. package/ReactCommon/react/renderer/attributedstring/tests/TextAttributesTest.cpp +1 -1
  843. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.cpp +4 -4
  844. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h +4 -5
  845. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +5 -5
  846. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h +2 -2
  847. package/ReactCommon/react/renderer/components/image/ImageProps.cpp +9 -7
  848. package/ReactCommon/react/renderer/components/image/conversions.h +4 -4
  849. package/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryState.h +1 -2
  850. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/CMakeLists.txt +31 -0
  851. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h +4 -1
  852. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm +50 -3
  853. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerInteropComponentDescriptor.h +38 -0
  854. package/ReactCommon/react/renderer/components/modal/ModalHostViewState.h +1 -2
  855. package/ReactCommon/react/renderer/components/root/RootProps.cpp +4 -4
  856. package/ReactCommon/react/renderer/components/root/tests/RootShadowNodeTest.cpp +3 -3
  857. package/ReactCommon/react/renderer/components/safeareaview/SafeAreaViewState.h +1 -1
  858. package/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.h +0 -1
  859. package/ReactCommon/react/renderer/components/scrollview/ScrollViewProps.cpp +50 -36
  860. package/ReactCommon/react/renderer/components/scrollview/ScrollViewProps.h +4 -0
  861. package/ReactCommon/react/renderer/components/scrollview/ScrollViewState.h +4 -1
  862. package/ReactCommon/react/renderer/components/scrollview/conversions.h +35 -0
  863. package/ReactCommon/react/renderer/components/scrollview/primitives.h +17 -0
  864. package/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +1 -1
  865. package/ReactCommon/react/renderer/components/text/BaseTextProps.h +0 -1
  866. package/ReactCommon/react/renderer/components/text/BaseTextShadowNode.cpp +1 -0
  867. package/ReactCommon/react/renderer/components/text/ParagraphLayoutManager.cpp +84 -0
  868. package/ReactCommon/react/renderer/components/text/ParagraphLayoutManager.h +71 -0
  869. package/ReactCommon/react/renderer/components/text/ParagraphProps.cpp +4 -2
  870. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp +13 -15
  871. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.h +2 -6
  872. package/ReactCommon/react/renderer/components/text/ParagraphState.h +8 -11
  873. package/ReactCommon/react/renderer/components/text/RawTextShadowNode.h +4 -25
  874. package/ReactCommon/react/renderer/components/text/TextProps.h +0 -1
  875. package/ReactCommon/react/renderer/components/text/TextShadowNode.h +5 -23
  876. package/ReactCommon/react/renderer/components/text/tests/ParagraphLocalDataTest.cpp +7 -10
  877. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputProps.cpp +56 -50
  878. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputProps.h +0 -1
  879. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.cpp +2 -1
  880. package/ReactCommon/react/renderer/components/textinput/iostextinput/BUCK +3 -0
  881. package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputEventEmitter.cpp → react/renderer/components/iostextinput/TextInputEventEmitter.cpp} +31 -1
  882. package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputEventEmitter.h → react/renderer/components/iostextinput/TextInputEventEmitter.h} +5 -0
  883. package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputProps.cpp → react/renderer/components/iostextinput/TextInputProps.cpp} +1 -1
  884. package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputShadowNode.cpp → react/renderer/components/iostextinput/TextInputShadowNode.cpp} +2 -1
  885. package/ReactCommon/react/renderer/components/textinput/iostextinput/{propsConversions.h → react/renderer/components/iostextinput/propsConversions.h} +4 -3
  886. package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.h +1 -1
  887. package/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +3 -3
  888. package/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +21 -20
  889. package/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp +0 -2
  890. package/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.h +4 -2
  891. package/ReactCommon/react/renderer/components/view/BUCK +1 -0
  892. package/ReactCommon/react/renderer/components/view/PointerEvent.h +1 -1
  893. package/ReactCommon/react/renderer/components/view/Touch.h +1 -1
  894. package/ReactCommon/react/renderer/components/view/ViewProps.cpp +63 -74
  895. package/ReactCommon/react/renderer/components/view/ViewProps.h +0 -1
  896. package/ReactCommon/react/renderer/components/view/ViewPropsMapBuffer.cpp +1 -1
  897. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +207 -91
  898. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.h +28 -31
  899. package/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +155 -7
  900. package/ReactCommon/react/renderer/components/view/YogaStylableProps.h +38 -1
  901. package/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +10 -7
  902. package/ReactCommon/react/renderer/components/view/conversions.h +133 -59
  903. package/ReactCommon/react/renderer/components/view/primitives.h +49 -18
  904. package/ReactCommon/react/renderer/components/view/propsConversions.h +65 -8
  905. package/ReactCommon/react/renderer/components/view/tests/LayoutTest.cpp +88 -2
  906. package/ReactCommon/react/renderer/components/view/viewPropConversions.h +21 -3
  907. package/ReactCommon/react/renderer/core/BUCK +7 -3
  908. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +1 -1
  909. package/ReactCommon/react/renderer/core/CoreFeatures.cpp +4 -0
  910. package/ReactCommon/react/renderer/core/CoreFeatures.h +20 -1
  911. package/ReactCommon/react/renderer/core/DynamicPropsUtilities.cpp +1 -0
  912. package/ReactCommon/react/renderer/core/DynamicPropsUtilities.h +8 -4
  913. package/ReactCommon/react/renderer/core/EventBeat.h +1 -1
  914. package/ReactCommon/react/renderer/core/EventDispatcher.cpp +10 -4
  915. package/ReactCommon/react/renderer/core/EventDispatcher.h +1 -1
  916. package/ReactCommon/react/renderer/core/EventListener.cpp +3 -3
  917. package/ReactCommon/react/renderer/core/EventListener.h +2 -3
  918. package/ReactCommon/react/renderer/core/EventLogger.cpp +22 -0
  919. package/ReactCommon/react/renderer/core/EventLogger.h +44 -0
  920. package/ReactCommon/react/renderer/core/EventQueueProcessor.cpp +12 -2
  921. package/ReactCommon/react/renderer/core/LayoutConstraints.h +1 -1
  922. package/ReactCommon/react/renderer/core/LayoutContext.h +0 -1
  923. package/ReactCommon/react/renderer/core/LayoutMetrics.h +2 -1
  924. package/ReactCommon/react/renderer/core/LayoutableShadowNode.cpp +16 -2
  925. package/ReactCommon/react/renderer/core/LayoutableShadowNode.h +2 -26
  926. package/ReactCommon/react/renderer/core/PropsMacros.h +21 -7
  927. package/ReactCommon/react/renderer/core/PropsMapBuffer.cpp +2 -3
  928. package/ReactCommon/react/renderer/core/PropsMapBuffer.h +1 -0
  929. package/ReactCommon/react/renderer/core/RawEvent.h +2 -0
  930. package/ReactCommon/react/renderer/core/RawProps.h +1 -1
  931. package/ReactCommon/react/renderer/core/RawPropsKeyMap.h +1 -1
  932. package/ReactCommon/react/renderer/core/RawPropsPrimitives.h +1 -1
  933. package/ReactCommon/react/renderer/core/Sealable.h +2 -2
  934. package/ReactCommon/react/renderer/core/ShadowNode.cpp +27 -3
  935. package/ReactCommon/react/renderer/core/ShadowNode.h +6 -20
  936. package/ReactCommon/react/renderer/core/ShadowNodeFamily.cpp +3 -3
  937. package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +9 -2
  938. package/ReactCommon/react/renderer/core/ShadowNodeTraits.h +6 -11
  939. package/ReactCommon/react/renderer/core/TraitCast.h +90 -0
  940. package/ReactCommon/react/renderer/core/graphicsConversions.h +260 -0
  941. package/ReactCommon/react/renderer/core/propsConversions.h +1 -2
  942. package/ReactCommon/react/renderer/core/tests/EventQueueProcessorTest.cpp +2 -2
  943. package/ReactCommon/react/renderer/core/tests/LayoutableShadowNodeTest.cpp +147 -1
  944. package/ReactCommon/react/renderer/core/tests/RawPropsTest.cpp +1 -1
  945. package/ReactCommon/react/renderer/core/tests/traitCastTest.cpp +12 -2
  946. package/ReactCommon/react/renderer/debug/DebugStringConvertible.h +9 -0
  947. package/ReactCommon/react/renderer/debug/SystraceSection.h +13 -3
  948. package/ReactCommon/react/renderer/element/BUCK +2 -0
  949. package/ReactCommon/react/renderer/element/CMakeLists.txt +29 -0
  950. package/ReactCommon/react/renderer/graphics/BUCK +9 -12
  951. package/ReactCommon/react/renderer/graphics/CMakeLists.txt +4 -8
  952. package/ReactCommon/react/renderer/graphics/{platform/cxx/react/renderer/graphics/Color.cpp → Color.cpp} +1 -1
  953. package/ReactCommon/react/renderer/graphics/{platform/ios/Color.h → Color.h} +12 -16
  954. package/ReactCommon/react/renderer/graphics/Geometry.h +3 -12
  955. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +18 -3
  956. package/ReactCommon/react/renderer/graphics/RectangleEdges.h +11 -1
  957. package/ReactCommon/react/renderer/graphics/Transform.h +5 -2
  958. package/{ReactAndroid/src/main/jni/react/jni/NativeTime.h → ReactCommon/react/renderer/graphics/Vector.h} +8 -1
  959. package/ReactCommon/react/renderer/graphics/conversions.h +18 -252
  960. package/ReactCommon/{yoga/yoga/internal/experiments.h → react/renderer/graphics/platform/android/react/renderer/graphics/Float.h} +8 -12
  961. package/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h +0 -1
  962. package/ReactCommon/react/renderer/graphics/platform/ios/{RCTPlatformColorUtils.mm → react/renderer/graphics/RCTPlatformColorUtils.mm} +1 -2
  963. package/ReactCommon/react/renderer/imagemanager/BUCK +4 -2
  964. package/ReactCommon/react/renderer/imagemanager/ImageRequest.h +1 -1
  965. package/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec +64 -0
  966. package/ReactCommon/react/renderer/imagemanager/platform/ios/{ImageManager.mm → react/renderer/imagemanager/ImageManager.mm} +1 -1
  967. package/ReactCommon/react/renderer/imagemanager/platform/ios/{ImageRequest.cpp → react/renderer/imagemanager/ImageRequest.cpp} +1 -1
  968. package/ReactCommon/react/renderer/imagemanager/platform/ios/{RCTImageManager.h → react/renderer/imagemanager/RCTImageManager.h} +1 -1
  969. package/ReactCommon/react/renderer/imagemanager/platform/ios/{RCTSyncImageManager.h → react/renderer/imagemanager/RCTSyncImageManager.h} +1 -1
  970. package/ReactCommon/react/renderer/imagemanager/primitives.h +2 -1
  971. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.h +4 -2
  972. package/ReactCommon/react/renderer/mounting/Differentiator.cpp +1 -1
  973. package/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp +2 -2
  974. package/ReactCommon/react/renderer/mounting/MountingCoordinator.h +1 -1
  975. package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +21 -17
  976. package/ReactCommon/react/renderer/mounting/ShadowTree.h +11 -5
  977. package/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h +2 -2
  978. package/ReactCommon/react/renderer/mounting/ShadowTreeRegistry.cpp +11 -6
  979. package/ReactCommon/react/renderer/mounting/ShadowTreeRegistry.h +6 -3
  980. package/ReactCommon/react/renderer/mounting/ShadowView.cpp +1 -0
  981. package/ReactCommon/react/renderer/mounting/tests/ShadowTreeLifeCycleTest.cpp +8 -8
  982. package/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp +8 -8
  983. package/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp +2 -2
  984. package/ReactCommon/react/renderer/runtimescheduler/BUCK +1 -0
  985. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +17 -5
  986. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.h +6 -3
  987. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.cpp +3 -3
  988. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.cpp +11 -2
  989. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h +4 -3
  990. package/ReactCommon/react/renderer/runtimescheduler/{SchedulerPriority.h → SchedulerPriorityUtils.h} +3 -28
  991. package/ReactCommon/react/renderer/runtimescheduler/Task.cpp +23 -6
  992. package/ReactCommon/react/renderer/runtimescheduler/Task.h +13 -7
  993. package/ReactCommon/react/renderer/runtimescheduler/primitives.h +15 -4
  994. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +1 -1
  995. package/ReactCommon/react/renderer/runtimescheduler/tests/SchedulerPriorityTest.cpp +1 -0
  996. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +42 -10
  997. package/ReactCommon/react/renderer/scheduler/Scheduler.h +3 -1
  998. package/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +3 -5
  999. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp +32 -34
  1000. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.h +4 -3
  1001. package/ReactCommon/react/renderer/scheduler/SurfaceManager.cpp +3 -3
  1002. package/ReactCommon/react/renderer/scheduler/SurfaceManager.h +2 -1
  1003. package/ReactCommon/react/renderer/telemetry/tests/TransactionTelemetryTest.cpp +1 -1
  1004. package/ReactCommon/react/renderer/templateprocessor/BUCK +2 -0
  1005. package/ReactCommon/react/renderer/textlayoutmanager/BUCK +4 -2
  1006. package/ReactCommon/react/renderer/textlayoutmanager/TextMeasureCache.h +1 -0
  1007. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp +14 -3
  1008. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.h +7 -1
  1009. package/ReactCommon/react/renderer/textlayoutmanager/platform/cxx/TextLayoutManager.cpp +9 -1
  1010. package/ReactCommon/react/renderer/textlayoutmanager/platform/cxx/TextLayoutManager.h +7 -1
  1011. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{NSTextStorage+FontScaling.m → react/renderer/textlayoutmanager/NSTextStorage+FontScaling.m} +3 -3
  1012. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{RCTTextLayoutManager.h → react/renderer/textlayoutmanager/RCTTextLayoutManager.h} +10 -4
  1013. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{RCTTextLayoutManager.mm → react/renderer/textlayoutmanager/RCTTextLayoutManager.mm} +140 -96
  1014. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{TextLayoutManager.h → react/renderer/textlayoutmanager/TextLayoutManager.h} +7 -1
  1015. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{TextLayoutManager.mm → react/renderer/textlayoutmanager/TextLayoutManager.mm} +24 -3
  1016. package/ReactCommon/react/renderer/timeline/TimelineController.h +1 -1
  1017. package/ReactCommon/react/renderer/uimanager/BUCK +2 -0
  1018. package/ReactCommon/react/renderer/uimanager/SurfaceRegistryBinding.cpp +4 -4
  1019. package/ReactCommon/react/renderer/uimanager/SurfaceRegistryBinding.h +2 -2
  1020. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +158 -41
  1021. package/ReactCommon/react/renderer/uimanager/UIManager.h +16 -3
  1022. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h +8 -0
  1023. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +86 -4
  1024. package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +2 -1
  1025. package/ReactCommon/react/renderer/uimanager/primitives.h +48 -24
  1026. package/ReactCommon/react/utils/.clang-tidy +1 -0
  1027. package/ReactCommon/react/utils/BUCK +6 -2
  1028. package/ReactCommon/react/utils/ContextContainer.h +8 -8
  1029. package/ReactCommon/react/utils/SharedFunction.h +4 -6
  1030. package/ReactCommon/reactperflogger/.clang-tidy +1 -0
  1031. package/ReactCommon/reactperflogger/React-perflogger.podspec +1 -1
  1032. package/ReactCommon/runtimeexecutor/.clang-tidy +1 -0
  1033. package/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec +1 -1
  1034. package/ReactCommon/yoga/yoga/CMakeLists.txt +41 -0
  1035. package/ReactCommon/yoga/yoga/CompactValue.h +8 -0
  1036. package/ReactCommon/yoga/yoga/Utils.cpp +1 -1
  1037. package/ReactCommon/yoga/yoga/Utils.h +2 -4
  1038. package/ReactCommon/yoga/yoga/YGEnums.cpp +4 -0
  1039. package/ReactCommon/yoga/yoga/YGEnums.h +3 -1
  1040. package/ReactCommon/yoga/yoga/YGLayout.h +1 -26
  1041. package/ReactCommon/yoga/yoga/YGNode.cpp +0 -47
  1042. package/ReactCommon/yoga/yoga/YGNode.h +0 -4
  1043. package/ReactCommon/yoga/yoga/YGNodePrint.cpp +3 -1
  1044. package/ReactCommon/yoga/yoga/Yoga-internal.h +6 -3
  1045. package/ReactCommon/yoga/yoga/Yoga.cpp +55 -127
  1046. package/ReactCommon/yoga/yoga/Yoga.h +0 -5
  1047. package/ReactCommon/yoga/yoga/event/event.h +0 -5
  1048. package/build.gradle.kts +10 -123
  1049. package/flow/global.js +29 -4
  1050. package/flow/jest.js +258 -164
  1051. package/flow/use-sync-external-store.js +1 -0
  1052. package/gradle.properties +1 -12
  1053. package/index.js +56 -42
  1054. package/interface.js +1 -1
  1055. package/jest/local-setup.js +33 -0
  1056. package/jest/mockComponent.js +4 -2
  1057. package/jest/mockNativeComponent.js +1 -1
  1058. package/jest/mockScrollView.js +2 -1
  1059. package/jest/react-native-env.js +1 -3
  1060. package/jest/setup.js +11 -8
  1061. package/local-cli/cli.js +0 -0
  1062. package/package.json +23 -101
  1063. package/react-native.config.js +2 -2
  1064. package/rn-get-polyfills.js +1 -1
  1065. package/scripts/cocoapods/__tests__/codegen-test.rb +242 -0
  1066. package/scripts/cocoapods/__tests__/codegen_utils-test.rb +597 -0
  1067. package/scripts/cocoapods/__tests__/fabric-test.rb +68 -0
  1068. package/scripts/cocoapods/__tests__/flipper-test.rb +153 -0
  1069. package/scripts/cocoapods/__tests__/jsengine-test.rb +126 -0
  1070. package/scripts/cocoapods/__tests__/local_podspec_patch-test.rb +167 -0
  1071. package/scripts/cocoapods/__tests__/new_architecture-test.rb +297 -0
  1072. package/scripts/cocoapods/__tests__/test_utils/CodegenScriptPhaseExtractorMock.rb +21 -0
  1073. package/scripts/cocoapods/__tests__/test_utils/CodegenUtilsMock.rb +108 -0
  1074. package/scripts/cocoapods/__tests__/test_utils/DirMock.rb +72 -0
  1075. package/scripts/cocoapods/__tests__/test_utils/EnvironmentMock.rb +21 -0
  1076. package/scripts/cocoapods/__tests__/test_utils/FileMock.rb +113 -0
  1077. package/scripts/cocoapods/__tests__/test_utils/FileUtilsMock.rb +40 -0
  1078. package/scripts/cocoapods/__tests__/test_utils/FinderMock.rb +28 -0
  1079. package/scripts/cocoapods/__tests__/test_utils/InstallerMock.rb +222 -0
  1080. package/scripts/cocoapods/__tests__/test_utils/LocalPodspecPatchMock.rb +14 -0
  1081. package/scripts/cocoapods/__tests__/test_utils/Open3Mock.rb +43 -0
  1082. package/scripts/cocoapods/__tests__/test_utils/PathnameMock.rb +42 -0
  1083. package/scripts/cocoapods/__tests__/test_utils/PodMock.rb +144 -0
  1084. package/scripts/cocoapods/__tests__/test_utils/SpecMock.rb +30 -0
  1085. package/scripts/cocoapods/__tests__/test_utils/SysctlCheckerMock.rb +21 -0
  1086. package/scripts/cocoapods/__tests__/test_utils/TargetDefinitionMock.rb +12 -0
  1087. package/scripts/cocoapods/__tests__/test_utils/podSpy.rb +38 -0
  1088. package/scripts/cocoapods/__tests__/test_utils/systemUtils.rb +14 -0
  1089. package/scripts/cocoapods/__tests__/utils-test.rb +780 -0
  1090. package/scripts/cocoapods/codegen.rb +23 -19
  1091. package/scripts/cocoapods/codegen_utils.rb +73 -37
  1092. package/scripts/cocoapods/fabric.rb +2 -2
  1093. package/scripts/cocoapods/flipper.rb +1 -4
  1094. package/scripts/cocoapods/jsengine.rb +1 -46
  1095. package/scripts/cocoapods/local_podspec_patch.rb +6 -6
  1096. package/scripts/cocoapods/new_architecture.rb +32 -4
  1097. package/scripts/cocoapods/utils.rb +253 -19
  1098. package/scripts/codegen/__test_fixtures__/fixtures.js +132 -0
  1099. package/scripts/codegen/__tests__/generate-artifacts-executor-test.js +500 -0
  1100. package/scripts/codegen/__tests__/generate-specs-cli-executor-test.js +88 -0
  1101. package/scripts/codegen/codegen-utils.js +2 -2
  1102. package/scripts/codegen/generate-artifacts-executor.js +45 -18
  1103. package/scripts/codegen/generate-legacy-interop-components.js +123 -0
  1104. package/scripts/find-node-for-xcode.sh +4 -1
  1105. package/scripts/generate-provider-cli.js +1 -1
  1106. package/scripts/hermes/prepare-hermes-for-build.js +1 -1
  1107. package/scripts/packager.sh +3 -3
  1108. package/scripts/react-native-xcode.sh +2 -3
  1109. package/scripts/react_native_pods.rb +42 -21
  1110. package/scripts/react_native_pods_utils/script_phases.rb +1 -1
  1111. package/scripts/react_native_pods_utils/script_phases.sh +4 -4
  1112. package/scripts/xcode/with-environment.sh +6 -6
  1113. package/sdks/.hermesversion +1 -1
  1114. package/sdks/hermes-engine/hermes-engine.podspec +21 -50
  1115. package/sdks/hermes-engine/hermes-utils.rb +122 -4
  1116. package/sdks/hermes-engine/utils/build-apple-framework.sh +12 -2
  1117. package/sdks/hermes-engine/utils/build-hermes-xcode.sh +7 -0
  1118. package/sdks/hermes-engine/utils/build-hermesc-xcode.sh +9 -2
  1119. package/sdks/hermes-engine/utils/copy-hermes-xcode.sh +1 -16
  1120. package/sdks/hermes-engine/utils/create-dummy-hermes-xcframework.sh +30 -0
  1121. package/sdks/hermesc/linux64-bin/hermesc +0 -0
  1122. package/sdks/hermesc/osx-bin/hermesc +0 -0
  1123. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  1124. package/settings.gradle.kts +12 -15
  1125. package/template/Gemfile +2 -2
  1126. package/template/__tests__/{App-test.tsx → App.test.tsx} +3 -0
  1127. package/template/_eslintrc.js +1 -1
  1128. package/template/_gitignore +3 -0
  1129. package/template/_watchmanconfig +1 -1
  1130. package/template/android/app/build.gradle +2 -47
  1131. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +1 -4
  1132. package/template/android/app/src/main/res/drawable/rn_edit_text_material.xml +1 -1
  1133. package/template/android/build.gradle +1 -1
  1134. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  1135. package/template/android/gradle/wrapper/gradle-wrapper.properties +2 -1
  1136. package/template/android/gradle.properties +1 -1
  1137. package/template/android/gradlew +14 -4
  1138. package/template/android/gradlew.bat +9 -6
  1139. package/template/android/settings.gradle +1 -1
  1140. package/template/app.json +1 -1
  1141. package/template/ios/HelloWorld/AppDelegate.mm +0 -10
  1142. package/template/ios/Podfile +8 -6
  1143. package/template/jest.config.js +3 -0
  1144. package/template/metro.config.js +7 -13
  1145. package/template/package.json +8 -7
  1146. package/types/index.d.ts +2 -6
  1147. package/types/modules/Codegen.d.ts +4 -4
  1148. package/types/modules/globals.d.ts +27 -25
  1149. package/types/public/DeprecatedPropertiesAlias.d.ts +0 -20
  1150. package/types/public/ReactNativeRenderer.d.ts +2 -7
  1151. package/types/tslint.json +2 -1
  1152. package/CHANGELOG.md +0 -4860
  1153. package/Libraries/.npmignore +0 -1
  1154. package/Libraries/Animated/createAnimatedComponentInjection.js +0 -48
  1155. package/Libraries/Animated/createAnimatedComponent_EXPERIMENTAL.js +0 -48
  1156. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.flow.js +0 -208
  1157. package/Libraries/Components/ActivityIndicator/ActivityIndicator.flow.js +0 -58
  1158. package/Libraries/Components/DatePicker/DatePickerIOS.android.js +0 -47
  1159. package/Libraries/Components/DatePicker/DatePickerIOS.d.ts +0 -92
  1160. package/Libraries/Components/DatePicker/DatePickerIOS.flow.android.js +0 -14
  1161. package/Libraries/Components/DatePicker/DatePickerIOS.flow.ios.js +0 -113
  1162. package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +0 -242
  1163. package/Libraries/Components/DatePicker/RCTDatePickerNativeComponent.js +0 -60
  1164. package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +0 -26
  1165. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.android.js +0 -45
  1166. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.d.ts +0 -62
  1167. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.ios.js +0 -75
  1168. package/Libraries/Components/ProgressViewIOS/RCTProgressViewNativeComponent.js +0 -33
  1169. package/Libraries/Components/SafeAreaView/SafeAreaView.flow.js +0 -19
  1170. package/Libraries/Components/Slider/Slider.d.ts +0 -132
  1171. package/Libraries/Components/Slider/Slider.js +0 -282
  1172. package/Libraries/Components/Slider/SliderNativeComponent.js +0 -56
  1173. package/Libraries/Interaction/Batchinator.js +0 -76
  1174. package/Libraries/Interaction/BridgeSpyStallHandler.js +0 -63
  1175. package/Libraries/Interaction/InteractionStallDebugger.js +0 -23
  1176. package/Libraries/Interaction/PanResponder.flow.js +0 -257
  1177. package/Libraries/Lists/CellRenderMask.js +0 -155
  1178. package/Libraries/Lists/ChildListCollection.js +0 -72
  1179. package/Libraries/Lists/StateSafePureComponent.js +0 -85
  1180. package/Libraries/Lists/VirtualizedList.d.ts +0 -347
  1181. package/Libraries/Lists/VirtualizedListCellRenderer.js +0 -259
  1182. package/Libraries/Lists/VirtualizedListProps.js +0 -279
  1183. package/Libraries/Performance/PureComponentDebug.js +0 -74
  1184. package/Libraries/Reliability/UserFlow.js +0 -158
  1185. package/Libraries/Renderer/implementations/ReactNativeRenderer.d.ts +0 -149
  1186. package/Libraries/Renderer/shims/ReactNativeTypes.d.ts +0 -141
  1187. package/Libraries/Utilities/MatrixMath.js +0 -748
  1188. package/Libraries/Utilities/PixelRatio.js.flow +0 -21
  1189. package/Libraries/Utilities/buildStyleInterpolator.js +0 -209
  1190. package/Libraries/Utilities/clamp.js +0 -23
  1191. package/Libraries/Utilities/deprecatedPropType.js +0 -36
  1192. package/Libraries/Utilities/groupByEveryN.js +0 -51
  1193. package/Libraries/Utilities/mergeIntoFast.js +0 -26
  1194. package/Libraries/Utilities/setAndForwardRef.js +0 -71
  1195. package/Libraries/Utilities/truncate.js +0 -51
  1196. package/Libraries/WebSocket/RCTSRWebSocket.h +0 -136
  1197. package/Libraries/WebSocket/RCTSRWebSocket.m +0 -1746
  1198. package/React/Base/RCTWeakProxy.m +0 -30
  1199. package/React/Fabric/Mounting/ComponentViews/Slider/RCTSliderComponentView.h +0 -21
  1200. package/React/Fabric/Mounting/ComponentViews/Slider/RCTSliderComponentView.mm +0 -352
  1201. package/React/Views/RCTDatePicker.m +0 -70
  1202. package/React/Views/RCTDatePickerManager.h +0 -19
  1203. package/React/Views/RCTDatePickerManager.m +0 -105
  1204. package/React/Views/RCTProgressViewManager.h +0 -12
  1205. package/React/Views/RCTProgressViewManager.m +0 -45
  1206. package/React/Views/RCTSlider.h +0 -26
  1207. package/React/Views/RCTSlider.m +0 -104
  1208. package/React/Views/RCTSliderManager.m +0 -91
  1209. package/ReactAndroid/.npmignore +0 -10
  1210. package/ReactAndroid/Android-prebuilt.mk +0 -211
  1211. package/ReactAndroid/external-artifacts/.npmignore +0 -3
  1212. package/ReactAndroid/hermes-engine/.npmignore +0 -3
  1213. package/ReactAndroid/src/main/AndroidManifest.xml +0 -5
  1214. package/ReactAndroid/src/main/java/com/facebook/react/fabric/CppViewMutationsWrapper.java +0 -47
  1215. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlider.java +0 -116
  1216. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java +0 -54
  1217. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java +0 -336
  1218. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java +0 -54
  1219. package/ReactAndroid/src/main/jni/react/cxxcomponents/BUCK +0 -44
  1220. package/ReactAndroid/src/main/jni/react/cxxcomponents/CMakeLists.txt +0 -22
  1221. package/ReactAndroid/src/main/jni/react/cxxcomponents/Component.h +0 -66
  1222. package/ReactAndroid/src/main/jni/react/cxxcomponents/ComponentManager.h +0 -26
  1223. package/ReactAndroid/src/main/jni/react/fabric/ComponentRegistryResolver.cpp +0 -51
  1224. package/ReactAndroid/src/main/jni/react/fabric/ComponentRegistryResolver.h +0 -47
  1225. package/ReactAndroid/src/main/jni/react/fabric/CppComponentRegistry.cpp +0 -73
  1226. package/ReactAndroid/src/main/jni/react/fabric/CppComponentRegistry.h +0 -64
  1227. package/ReactAndroid/src/main/jni/react/fabric/CppViewMutationsWrapper.cpp +0 -100
  1228. package/ReactAndroid/src/main/jni/react/fabric/CppViewMutationsWrapper.h +0 -39
  1229. package/ReactAndroid/src/main/jni/react/jni/NativeTime.cpp +0 -26
  1230. package/ReactCommon/react/renderer/components/slider/BUCK +0 -117
  1231. package/ReactCommon/react/renderer/components/slider/CMakeLists.txt +0 -45
  1232. package/ReactCommon/react/renderer/components/slider/SliderComponentDescriptor.h +0 -58
  1233. package/ReactCommon/react/renderer/components/slider/SliderShadowNode.cpp +0 -100
  1234. package/ReactCommon/react/renderer/components/slider/SliderShadowNode.h +0 -77
  1235. package/ReactCommon/react/renderer/components/slider/SliderState.cpp +0 -44
  1236. package/ReactCommon/react/renderer/components/slider/SliderState.h +0 -89
  1237. package/ReactCommon/react/renderer/components/slider/platform/android/react/renderer/components/slider/SliderMeasurementsManager.cpp +0 -72
  1238. package/ReactCommon/react/renderer/components/slider/platform/android/react/renderer/components/slider/SliderMeasurementsManager.h +0 -40
  1239. package/ReactCommon/react/renderer/components/slider/platform/ios/SliderMeasurementsManager.cpp +0 -23
  1240. package/ReactCommon/react/renderer/components/slider/platform/ios/SliderMeasurementsManager.h +0 -33
  1241. package/ReactCommon/react/renderer/components/slider/tests/SliderTest.cpp +0 -14
  1242. package/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.h +0 -80
  1243. package/ReactCommon/react/renderer/graphics/platform/ios/Color.cpp +0 -63
  1244. package/ReactCommon/yoga/yoga/internal/experiments-inl.h +0 -32
  1245. package/ReactCommon/yoga/yoga/internal/experiments.cpp +0 -38
  1246. package/flow/JSITimerInternalType.js +0 -30
  1247. package/react.gradle +0 -486
  1248. package/template/_node-version +0 -1
  1249. package/types/.npmignore +0 -1
  1250. /package/ReactCommon/react/nativemodule/core/platform/ios/{RCTBlockGuard.mm → ReactCommon/RCTBlockGuard.mm} +0 -0
  1251. /package/ReactCommon/react/nativemodule/samples/platform/ios/{RCTSampleTurboCxxModule.h → ReactCommon/RCTSampleTurboCxxModule.h} +0 -0
  1252. /package/ReactCommon/react/nativemodule/samples/platform/ios/{RCTSampleTurboCxxModule.mm → ReactCommon/RCTSampleTurboCxxModule.mm} +0 -0
  1253. /package/ReactCommon/react/nativemodule/samples/platform/ios/{RCTSampleTurboModule.h → ReactCommon/RCTSampleTurboModule.h} +0 -0
  1254. /package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputComponentDescriptor.h → react/renderer/components/iostextinput/TextInputComponentDescriptor.h} +0 -0
  1255. /package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputProps.h → react/renderer/components/iostextinput/TextInputProps.h} +0 -0
  1256. /package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputShadowNode.h → react/renderer/components/iostextinput/TextInputShadowNode.h} +0 -0
  1257. /package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputState.cpp → react/renderer/components/iostextinput/TextInputState.cpp} +0 -0
  1258. /package/ReactCommon/react/renderer/components/textinput/iostextinput/{TextInputState.h → react/renderer/components/iostextinput/TextInputState.h} +0 -0
  1259. /package/ReactCommon/react/renderer/components/textinput/iostextinput/{conversions.h → react/renderer/components/iostextinput/conversions.h} +0 -0
  1260. /package/ReactCommon/react/renderer/components/textinput/iostextinput/{primitives.h → react/renderer/components/iostextinput/primitives.h} +0 -0
  1261. /package/ReactCommon/react/renderer/graphics/platform/ios/{Float.h → react/renderer/graphics/Float.h} +0 -0
  1262. /package/ReactCommon/react/renderer/graphics/platform/ios/{PlatformColorParser.h → react/renderer/graphics/PlatformColorParser.h} +0 -0
  1263. /package/ReactCommon/react/renderer/graphics/platform/ios/{RCTPlatformColorUtils.h → react/renderer/graphics/RCTPlatformColorUtils.h} +0 -0
  1264. /package/ReactCommon/react/renderer/imagemanager/platform/ios/{RCTImageManager.mm → react/renderer/imagemanager/RCTImageManager.mm} +0 -0
  1265. /package/ReactCommon/react/renderer/imagemanager/platform/ios/{RCTImageManagerProtocol.h → react/renderer/imagemanager/RCTImageManagerProtocol.h} +0 -0
  1266. /package/ReactCommon/react/renderer/imagemanager/platform/ios/{RCTImagePrimitivesConversions.h → react/renderer/imagemanager/RCTImagePrimitivesConversions.h} +0 -0
  1267. /package/ReactCommon/react/renderer/imagemanager/platform/ios/{RCTSyncImageManager.mm → react/renderer/imagemanager/RCTSyncImageManager.mm} +0 -0
  1268. /package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{NSTextStorage+FontScaling.h → react/renderer/textlayoutmanager/NSTextStorage+FontScaling.h} +0 -0
  1269. /package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{RCTAttributedTextUtils.h → react/renderer/textlayoutmanager/RCTAttributedTextUtils.h} +0 -0
  1270. /package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{RCTAttributedTextUtils.mm → react/renderer/textlayoutmanager/RCTAttributedTextUtils.mm} +0 -0
  1271. /package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{RCTFontProperties.h → react/renderer/textlayoutmanager/RCTFontProperties.h} +0 -0
  1272. /package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{RCTFontUtils.h → react/renderer/textlayoutmanager/RCTFontUtils.h} +0 -0
  1273. /package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{RCTFontUtils.mm → react/renderer/textlayoutmanager/RCTFontUtils.mm} +0 -0
  1274. /package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/{RCTTextPrimitivesConversions.h → react/renderer/textlayoutmanager/RCTTextPrimitivesConversions.h} +0 -0
@@ -1,1746 +0,0 @@
1
- //
2
- // Copyright 2012 Square Inc.
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- //
16
-
17
- #import <React/RCTSRWebSocket.h>
18
-
19
- #import <Availability.h>
20
-
21
- #import <Security/SecRandom.h>
22
-
23
- #import <CommonCrypto/CommonDigest.h>
24
- #import <React/RCTAssert.h>
25
- #import <React/RCTLog.h>
26
-
27
- typedef NS_ENUM(NSInteger, RCTSROpCode) {
28
- RCTSROpCodeTextFrame = 0x1,
29
- RCTSROpCodeBinaryFrame = 0x2,
30
- // 3-7 reserved.
31
- RCTSROpCodeConnectionClose = 0x8,
32
- RCTSROpCodePing = 0x9,
33
- RCTSROpCodePong = 0xA,
34
- // B-F reserved.
35
- };
36
-
37
- typedef struct {
38
- BOOL fin;
39
- // BOOL rsv1;
40
- // BOOL rsv2;
41
- // BOOL rsv3;
42
- uint8_t opcode;
43
- BOOL masked;
44
- uint64_t payload_length;
45
- } frame_header;
46
-
47
- static NSString *const RCTSRWebSocketAppendToSecKeyString = @"258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
48
-
49
- //#define RCTSR_ENABLE_LOG
50
- #ifdef RCTSR_ENABLE_LOG
51
- #define RCTSRLog(format...) RCTLogInfo(format)
52
- #else
53
- #define RCTSRLog(...) \
54
- do { \
55
- } while (0)
56
- #endif
57
-
58
- // This is a hack, and probably not optimal
59
- static inline int32_t validate_dispatch_data_partial_string(NSData *data)
60
- {
61
- static const int maxCodepointSize = 3;
62
-
63
- for (int i = 0; i < maxCodepointSize; i++) {
64
- NSString *str = [[NSString alloc] initWithBytesNoCopy:(char *)data.bytes
65
- length:data.length - i
66
- encoding:NSUTF8StringEncoding
67
- freeWhenDone:NO];
68
- if (str) {
69
- return (int32_t)data.length - i;
70
- }
71
- }
72
-
73
- return -1;
74
- }
75
-
76
- @interface NSData (RCTSRWebSocket)
77
-
78
- @property (nonatomic, readonly, copy) NSString *stringBySHA1ThenBase64Encoding;
79
-
80
- @end
81
-
82
- @interface NSString (RCTSRWebSocket)
83
-
84
- @property (nonatomic, readonly, copy) NSString *stringBySHA1ThenBase64Encoding;
85
-
86
- @end
87
-
88
- @interface NSURL (RCTSRWebSocket)
89
-
90
- // The origin isn't really applicable for a native application.
91
- // So instead, just map ws -> http and wss -> https.
92
- @property (nonatomic, readonly, copy) NSString *RCTSR_origin;
93
-
94
- @end
95
-
96
- @interface _RCTSRRunLoopThread : NSThread
97
-
98
- @property (nonatomic, readonly) NSRunLoop *runLoop;
99
-
100
- @end
101
-
102
- static NSString *newSHA1String(const char *bytes, size_t length)
103
- {
104
- uint8_t md[CC_SHA1_DIGEST_LENGTH];
105
-
106
- assert(length >= 0);
107
- assert(length <= UINT32_MAX);
108
- CC_SHA1(bytes, (CC_LONG)length, md);
109
-
110
- NSData *data = [NSData dataWithBytes:md length:CC_SHA1_DIGEST_LENGTH];
111
- return [data base64EncodedStringWithOptions:0];
112
- }
113
-
114
- @implementation NSData (RCTSRWebSocket)
115
-
116
- - (NSString *)stringBySHA1ThenBase64Encoding
117
- {
118
- return newSHA1String(self.bytes, self.length);
119
- }
120
-
121
- @end
122
-
123
- @implementation NSString (RCTSRWebSocket)
124
-
125
- - (NSString *)stringBySHA1ThenBase64Encoding
126
- {
127
- return newSHA1String(self.UTF8String, self.length);
128
- }
129
-
130
- @end
131
-
132
- NSString *const RCTSRWebSocketErrorDomain = @"RCTSRWebSocketErrorDomain";
133
- NSString *const RCTSRHTTPResponseErrorKey = @"HTTPResponseStatusCode";
134
-
135
- // Returns number of bytes consumed. Returning 0 means you didn't match.
136
- // Sends bytes to callback handler;
137
- typedef size_t (^stream_scanner)(NSData *collected_data);
138
-
139
- typedef void (^data_callback)(RCTSRWebSocket *webSocket, NSData *data);
140
-
141
- @interface RCTSRIOConsumer : NSObject
142
-
143
- @property (nonatomic, copy, readonly) stream_scanner consumer;
144
- @property (nonatomic, copy, readonly) data_callback handler;
145
- @property (nonatomic, assign) size_t bytesNeeded;
146
- @property (nonatomic, assign, readonly) BOOL readToCurrentFrame;
147
- @property (nonatomic, assign, readonly) BOOL unmaskBytes;
148
-
149
- @end
150
-
151
- // This class is not thread-safe, and is expected to always be run on the same queue.
152
- @interface RCTSRIOConsumerPool : NSObject
153
-
154
- - (instancetype)initWithBufferCapacity:(NSUInteger)poolSize NS_DESIGNATED_INITIALIZER;
155
-
156
- - (RCTSRIOConsumer *)consumerWithScanner:(stream_scanner)scanner
157
- handler:(data_callback)handler
158
- bytesNeeded:(size_t)bytesNeeded
159
- readToCurrentFrame:(BOOL)readToCurrentFrame
160
- unmaskBytes:(BOOL)unmaskBytes;
161
- - (void)returnConsumer:(RCTSRIOConsumer *)consumer;
162
-
163
- @end
164
-
165
- @interface RCTSRWebSocket () <NSStreamDelegate>
166
-
167
- @property (nonatomic, assign) RCTSRReadyState readyState;
168
-
169
- @property (nonatomic, strong) NSOperationQueue *delegateOperationQueue;
170
- @property (nonatomic, strong) dispatch_queue_t delegateDispatchQueue;
171
-
172
- @end
173
-
174
- @implementation RCTSRWebSocket {
175
- NSInteger _webSocketVersion;
176
-
177
- NSOperationQueue *_delegateOperationQueue;
178
- dispatch_queue_t _delegateDispatchQueue;
179
-
180
- dispatch_queue_t _workQueue;
181
- NSMutableArray<RCTSRIOConsumer *> *_consumers;
182
-
183
- NSInputStream *_inputStream;
184
- NSOutputStream *_outputStream;
185
-
186
- NSMutableData *_readBuffer;
187
- NSUInteger _readBufferOffset;
188
-
189
- NSMutableData *_outputBuffer;
190
- NSUInteger _outputBufferOffset;
191
-
192
- uint8_t _currentFrameOpcode;
193
- size_t _currentFrameCount;
194
- size_t _readOpCount;
195
- uint32_t _currentStringScanPosition;
196
- NSMutableData *_currentFrameData;
197
-
198
- NSString *_closeReason;
199
-
200
- NSString *_secKey;
201
-
202
- BOOL _pinnedCertFound;
203
-
204
- uint8_t _currentReadMaskKey[4];
205
- size_t _currentReadMaskOffset;
206
-
207
- BOOL _consumerStopped;
208
-
209
- BOOL _closeWhenFinishedWriting;
210
- BOOL _failed;
211
-
212
- BOOL _secure;
213
- NSURLRequest *_urlRequest;
214
-
215
- CFHTTPMessageRef _receivedHTTPHeaders;
216
-
217
- BOOL _sentClose;
218
- BOOL _didFail;
219
- int _closeCode;
220
-
221
- BOOL _isPumping;
222
-
223
- BOOL _cleanupScheduled;
224
-
225
- NSMutableSet<NSArray *> *_scheduledRunloops;
226
-
227
- // We use this to retain ourselves.
228
- __strong RCTSRWebSocket *_selfRetain;
229
-
230
- NSArray<NSString *> *_requestedProtocols;
231
- RCTSRIOConsumerPool *_consumerPool;
232
- }
233
-
234
- - (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NSString *> *)protocols
235
- {
236
- RCTAssertParam(request);
237
-
238
- if ((self = [super init])) {
239
- _url = request.URL;
240
- _urlRequest = request;
241
-
242
- _requestedProtocols = [protocols copy];
243
-
244
- [self _RCTSR_commonInit];
245
- }
246
- return self;
247
- }
248
-
249
- RCT_NOT_IMPLEMENTED(-(instancetype)init)
250
-
251
- - (instancetype)initWithURLRequest:(NSURLRequest *)request
252
- {
253
- return [self initWithURLRequest:request protocols:nil];
254
- }
255
-
256
- - (instancetype)initWithURL:(NSURL *)URL
257
- {
258
- return [self initWithURL:URL protocols:nil];
259
- }
260
-
261
- - (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray<NSString *> *)protocols
262
- {
263
- NSMutableURLRequest *request;
264
- if (URL) {
265
- // Build a mutable request so we can fill the cookie header.
266
- request = [NSMutableURLRequest requestWithURL:URL];
267
-
268
- // We load cookies from sharedHTTPCookieStorage (shared with XHR and
269
- // fetch). To get HTTPS-only cookies for wss URLs, replace wss with https
270
- // in the URL.
271
- NSURLComponents *components = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:true];
272
- if ([components.scheme isEqualToString:@"wss"]) {
273
- components.scheme = @"https";
274
- }
275
-
276
- // Load and set the cookie header.
277
- NSArray<NSHTTPCookie *> *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:components.URL];
278
- [request setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:cookies]];
279
- }
280
- return [self initWithURLRequest:request protocols:protocols];
281
- }
282
-
283
- - (void)_RCTSR_commonInit
284
- {
285
- NSString *scheme = _url.scheme.lowercaseString;
286
- assert(
287
- [scheme isEqualToString:@"ws"] || [scheme isEqualToString:@"http"] || [scheme isEqualToString:@"wss"] ||
288
- [scheme isEqualToString:@"https"]);
289
-
290
- if ([scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]) {
291
- _secure = YES;
292
- }
293
-
294
- _readyState = RCTSR_CONNECTING;
295
- _consumerStopped = YES;
296
- _webSocketVersion = 13;
297
-
298
- _workQueue = dispatch_queue_create("com.facebook.react.SRWebSocket", DISPATCH_QUEUE_SERIAL);
299
-
300
- // Going to set a specific on the queue so we can validate we're on the work queue
301
- dispatch_queue_set_specific(_workQueue, (__bridge void *)self, (__bridge void *)_workQueue, NULL);
302
-
303
- _delegateDispatchQueue = dispatch_get_main_queue();
304
-
305
- _readBuffer = [NSMutableData new];
306
- _outputBuffer = [NSMutableData new];
307
-
308
- _currentFrameData = [NSMutableData new];
309
-
310
- _consumers = [NSMutableArray new];
311
-
312
- _consumerPool = [RCTSRIOConsumerPool new];
313
-
314
- _scheduledRunloops = [NSMutableSet new];
315
-
316
- [self _initializeStreams];
317
-
318
- // default handlers
319
- }
320
-
321
- - (void)assertOnWorkQueue
322
- {
323
- assert(dispatch_get_specific((__bridge void *)self) == (__bridge void *)_workQueue);
324
- }
325
-
326
- - (void)dealloc
327
- {
328
- _inputStream.delegate = nil;
329
- _outputStream.delegate = nil;
330
-
331
- [_inputStream close];
332
- [_outputStream close];
333
-
334
- if (_receivedHTTPHeaders) {
335
- CFRelease(_receivedHTTPHeaders);
336
- _receivedHTTPHeaders = NULL;
337
- }
338
- }
339
-
340
- #ifndef NDEBUG
341
-
342
- - (void)setReadyState:(RCTSRReadyState)aReadyState
343
- {
344
- [self willChangeValueForKey:@"readyState"];
345
- assert(aReadyState > _readyState);
346
- _readyState = aReadyState;
347
- [self didChangeValueForKey:@"readyState"];
348
- }
349
-
350
- #endif
351
-
352
- - (void)open
353
- {
354
- assert(_url);
355
- RCTAssert(_readyState == RCTSR_CONNECTING, @"Cannot call -(void)open on RCTSRWebSocket more than once");
356
-
357
- _selfRetain = self;
358
-
359
- [self _connect];
360
- }
361
-
362
- // Calls block on delegate queue
363
- - (void)_performDelegateBlock:(dispatch_block_t)block
364
- {
365
- if (_delegateOperationQueue) {
366
- [_delegateOperationQueue addOperationWithBlock:block];
367
- } else {
368
- assert(_delegateDispatchQueue);
369
- dispatch_async(_delegateDispatchQueue, block);
370
- }
371
- }
372
-
373
- - (void)setDelegateDispatchQueue:(dispatch_queue_t)queue
374
- {
375
- _delegateDispatchQueue = queue;
376
- }
377
-
378
- - (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage
379
- {
380
- NSString *acceptHeader =
381
- CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(httpMessage, CFSTR("Sec-WebSocket-Accept")));
382
-
383
- if (acceptHeader == nil) {
384
- return NO;
385
- }
386
-
387
- NSString *concattedString = [_secKey stringByAppendingString:RCTSRWebSocketAppendToSecKeyString];
388
- NSString *expectedAccept = [concattedString stringBySHA1ThenBase64Encoding];
389
-
390
- return [acceptHeader isEqualToString:expectedAccept];
391
- }
392
-
393
- - (void)_HTTPHeadersDidFinish
394
- {
395
- NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(_receivedHTTPHeaders);
396
-
397
- if (responseCode >= 400) {
398
- RCTSRLog(@"Request failed with response code %ld", responseCode);
399
- [self _failWithError:[NSError errorWithDomain:RCTSRWebSocketErrorDomain
400
- code:2132
401
- userInfo:@{
402
- NSLocalizedDescriptionKey :
403
- [NSString stringWithFormat:@"received bad response code from server %ld",
404
- (long)responseCode],
405
- RCTSRHTTPResponseErrorKey : @(responseCode)
406
- }]];
407
- return;
408
- }
409
-
410
- if (![self _checkHandshake:_receivedHTTPHeaders]) {
411
- [self _failWithError:[NSError errorWithDomain:RCTSRWebSocketErrorDomain
412
- code:2133
413
- userInfo:@{
414
- NSLocalizedDescriptionKey :
415
- [NSString stringWithFormat:@"Invalid Sec-WebSocket-Accept response"]
416
- }]];
417
- return;
418
- }
419
-
420
- NSString *negotiatedProtocol =
421
- CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(_receivedHTTPHeaders, CFSTR("Sec-WebSocket-Protocol")));
422
- if (negotiatedProtocol) {
423
- // Make sure we requested the protocol
424
- if ([_requestedProtocols indexOfObject:negotiatedProtocol] == NSNotFound) {
425
- [self _failWithError:
426
- [NSError errorWithDomain:RCTSRWebSocketErrorDomain
427
- code:2133
428
- userInfo:@{
429
- NSLocalizedDescriptionKey : [NSString
430
- stringWithFormat:@"Server specified Sec-WebSocket-Protocol that wasn't requested"]
431
- }]];
432
- return;
433
- }
434
-
435
- _protocol = negotiatedProtocol;
436
- }
437
-
438
- self.readyState = RCTSR_OPEN;
439
-
440
- if (!_didFail) {
441
- [self _readFrameNew];
442
- }
443
-
444
- [self _performDelegateBlock:^{
445
- if ([self.delegate respondsToSelector:@selector(webSocketDidOpen:)]) {
446
- [self.delegate webSocketDidOpen:self];
447
- };
448
- }];
449
- }
450
-
451
- - (void)_readHTTPHeader
452
- {
453
- if (_receivedHTTPHeaders == NULL) {
454
- _receivedHTTPHeaders = CFHTTPMessageCreateEmpty(NULL, NO);
455
- }
456
-
457
- [self _readUntilHeaderCompleteWithCallback:^(RCTSRWebSocket *socket, NSData *data) {
458
- CFHTTPMessageAppendBytes(self->_receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length);
459
-
460
- if (CFHTTPMessageIsHeaderComplete(self->_receivedHTTPHeaders)) {
461
- RCTSRLog(
462
- @"Finished reading headers %@", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(_receivedHTTPHeaders)));
463
- [socket _HTTPHeadersDidFinish];
464
- } else {
465
- [socket _readHTTPHeader];
466
- }
467
- }];
468
- }
469
-
470
- - (void)didConnect
471
- {
472
- RCTSRLog(@"Connected");
473
- CFHTTPMessageRef request = CFHTTPMessageCreateRequest(NULL, CFSTR("GET"), (__bridge CFURLRef)_url, kCFHTTPVersion1_1);
474
-
475
- // Set host first so it defaults
476
- CFHTTPMessageSetHeaderFieldValue(
477
- request,
478
- CFSTR("Host"),
479
- (__bridge CFStringRef)(_url.port ? [NSString stringWithFormat:@"%@:%@", _url.host, _url.port] : _url.host));
480
-
481
- NSMutableData *keyBytes = [[NSMutableData alloc] initWithLength:16];
482
- int result __unused = SecRandomCopyBytes(kSecRandomDefault, keyBytes.length, keyBytes.mutableBytes);
483
- assert(result == 0);
484
- _secKey = [keyBytes base64EncodedStringWithOptions:0];
485
- assert([_secKey length] == 24);
486
-
487
- CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Upgrade"), CFSTR("websocket"));
488
- CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Connection"), CFSTR("Upgrade"));
489
- CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Key"), (__bridge CFStringRef)_secKey);
490
- CFHTTPMessageSetHeaderFieldValue(
491
- request,
492
- CFSTR("Sec-WebSocket-Version"),
493
- (__bridge CFStringRef)[NSString stringWithFormat:@"%ld", (long)_webSocketVersion]);
494
-
495
- CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Origin"), (__bridge CFStringRef)_url.RCTSR_origin);
496
-
497
- if (_requestedProtocols && _requestedProtocols.count > 0) {
498
- CFHTTPMessageSetHeaderFieldValue(
499
- request,
500
- CFSTR("Sec-WebSocket-Protocol"),
501
- (__bridge CFStringRef)[_requestedProtocols componentsJoinedByString:@", "]);
502
- }
503
-
504
- [_urlRequest.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
505
- CFHTTPMessageSetHeaderFieldValue(request, (__bridge CFStringRef)key, (__bridge CFStringRef)obj);
506
- }];
507
-
508
- NSData *message = CFBridgingRelease(CFHTTPMessageCopySerializedMessage(request));
509
-
510
- CFRelease(request);
511
-
512
- [self _writeData:message];
513
- [self _readHTTPHeader];
514
- }
515
-
516
- - (void)_initializeStreams
517
- {
518
- assert(_url.port.unsignedIntValue <= UINT32_MAX);
519
- uint32_t port = _url.port.unsignedIntValue;
520
- if (port == 0) {
521
- if (!_secure) {
522
- port = 80;
523
- } else {
524
- port = 443;
525
- }
526
- }
527
- NSString *host = _url.host;
528
-
529
- CFReadStreamRef readStream = NULL;
530
- CFWriteStreamRef writeStream = NULL;
531
-
532
- CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream);
533
-
534
- _outputStream = CFBridgingRelease(writeStream);
535
- _inputStream = CFBridgingRelease(readStream);
536
-
537
- if (_secure) {
538
- NSMutableDictionary<NSString *, id> *SSLOptions = [NSMutableDictionary new];
539
-
540
- [_outputStream setProperty:(__bridge id)kCFStreamSocketSecurityLevelNegotiatedSSL
541
- forKey:(__bridge id)kCFStreamPropertySocketSecurityLevel];
542
-
543
- // If we're using pinned certs, don't validate the certificate chain
544
- if (_urlRequest.RCTSR_SSLPinnedCertificates.count) {
545
- [SSLOptions setValue:@NO forKey:(__bridge id)kCFStreamSSLValidatesCertificateChain];
546
- }
547
-
548
- #if DEBUG
549
- [SSLOptions setValue:@NO forKey:(__bridge id)kCFStreamSSLValidatesCertificateChain];
550
- RCTLogInfo(@"SocketRocket: In debug mode. Allowing connection to any root cert");
551
- #endif
552
-
553
- [_outputStream setProperty:SSLOptions forKey:(__bridge id)kCFStreamPropertySSLSettings];
554
- }
555
-
556
- _inputStream.delegate = self;
557
- _outputStream.delegate = self;
558
- }
559
-
560
- - (void)_connect
561
- {
562
- if (!_scheduledRunloops.count) {
563
- [self scheduleInRunLoop:[NSRunLoop RCTSR_networkRunLoop] forMode:NSDefaultRunLoopMode];
564
- }
565
-
566
- [_outputStream open];
567
- [_inputStream open];
568
- }
569
-
570
- - (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode
571
- {
572
- [_outputStream scheduleInRunLoop:aRunLoop forMode:mode];
573
- [_inputStream scheduleInRunLoop:aRunLoop forMode:mode];
574
-
575
- [_scheduledRunloops addObject:@[ aRunLoop, mode ]];
576
- }
577
-
578
- - (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode
579
- {
580
- [_outputStream removeFromRunLoop:aRunLoop forMode:mode];
581
- [_inputStream removeFromRunLoop:aRunLoop forMode:mode];
582
-
583
- [_scheduledRunloops removeObject:@[ aRunLoop, mode ]];
584
- }
585
-
586
- - (void)close
587
- {
588
- [self closeWithCode:RCTSRStatusCodeNormal reason:nil];
589
- }
590
-
591
- - (void)closeWithCode:(NSInteger)code reason:(NSString *)reason
592
- {
593
- assert(code);
594
- dispatch_async(_workQueue, ^{
595
- if (self.readyState == RCTSR_CLOSING || self.readyState == RCTSR_CLOSED) {
596
- return;
597
- }
598
-
599
- BOOL wasConnecting = self.readyState == RCTSR_CONNECTING;
600
-
601
- self.readyState = RCTSR_CLOSING;
602
-
603
- RCTSRLog(@"Closing with code %ld reason %@", code, reason);
604
-
605
- if (wasConnecting) {
606
- [self _disconnect];
607
- return;
608
- }
609
-
610
- size_t maxMsgSize = [reason maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding];
611
- NSMutableData *mutablePayload = [[NSMutableData alloc] initWithLength:sizeof(uint16_t) + maxMsgSize];
612
- NSData *payload = mutablePayload;
613
-
614
- ((uint16_t *)mutablePayload.mutableBytes)[0] = NSSwapBigShortToHost(code);
615
-
616
- if (reason) {
617
- NSRange remainingRange = {0};
618
-
619
- NSUInteger usedLength = 0;
620
-
621
- BOOL success __unused = [reason getBytes:(char *)mutablePayload.mutableBytes + sizeof(uint16_t)
622
- maxLength:payload.length - sizeof(uint16_t)
623
- usedLength:&usedLength
624
- encoding:NSUTF8StringEncoding
625
- options:NSStringEncodingConversionExternalRepresentation
626
- range:NSMakeRange(0, reason.length)
627
- remainingRange:&remainingRange];
628
-
629
- assert(success);
630
- assert(remainingRange.length == 0);
631
-
632
- if (usedLength != maxMsgSize) {
633
- payload = [payload subdataWithRange:NSMakeRange(0, usedLength + sizeof(uint16_t))];
634
- }
635
- }
636
-
637
- [self _sendFrameWithOpcode:RCTSROpCodeConnectionClose data:payload];
638
- });
639
- }
640
-
641
- - (void)_closeWithProtocolError:(NSString *)message
642
- {
643
- // Need to shunt this on the _callbackQueue first to see if they received any messages
644
- [self _performDelegateBlock:^{
645
- [self closeWithCode:RCTSRStatusCodeProtocolError reason:message];
646
- dispatch_async(self->_workQueue, ^{
647
- [self _disconnect];
648
- });
649
- }];
650
- }
651
-
652
- - (void)_failWithError:(NSError *)error
653
- {
654
- dispatch_async(_workQueue, ^{
655
- if (self.readyState != RCTSR_CLOSED) {
656
- self->_failed = YES;
657
- [self _performDelegateBlock:^{
658
- if ([self.delegate respondsToSelector:@selector(webSocket:didFailWithError:)]) {
659
- [self.delegate webSocket:self didFailWithError:error];
660
- }
661
- }];
662
-
663
- self.readyState = RCTSR_CLOSED;
664
-
665
- RCTSRLog(@"Failing with error %@", error.localizedDescription);
666
-
667
- [self _disconnect];
668
- [self _scheduleCleanup];
669
- }
670
- });
671
- }
672
-
673
- - (void)_writeData:(NSData *)data
674
- {
675
- [self assertOnWorkQueue];
676
-
677
- if (_closeWhenFinishedWriting) {
678
- return;
679
- }
680
- [_outputBuffer appendData:data];
681
- [self _pumpWriting];
682
- }
683
-
684
- - (void)send:(id)data
685
- {
686
- RCTAssert(self.readyState != RCTSR_CONNECTING, @"Invalid State: Cannot call send: until connection is open");
687
- if (nil == data) {
688
- return;
689
- }
690
- // TODO: maybe not copy this for performance
691
- data = [data copy];
692
- dispatch_async(_workQueue, ^{
693
- if ([data isKindOfClass:[NSString class]]) {
694
- [self _sendFrameWithOpcode:RCTSROpCodeTextFrame data:[(NSString *)data dataUsingEncoding:NSUTF8StringEncoding]];
695
- } else if ([data isKindOfClass:[NSData class]]) {
696
- [self _sendFrameWithOpcode:RCTSROpCodeBinaryFrame data:data];
697
- } else {
698
- assert(NO);
699
- }
700
- });
701
- }
702
-
703
- - (void)sendPing:(NSData *)data
704
- {
705
- RCTAssert(self.readyState == RCTSR_OPEN, @"Invalid State: Cannot call send: until connection is open");
706
- // TODO: maybe not copy this for performance
707
- data = [data copy] ?: [NSData data]; // It's okay for a ping to be empty
708
- dispatch_async(_workQueue, ^{
709
- [self _sendFrameWithOpcode:RCTSROpCodePing data:data];
710
- });
711
- }
712
-
713
- - (void)handlePing:(NSData *)pingData
714
- {
715
- // Need to pingpong this off _callbackQueue first to make sure messages happen in order
716
- [self _performDelegateBlock:^{
717
- dispatch_async(self->_workQueue, ^{
718
- [self _sendFrameWithOpcode:RCTSROpCodePong data:pingData];
719
- });
720
- }];
721
- }
722
-
723
- - (void)handlePong:(NSData *)pongData
724
- {
725
- RCTSRLog(@"Received pong");
726
- [self _performDelegateBlock:^{
727
- if ([self.delegate respondsToSelector:@selector(webSocket:didReceivePong:)]) {
728
- [self.delegate webSocket:self didReceivePong:pongData];
729
- }
730
- }];
731
- }
732
-
733
- - (void)_handleMessage:(id)message
734
- {
735
- RCTSRLog(@"Received message");
736
- [self _performDelegateBlock:^{
737
- [self.delegate webSocket:self didReceiveMessage:message];
738
- }];
739
- }
740
-
741
- static inline BOOL closeCodeIsValid(int closeCode)
742
- {
743
- if (closeCode < 1000) {
744
- return NO;
745
- }
746
-
747
- if (closeCode >= 1000 && closeCode <= 1011) {
748
- if (closeCode == 1004 || closeCode == 1005 || closeCode == 1006) {
749
- return NO;
750
- }
751
- return YES;
752
- }
753
-
754
- if (closeCode >= 3000 && closeCode <= 3999) {
755
- return YES;
756
- }
757
-
758
- if (closeCode >= 4000 && closeCode <= 4999) {
759
- return YES;
760
- }
761
-
762
- return NO;
763
- }
764
-
765
- // Note from RFC:
766
- //
767
- // If there is a body, the first two
768
- // bytes of the body MUST be a 2-byte unsigned integer (in network byte
769
- // order) representing a status code with value /code/ defined in
770
- // Section 7.4. Following the 2-byte integer the body MAY contain UTF-8
771
- // encoded data with value /reason/, the interpretation of which is not
772
- // defined by this specification.
773
-
774
- - (void)handleCloseWithData:(NSData *)data
775
- {
776
- size_t dataSize = data.length;
777
- __block uint16_t closeCode = 0;
778
-
779
- RCTSRLog(@"Received close frame");
780
-
781
- if (dataSize == 1) {
782
- // TODO: handle error
783
- [self _closeWithProtocolError:@"Payload for close must be larger than 2 bytes"];
784
- return;
785
- } else if (dataSize >= 2) {
786
- [data getBytes:&closeCode length:sizeof(closeCode)];
787
- _closeCode = NSSwapBigShortToHost(closeCode);
788
- if (!closeCodeIsValid(_closeCode)) {
789
- [self _closeWithProtocolError:[NSString stringWithFormat:@"Cannot have close code of %d", _closeCode]];
790
- return;
791
- }
792
- if (dataSize > 2) {
793
- _closeReason = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(2, dataSize - 2)]
794
- encoding:NSUTF8StringEncoding];
795
- if (!_closeReason) {
796
- [self _closeWithProtocolError:@"Close reason MUST be valid UTF-8"];
797
- return;
798
- }
799
- }
800
- } else {
801
- _closeCode = RCTSRStatusNoStatusReceived;
802
- }
803
-
804
- [self assertOnWorkQueue];
805
-
806
- if (self.readyState == RCTSR_OPEN) {
807
- [self closeWithCode:1000 reason:nil];
808
- }
809
- dispatch_async(_workQueue, ^{
810
- [self _disconnect];
811
- });
812
- }
813
-
814
- - (void)_disconnect
815
- {
816
- [self assertOnWorkQueue];
817
- RCTSRLog(@"Trying to disconnect");
818
- _closeWhenFinishedWriting = YES;
819
- [self _pumpWriting];
820
- }
821
-
822
- - (void)_handleFrameWithData:(NSData *)frameData opCode:(NSInteger)opcode
823
- {
824
- // copy frameData before handling,
825
- // to avoid concurrent updates to the value at the pointer
826
- frameData = [frameData copy];
827
-
828
- // Check that the current data is valid UTF8
829
-
830
- BOOL isControlFrame =
831
- (opcode == RCTSROpCodePing || opcode == RCTSROpCodePong || opcode == RCTSROpCodeConnectionClose);
832
- if (!isControlFrame) {
833
- [self _readFrameNew];
834
- } else {
835
- dispatch_async(_workQueue, ^{
836
- [self _readFrameContinue];
837
- });
838
- }
839
-
840
- switch (opcode) {
841
- case RCTSROpCodeTextFrame: {
842
- NSString *str = [[NSString alloc] initWithData:frameData encoding:NSUTF8StringEncoding];
843
- if (str == nil && frameData) {
844
- [self closeWithCode:RCTSRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"];
845
- dispatch_async(_workQueue, ^{
846
- [self _disconnect];
847
- });
848
-
849
- return;
850
- }
851
- [self _handleMessage:str];
852
- break;
853
- }
854
- case RCTSROpCodeBinaryFrame:
855
- [self _handleMessage:[frameData copy]];
856
- break;
857
- case RCTSROpCodeConnectionClose:
858
- [self handleCloseWithData:frameData];
859
- break;
860
- case RCTSROpCodePing:
861
- [self handlePing:frameData];
862
- break;
863
- case RCTSROpCodePong:
864
- [self handlePong:frameData];
865
- break;
866
- default:
867
- [self _closeWithProtocolError:[NSString stringWithFormat:@"Unknown opcode %ld", (long)opcode]];
868
- // TODO: Handle invalid opcode
869
- break;
870
- }
871
- }
872
-
873
- - (void)_handleFrameHeader:(frame_header)frame_header curData:(NSData *)curData
874
- {
875
- assert(frame_header.opcode != 0);
876
-
877
- if (self.readyState != RCTSR_OPEN) {
878
- return;
879
- }
880
-
881
- BOOL isControlFrame =
882
- (frame_header.opcode == RCTSROpCodePing || frame_header.opcode == RCTSROpCodePong ||
883
- frame_header.opcode == RCTSROpCodeConnectionClose);
884
-
885
- if (isControlFrame && !frame_header.fin) {
886
- [self _closeWithProtocolError:@"Fragmented control frames not allowed"];
887
- return;
888
- }
889
-
890
- if (isControlFrame && frame_header.payload_length >= 126) {
891
- [self _closeWithProtocolError:@"Control frames cannot have payloads larger than 126 bytes"];
892
- return;
893
- }
894
-
895
- if (!isControlFrame) {
896
- _currentFrameOpcode = frame_header.opcode;
897
- _currentFrameCount += 1;
898
- }
899
-
900
- if (frame_header.payload_length == 0) {
901
- if (isControlFrame) {
902
- [self _handleFrameWithData:curData opCode:frame_header.opcode];
903
- } else {
904
- if (frame_header.fin) {
905
- [self _handleFrameWithData:_currentFrameData opCode:frame_header.opcode];
906
- } else {
907
- // TODO: add assert that opcode is not a control;
908
- [self _readFrameContinue];
909
- }
910
- }
911
- } else {
912
- assert(frame_header.payload_length <= SIZE_T_MAX);
913
- [self _addConsumerWithDataLength:(size_t)frame_header.payload_length
914
- callback:^(RCTSRWebSocket *socket, NSData *newData) {
915
- if (isControlFrame) {
916
- [socket _handleFrameWithData:newData opCode:frame_header.opcode];
917
- } else {
918
- if (frame_header.fin) {
919
- [socket _handleFrameWithData:socket->_currentFrameData opCode:frame_header.opcode];
920
- } else {
921
- // TODO: add assert that opcode is not a control;
922
- [socket _readFrameContinue];
923
- }
924
- }
925
- }
926
- readToCurrentFrame:!isControlFrame
927
- unmaskBytes:frame_header.masked];
928
- }
929
- }
930
-
931
- /* From RFC:
932
-
933
- 0 1 2 3
934
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
935
- +-+-+-+-+-------+-+-------------+-------------------------------+
936
- |F|R|R|R| opcode|M| Payload len | Extended payload length |
937
- |I|S|S|S| (4) |A| (7) | (16/64) |
938
- |N|V|V|V| |S| | (if payload len==126/127) |
939
- | |1|2|3| |K| | |
940
- +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
941
- | Extended payload length continued, if payload len == 127 |
942
- + - - - - - - - - - - - - - - - +-------------------------------+
943
- | |Masking-key, if MASK set to 1 |
944
- +-------------------------------+-------------------------------+
945
- | Masking-key (continued) | Payload Data |
946
- +-------------------------------- - - - - - - - - - - - - - - - +
947
- : Payload Data continued ... :
948
- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
949
- | Payload Data continued ... |
950
- +---------------------------------------------------------------+
951
- */
952
-
953
- static const uint8_t RCTSRFinMask = 0x80;
954
- static const uint8_t RCTSROpCodeMask = 0x0F;
955
- static const uint8_t RCTSRRsvMask = 0x70;
956
- static const uint8_t RCTSRMaskMask = 0x80;
957
- static const uint8_t RCTSRPayloadLenMask = 0x7F;
958
-
959
- - (void)_readFrameContinue
960
- {
961
- assert((_currentFrameCount == 0 && _currentFrameOpcode == 0) || (_currentFrameCount > 0 && _currentFrameOpcode > 0));
962
-
963
- [self
964
- _addConsumerWithDataLength:2
965
- callback:^(RCTSRWebSocket *socket, NSData *data) {
966
- __block frame_header header = {0};
967
-
968
- const uint8_t *headerBuffer = data.bytes;
969
- assert(data.length >= 2);
970
-
971
- if (headerBuffer[0] & RCTSRRsvMask) {
972
- [socket _closeWithProtocolError:@"Server used RSV bits"];
973
- return;
974
- }
975
-
976
- uint8_t receivedOpcode = (RCTSROpCodeMask & headerBuffer[0]);
977
-
978
- BOOL isControlFrame =
979
- (receivedOpcode == RCTSROpCodePing || receivedOpcode == RCTSROpCodePong ||
980
- receivedOpcode == RCTSROpCodeConnectionClose);
981
-
982
- if (!isControlFrame && receivedOpcode != 0 && socket->_currentFrameCount > 0) {
983
- [socket _closeWithProtocolError:
984
- @"all data frames after the initial data frame must have opcode 0"];
985
- return;
986
- }
987
-
988
- if (receivedOpcode == 0 && socket->_currentFrameCount == 0) {
989
- [socket _closeWithProtocolError:@"cannot continue a message"];
990
- return;
991
- }
992
-
993
- header.opcode = receivedOpcode == 0 ? socket->_currentFrameOpcode : receivedOpcode;
994
-
995
- header.fin = !!(RCTSRFinMask & headerBuffer[0]);
996
-
997
- header.masked = !!(RCTSRMaskMask & headerBuffer[1]);
998
- header.payload_length = RCTSRPayloadLenMask & headerBuffer[1];
999
-
1000
- headerBuffer = NULL;
1001
-
1002
- if (header.masked) {
1003
- [socket _closeWithProtocolError:@"Client must receive unmasked data"];
1004
- }
1005
-
1006
- size_t extra_bytes_needed = header.masked ? sizeof(self->_currentReadMaskKey) : 0;
1007
-
1008
- if (header.payload_length == 126) {
1009
- extra_bytes_needed += sizeof(uint16_t);
1010
- } else if (header.payload_length == 127) {
1011
- extra_bytes_needed += sizeof(uint64_t);
1012
- }
1013
-
1014
- if (extra_bytes_needed == 0) {
1015
- [socket _handleFrameHeader:header curData:socket->_currentFrameData];
1016
- } else {
1017
- [socket
1018
- _addConsumerWithDataLength:extra_bytes_needed
1019
- callback:^(RCTSRWebSocket *_socket, NSData *_data) {
1020
- size_t mapped_size __unused = _data.length;
1021
- const void *mapped_buffer = _data.bytes;
1022
- size_t offset = 0;
1023
-
1024
- if (header.payload_length == 126) {
1025
- assert(mapped_size >= sizeof(uint16_t));
1026
- uint16_t newLen =
1027
- NSSwapBigShortToHost(*(uint16_t *)(mapped_buffer));
1028
- header.payload_length = newLen;
1029
- offset += sizeof(uint16_t);
1030
- } else if (header.payload_length == 127) {
1031
- assert(mapped_size >= sizeof(uint64_t));
1032
- header.payload_length =
1033
- NSSwapBigLongLongToHost(*(uint64_t *)(mapped_buffer));
1034
- offset += sizeof(uint64_t);
1035
- } else {
1036
- assert(header.payload_length < 126 && header.payload_length >= 0);
1037
- }
1038
-
1039
- if (header.masked) {
1040
- assert(
1041
- mapped_size >= sizeof(self->_currentReadMaskOffset) + offset);
1042
- memcpy(
1043
- _socket->_currentReadMaskKey,
1044
- ((uint8_t *)mapped_buffer) + offset,
1045
- sizeof(_socket->_currentReadMaskKey));
1046
- }
1047
-
1048
- [_socket _handleFrameHeader:header
1049
- curData:_socket->_currentFrameData];
1050
- }
1051
- readToCurrentFrame:NO
1052
- unmaskBytes:NO];
1053
- }
1054
- }
1055
- readToCurrentFrame:NO
1056
- unmaskBytes:NO];
1057
- }
1058
-
1059
- - (void)_readFrameNew
1060
- {
1061
- dispatch_async(_workQueue, ^{
1062
- self->_currentFrameData.length = 0;
1063
-
1064
- self->_currentFrameOpcode = 0;
1065
- self->_currentFrameCount = 0;
1066
- self->_readOpCount = 0;
1067
- self->_currentStringScanPosition = 0;
1068
-
1069
- [self _readFrameContinue];
1070
- });
1071
- }
1072
-
1073
- - (void)_pumpWriting
1074
- {
1075
- [self assertOnWorkQueue];
1076
-
1077
- NSUInteger dataLength = _outputBuffer.length;
1078
- if (dataLength - _outputBufferOffset > 0 && _outputStream.hasSpaceAvailable) {
1079
- NSInteger bytesWritten = [_outputStream write:_outputBuffer.bytes + _outputBufferOffset
1080
- maxLength:dataLength - _outputBufferOffset];
1081
- if (bytesWritten == -1) {
1082
- [self _failWithError:[NSError errorWithDomain:RCTSRWebSocketErrorDomain
1083
- code:2145
1084
- userInfo:@{NSLocalizedDescriptionKey : @"Error writing to stream"}]];
1085
- return;
1086
- }
1087
-
1088
- _outputBufferOffset += bytesWritten;
1089
-
1090
- if (_outputBufferOffset > 4096 && _outputBufferOffset > (_outputBuffer.length >> 1)) {
1091
- _outputBuffer = [[NSMutableData alloc] initWithBytes:(char *)_outputBuffer.bytes + _outputBufferOffset
1092
- length:_outputBuffer.length - _outputBufferOffset];
1093
- _outputBufferOffset = 0;
1094
- }
1095
- }
1096
-
1097
- if (_closeWhenFinishedWriting && _outputBuffer.length - _outputBufferOffset == 0 &&
1098
- (_inputStream.streamStatus != NSStreamStatusNotOpen && _inputStream.streamStatus != NSStreamStatusClosed) &&
1099
- !_sentClose) {
1100
- _sentClose = YES;
1101
-
1102
- [self _scheduleCleanup];
1103
-
1104
- if (!_failed) {
1105
- [self _performDelegateBlock:^{
1106
- if ([self.delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)]) {
1107
- [self.delegate webSocket:self didCloseWithCode:self->_closeCode reason:self->_closeReason wasClean:YES];
1108
- }
1109
- }];
1110
- }
1111
- }
1112
- }
1113
-
1114
- - (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback
1115
- {
1116
- [self assertOnWorkQueue];
1117
- [self _addConsumerWithScanner:consumer callback:callback dataLength:0];
1118
- }
1119
-
1120
- - (void)_addConsumerWithDataLength:(size_t)dataLength
1121
- callback:(data_callback)callback
1122
- readToCurrentFrame:(BOOL)readToCurrentFrame
1123
- unmaskBytes:(BOOL)unmaskBytes
1124
- {
1125
- [self assertOnWorkQueue];
1126
- assert(dataLength);
1127
-
1128
- [_consumers addObject:[_consumerPool consumerWithScanner:nil
1129
- handler:callback
1130
- bytesNeeded:dataLength
1131
- readToCurrentFrame:readToCurrentFrame
1132
- unmaskBytes:unmaskBytes]];
1133
- [self _pumpScanner];
1134
- }
1135
-
1136
- - (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength
1137
- {
1138
- [self assertOnWorkQueue];
1139
- [_consumers addObject:[_consumerPool consumerWithScanner:consumer
1140
- handler:callback
1141
- bytesNeeded:dataLength
1142
- readToCurrentFrame:NO
1143
- unmaskBytes:NO]];
1144
- [self _pumpScanner];
1145
- }
1146
-
1147
- static const char CRLFCRLFBytes[] = {'\r', '\n', '\r', '\n'};
1148
-
1149
- - (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler
1150
- {
1151
- [self _readUntilBytes:CRLFCRLFBytes length:sizeof(CRLFCRLFBytes) callback:dataHandler];
1152
- }
1153
-
1154
- - (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler
1155
- {
1156
- // TODO: optimize so this can continue from where we last searched
1157
- stream_scanner consumer = ^size_t(NSData *data) {
1158
- __block size_t found_size = 0;
1159
- __block size_t match_count = 0;
1160
-
1161
- size_t size = data.length;
1162
- const unsigned char *buffer = data.bytes;
1163
- for (size_t i = 0; i < size; i++) {
1164
- if (((const unsigned char *)buffer)[i] == ((const unsigned char *)bytes)[match_count]) {
1165
- match_count += 1;
1166
- if (match_count == length) {
1167
- found_size = i + 1;
1168
- break;
1169
- }
1170
- } else {
1171
- match_count = 0;
1172
- }
1173
- }
1174
- return found_size;
1175
- };
1176
- [self _addConsumerWithScanner:consumer callback:dataHandler];
1177
- }
1178
-
1179
- // Returns true if did work
1180
- - (BOOL)_innerPumpScanner
1181
- {
1182
- BOOL didWork = NO;
1183
-
1184
- if (self.readyState >= RCTSR_CLOSING) {
1185
- return didWork;
1186
- }
1187
-
1188
- if (!_consumers.count) {
1189
- return didWork;
1190
- }
1191
-
1192
- size_t curSize = _readBuffer.length - _readBufferOffset;
1193
- if (!curSize) {
1194
- return didWork;
1195
- }
1196
-
1197
- RCTSRIOConsumer *consumer = _consumers[0];
1198
-
1199
- size_t bytesNeeded = consumer.bytesNeeded;
1200
-
1201
- size_t foundSize = 0;
1202
- if (consumer.consumer) {
1203
- NSData *tempView = [NSData dataWithBytesNoCopy:(char *)_readBuffer.bytes + _readBufferOffset
1204
- length:_readBuffer.length - _readBufferOffset
1205
- freeWhenDone:NO];
1206
- foundSize = consumer.consumer(tempView);
1207
- } else {
1208
- assert(consumer.bytesNeeded);
1209
- if (curSize >= bytesNeeded) {
1210
- foundSize = bytesNeeded;
1211
- } else if (consumer.readToCurrentFrame) {
1212
- foundSize = curSize;
1213
- }
1214
- }
1215
-
1216
- NSData *slice = nil;
1217
- if (consumer.readToCurrentFrame || foundSize) {
1218
- NSRange sliceRange = NSMakeRange(_readBufferOffset, foundSize);
1219
- slice = [_readBuffer subdataWithRange:sliceRange];
1220
-
1221
- _readBufferOffset += foundSize;
1222
-
1223
- if (_readBufferOffset > 4096 && _readBufferOffset > (_readBuffer.length >> 1)) {
1224
- _readBuffer = [[NSMutableData alloc] initWithBytes:(char *)_readBuffer.bytes + _readBufferOffset
1225
- length:_readBuffer.length - _readBufferOffset];
1226
- _readBufferOffset = 0;
1227
- }
1228
-
1229
- if (consumer.unmaskBytes) {
1230
- NSMutableData *mutableSlice = [slice mutableCopy];
1231
-
1232
- NSUInteger len = mutableSlice.length;
1233
- uint8_t *bytes = mutableSlice.mutableBytes;
1234
-
1235
- for (NSUInteger i = 0; i < len; i++) {
1236
- bytes[i] = bytes[i] ^ _currentReadMaskKey[_currentReadMaskOffset % sizeof(_currentReadMaskKey)];
1237
- _currentReadMaskOffset += 1;
1238
- }
1239
-
1240
- slice = mutableSlice;
1241
- }
1242
-
1243
- if (consumer.readToCurrentFrame) {
1244
- [_currentFrameData appendData:slice];
1245
-
1246
- _readOpCount += 1;
1247
-
1248
- if (_currentFrameOpcode == RCTSROpCodeTextFrame) {
1249
- // Validate UTF8 stuff.
1250
- size_t currentDataSize = _currentFrameData.length;
1251
- if (_currentFrameOpcode == RCTSROpCodeTextFrame && currentDataSize > 0) {
1252
- // TODO: Optimize this. Don't really have to copy all the data each time
1253
-
1254
- size_t scanSize = currentDataSize - _currentStringScanPosition;
1255
-
1256
- NSData *scan_data = [_currentFrameData subdataWithRange:NSMakeRange(_currentStringScanPosition, scanSize)];
1257
- int32_t valid_utf8_size = validate_dispatch_data_partial_string(scan_data);
1258
-
1259
- if (valid_utf8_size == -1) {
1260
- [self closeWithCode:RCTSRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"];
1261
- dispatch_async(_workQueue, ^{
1262
- [self _disconnect];
1263
- });
1264
- return didWork;
1265
- } else {
1266
- _currentStringScanPosition += valid_utf8_size;
1267
- }
1268
- }
1269
- }
1270
-
1271
- consumer.bytesNeeded -= foundSize;
1272
-
1273
- if (consumer.bytesNeeded == 0) {
1274
- [_consumers removeObjectAtIndex:0];
1275
- consumer.handler(self, nil);
1276
- [_consumerPool returnConsumer:consumer];
1277
- didWork = YES;
1278
- }
1279
- } else if (foundSize) {
1280
- [_consumers removeObjectAtIndex:0];
1281
- consumer.handler(self, slice);
1282
- [_consumerPool returnConsumer:consumer];
1283
- didWork = YES;
1284
- }
1285
- }
1286
- return didWork;
1287
- }
1288
-
1289
- - (void)_pumpScanner
1290
- {
1291
- [self assertOnWorkQueue];
1292
-
1293
- if (!_isPumping) {
1294
- _isPumping = YES;
1295
- } else {
1296
- return;
1297
- }
1298
-
1299
- while ([self _innerPumpScanner]) {
1300
- }
1301
-
1302
- _isPumping = NO;
1303
- }
1304
-
1305
- //#define NOMASK
1306
-
1307
- static const size_t RCTSRFrameHeaderOverhead = 32;
1308
-
1309
- - (void)_sendFrameWithOpcode:(RCTSROpCode)opcode data:(NSData *)data
1310
- {
1311
- [self assertOnWorkQueue];
1312
-
1313
- if (nil == data) {
1314
- return;
1315
- }
1316
-
1317
- size_t payloadLength = [data length];
1318
-
1319
- NSMutableData *frame = [[NSMutableData alloc] initWithLength:payloadLength + RCTSRFrameHeaderOverhead];
1320
- if (!frame) {
1321
- [self closeWithCode:RCTSRStatusCodeMessageTooBig reason:@"Message too big"];
1322
- return;
1323
- }
1324
- uint8_t *frame_buffer = (uint8_t *)frame.mutableBytes;
1325
-
1326
- // set fin
1327
- frame_buffer[0] = RCTSRFinMask | opcode;
1328
-
1329
- BOOL useMask = YES;
1330
- #ifdef NOMASK
1331
- useMask = NO;
1332
- #endif
1333
-
1334
- if (useMask) {
1335
- // set the mask and header
1336
- frame_buffer[1] |= RCTSRMaskMask;
1337
- }
1338
-
1339
- size_t frame_buffer_size = 2;
1340
-
1341
- const uint8_t *unmasked_payload = (uint8_t *)[data bytes];
1342
-
1343
- if (payloadLength < 126) {
1344
- frame_buffer[1] |= payloadLength;
1345
- } else if (payloadLength <= UINT16_MAX) {
1346
- frame_buffer[1] |= 126;
1347
- *((uint16_t *)(frame_buffer + frame_buffer_size)) = NSSwapBigShortToHost((uint16_t)payloadLength);
1348
- frame_buffer_size += sizeof(uint16_t);
1349
- } else {
1350
- frame_buffer[1] |= 127;
1351
- *((uint64_t *)(frame_buffer + frame_buffer_size)) = NSSwapBigLongLongToHost((uint64_t)payloadLength);
1352
- frame_buffer_size += sizeof(uint64_t);
1353
- }
1354
-
1355
- if (!useMask) {
1356
- for (size_t i = 0; i < payloadLength; i++) {
1357
- frame_buffer[frame_buffer_size] = unmasked_payload[i];
1358
- frame_buffer_size += 1;
1359
- }
1360
- } else {
1361
- uint8_t *mask_key = frame_buffer + frame_buffer_size;
1362
- int result __unused = SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key);
1363
- assert(result == 0);
1364
- frame_buffer_size += sizeof(uint32_t);
1365
-
1366
- // TODO: could probably optimize this with SIMD
1367
- for (size_t i = 0; i < payloadLength; i++) {
1368
- frame_buffer[frame_buffer_size] = unmasked_payload[i] ^ mask_key[i % sizeof(uint32_t)];
1369
- frame_buffer_size += 1;
1370
- }
1371
- }
1372
-
1373
- assert(frame_buffer_size <= [frame length]);
1374
- frame.length = frame_buffer_size;
1375
-
1376
- [self _writeData:frame];
1377
- }
1378
-
1379
- - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
1380
- {
1381
- if (_secure && !_pinnedCertFound &&
1382
- (eventCode == NSStreamEventHasBytesAvailable || eventCode == NSStreamEventHasSpaceAvailable)) {
1383
- NSArray *sslCerts = _urlRequest.RCTSR_SSLPinnedCertificates;
1384
- if (sslCerts) {
1385
- SecTrustRef secTrust = (__bridge SecTrustRef)[aStream propertyForKey:(__bridge id)kCFStreamPropertySSLPeerTrust];
1386
- if (secTrust) {
1387
- NSInteger numCerts = SecTrustGetCertificateCount(secTrust);
1388
- for (NSInteger i = 0; i < numCerts && !_pinnedCertFound; i++) {
1389
- SecCertificateRef cert = SecTrustGetCertificateAtIndex(secTrust, i);
1390
- NSData *certData = CFBridgingRelease(SecCertificateCopyData(cert));
1391
-
1392
- for (id ref in sslCerts) {
1393
- SecCertificateRef trustedCert = (__bridge SecCertificateRef)ref;
1394
- NSData *trustedCertData = CFBridgingRelease(SecCertificateCopyData(trustedCert));
1395
-
1396
- if ([trustedCertData isEqualToData:certData]) {
1397
- _pinnedCertFound = YES;
1398
- break;
1399
- }
1400
- }
1401
- }
1402
- }
1403
-
1404
- if (!_pinnedCertFound) {
1405
- dispatch_async(_workQueue, ^{
1406
- [self _failWithError:[NSError errorWithDomain:RCTSRWebSocketErrorDomain
1407
- code:23556
1408
- userInfo:@{
1409
- NSLocalizedDescriptionKey :
1410
- [NSString stringWithFormat:@"Invalid server cert"]
1411
- }]];
1412
- });
1413
- return;
1414
- }
1415
- }
1416
- }
1417
-
1418
- // _workQueue cannot be NULL
1419
- if (!_workQueue) {
1420
- return;
1421
- }
1422
- __weak typeof(self) weakSelf = self;
1423
- dispatch_async(_workQueue, ^{
1424
- typeof(self) strongSelf = weakSelf;
1425
- if (!strongSelf) {
1426
- return;
1427
- }
1428
- [strongSelf safeHandleEvent:eventCode stream:aStream];
1429
- });
1430
- }
1431
-
1432
- - (void)safeHandleEvent:(NSStreamEvent)eventCode stream:(NSStream *)aStream
1433
- {
1434
- switch (eventCode) {
1435
- case NSStreamEventOpenCompleted: {
1436
- RCTSRLog(@"NSStreamEventOpenCompleted %@", aStream);
1437
- if (self.readyState >= RCTSR_CLOSING) {
1438
- return;
1439
- }
1440
- assert(self->_readBuffer);
1441
-
1442
- if (self.readyState == RCTSR_CONNECTING && aStream == self->_inputStream) {
1443
- [self didConnect];
1444
- }
1445
- [self _pumpWriting];
1446
- [self _pumpScanner];
1447
- break;
1448
- }
1449
-
1450
- case NSStreamEventErrorOccurred: {
1451
- RCTSRLog(@"NSStreamEventErrorOccurred %@ %@", aStream, [aStream.streamError copy]);
1452
- // TODO: specify error better!
1453
- [self _failWithError:aStream.streamError];
1454
- self->_readBufferOffset = 0;
1455
- self->_readBuffer.length = 0;
1456
- break;
1457
- }
1458
-
1459
- case NSStreamEventEndEncountered: {
1460
- [self _pumpScanner];
1461
- RCTSRLog(@"NSStreamEventEndEncountered %@", aStream);
1462
- if (aStream.streamError) {
1463
- [self _failWithError:aStream.streamError];
1464
- } else {
1465
- dispatch_async(self->_workQueue, ^{
1466
- if (self.readyState != RCTSR_CLOSED) {
1467
- self.readyState = RCTSR_CLOSED;
1468
- [self _scheduleCleanup];
1469
- }
1470
-
1471
- if (!self->_sentClose && !self->_failed) {
1472
- self->_sentClose = YES;
1473
- // If we get closed in this state it's probably not clean because we should be sending this when we send
1474
- // messages
1475
- [self _performDelegateBlock:^{
1476
- if ([self.delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)]) {
1477
- [self.delegate webSocket:self
1478
- didCloseWithCode:RCTSRStatusCodeGoingAway
1479
- reason:@"Stream end encountered"
1480
- wasClean:NO];
1481
- }
1482
- }];
1483
- }
1484
- });
1485
- }
1486
-
1487
- break;
1488
- }
1489
-
1490
- case NSStreamEventHasBytesAvailable: {
1491
- RCTSRLog(@"NSStreamEventHasBytesAvailable %@", aStream);
1492
- const int bufferSize = 2048;
1493
- uint8_t buffer[bufferSize];
1494
-
1495
- while (self->_inputStream.hasBytesAvailable) {
1496
- NSInteger bytes_read = [self->_inputStream read:buffer maxLength:bufferSize];
1497
-
1498
- if (bytes_read > 0) {
1499
- [self->_readBuffer appendBytes:buffer length:bytes_read];
1500
- } else if (bytes_read < 0) {
1501
- [self _failWithError:self->_inputStream.streamError];
1502
- }
1503
-
1504
- if (bytes_read != bufferSize) {
1505
- break;
1506
- }
1507
- };
1508
- [self _pumpScanner];
1509
- break;
1510
- }
1511
-
1512
- case NSStreamEventHasSpaceAvailable: {
1513
- RCTSRLog(@"NSStreamEventHasSpaceAvailable %@", aStream);
1514
- [self _pumpWriting];
1515
- break;
1516
- }
1517
-
1518
- default:
1519
- RCTSRLog(@"(default) %@", aStream);
1520
- break;
1521
- }
1522
- }
1523
-
1524
- - (void)_scheduleCleanup
1525
- {
1526
- if (_cleanupScheduled) {
1527
- return;
1528
- }
1529
-
1530
- _cleanupScheduled = YES;
1531
-
1532
- // Cleanup NSStream's delegate in the same RunLoop used by the streams themselves:
1533
- // This way we'll prevent race conditions between handleEvent and SRWebsocket's dealloc
1534
- NSTimer *timer = [NSTimer timerWithTimeInterval:(0.0f)
1535
- target:self
1536
- selector:@selector(_cleanupSelfReference:)
1537
- userInfo:nil
1538
- repeats:NO];
1539
- [[NSRunLoop RCTSR_networkRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
1540
- }
1541
-
1542
- - (void)_cleanupSelfReference:(NSTimer *)timer
1543
- {
1544
- // Remove the streams, right now, from the networkRunLoop
1545
- [_inputStream close];
1546
- [_outputStream close];
1547
-
1548
- // Unschedule from RunLoop
1549
- for (NSArray *runLoop in [_scheduledRunloops copy]) {
1550
- [self unscheduleFromRunLoop:runLoop[0] forMode:runLoop[1]];
1551
- }
1552
-
1553
- // Nuke NSStream's delegate
1554
- _inputStream.delegate = nil;
1555
- _outputStream.delegate = nil;
1556
-
1557
- // Cleanup selfRetain in the same GCD queue as usual
1558
- dispatch_async(_workQueue, ^{
1559
- self->_selfRetain = nil;
1560
- });
1561
- }
1562
-
1563
- @end
1564
-
1565
- @implementation RCTSRIOConsumer
1566
-
1567
- - (void)setupWithScanner:(stream_scanner)scanner
1568
- handler:(data_callback)handler
1569
- bytesNeeded:(size_t)bytesNeeded
1570
- readToCurrentFrame:(BOOL)readToCurrentFrame
1571
- unmaskBytes:(BOOL)unmaskBytes
1572
- {
1573
- _consumer = [scanner copy];
1574
- _handler = [handler copy];
1575
- _bytesNeeded = bytesNeeded;
1576
- _readToCurrentFrame = readToCurrentFrame;
1577
- _unmaskBytes = unmaskBytes;
1578
- assert(_consumer || _bytesNeeded);
1579
- }
1580
-
1581
- @end
1582
-
1583
- @implementation RCTSRIOConsumerPool {
1584
- NSUInteger _poolSize;
1585
- NSMutableArray<RCTSRIOConsumer *> *_bufferedConsumers;
1586
- }
1587
-
1588
- - (instancetype)initWithBufferCapacity:(NSUInteger)poolSize
1589
- {
1590
- if ((self = [super init])) {
1591
- _poolSize = poolSize;
1592
- _bufferedConsumers = [[NSMutableArray alloc] initWithCapacity:poolSize];
1593
- }
1594
- return self;
1595
- }
1596
-
1597
- - (instancetype)init
1598
- {
1599
- return [self initWithBufferCapacity:8];
1600
- }
1601
-
1602
- - (RCTSRIOConsumer *)consumerWithScanner:(stream_scanner)scanner
1603
- handler:(data_callback)handler
1604
- bytesNeeded:(size_t)bytesNeeded
1605
- readToCurrentFrame:(BOOL)readToCurrentFrame
1606
- unmaskBytes:(BOOL)unmaskBytes
1607
- {
1608
- RCTSRIOConsumer *consumer = nil;
1609
- if (_bufferedConsumers.count) {
1610
- consumer = _bufferedConsumers.lastObject;
1611
- [_bufferedConsumers removeLastObject];
1612
- } else {
1613
- consumer = [RCTSRIOConsumer new];
1614
- }
1615
-
1616
- [consumer setupWithScanner:scanner
1617
- handler:handler
1618
- bytesNeeded:bytesNeeded
1619
- readToCurrentFrame:readToCurrentFrame
1620
- unmaskBytes:unmaskBytes];
1621
-
1622
- return consumer;
1623
- }
1624
-
1625
- - (void)returnConsumer:(RCTSRIOConsumer *)consumer
1626
- {
1627
- if (_bufferedConsumers.count < _poolSize) {
1628
- [_bufferedConsumers addObject:consumer];
1629
- }
1630
- }
1631
-
1632
- @end
1633
-
1634
- @implementation NSURLRequest (CertificateAdditions)
1635
-
1636
- - (NSArray *)RCTSR_SSLPinnedCertificates
1637
- {
1638
- return [NSURLProtocol propertyForKey:@"RCTSR_SSLPinnedCertificates" inRequest:self];
1639
- }
1640
-
1641
- @end
1642
-
1643
- @implementation NSMutableURLRequest (CertificateAdditions)
1644
-
1645
- - (NSArray *)RCTSR_SSLPinnedCertificates
1646
- {
1647
- return [NSURLProtocol propertyForKey:@"RCTSR_SSLPinnedCertificates" inRequest:self];
1648
- }
1649
-
1650
- - (void)setRCTSR_SSLPinnedCertificates:(NSArray *)RCTSR_SSLPinnedCertificates
1651
- {
1652
- [NSURLProtocol setProperty:RCTSR_SSLPinnedCertificates forKey:@"RCTSR_SSLPinnedCertificates" inRequest:self];
1653
- }
1654
-
1655
- @end
1656
-
1657
- @implementation NSURL (RCTSRWebSocket)
1658
-
1659
- - (NSString *)RCTSR_origin
1660
- {
1661
- NSString *scheme = self.scheme.lowercaseString;
1662
-
1663
- if ([scheme isEqualToString:@"wss"]) {
1664
- scheme = @"https";
1665
- } else if ([scheme isEqualToString:@"ws"]) {
1666
- scheme = @"http";
1667
- }
1668
-
1669
- int defaultPort = ([scheme isEqualToString:@"https"] ? 443 : [scheme isEqualToString:@"http"] ? 80 : -1);
1670
- int port = self.port.intValue;
1671
- if (port > 0 && port != defaultPort) {
1672
- return [NSString stringWithFormat:@"%@://%@:%d", scheme, self.host, port];
1673
- } else {
1674
- return [NSString stringWithFormat:@"%@://%@", scheme, self.host];
1675
- }
1676
- }
1677
-
1678
- @end
1679
-
1680
- static _RCTSRRunLoopThread *networkThread = nil;
1681
- static NSRunLoop *networkRunLoop = nil;
1682
-
1683
- @implementation NSRunLoop (RCTSRWebSocket)
1684
-
1685
- + (NSRunLoop *)RCTSR_networkRunLoop
1686
- {
1687
- static dispatch_once_t onceToken;
1688
- dispatch_once(&onceToken, ^{
1689
- networkThread = [_RCTSRRunLoopThread new];
1690
- networkThread.name = @"com.squareup.SocketRocket.NetworkThread";
1691
- [networkThread start];
1692
- networkRunLoop = networkThread.runLoop;
1693
- });
1694
-
1695
- return networkRunLoop;
1696
- }
1697
-
1698
- @end
1699
-
1700
- @implementation _RCTSRRunLoopThread {
1701
- dispatch_group_t _waitGroup;
1702
- }
1703
-
1704
- @synthesize runLoop = _runLoop;
1705
-
1706
- - (instancetype)init
1707
- {
1708
- if ((self = [super init])) {
1709
- _waitGroup = dispatch_group_create();
1710
- dispatch_group_enter(_waitGroup);
1711
- }
1712
- return self;
1713
- }
1714
-
1715
- - (void)main
1716
- {
1717
- @autoreleasepool {
1718
- _runLoop = [NSRunLoop currentRunLoop];
1719
- dispatch_group_leave(_waitGroup);
1720
-
1721
- NSTimer *timer = [[NSTimer alloc] initWithFireDate:[NSDate distantFuture]
1722
- interval:0.0
1723
- target:self
1724
- selector:@selector(step)
1725
- userInfo:nil
1726
- repeats:NO];
1727
- [_runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
1728
-
1729
- while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {
1730
- }
1731
- assert(NO);
1732
- }
1733
- }
1734
-
1735
- - (void)step
1736
- {
1737
- // Does nothing
1738
- }
1739
-
1740
- - (NSRunLoop *)runLoop
1741
- {
1742
- dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER);
1743
- return _runLoop;
1744
- }
1745
-
1746
- @end