react-native-windows 0.76.3 → 0.77.0-preview.2

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 (367) hide show
  1. package/.flowconfig +5 -1
  2. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
  3. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
  4. package/Libraries/Animated/AnimatedEvent.js +1 -1
  5. package/Libraries/Animated/AnimatedImplementation.js +2 -2
  6. package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
  7. package/Libraries/Animated/animations/Animation.js +60 -25
  8. package/Libraries/Animated/animations/DecayAnimation.js +26 -38
  9. package/Libraries/Animated/animations/SpringAnimation.js +33 -39
  10. package/Libraries/Animated/animations/TimingAnimation.js +34 -42
  11. package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
  12. package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
  13. package/Libraries/Animated/createAnimatedComponent.js +60 -33
  14. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  15. package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
  16. package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
  17. package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
  18. package/Libraries/Animated/nodes/AnimatedProps.js +104 -46
  19. package/Libraries/Animated/nodes/AnimatedStyle.js +116 -39
  20. package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
  21. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  22. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
  23. package/Libraries/Animated/useAnimatedProps.js +41 -35
  24. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  25. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
  26. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +82 -5
  27. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
  28. package/Libraries/Components/Button.js +9 -4
  29. package/Libraries/Components/Button.windows.js +19 -5
  30. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
  31. package/Libraries/Components/Glyph/Glyph.js +2 -1
  32. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
  33. package/Libraries/Components/Popup/PopupNativeComponent.js +0 -1
  34. package/Libraries/Components/Pressable/Pressable.js +4 -4
  35. package/Libraries/Components/Pressable/Pressable.windows.js +10 -4
  36. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
  37. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
  38. package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
  39. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
  40. package/Libraries/Components/ScrollView/ScrollView.js +49 -88
  41. package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
  42. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
  43. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
  44. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +0 -5
  45. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
  46. package/Libraries/Components/Switch/Switch.js +8 -6
  47. package/Libraries/Components/Switch/Switch.windows.js +8 -6
  48. package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
  49. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
  50. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
  51. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
  52. package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
  53. package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
  54. package/Libraries/Components/TextInput/TextInput.js +37 -13
  55. package/Libraries/Components/TextInput/TextInput.windows.js +47 -16
  56. package/Libraries/Components/TextInput/TextInputState.js +11 -13
  57. package/Libraries/Components/TextInput/TextInputState.windows.js +11 -13
  58. package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
  59. package/Libraries/Components/Touchable/Position.js +7 -2
  60. package/Libraries/Components/Touchable/Touchable.js +4 -0
  61. package/Libraries/Components/Touchable/Touchable.windows.js +4 -0
  62. package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
  63. package/Libraries/Components/Touchable/TouchableBounce.windows.js +227 -0
  64. package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
  65. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +5 -5
  66. package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +371 -0
  67. package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
  68. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
  69. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
  70. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +9 -3
  71. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
  72. package/Libraries/Components/View/View.js +4 -4
  73. package/Libraries/Components/View/View.windows.js +12 -5
  74. package/Libraries/Components/View/ViewAccessibility.d.ts +10 -0
  75. package/Libraries/Components/View/ViewAccessibility.windows.js +2 -0
  76. package/Libraries/Components/View/ViewNativeComponent.js +6 -98
  77. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  78. package/Libraries/Components/View/ViewPropTypes.js +0 -3
  79. package/Libraries/Components/View/ViewPropTypes.windows.js +2 -3
  80. package/Libraries/Core/ExceptionsManager.js +50 -29
  81. package/Libraries/Core/ReactNativeVersion.js +3 -3
  82. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
  83. package/Libraries/Core/setUpBatchedBridge.js +1 -10
  84. package/Libraries/Core/setUpDeveloperTools.js +1 -5
  85. package/Libraries/Core/setUpErrorHandling.js +20 -18
  86. package/Libraries/Core/setUpReactDevTools.js +107 -8
  87. package/Libraries/Core/setUpSegmentFetcher.js +1 -0
  88. package/Libraries/Core/setUpTimers.js +21 -18
  89. package/Libraries/Debugging/DebuggingOverlay.js +4 -5
  90. package/Libraries/Image/AssetSourceResolver.js +12 -1
  91. package/Libraries/Image/AssetSourceResolver.windows.js +12 -1
  92. package/Libraries/Image/Image.android.js +1 -5
  93. package/Libraries/Image/Image.d.ts +20 -29
  94. package/Libraries/Image/Image.ios.js +0 -2
  95. package/Libraries/Image/Image.windows.js +5 -1
  96. package/Libraries/Image/ImageBackground.js +2 -5
  97. package/Libraries/Image/ImageProps.js +7 -6
  98. package/Libraries/Image/ImageResizeMode.d.ts +8 -1
  99. package/Libraries/Image/ImageResizeMode.js +4 -1
  100. package/Libraries/Image/ImageSource.d.ts +0 -2
  101. package/Libraries/Image/ImageSource.js +0 -2
  102. package/Libraries/Image/ImageTypes.flow.js +11 -9
  103. package/Libraries/Image/ImageUtils.js +6 -3
  104. package/Libraries/Image/ImageViewNativeComponent.js +5 -3
  105. package/Libraries/Inspector/Inspector.js +1 -0
  106. package/Libraries/Inspector/NetworkOverlay.js +4 -0
  107. package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
  108. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
  109. package/Libraries/Interaction/InteractionManager.js +6 -1
  110. package/Libraries/Interaction/InteractionManagerStub.js +176 -0
  111. package/Libraries/Interaction/TouchHistoryMath.js +22 -19
  112. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  113. package/Libraries/Lists/FlatList.d.ts +1 -2
  114. package/Libraries/Lists/FlatList.js +2 -2
  115. package/Libraries/Lists/SectionListModern.js +7 -7
  116. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
  117. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  118. package/Libraries/LogBox/Data/LogBoxData.js +3 -3
  119. package/Libraries/LogBox/LogBox.js +18 -5
  120. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  121. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  122. package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
  123. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
  124. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js +6 -1
  125. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  126. package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +1 -1
  127. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
  128. package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
  129. package/Libraries/Modal/Modal.d.ts +12 -0
  130. package/Libraries/Modal/Modal.js +31 -4
  131. package/Libraries/Modal/Modal.windows.js +18 -0
  132. package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
  133. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
  134. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -11
  135. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
  136. package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
  137. package/Libraries/Network/FormData.js +11 -3
  138. package/Libraries/Network/XHRInterceptor.js +63 -14
  139. package/Libraries/Network/XMLHttpRequest.js +26 -1
  140. package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
  141. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
  142. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  143. package/Libraries/Pressability/HoverState.js +2 -0
  144. package/Libraries/Pressability/Pressability.js +2 -3
  145. package/Libraries/Pressability/Pressability.windows.js +2 -3
  146. package/Libraries/Pressability/usePressability.js +4 -1
  147. package/Libraries/ReactNative/AppContainer.js +1 -1
  148. package/Libraries/ReactNative/AppRegistry.js +1 -11
  149. package/Libraries/ReactNative/DisplayMode.js +1 -1
  150. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
  151. package/Libraries/ReactNative/RendererImplementation.js +18 -17
  152. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
  153. package/Libraries/ReactNative/renderApplication.js +9 -8
  154. package/Libraries/ReactNative/requireNativeComponent.js +5 -2
  155. package/Libraries/Renderer/shims/ReactFabric.js +3 -3
  156. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  157. package/Libraries/Renderer/shims/ReactNative.js +3 -3
  158. package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
  159. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
  160. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  161. package/Libraries/StyleSheet/StyleSheet.js +7 -1
  162. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
  163. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
  164. package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
  165. package/Libraries/StyleSheet/processTransform.js +3 -34
  166. package/Libraries/Text/Text.js +248 -249
  167. package/Libraries/Text/Text.windows.js +298 -292
  168. package/Libraries/Text/TextNativeComponent.js +0 -1
  169. package/Libraries/Text/TextProps.windows.js +2 -0
  170. package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
  171. package/Libraries/Types/CoreEventTypes.d.ts +3 -10
  172. package/Libraries/Types/CoreEventTypes.js +4 -6
  173. package/Libraries/Types/CoreEventTypes.windows.js +4 -6
  174. package/Libraries/Utilities/Appearance.js +3 -1
  175. package/Libraries/Utilities/BackHandler.android.js +6 -18
  176. package/Libraries/Utilities/BackHandler.d.ts +0 -4
  177. package/Libraries/Utilities/BackHandler.ios.js +0 -7
  178. package/Libraries/Utilities/BackHandler.windows.js +6 -18
  179. package/Libraries/Utilities/HMRClient.js +3 -4
  180. package/Libraries/Utilities/Platform.flow.js +2 -2
  181. package/Libraries/Utilities/Platform.flow.windows.js +3 -2
  182. package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
  183. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  184. package/Libraries/Utilities/useMergeRefs.js +26 -7
  185. package/Libraries/WebSocket/WebSocketEvent.js +4 -1
  186. package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
  187. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
  188. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  189. package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +9 -8
  190. package/Microsoft.ReactNative/AsynchronousEventBeat.h +5 -5
  191. package/Microsoft.ReactNative/FBReactNativeSpec/FBReactNativeSpecJSI.h +5 -0
  192. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +2 -2
  193. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +197 -18
  194. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +19 -1
  195. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +13 -0
  196. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +1 -1
  197. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +6 -8
  198. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +2 -2
  199. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +3 -2
  200. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
  201. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +24 -0
  202. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +5 -0
  203. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +12 -12
  204. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +4 -4
  205. package/Microsoft.ReactNative/Fabric/ImageRequest.cpp +4 -8
  206. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +16 -15
  207. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +15 -0
  208. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +9 -0
  209. package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +20 -1
  210. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -6
  211. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  212. package/Microsoft.ReactNative/SynchronousEventBeat.cpp +14 -4
  213. package/Microsoft.ReactNative/SynchronousEventBeat.h +4 -2
  214. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.cpp +78 -0
  215. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.h +51 -0
  216. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.inc +48 -0
  217. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.cpp +41 -0
  218. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.h +127 -0
  219. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.inc +125 -0
  220. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_posix.cpp +16 -0
  221. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_win.cpp +23 -0
  222. package/Microsoft.ReactNative.Cxx/JSI/decorator.h +834 -0
  223. package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +117 -0
  224. package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +366 -0
  225. package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +560 -0
  226. package/Microsoft.ReactNative.Cxx/JSI/jsi.h +1611 -0
  227. package/Microsoft.ReactNative.Cxx/JSI/threadsafe.h +79 -0
  228. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +7 -11
  229. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -1
  230. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +2878 -0
  231. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.h +36 -0
  232. package/Microsoft.ReactNative.Cxx/ReactCommon/CallInvoker.h +64 -0
  233. package/Microsoft.ReactNative.Cxx/ReactCommon/SchedulerPriority.h +22 -0
  234. package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModule.cpp +63 -63
  235. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +165 -0
  236. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +105 -0
  237. package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModuleUtils.h +57 -58
  238. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/AString.h +42 -0
  239. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Array.h +151 -0
  240. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Base.h +177 -154
  241. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +25 -0
  242. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bridging.h +21 -0
  243. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/CallbackWrapper.h +67 -0
  244. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +90 -0
  245. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Convert.h +170 -172
  246. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Error.h +51 -0
  247. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/EventEmitter.h +134 -136
  248. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Function.h +283 -283
  249. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.cpp +63 -0
  250. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.h +61 -0
  251. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Object.h +93 -0
  252. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Promise.h +104 -0
  253. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Value.h +107 -0
  254. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/flags.h +22 -0
  255. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/react_native_assert.h +72 -0
  256. package/Microsoft.ReactNative.Cxx/node-api/js_native_api.h +553 -0
  257. package/Microsoft.ReactNative.Cxx/node-api/js_native_api_types.h +167 -0
  258. package/Microsoft.ReactNative.Cxx/node-api/js_runtime_api.h +186 -0
  259. package/Microsoft.ReactNative.Cxx/stubs/glog/logging.h +82 -0
  260. package/PropertySheets/Bundle.Common.targets +1 -1
  261. package/PropertySheets/Bundle.props +3 -0
  262. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  263. package/PropertySheets/ManagedCodeGen/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
  264. package/PropertySheets/OutputMSBuildProperties.targets +3 -1
  265. package/PropertySheets/React.Cpp.props +6 -0
  266. package/ReactCommon/ReactCommon.vcxproj +5 -0
  267. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +2 -3
  268. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +61 -0
  269. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +26 -23
  270. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +150 -0
  271. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +252 -0
  272. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/accessibilityPropsConversions.h +795 -0
  273. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/runtimescheduler/SchedulerPriorityUtils.h +59 -0
  274. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +227 -74
  275. package/Scripts/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
  276. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +97 -62
  277. package/Shared/InspectorPackagerConnection.cpp +3 -6
  278. package/Shared/InspectorPackagerConnection.h +2 -2
  279. package/Shared/InstanceManager.h +1 -1
  280. package/Shared/OInstance.h +1 -1
  281. package/Shared/Shared.vcxitems +17 -2
  282. package/Shared/Shared.vcxitems.filters +3 -1
  283. package/Shared/TurboModuleManager.cpp +29 -4
  284. package/codegen/NativeAccessibilityInfoSpec.g.h +27 -9
  285. package/codegen/NativeAccessibilityManagerSpec.g.h +19 -13
  286. package/codegen/NativeActionSheetManagerSpec.g.h +4 -0
  287. package/codegen/NativeExceptionsManagerSpec.g.h +1 -7
  288. package/codegen/NativeIntersectionObserverSpec.g.h +2 -0
  289. package/codegen/NativePerformanceSpec.g.h +127 -3
  290. package/codegen/NativeReactDevToolsRuntimeSettingsModuleSpec.g.h +67 -0
  291. package/codegen/NativeReactDevToolsSettingsManagerSpec.g.h +41 -0
  292. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +125 -137
  293. package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
  294. package/codegen/react/components/rnwcore/Props.cpp +1 -0
  295. package/codegen/react/components/rnwcore/Props.h +1 -0
  296. package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
  297. package/codegen/react/components/rnwcore/ShadowNodes.h +0 -11
  298. package/codegen/react/components/rnwcore/States.h +0 -12
  299. package/codegen/rnwcoreJSI-generated.cpp +219 -186
  300. package/codegen/rnwcoreJSI.h +942 -511
  301. package/index.js +10 -3
  302. package/index.windows.js +10 -3
  303. package/jest/setup.js +36 -1
  304. package/just-task.js +15 -0
  305. package/package.json +22 -22
  306. package/src/private/animated/NativeAnimatedHelper.js +18 -16
  307. package/src/private/animated/useAnimatedPropsMemo.js +356 -0
  308. package/src/private/components/HScrollViewNativeComponents.js +1 -27
  309. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
  310. package/src/private/components/VScrollViewNativeComponents.js +2 -25
  311. package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
  312. package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
  313. package/src/private/debugging/ReactDevToolsSettingsManager.windows.js +20 -0
  314. package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
  315. package/src/private/devmenu/DevMenu.d.ts +20 -0
  316. package/src/private/devmenu/DevMenu.js +31 -0
  317. package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
  318. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
  319. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
  320. package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
  321. package/src/private/setup/setUpDOM.js +14 -6
  322. package/src/private/setup/setUpMutationObserver.js +5 -0
  323. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
  324. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
  325. package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
  326. package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
  327. package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
  328. package/src/private/specs/modules/NativeAppearance.js +4 -10
  329. package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
  330. package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
  331. package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
  332. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
  333. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
  334. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
  335. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
  336. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
  337. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  338. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
  339. package/src/private/webapis/performance/EventTiming.js +13 -8
  340. package/src/private/webapis/performance/Performance.js +66 -73
  341. package/src/private/webapis/performance/PerformanceEntry.js +2 -5
  342. package/src/private/webapis/performance/PerformanceObserver.js +65 -164
  343. package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
  344. package/src/private/webapis/performance/UserTiming.js +11 -7
  345. package/src/private/webapis/performance/Utilities.js +18 -0
  346. package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
  347. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
  348. package/templates/cpp-lib/template.config.js +13 -7
  349. package/templates/templateUtils.js +10 -0
  350. package/types/index.d.ts +1 -1
  351. package/types/public/ReactNativeTypes.d.ts +4 -8
  352. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
  353. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
  354. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
  355. package/Libraries/DevToolsSettings/DevToolsSettingsManager.windows.js +0 -35
  356. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
  357. package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
  358. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +0 -101
  359. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +0 -569
  360. package/codegen/NativeDevToolsSettingsManagerSpec.g.h +0 -53
  361. package/codegen/NativePerformanceObserverSpec.g.h +0 -131
  362. package/src/private/components/useSyncOnScroll.js +0 -48
  363. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
  364. package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
  365. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
  366. package/types/experimental.d.ts +0 -59
  367. /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
@@ -0,0 +1,59 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <ReactCommon/SchedulerPriority.h>
11
+ #include <react/debug/react_native_assert.h>
12
+ #include <chrono>
13
+
14
+ namespace facebook::react {
15
+
16
+ static constexpr std::underlying_type<SchedulerPriority>::type serialize(
17
+ SchedulerPriority schedulerPriority) {
18
+ return static_cast<std::underlying_type<SchedulerPriority>::type>(
19
+ schedulerPriority);
20
+ }
21
+
22
+ static inline SchedulerPriority fromRawValue(double value) {
23
+ switch ((int)value) {
24
+ case 1:
25
+ return SchedulerPriority::ImmediatePriority;
26
+ case 2:
27
+ return SchedulerPriority::UserBlockingPriority;
28
+ case 3:
29
+ return SchedulerPriority::NormalPriority;
30
+ case 4:
31
+ return SchedulerPriority::LowPriority;
32
+ case 5:
33
+ return SchedulerPriority::IdlePriority;
34
+ default:
35
+ react_native_assert(false && "Unsupported SchedulerPriority value");
36
+ return SchedulerPriority::NormalPriority;
37
+ }
38
+ }
39
+
40
+ static inline std::chrono::milliseconds timeoutForSchedulerPriority(
41
+ SchedulerPriority schedulerPriority) noexcept {
42
+ switch (schedulerPriority) {
43
+ case SchedulerPriority::ImmediatePriority:
44
+ return std::chrono::milliseconds(0);
45
+ case SchedulerPriority::UserBlockingPriority:
46
+ return std::chrono::milliseconds(250);
47
+ case SchedulerPriority::NormalPriority:
48
+ return std::chrono::seconds(5);
49
+ case SchedulerPriority::LowPriority:
50
+ return std::chrono::seconds(10);
51
+ case SchedulerPriority::IdlePriority:
52
+ return std::chrono::minutes(5);
53
+ default:
54
+ react_native_assert(false && "Unsupported SchedulerPriority value");
55
+ return std::chrono::seconds(5);
56
+ }
57
+ }
58
+
59
+ } // namespace facebook::react
@@ -19,6 +19,7 @@
19
19
  #include <jsinspector-modern/HostTarget.h>
20
20
  #include <jsireact/JSIExecutor.h>
21
21
  #include <react/featureflags/ReactNativeFeatureFlags.h>
22
+ #include <react/renderer/core/ShadowNode.h>
22
23
  #include <react/renderer/runtimescheduler/RuntimeSchedulerBinding.h>
23
24
  #include <react/utils/jsi-utils.h>
24
25
  #include <iostream>
@@ -27,6 +28,24 @@
27
28
 
28
29
  namespace facebook::react {
29
30
 
31
+ namespace {
32
+
33
+ std::shared_ptr<RuntimeScheduler> createRuntimeScheduler(
34
+ RuntimeExecutor runtimeExecutor,
35
+ RuntimeSchedulerTaskErrorHandler taskErrorHandler) {
36
+ std::shared_ptr<RuntimeScheduler> scheduler =
37
+ std::make_shared<RuntimeScheduler>(
38
+ runtimeExecutor, RuntimeSchedulerClock::now, taskErrorHandler);
39
+ scheduler->setPerformanceEntryReporter(
40
+ // FIXME: Move creation of PerformanceEntryReporter to here and
41
+ // guarantee that its lifetime is the same as the runtime.
42
+ PerformanceEntryReporter::getInstance().get());
43
+
44
+ return scheduler;
45
+ }
46
+
47
+ } // namespace
48
+
30
49
  ReactInstance::ReactInstance(
31
50
  std::unique_ptr<JSRuntime> runtime,
32
51
  std::shared_ptr<MessageQueueThread> jsMessageQueueThread,
@@ -74,17 +93,22 @@ ReactInstance::ReactInstance(
74
93
  jsi::Runtime& jsiRuntime = runtime->getRuntime();
75
94
  SystraceSection s("ReactInstance::_runtimeExecutor[Callback]");
76
95
  try {
96
+ ShadowNode::setUseRuntimeShadowNodeReferenceUpdateOnThread(true);
77
97
  callback(jsiRuntime);
78
98
 
79
99
  // If we have first-class support for microtasks,
80
100
  // they would've been called as part of the previous callback.
81
- if (!ReactNativeFeatureFlags::enableMicrotasks()) {
101
+ if (ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) {
82
102
  if (auto timerManager = weakTimerManager.lock()) {
83
103
  timerManager->callReactNativeMicrotasks(jsiRuntime);
84
104
  }
85
105
  }
86
106
  } catch (jsi::JSError& originalError) {
87
- jsErrorHandler->handleFatalError(jsiRuntime, originalError);
107
+ jsErrorHandler->handleError(jsiRuntime, originalError, true);
108
+ } catch (std::exception& ex) {
109
+ jsi::JSError error(
110
+ jsiRuntime, std::string("Non-js exception: ") + ex.what());
111
+ jsErrorHandler->handleError(jsiRuntime, error, true);
88
112
  }
89
113
  });
90
114
  }
@@ -93,13 +117,34 @@ ReactInstance::ReactInstance(
93
117
  if (parentInspectorTarget_) {
94
118
  auto executor = parentInspectorTarget_->executorFromThis();
95
119
 
96
- auto runtimeExecutorThatWaitsForInspectorSetup =
120
+ auto bufferedRuntimeExecutorThatWaitsForInspectorSetup =
97
121
  std::make_shared<BufferedRuntimeExecutor>(runtimeExecutor);
122
+ auto runtimeExecutorThatExecutesAfterInspectorSetup =
123
+ [bufferedRuntimeExecutorThatWaitsForInspectorSetup](
124
+ std::function<void(jsi::Runtime & runtime)>&& callback) {
125
+ bufferedRuntimeExecutorThatWaitsForInspectorSetup->execute(
126
+ std::move(callback));
127
+ };
128
+
129
+ runtimeScheduler_ = createRuntimeScheduler(
130
+ runtimeExecutorThatExecutesAfterInspectorSetup,
131
+ [jsErrorHandler = jsErrorHandler_](
132
+ jsi::Runtime& runtime, jsi::JSError& error) {
133
+ jsErrorHandler->handleError(runtime, error, true);
134
+ });
135
+
136
+ auto runtimeExecutorThatGoesThroughRuntimeScheduler =
137
+ [runtimeScheduler = runtimeScheduler_.get()](
138
+ std::function<void(jsi::Runtime & runtime)>&& callback) {
139
+ runtimeScheduler->scheduleWork(std::move(callback));
140
+ };
98
141
 
99
142
  // This code can execute from any thread, so we need to make sure we set up
100
143
  // the inspector logic in the right one. The callback executes immediately
101
144
  // if we are already in the right thread.
102
- executor([this, runtimeExecutor, runtimeExecutorThatWaitsForInspectorSetup](
145
+ executor([this,
146
+ runtimeExecutorThatGoesThroughRuntimeScheduler,
147
+ bufferedRuntimeExecutorThatWaitsForInspectorSetup](
103
148
  jsinspector_modern::HostTarget& hostTarget) {
104
149
  // Callbacks scheduled through the page target executor are generally
105
150
  // not guaranteed to run (e.g.: if the page target is destroyed)
@@ -110,32 +155,18 @@ ReactInstance::ReactInstance(
110
155
  // creation task to finish before starting the destruction.
111
156
  inspectorTarget_ = &hostTarget.registerInstance(*this);
112
157
  runtimeInspectorTarget_ =
113
- &inspectorTarget_->registerRuntime(*runtime_, runtimeExecutor); // [Windows #13172]
114
- runtimeExecutorThatWaitsForInspectorSetup->flush();
158
+ &inspectorTarget_->registerRuntime(*runtime_, runtimeExecutorThatGoesThroughRuntimeScheduler); // [Windows #13172]
159
+ bufferedRuntimeExecutorThatWaitsForInspectorSetup->flush();
115
160
  });
116
-
117
- // We decorate the runtime executor used everywhere else to wait for the
118
- // inspector to finish its setup.
119
- runtimeExecutor =
120
- [runtimeExecutorThatWaitsForInspectorSetup](
121
- std::function<void(jsi::Runtime & runtime)>&& callback) {
122
- runtimeExecutorThatWaitsForInspectorSetup->execute(
123
- std::move(callback));
124
- };
161
+ } else {
162
+ runtimeScheduler_ = createRuntimeScheduler(
163
+ runtimeExecutor,
164
+ [jsErrorHandler = jsErrorHandler_](
165
+ jsi::Runtime& runtime, jsi::JSError& error) {
166
+ jsErrorHandler->handleError(runtime, error, true);
167
+ });
125
168
  }
126
169
 
127
- runtimeScheduler_ = std::make_shared<RuntimeScheduler>(
128
- runtimeExecutor,
129
- RuntimeSchedulerClock::now,
130
- [jsErrorHandler = jsErrorHandler_](
131
- jsi::Runtime& runtime, jsi::JSError& error) {
132
- jsErrorHandler->handleFatalError(runtime, error);
133
- });
134
- runtimeScheduler_->setPerformanceEntryReporter(
135
- // FIXME: Move creation of PerformanceEntryReporter to here and guarantee
136
- // that its lifetime is the same as the runtime.
137
- PerformanceEntryReporter::getInstance().get());
138
-
139
170
  bufferedRuntimeExecutor_ = std::make_shared<BufferedRuntimeExecutor>(
140
171
  [runtimeScheduler = runtimeScheduler_.get()](
141
172
  std::function<void(jsi::Runtime & runtime)>&& callback) {
@@ -204,47 +235,51 @@ std::string simpleBasename(const std::string& path) {
204
235
  */
205
236
  void ReactInstance::loadScript(
206
237
  std::unique_ptr<const JSBigString> script,
207
- const std::string& sourceURL) {
238
+ const std::string& sourceURL,
239
+ std::function<void(jsi::Runtime& runtime)>&& completion) {
208
240
  auto buffer = std::make_shared<BigStringBuffer>(std::move(script));
209
241
  std::string scriptName = simpleBasename(sourceURL);
210
242
 
211
- runtimeScheduler_->scheduleWork(
212
- [this,
213
- scriptName,
214
- sourceURL,
215
- buffer = std::move(buffer),
216
- weakBufferedRuntimeExecuter = std::weak_ptr<BufferedRuntimeExecutor>(
217
- bufferedRuntimeExecutor_)](jsi::Runtime& runtime) {
218
- SystraceSection s("ReactInstance::loadScript");
219
- bool hasLogger(ReactMarker::logTaggedMarkerBridgelessImpl);
220
- if (hasLogger) {
221
- ReactMarker::logTaggedMarkerBridgeless(
222
- ReactMarker::RUN_JS_BUNDLE_START, scriptName.c_str());
223
- }
243
+ runtimeScheduler_->scheduleWork([this,
244
+ scriptName,
245
+ sourceURL,
246
+ buffer = std::move(buffer),
247
+ weakBufferedRuntimeExecuter =
248
+ std::weak_ptr<BufferedRuntimeExecutor>(
249
+ bufferedRuntimeExecutor_),
250
+ completion](jsi::Runtime& runtime) {
251
+ SystraceSection s("ReactInstance::loadScript");
252
+ bool hasLogger(ReactMarker::logTaggedMarkerBridgelessImpl);
253
+ if (hasLogger) {
254
+ ReactMarker::logTaggedMarkerBridgeless(
255
+ ReactMarker::RUN_JS_BUNDLE_START, scriptName.c_str());
256
+ }
224
257
 
225
- runtime.evaluateJavaScript(buffer, sourceURL);
258
+ runtime.evaluateJavaScript(buffer, sourceURL);
226
259
 
227
- /**
228
- * TODO(T183610671): We need a safe/reliable way to enable the js
229
- * pipeline from javascript. Remove this after we figure that out, or
230
- * after we just remove the js pipeline.
231
- */
232
- if (!jsErrorHandler_->hasHandledFatalError()) {
233
- jsErrorHandler_->setRuntimeReady();
234
- }
260
+ /**
261
+ * TODO(T183610671): We need a safe/reliable way to enable the js
262
+ * pipeline from javascript. Remove this after we figure that out, or
263
+ * after we just remove the js pipeline.
264
+ */
265
+ if (!jsErrorHandler_->hasHandledFatalError()) {
266
+ jsErrorHandler_->setRuntimeReady();
267
+ }
235
268
 
236
- if (hasLogger) {
237
- ReactMarker::logTaggedMarkerBridgeless(
238
- ReactMarker::RUN_JS_BUNDLE_STOP, scriptName.c_str());
239
- ReactMarker::logMarkerBridgeless(
240
- ReactMarker::INIT_REACT_RUNTIME_STOP);
241
- ReactMarker::logMarkerBridgeless(ReactMarker::APP_STARTUP_STOP);
242
- }
243
- if (auto strongBufferedRuntimeExecuter =
244
- weakBufferedRuntimeExecuter.lock()) {
245
- strongBufferedRuntimeExecuter->flush();
246
- }
247
- });
269
+ if (hasLogger) {
270
+ ReactMarker::logTaggedMarkerBridgeless(
271
+ ReactMarker::RUN_JS_BUNDLE_STOP, scriptName.c_str());
272
+ ReactMarker::logMarkerBridgeless(ReactMarker::INIT_REACT_RUNTIME_STOP);
273
+ ReactMarker::logMarkerBridgeless(ReactMarker::APP_STARTUP_STOP);
274
+ }
275
+ if (auto strongBufferedRuntimeExecuter =
276
+ weakBufferedRuntimeExecuter.lock()) {
277
+ strongBufferedRuntimeExecuter->flush();
278
+ }
279
+ if (completion) {
280
+ completion(runtime);
281
+ }
282
+ });
248
283
  }
249
284
 
250
285
  /*
@@ -255,6 +290,12 @@ void ReactInstance::callFunctionOnModule(
255
290
  const std::string& moduleName,
256
291
  const std::string& methodName,
257
292
  folly::dynamic&& args) {
293
+ if (bufferedRuntimeExecutor_ == nullptr) {
294
+ LOG(ERROR)
295
+ << "Calling callFunctionOnModule with null BufferedRuntimeExecutor";
296
+ return;
297
+ }
298
+
258
299
  bufferedRuntimeExecutor_->execute([this,
259
300
  moduleName = moduleName,
260
301
  methodName = methodName,
@@ -377,6 +418,73 @@ void ReactInstance::initializeRuntime(
377
418
 
378
419
  defineReactInstanceFlags(runtime, options);
379
420
 
421
+ defineReadOnlyGlobal(
422
+ runtime,
423
+ "RN$useAlwaysAvailableJSErrorHandling",
424
+ jsi::Value(
425
+ ReactNativeFeatureFlags::useAlwaysAvailableJSErrorHandling()));
426
+
427
+ defineReadOnlyGlobal(
428
+ runtime,
429
+ "RN$isRuntimeReady",
430
+ jsi::Function::createFromHostFunction(
431
+ runtime,
432
+ jsi::PropNameID::forAscii(runtime, "isRuntimeReady"),
433
+ 0,
434
+ [jsErrorHandler = jsErrorHandler_](
435
+ jsi::Runtime& /*runtime*/,
436
+ const jsi::Value& /*unused*/,
437
+ const jsi::Value* /*args*/,
438
+ size_t /*count*/) {
439
+ return jsErrorHandler->isRuntimeReady();
440
+ }));
441
+
442
+ defineReadOnlyGlobal(
443
+ runtime,
444
+ "RN$hasHandledFatalException",
445
+ jsi::Function::createFromHostFunction(
446
+ runtime,
447
+ jsi::PropNameID::forAscii(runtime, "hasHandledFatalException"),
448
+ 0,
449
+ [jsErrorHandler = jsErrorHandler_](
450
+ jsi::Runtime& /*runtime*/,
451
+ const jsi::Value& /*unused*/,
452
+ const jsi::Value* /*args*/,
453
+ size_t /*count*/) {
454
+ return jsErrorHandler->hasHandledFatalError();
455
+ }));
456
+
457
+ defineReadOnlyGlobal(
458
+ runtime,
459
+ "RN$notifyOfFatalException",
460
+ jsi::Function::createFromHostFunction(
461
+ runtime,
462
+ jsi::PropNameID::forAscii(runtime, "notifyOfFatalException"),
463
+ 0,
464
+ [jsErrorHandler = jsErrorHandler_](
465
+ jsi::Runtime& /*runtime*/,
466
+ const jsi::Value& /*unused*/,
467
+ const jsi::Value* /*args*/,
468
+ size_t /*count*/) {
469
+ jsErrorHandler->notifyOfFatalError();
470
+ return jsi::Value::undefined();
471
+ }));
472
+
473
+ defineReadOnlyGlobal(
474
+ runtime,
475
+ "RN$inExceptionHandler",
476
+ jsi::Function::createFromHostFunction(
477
+ runtime,
478
+ jsi::PropNameID::forAscii(runtime, "inExceptionHandler"),
479
+ 0,
480
+ [jsErrorHandler = jsErrorHandler_](
481
+ jsi::Runtime& /*runtime*/,
482
+ const jsi::Value& /*unused*/,
483
+ const jsi::Value* /*args*/,
484
+ size_t /*count*/) {
485
+ return jsErrorHandler->inErrorHandler();
486
+ }));
487
+
380
488
  // TODO(T196834299): We should really use a C++ turbomodule for this
381
489
  defineReadOnlyGlobal(
382
490
  runtime,
@@ -384,7 +492,7 @@ void ReactInstance::initializeRuntime(
384
492
  jsi::Function::createFromHostFunction(
385
493
  runtime,
386
494
  jsi::PropNameID::forAscii(runtime, "handleException"),
387
- 2,
495
+ 3,
388
496
  [jsErrorHandler = jsErrorHandler_](
389
497
  jsi::Runtime& runtime,
390
498
  const jsi::Value& /*unused*/,
@@ -393,26 +501,71 @@ void ReactInstance::initializeRuntime(
393
501
  if (count < 2) {
394
502
  throw jsi::JSError(
395
503
  runtime,
396
- "handleException requires 2 arguments: error, isFatal");
504
+ "handleException requires 3 arguments: error, isFatal, logToConsole (optional)");
397
505
  }
398
506
 
399
507
  auto isFatal = isTruthy(runtime, args[1]);
400
- if (jsErrorHandler->isRuntimeReady()) {
401
- if (isFatal) {
402
- jsErrorHandler->notifyOfFatalError();
508
+
509
+ if (!ReactNativeFeatureFlags::
510
+ useAlwaysAvailableJSErrorHandling()) {
511
+ if (jsErrorHandler->isRuntimeReady()) {
512
+ return jsi::Value(false);
403
513
  }
514
+ }
515
+
516
+ auto jsError =
517
+ jsi::JSError(runtime, jsi::Value(runtime, args[0]));
404
518
 
405
- return jsi::Value(false);
519
+ if (count == 2) {
520
+ jsErrorHandler->handleError(runtime, jsError, isFatal);
521
+ } else {
522
+ auto logToConsole = isTruthy(runtime, args[2]);
523
+ jsErrorHandler->handleError(
524
+ runtime, jsError, isFatal, logToConsole);
406
525
  }
407
526
 
408
- if (isFatal) {
409
- auto jsError =
410
- jsi::JSError(runtime, jsi::Value(runtime, args[0]));
411
- jsErrorHandler->handleFatalError(runtime, jsError);
412
- return jsi::Value(true);
527
+ return jsi::Value(true);
528
+ }));
529
+
530
+ defineReadOnlyGlobal(
531
+ runtime,
532
+ "RN$registerExceptionListener",
533
+ jsi::Function::createFromHostFunction(
534
+ runtime,
535
+ jsi::PropNameID::forAscii(runtime, "registerExceptionListener"),
536
+ 1,
537
+ [errorListeners = std::vector<std::shared_ptr<jsi::Function>>(),
538
+ jsErrorHandler = jsErrorHandler_](
539
+ jsi::Runtime& runtime,
540
+ const jsi::Value& /*unused*/,
541
+ const jsi::Value* args,
542
+ size_t count) mutable {
543
+ if (count < 1) {
544
+ throw jsi::JSError(
545
+ runtime,
546
+ "registerExceptionListener: requires 1 argument: fn");
547
+ }
548
+
549
+ if (!args[0].isObject() ||
550
+ !args[0].getObject(runtime).isFunction(runtime)) {
551
+ throw jsi::JSError(
552
+ runtime,
553
+ "registerExceptionListener: The first argument must be a function");
413
554
  }
414
555
 
415
- return jsi::Value(false);
556
+ auto errorListener = std::make_shared<jsi::Function>(
557
+ args[0].getObject(runtime).getFunction(runtime));
558
+ errorListeners.emplace_back(errorListener);
559
+
560
+ jsErrorHandler->registerErrorListener(
561
+ [weakErrorListener = std::weak_ptr<jsi::Function>(
562
+ errorListener)](jsi::Runtime& runtime, jsi::Value data) {
563
+ if (auto strongErrorListener = weakErrorListener.lock()) {
564
+ strongErrorListener->call(runtime, data);
565
+ }
566
+ });
567
+
568
+ return jsi::Value::undefined();
416
569
  }));
417
570
 
418
571
  defineReadOnlyGlobal(
@@ -59,7 +59,7 @@
59
59
  <WriteLinesToFile File="$(_ReactNativeCodeGenResponseFile)" Lines="@(_ReactNativeCodeGenResponseFileLines)" WriteOnlyWhenDifferent="true" Encoding="Unicode"/>
60
60
 
61
61
  <!-- Execute teh code generation /> -->
62
- <Exec Command="$(_ReactNativeCodeGenToolExecutable) @$(_ReactNativeCodeGenResponseFile)" />
62
+ <Exec Command="&quot;$(_ReactNativeCodeGenToolExecutable)&quot; @&quot;$(_ReactNativeCodeGenResponseFile)&quot;" />
63
63
 
64
64
  <ItemGroup>
65
65
  <Compile Include="$(ReactNativeCodeGenFile)"/>