react-native-windows 0.74.10 → 0.75.0-preview.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 (327) hide show
  1. package/.flowconfig +8 -2
  2. package/Common/Common.vcxproj +8 -0
  3. package/Common/Utilities.cpp +2 -2
  4. package/Directory.Build.targets +5 -0
  5. package/Folly/Folly.vcxproj +10 -2
  6. package/Folly/Folly.vcxproj.filters +0 -7
  7. package/Folly/TEMP_UntilFollyUpdate/ConstexprMath.h +970 -0
  8. package/Folly/TEMP_UntilFollyUpdate/json.cpp +1110 -0
  9. package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.cpp +4 -2
  10. package/Libraries/Animated/AnimatedImplementation.js +2 -0
  11. package/Libraries/Animated/NativeAnimatedHelper.js +4 -0
  12. package/Libraries/Animated/createAnimatedComponent.js +10 -4
  13. package/Libraries/Animated/useAnimatedProps.js +56 -28
  14. package/Libraries/BatchedBridge/MessageQueue.js +1 -0
  15. package/Libraries/Components/Button.js +10 -5
  16. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +11 -2
  17. package/Libraries/Components/Flyout/Flyout.js +10 -10
  18. package/Libraries/Components/Flyout/FlyoutNativeComponent.js +8 -7
  19. package/Libraries/Components/Pressable/Pressable.js +13 -6
  20. package/Libraries/Components/Pressable/Pressable.windows.js +13 -6
  21. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +4 -0
  22. package/Libraries/Components/ScrollView/ScrollView.js +109 -29
  23. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +6 -0
  24. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +6 -0
  25. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +13 -1
  26. package/Libraries/Components/StatusBar/StatusBar.js +1 -21
  27. package/Libraries/Components/Switch/Switch.windows.js +2 -0
  28. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +0 -15
  29. package/Libraries/Components/TextInput/InputAccessoryView.js +10 -1
  30. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +0 -12
  31. package/Libraries/Components/TextInput/TextInput.d.ts +0 -19
  32. package/Libraries/Components/TextInput/TextInput.js +20 -73
  33. package/Libraries/Components/TextInput/TextInput.windows.js +21 -75
  34. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +27 -12
  35. package/Libraries/Components/Touchable/Touchable.js +2 -2
  36. package/Libraries/Components/Touchable/TouchableHighlight.d.ts +4 -10
  37. package/Libraries/Components/Touchable/TouchableHighlight.js +3 -1
  38. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +3 -1
  39. package/Libraries/Components/Touchable/TouchableOpacity.d.ts +4 -32
  40. package/Libraries/Components/Touchable/TouchableOpacity.js +3 -1
  41. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +3 -1
  42. package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +8 -0
  43. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +117 -111
  44. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +129 -110
  45. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -0
  46. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  47. package/Libraries/Components/View/ReactNativeViewAttributes.windows.js +1 -0
  48. package/Libraries/Components/View/View.js +0 -11
  49. package/Libraries/Components/View/View.windows.js +0 -11
  50. package/Libraries/Components/View/ViewAccessibility.js +4 -4
  51. package/Libraries/Components/View/ViewAccessibility.windows.js +4 -4
  52. package/Libraries/Components/View/ViewPropTypes.d.ts +21 -59
  53. package/Libraries/Components/View/ViewPropTypes.js +7 -0
  54. package/Libraries/Components/View/ViewPropTypes.windows.js +7 -0
  55. package/Libraries/Core/Devtools/loadBundleFromServer.js +3 -3
  56. package/Libraries/Core/Devtools/loadBundleFromServer.windows.js +153 -0
  57. package/Libraries/Core/Devtools/parseErrorStack.js +5 -5
  58. package/Libraries/Core/Devtools/parseHermesStack.js +22 -16
  59. package/Libraries/Core/ErrorHandlers.js +116 -0
  60. package/Libraries/Core/ExceptionsManager.js +2 -2
  61. package/Libraries/Core/ReactNativeVersion.js +3 -3
  62. package/Libraries/Core/setUpDeveloperTools.js +3 -1
  63. package/Libraries/Core/setUpPerformance.js +6 -4
  64. package/Libraries/Core/setUpReactDevTools.js +70 -10
  65. package/Libraries/Core/setUpTimers.js +50 -31
  66. package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
  67. package/Libraries/Image/Image.android.js +23 -13
  68. package/Libraries/Image/Image.d.ts +14 -15
  69. package/Libraries/Image/Image.ios.js +21 -11
  70. package/Libraries/Image/Image.windows.js +21 -11
  71. package/Libraries/Image/ImageProps.js +16 -5
  72. package/Libraries/Image/ImageTypes.flow.js +7 -2
  73. package/Libraries/Image/ImageUtils.js +1 -0
  74. package/Libraries/Image/ImageViewNativeComponent.js +2 -1
  75. package/Libraries/Inspector/ElementBox.js +6 -3
  76. package/Libraries/Inspector/ElementProperties.js +1 -1
  77. package/Libraries/Interaction/TouchHistoryMath.js +4 -4
  78. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +6 -26
  79. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  80. package/Libraries/LogBox/Data/LogBoxData.js +39 -29
  81. package/Libraries/LogBox/Data/LogBoxLog.js +114 -2
  82. package/Libraries/LogBox/Data/parseLogBoxLog.js +168 -53
  83. package/Libraries/LogBox/LogBox.js +29 -12
  84. package/Libraries/LogBox/LogBoxNotificationContainer.js +4 -0
  85. package/Libraries/LogBox/UI/LogBoxInspector.js +8 -70
  86. package/Libraries/LogBox/UI/LogBoxInspectorBody.js +87 -0
  87. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -42
  88. package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +58 -0
  89. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +5 -66
  90. package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +5 -66
  91. package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +76 -0
  92. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +8 -5
  93. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js +8 -5
  94. package/Libraries/LogBox/UI/LogBoxNotification.js +13 -152
  95. package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +63 -0
  96. package/Libraries/LogBox/UI/LogBoxNotificationDismissButton.js +67 -0
  97. package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +57 -0
  98. package/Libraries/NativeComponent/BaseViewConfig.android.js +5 -0
  99. package/Libraries/NativeComponent/BaseViewConfig.ios.js +5 -0
  100. package/Libraries/NativeComponent/BaseViewConfig.windows.js +5 -0
  101. package/Libraries/NativeComponent/NativeComponentRegistry.js +12 -5
  102. package/Libraries/NativeComponent/StaticViewConfigValidator.js +3 -0
  103. package/Libraries/Network/XMLHttpRequest.js +5 -1
  104. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +3 -3
  105. package/Libraries/Pressability/Pressability.js +3 -51
  106. package/Libraries/Pressability/Pressability.windows.js +3 -51
  107. package/Libraries/ReactNative/AppRegistry.d.ts +4 -0
  108. package/Libraries/ReactNative/AppRegistry.js +2 -4
  109. package/Libraries/ReactNative/BridgelessUIManager.js +1 -21
  110. package/Libraries/ReactNative/FabricUIManager.js +0 -51
  111. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +1 -0
  112. package/Libraries/ReactNative/RendererImplementation.js +20 -2
  113. package/Libraries/ReactNative/UIManager.d.ts +0 -21
  114. package/Libraries/ReactNative/UIManagerProperties.js +0 -3
  115. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +5 -341
  116. package/Libraries/ReactNative/getNativeComponentAttributes.js +8 -8
  117. package/Libraries/Renderer/implementations/ReactFabric-dev.js +15682 -27088
  118. package/Libraries/Renderer/implementations/ReactFabric-prod.js +5082 -4381
  119. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3480 -2571
  120. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +15943 -27543
  121. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5303 -4606
  122. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3450 -2572
  123. package/Libraries/Renderer/shims/ReactFabric.js +2 -2
  124. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  125. package/Libraries/Renderer/shims/ReactNative.js +2 -3
  126. package/Libraries/Renderer/shims/ReactNativeTypes.js +24 -3
  127. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -2
  128. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  129. package/Libraries/Share/Share.d.ts +16 -10
  130. package/Libraries/Share/Share.js +14 -15
  131. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -1
  132. package/Libraries/StyleSheet/StyleSheet.js +3 -10
  133. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +21 -21
  134. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -18
  135. package/Libraries/StyleSheet/flattenStyle.js +1 -0
  136. package/Libraries/StyleSheet/processFilter.js +132 -0
  137. package/Libraries/StyleSheet/processTransform.js +18 -3
  138. package/Libraries/Text/Text.js +151 -128
  139. package/Libraries/Text/Text.windows.js +144 -127
  140. package/Libraries/Text/TextNativeComponent.js +5 -4
  141. package/Libraries/Text/TextProps.js +6 -6
  142. package/Libraries/Text/TextProps.windows.js +6 -6
  143. package/Libraries/TurboModule/TurboModuleRegistry.js +2 -1
  144. package/Libraries/Types/CodegenTypes.js +3 -0
  145. package/Libraries/Utilities/{LoadingView.android.js → DevLoadingView.js} +33 -11
  146. package/Libraries/Utilities/Dimensions.js +1 -0
  147. package/Libraries/Utilities/HMRClient.js +36 -8
  148. package/Libraries/Utilities/HMRClientProdShim.js +1 -0
  149. package/Libraries/Utilities/NativePlatformConstantsWin.js +2 -2
  150. package/Libraries/Utilities/Platform.android.js +4 -4
  151. package/Libraries/Utilities/RCTLog.js +1 -0
  152. package/Libraries/Utilities/ReactNativeTestTools.js +12 -24
  153. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +11 -6
  154. package/Libraries/__tests__/ViewWindows-test.js +6 -6
  155. package/Libraries/promiseRejectionTrackingOptions.js +1 -0
  156. package/Microsoft.ReactNative/Base/FollyIncludes.h +1 -1
  157. package/Microsoft.ReactNative/ComponentView.idl +0 -17
  158. package/Microsoft.ReactNative/Fabric/AbiState.cpp +3 -45
  159. package/Microsoft.ReactNative/Fabric/AbiState.h +0 -6
  160. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +10 -6
  161. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +4 -4
  162. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +12 -3
  163. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +1 -1
  164. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -12
  165. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +1 -2
  166. package/Microsoft.ReactNative/Fabric/Composition/UriImageManager.cpp +9 -3
  167. package/Microsoft.ReactNative/Fabric/Composition/UriImageManager.h +1 -1
  168. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +11 -18
  169. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +3 -5
  170. package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +23 -11
  171. package/Microsoft.ReactNative/Fabric/WindowsImageManager.h +5 -2
  172. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +2 -10
  173. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +107 -36
  174. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +18 -12
  175. package/Microsoft.ReactNative/Modules/DevSettingsModule.cpp +4 -0
  176. package/Microsoft.ReactNative/Modules/DevSettingsModule.h +1 -0
  177. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.cpp +1 -2
  178. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +7 -4
  179. package/Microsoft.ReactNative/Modules/NativeUIManager.h +1 -1
  180. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.cpp +2 -2
  181. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.h +3 -3
  182. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -17
  183. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  184. package/Microsoft.ReactNative/Timer.idl +1 -3
  185. package/Microsoft.ReactNative/Utils/BatchingEventEmitter.cpp +1 -1
  186. package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +2 -3
  187. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +1 -1
  188. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +2 -2
  189. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +1 -1
  190. package/Microsoft.ReactNative/packages.lock.json +45 -72
  191. package/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h +1 -1
  192. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +5 -0
  193. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -0
  194. package/Microsoft.ReactNative.Cxx/TurboModuleProvider.cpp +14 -6
  195. package/Microsoft.ReactNative.Cxx/TurboModuleProvider.h +2 -2
  196. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +1 -1
  197. package/Microsoft.ReactNative.Managed/packages.lock.json +3 -3
  198. package/PropertySheets/ARM64EC.props +13 -0
  199. package/PropertySheets/Application/ARM64EC.props +13 -0
  200. package/PropertySheets/DynamicLibrary/ARM64EC.props +13 -0
  201. package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +4 -4
  202. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  203. package/PropertySheets/JSEngine.props +2 -0
  204. package/PropertySheets/StaticLibrary/ARM64EC.props +13 -0
  205. package/README.md +21 -21
  206. package/ReactCommon/ReactCommon.vcxproj +11 -1
  207. package/ReactCommon/ReactCommon.vcxproj.filters +19 -12
  208. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +67 -0
  209. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.h +180 -0
  210. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +351 -0
  211. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +6 -3
  212. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Base.h +152 -0
  213. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Bridging.h +2 -1
  214. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +13 -15
  215. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/EventEmitter.h +137 -0
  216. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Function.h +283 -0
  217. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.cpp +7 -10
  218. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +162 -0
  219. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +2 -4
  220. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +33 -8
  221. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/JSRuntimeFactory.cpp +45 -0
  222. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/JSRuntimeFactory.h +67 -0
  223. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +104 -74
  224. package/Scripts/StripAdditionalPlatformsFromNuspec.ps1 +1 -1
  225. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +10 -6
  226. package/Scripts/rnw-dependencies.ps1 +36 -23
  227. package/Shared/HermesRuntimeHolder.cpp +19 -1
  228. package/Shared/HermesRuntimeHolder.h +8 -1
  229. package/Shared/HermesSamplingProfiler.cpp +1 -2
  230. package/Shared/Networking/WinRTWebSocketResource.cpp +3 -3
  231. package/Shared/OInstance.cpp +1 -2
  232. package/Shared/Shared.vcxitems +21 -15
  233. package/Shared/Shared.vcxitems.filters +8 -3
  234. package/Shared/Threading/BatchingQueueThread.cpp +6 -2
  235. package/Shared/Threading/BatchingQueueThread.h +2 -2
  236. package/Shared/Utils/CppWinrtLessExceptions.h +2 -2
  237. package/codegen/NativeAppStateSpec.g.h +8 -8
  238. package/codegen/NativeBlobModuleSpec.g.h +0 -10
  239. package/codegen/NativeDOMSpec.g.h +136 -0
  240. package/codegen/NativeDevSettingsSpec.g.h +11 -5
  241. package/codegen/NativeIdleCallbacksSpec.g.h +64 -0
  242. package/codegen/NativeIntersectionObserverSpec.g.h +14 -14
  243. package/codegen/NativeMicrotasksSpec.g.h +34 -0
  244. package/codegen/NativePerformanceSpec.g.h +35 -7
  245. package/codegen/NativePlatformConstantsWindowsSpec.g.h +81 -0
  246. package/codegen/NativePushNotificationManagerIOSSpec.g.h +15 -19
  247. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +111 -39
  248. package/codegen/NativeUIManagerSpec.g.h +5 -17
  249. package/codegen/react/components/rnwcore/Props.cpp +1 -1
  250. package/codegen/react/components/rnwcore/Props.h +16 -12
  251. package/codegen/react/components/rnwcore/States.h +0 -26
  252. package/codegen/rnwcoreJSI-generated.cpp +688 -463
  253. package/codegen/rnwcoreJSI.h +1374 -2867
  254. package/fmt/TEMP_UntilFmtUpdate/core.h +2925 -0
  255. package/fmt/fmt.vcxproj +10 -2
  256. package/jest/mockComponent.js +7 -0
  257. package/jest/renderer.js +25 -14
  258. package/jest/setup.js +19 -13
  259. package/package.json +29 -27
  260. package/rn-get-polyfills.js +1 -0
  261. package/src/private/core/composeStyles.js +27 -0
  262. package/src/private/featureflags/ReactNativeFeatureFlags.js +93 -33
  263. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
  264. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +56 -0
  265. package/src/private/fusebox/setUpFuseboxReactDevToolsDispatcher.js +108 -0
  266. package/src/private/specs/modules/NativeBlobModule.js +4 -2
  267. package/src/private/specs/modules/NativeDevSettings.js +1 -0
  268. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +0 -4
  269. package/src/private/specs/modules/NativeUIManager.js +0 -7
  270. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +24 -24
  271. package/src/private/webapis/dom/nodes/ReactNativeElement.js +11 -14
  272. package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +2 -3
  273. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +24 -54
  274. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -13
  275. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +468 -0
  276. package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +413 -0
  277. package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +4 -4
  278. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +4 -4
  279. package/src/private/webapis/dom/oldstylecollections/NodeList.js +5 -5
  280. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
  281. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
  282. package/src/private/webapis/performance/EventCounts.js +1 -1
  283. package/src/private/webapis/performance/MemoryInfo.js +9 -9
  284. package/src/private/webapis/performance/Performance.js +10 -56
  285. package/src/private/webapis/performance/PerformanceObserver.js +30 -22
  286. package/src/private/webapis/performance/RawPerformanceEntry.js +2 -7
  287. package/src/private/webapis/performance/ReactNativeStartupTiming.js +18 -18
  288. package/src/private/webapis/performance/UserTiming.js +63 -0
  289. package/src/private/webapis/performance/{NativePerformance.js → specs/NativePerformance.js} +3 -2
  290. package/src/private/webapis/performance/{NativePerformanceObserver.js → specs/NativePerformanceObserver.js} +2 -2
  291. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformance.js +1 -1
  292. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformanceObserver.js +3 -4
  293. package/stubs/glog/logging.h +1 -0
  294. package/template/cpp-lib/proj/MyLib.vcxproj +1 -1
  295. package/template/cs-lib/proj/MyLib.csproj +1 -1
  296. package/template/metro.config.js +13 -2
  297. package/templates/cpp-app/template.config.js +1 -1
  298. package/templates/cpp-lib/example/metro.config.js +2 -2
  299. package/templates/cpp-lib/template.config.js +1 -1
  300. package/templates/old/generateWrapper.js +4 -1
  301. package/types/modules/globals.d.ts +4 -0
  302. package/Libraries/Lists/FlatList.windows.js +0 -717
  303. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -13
  304. package/Libraries/Utilities/LoadingView.ios.js +0 -50
  305. package/Libraries/Utilities/LoadingView.js +0 -16
  306. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +0 -178
  307. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.cpp +0 -39
  308. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.h +0 -31
  309. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +0 -137
  310. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +0 -2375
  311. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +0 -40
  312. package/codegen/NativeAnimationsDebugModuleSpec.g.h +0 -40
  313. package/codegen/NativePlatformConstantsWinSpec.g.h +0 -81
  314. package/jest/ReactNativeInternalFeatureFlagsMock.js +0 -13
  315. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +0 -44
  316. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +0 -92
  317. package/src/private/specs/modules/NativeAnimationsDebugModule.js +0 -20
  318. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +0 -85
  319. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +0 -80
  320. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +0 -161
  321. package/src/private/webapis/performance/__tests__/EventCounts-test.js +0 -116
  322. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +0 -82
  323. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +0 -108
  324. package/src/private/webapis/performance/__tests__/Performance-test.js +0 -117
  325. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +0 -208
  326. package/template/metro.devMode.config.js +0 -56
  327. /package/src/private/specs/modules/{NativePlatformConstantsWin.js → NativePlatformConstantsWindows.js} +0 -0
@@ -0,0 +1,162 @@
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 <memory>
11
+ #include <string>
12
+ #include <unordered_map>
13
+
14
+ #include <jsi/jsi.h>
15
+
16
+ #include <ReactCommon/CallInvoker.h>
17
+ #include <EventEmitter.h> // [Windows]
18
+
19
+ namespace facebook::react {
20
+
21
+ /**
22
+ * For now, support the same set of return types as existing impl.
23
+ * This can be improved to support richer typed objects.
24
+ */
25
+ enum TurboModuleMethodValueKind {
26
+ VoidKind,
27
+ BooleanKind,
28
+ NumberKind,
29
+ StringKind,
30
+ ObjectKind,
31
+ ArrayKind,
32
+ FunctionKind,
33
+ PromiseKind,
34
+ };
35
+
36
+ /**
37
+ * Determines TurboModuleMethodValueKind based on the jsi::Value type.
38
+ */
39
+ TurboModuleMethodValueKind getTurboModuleMethodValueKind(
40
+ jsi::Runtime& rt,
41
+ const jsi::Value* value);
42
+
43
+ class TurboCxxModule;
44
+ class TurboModuleBinding;
45
+
46
+ /**
47
+ * Base HostObject class for every module to be exposed to JS
48
+ */
49
+ class JSI_EXPORT TurboModule : public facebook::jsi::HostObject {
50
+ public:
51
+ TurboModule(std::string name, std::shared_ptr<CallInvoker> jsInvoker);
52
+
53
+ // Note: keep this method declared inline to avoid conflicts
54
+ // between RTTI and non-RTTI compilation units
55
+ facebook::jsi::Value get(
56
+ facebook::jsi::Runtime& runtime,
57
+ const facebook::jsi::PropNameID& propName) override {
58
+ {
59
+ auto prop = create(runtime, propName);
60
+ // If we have a JS wrapper, cache the result of this lookup
61
+ // We don't cache misses, to allow for methodMap_ to dynamically be
62
+ // extended
63
+ if (jsRepresentation_ && !prop.isUndefined()) {
64
+ jsRepresentation_->lock(runtime).asObject(runtime).setProperty(
65
+ runtime, propName, prop);
66
+ }
67
+ return prop;
68
+ }
69
+ }
70
+
71
+ virtual std::vector<facebook::jsi::PropNameID> getPropertyNames(
72
+ facebook::jsi::Runtime& runtime) override {
73
+ std::vector<jsi::PropNameID> result;
74
+ result.reserve(methodMap_.size());
75
+ for (auto it = methodMap_.cbegin(); it != methodMap_.cend(); ++it) {
76
+ result.push_back(jsi::PropNameID::forUtf8(runtime, it->first));
77
+ }
78
+ return result;
79
+ }
80
+
81
+ protected:
82
+ const std::string name_;
83
+ std::shared_ptr<CallInvoker> jsInvoker_;
84
+
85
+ struct MethodMetadata {
86
+ size_t argCount;
87
+ facebook::jsi::Value (*invoker)(
88
+ facebook::jsi::Runtime& rt,
89
+ TurboModule& turboModule,
90
+ const facebook::jsi::Value* args,
91
+ size_t count);
92
+ };
93
+ std::unordered_map<std::string, MethodMetadata> methodMap_;
94
+ std::unordered_map<std::string, std::shared_ptr<IAsyncEventEmitter>>
95
+ eventEmitterMap_;
96
+
97
+ using ArgFactory =
98
+ std::function<void(jsi::Runtime& runtime, std::vector<jsi::Value>& args)>;
99
+
100
+ /**
101
+ * Calls RCTDeviceEventEmitter.emit to JavaScript, with given event name and
102
+ * an optional list of arguments.
103
+ * If present, argFactory is a callback used to construct extra arguments,
104
+ * e.g.
105
+ *
106
+ * emitDeviceEvent(rt, "myCustomEvent",
107
+ * [](jsi::Runtime& rt, std::vector<jsi::Value>& args) {
108
+ * args.emplace_back(jsi::Value(true));
109
+ * args.emplace_back(jsi::Value(42));
110
+ * });
111
+ */
112
+ void emitDeviceEvent(
113
+ const std::string& eventName,
114
+ ArgFactory argFactory = nullptr);
115
+
116
+ // Backwards compatibility version
117
+ void emitDeviceEvent(
118
+ jsi::Runtime& /*runtime*/,
119
+
120
+ const std::string& eventName,
121
+ ArgFactory argFactory = nullptr) {
122
+ emitDeviceEvent(eventName, std::move(argFactory));
123
+ }
124
+
125
+ virtual jsi::Value create(
126
+ jsi::Runtime& runtime,
127
+ const jsi::PropNameID& propName) {
128
+ std::string propNameUtf8 = propName.utf8(runtime);
129
+ if (auto methodIter = methodMap_.find(propNameUtf8);
130
+ methodIter != methodMap_.end()) {
131
+ const MethodMetadata& meta = methodIter->second;
132
+ return jsi::Function::createFromHostFunction(
133
+ runtime,
134
+ propName,
135
+ static_cast<unsigned int>(meta.argCount),
136
+ [this, meta](
137
+ jsi::Runtime& rt,
138
+ [[maybe_unused]] const jsi::Value& thisVal,
139
+ const jsi::Value* args,
140
+ size_t count) { return meta.invoker(rt, *this, args, count); });
141
+ } else if (auto eventEmitterIter = eventEmitterMap_.find(propNameUtf8);
142
+ eventEmitterIter != eventEmitterMap_.end()) {
143
+ return eventEmitterIter->second->get(runtime, jsInvoker_);
144
+ }
145
+ // Neither Method nor EventEmitter were not found, let JS decide what to do.
146
+ return facebook::jsi::Value::undefined();
147
+ }
148
+
149
+ private:
150
+ friend class TurboCxxModule;
151
+ friend class TurboModuleBinding;
152
+ std::unique_ptr<jsi::WeakObject> jsRepresentation_;
153
+ };
154
+
155
+ /**
156
+ * An app/platform-specific provider function to get an instance of a module
157
+ * given a name.
158
+ */
159
+ using TurboModuleProviderFunctionType =
160
+ std::function<std::shared_ptr<TurboModule>(const std::string& name)>;
161
+
162
+ } // namespace facebook::react
@@ -11,9 +11,8 @@
11
11
  #include <string>
12
12
 
13
13
  #include <jsi/jsi.h>
14
-
15
- #include <ReactCommon/CallInvoker.h>
16
14
  #include <CallbackWrapper.h> // [Windows]
15
+ #include <LongLivedObject.h> // [Windows]
17
16
 
18
17
  namespace facebook::react {
19
18
 
@@ -26,7 +25,6 @@ struct Promise : public LongLivedObject {
26
25
  void resolve(const jsi::Value& result);
27
26
  void reject(const std::string& error);
28
27
 
29
- jsi::Runtime& runtime_;
30
28
  jsi::Function resolve_;
31
29
  jsi::Function reject_;
32
30
  };
@@ -56,4 +54,4 @@ class RAIICallbackWrapperDestroyer {
56
54
  std::weak_ptr<CallbackWrapper> callbackWrapper_;
57
55
  };
58
56
 
59
- } // namespace facebook::react
57
+ } // namespace facebook::react
@@ -111,17 +111,15 @@ ScrollViewProps::ScrollViewProps(
111
111
  // [Windows fix
112
112
  (Float)1)),
113
113
  // Windows]
114
- endDraggingSensitivityVelocityMultiplier(
114
+ enableSyncOnScroll(
115
115
  CoreFeatures::enablePropIteratorSetter
116
- ? sourceProps.endDraggingSensitivityVelocityMultiplier
116
+ ? sourceProps.enableSyncOnScroll
117
117
  : convertRawProp(
118
118
  context,
119
119
  rawProps,
120
- "endDraggingSensitivityVelocityMultiplier",
121
- sourceProps.endDraggingSensitivityVelocityMultiplier,
122
- // [Windows fix
123
- (Float)0)),
124
- // Windows]
120
+ "enableSyncOnScroll",
121
+ sourceProps.enableSyncOnScroll,
122
+ false)),
125
123
  directionalLockEnabled(
126
124
  CoreFeatures::enablePropIteratorSetter
127
125
  ? sourceProps.directionalLockEnabled
@@ -229,6 +227,23 @@ ScrollViewProps::ScrollViewProps(
229
227
  "showsVerticalScrollIndicator",
230
228
  sourceProps.showsVerticalScrollIndicator,
231
229
  true)),
230
+ persistentScrollbar(
231
+ CoreFeatures::enablePropIteratorSetter
232
+ ? sourceProps.persistentScrollbar
233
+ : convertRawProp(
234
+ context,
235
+ rawProps,
236
+ "persistentScrollbar",
237
+ sourceProps.persistentScrollbar,
238
+ true)),
239
+ horizontal(
240
+ CoreFeatures::enablePropIteratorSetter ? sourceProps.horizontal
241
+ : convertRawProp(
242
+ context,
243
+ rawProps,
244
+ "horizontal",
245
+ sourceProps.horizontal,
246
+ true)),
232
247
  scrollEventThrottle(
233
248
  CoreFeatures::enablePropIteratorSetter
234
249
  ? sourceProps.scrollEventThrottle
@@ -381,11 +396,14 @@ void ScrollViewProps::setProp(
381
396
  RAW_SET_PROP_SWITCH_CASE_BASIC(maximumZoomScale);
382
397
  RAW_SET_PROP_SWITCH_CASE_BASIC(minimumZoomScale);
383
398
  RAW_SET_PROP_SWITCH_CASE_BASIC(scrollEnabled);
399
+ RAW_SET_PROP_SWITCH_CASE_BASIC(enableSyncOnScroll);
400
+ RAW_SET_PROP_SWITCH_CASE_BASIC(endDraggingSensitivityMultiplier);
384
401
  RAW_SET_PROP_SWITCH_CASE_BASIC(pagingEnabled);
385
402
  RAW_SET_PROP_SWITCH_CASE_BASIC(pinchGestureEnabled);
386
403
  RAW_SET_PROP_SWITCH_CASE_BASIC(scrollsToTop);
387
404
  RAW_SET_PROP_SWITCH_CASE_BASIC(showsHorizontalScrollIndicator);
388
- RAW_SET_PROP_SWITCH_CASE_BASIC(showsVerticalScrollIndicator);
405
+ RAW_SET_PROP_SWITCH_CASE_BASIC(persistentScrollbar);
406
+ RAW_SET_PROP_SWITCH_CASE_BASIC(horizontal);
389
407
  RAW_SET_PROP_SWITCH_CASE_BASIC(scrollEventThrottle);
390
408
  RAW_SET_PROP_SWITCH_CASE_BASIC(zoomScale);
391
409
  RAW_SET_PROP_SWITCH_CASE_BASIC(contentInset);
@@ -491,6 +509,12 @@ SharedDebugStringConvertibleList ScrollViewProps::getDebugProps() const {
491
509
  "showsVerticalScrollIndicator",
492
510
  showsVerticalScrollIndicator,
493
511
  defaultScrollViewProps.showsVerticalScrollIndicator),
512
+ debugStringConvertibleItem(
513
+ "persistentScrollbar",
514
+ persistentScrollbar,
515
+ defaultScrollViewProps.persistentScrollbar),
516
+ debugStringConvertibleItem(
517
+ "horizontal", horizontal, defaultScrollViewProps.horizontal),
494
518
  debugStringConvertibleItem(
495
519
  "scrollEventThrottle",
496
520
  scrollEventThrottle,
@@ -533,3 +557,4 @@ SharedDebugStringConvertibleList ScrollViewProps::getDebugProps() const {
533
557
  #endif
534
558
 
535
559
  } // namespace facebook::react
560
+
@@ -0,0 +1,45 @@
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
+ #include "JSRuntimeFactory.h"
9
+ #include <jsinspector-modern/ConsoleMessage.h>
10
+ #include <jsinspector-modern/FallbackRuntimeAgentDelegate.h>
11
+
12
+ namespace facebook::react {
13
+
14
+ jsi::Runtime& JSIRuntimeHolder::getRuntime() noexcept {
15
+ return *runtime_;
16
+ }
17
+
18
+ JSIRuntimeHolder::JSIRuntimeHolder(std::unique_ptr<jsi::Runtime> runtime)
19
+ : runtime_(std::move(runtime)) {
20
+ assert(runtime_ != nullptr);
21
+ }
22
+
23
+ void JSIRuntimeHolder::addConsoleMessage(jsi::Runtime& runtime, jsinspector_modern::ConsoleMessage message) {
24
+ return;
25
+ }
26
+
27
+ bool JSIRuntimeHolder::supportsConsole() const{
28
+ return false;
29
+ }
30
+
31
+ std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate>
32
+ JSIRuntimeHolder::createAgentDelegate(
33
+ jsinspector_modern::FrontendChannel frontendChannel,
34
+ jsinspector_modern::SessionState& sessionState,
35
+ std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate::ExportedState>,
36
+ const jsinspector_modern::ExecutionContextDescription&
37
+ executionContextDescription,
38
+ RuntimeExecutor runtimeExecutor) {
39
+ (void)executionContextDescription;
40
+ (void)runtimeExecutor;
41
+ return std::make_unique<jsinspector_modern::FallbackRuntimeAgentDelegate>(
42
+ std::move(frontendChannel), sessionState, runtime_->description());
43
+ }
44
+
45
+ } // namespace facebook::react
@@ -0,0 +1,67 @@
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/RuntimeExecutor.h>
11
+ #include <cxxreact/MessageQueueThread.h>
12
+ #include <jsinspector-modern/ConsoleMessage.h>
13
+ #include <jsi/jsi.h>
14
+ #include <jsinspector-modern/ReactCdp.h>
15
+
16
+
17
+ namespace facebook::react {
18
+
19
+ /**
20
+ * An interface that represents an instance of a JS VM
21
+ */
22
+ class JSRuntime : public jsinspector_modern::RuntimeTargetDelegate {
23
+ public:
24
+ virtual jsi::Runtime& getRuntime() noexcept = 0;
25
+
26
+ virtual ~JSRuntime() = default;
27
+
28
+ virtual void addConsoleMessage(jsi::Runtime& runtime, jsinspector_modern::ConsoleMessage message) = 0;
29
+ virtual bool supportsConsole() const = 0;
30
+ };
31
+
32
+ /**
33
+ * Interface for a class that creates instances of a JS VM
34
+ */
35
+ class JSRuntimeFactory {
36
+ public:
37
+ virtual std::unique_ptr<JSRuntime> createJSRuntime(
38
+ std::shared_ptr<MessageQueueThread> msgQueueThread) noexcept = 0;
39
+
40
+ virtual ~JSRuntimeFactory() = default;
41
+ };
42
+
43
+ /**
44
+ * Utility class for creating a JSRuntime from a uniquely owned jsi::Runtime.
45
+ */
46
+ class JSIRuntimeHolder : public JSRuntime {
47
+ public:
48
+ jsi::Runtime& getRuntime() noexcept override;
49
+ void addConsoleMessage(jsi::Runtime& runtime, jsinspector_modern::ConsoleMessage message) override;
50
+ bool supportsConsole() const override;
51
+
52
+ std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate> createAgentDelegate(
53
+ jsinspector_modern::FrontendChannel frontendChannel,
54
+ jsinspector_modern::SessionState& sessionState,
55
+ std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate::ExportedState>
56
+ previouslyExportedState,
57
+ const jsinspector_modern::ExecutionContextDescription&
58
+ executionContextDescription,
59
+ RuntimeExecutor runtimeExecutor) override;
60
+
61
+ explicit JSIRuntimeHolder(std::unique_ptr<jsi::Runtime> runtime);
62
+
63
+ private:
64
+ std::unique_ptr<jsi::Runtime> runtime_;
65
+ };
66
+
67
+ } // namespace facebook::react
@@ -7,6 +7,7 @@
7
7
 
8
8
  #include "ReactInstance.h"
9
9
 
10
+ #include <ReactCommon/RuntimeExecutor.h>
10
11
  #include <cxxreact/ErrorUtils.h>
11
12
  #include <cxxreact/JSBigString.h>
12
13
  #include <cxxreact/JSExecutor.h>
@@ -15,14 +16,13 @@
15
16
  #include <glog/logging.h>
16
17
  #include <jsi/JSIDynamic.h>
17
18
  #include <jsi/instrumentation.h>
19
+ #include <jsinspector-modern/HostTarget.h>
18
20
  #include <jsireact/JSIExecutor.h>
19
21
  #include <react/featureflags/ReactNativeFeatureFlags.h>
20
22
  #include <react/renderer/runtimescheduler/RuntimeSchedulerBinding.h>
21
- // [Windows
22
23
  #include <react/utils/jsi-utils.h>
23
- // Windows]
24
24
  #include <iostream>
25
- #include <tuple>
25
+ #include <memory>
26
26
  #include <utility>
27
27
 
28
28
  namespace facebook::react {
@@ -31,86 +31,110 @@ ReactInstance::ReactInstance(
31
31
  std::unique_ptr<JSRuntime> runtime,
32
32
  std::shared_ptr<MessageQueueThread> jsMessageQueueThread,
33
33
  std::shared_ptr<TimerManager> timerManager,
34
- JsErrorHandler::JsErrorHandlingFunc jsErrorHandlingFunc,
35
- jsinspector_modern::PageTarget* parentInspectorTarget)
34
+ JsErrorHandler::OnJsError onJsError,
35
+ jsinspector_modern::HostTarget* parentInspectorTarget)
36
36
  : runtime_(std::move(runtime)),
37
37
  jsMessageQueueThread_(jsMessageQueueThread),
38
38
  timerManager_(std::move(timerManager)),
39
- jsErrorHandler_(jsErrorHandlingFunc),
40
- hasFatalJsError_(std::make_shared<bool>(false)),
39
+ jsErrorHandler_(std::make_shared<JsErrorHandler>(std::move(onJsError))),
41
40
  parentInspectorTarget_(parentInspectorTarget) {
42
- auto runtimeExecutor = [weakRuntime = std::weak_ptr<JSRuntime>(runtime_),
43
- weakTimerManager =
44
- std::weak_ptr<TimerManager>(timerManager_),
45
- weakJsMessageQueueThread =
46
- std::weak_ptr<MessageQueueThread>(
47
- jsMessageQueueThread_),
48
- weakHasFatalJsError =
49
- std::weak_ptr<bool>(hasFatalJsError_)](
50
- std::function<void(jsi::Runtime & runtime)>&&
51
- callback) {
52
- if (std::shared_ptr<bool> sharedHasFatalJsError =
53
- weakHasFatalJsError.lock()) {
54
- if (*sharedHasFatalJsError) {
55
- LOG(INFO)
56
- << "Calling into JS using runtimeExecutor but hasFatalJsError_ is true";
57
- return;
58
- }
41
+ RuntimeExecutor runtimeExecutor = [weakRuntime = std::weak_ptr(runtime_),
42
+ weakTimerManager =
43
+ std::weak_ptr(timerManager_),
44
+ weakJsThread =
45
+ std::weak_ptr(jsMessageQueueThread_),
46
+ weakJsErrorHander = std::weak_ptr(
47
+ jsErrorHandler_)](auto callback) {
48
+ auto jsErrorHandler = weakJsErrorHander.lock();
49
+ if (weakRuntime.expired() || !jsErrorHandler) {
50
+ return;
59
51
  }
60
- if (weakRuntime.expired()) {
52
+
53
+ if (jsErrorHandler->hasHandledFatalError()) {
54
+ LOG(INFO)
55
+ << "RuntimeExecutor: Detected fatal js error. Dropping work on non-js thread."
56
+ << std::endl;
61
57
  return;
62
58
  }
63
59
 
64
- if (std::shared_ptr<MessageQueueThread> sharedJsMessageQueueThread =
65
- weakJsMessageQueueThread.lock()) {
66
- sharedJsMessageQueueThread->runOnQueue(
60
+ if (auto jsThread = weakJsThread.lock()) {
61
+ jsThread->runOnQueue(
67
62
  [weakRuntime, weakTimerManager, callback = std::move(callback)]() {
68
- if (auto strongRuntime = weakRuntime.lock()) {
69
- jsi::Runtime& jsiRuntime = strongRuntime->getRuntime();
70
- SystraceSection s("ReactInstance::_runtimeExecutor[Callback]");
71
- try {
72
- callback(jsiRuntime);
73
-
74
- // If we have first-class support for microtasks,
75
- // they would've been called as part of the previous callback.
76
- if (!ReactNativeFeatureFlags::enableMicrotasks()) {
77
- if (auto strongTimerManager = weakTimerManager.lock()) {
78
- strongTimerManager->callReactNativeMicrotasks(jsiRuntime);
79
- }
63
+ auto runtime = weakRuntime.lock();
64
+ if (!runtime) {
65
+ return;
66
+ }
67
+
68
+ jsi::Runtime& jsiRuntime = runtime->getRuntime();
69
+ SystraceSection s("ReactInstance::_runtimeExecutor[Callback]");
70
+ try {
71
+ callback(jsiRuntime);
72
+
73
+ // If we have first-class support for microtasks,
74
+ // they would've been called as part of the previous callback.
75
+ if (!ReactNativeFeatureFlags::enableMicrotasks()) {
76
+ if (auto timerManager = weakTimerManager.lock()) {
77
+ timerManager->callReactNativeMicrotasks(jsiRuntime);
80
78
  }
81
- } catch (jsi::JSError& originalError) {
82
- handleJSError(jsiRuntime, originalError, true);
83
79
  }
80
+ } catch (jsi::JSError& originalError) {
81
+ handleJSError(jsiRuntime, originalError, true);
84
82
  }
85
83
  });
86
84
  }
87
85
  };
88
86
 
89
87
  if (parentInspectorTarget_) {
90
- inspectorTarget_ = &parentInspectorTarget_->registerInstance(*this);
91
- runtimeInspectorTarget_ =
92
- &inspectorTarget_->registerRuntime(*runtime_, runtimeExecutor);
88
+ auto executor = parentInspectorTarget_->executorFromThis();
89
+
90
+ auto runtimeExecutorThatWaitsForInspectorSetup =
91
+ std::make_shared<BufferedRuntimeExecutor>(runtimeExecutor);
92
+
93
+ // This code can execute from any thread, so we need to make sure we set up
94
+ // the inspector logic in the right one. The callback executes immediately
95
+ // if we are already in the right thread.
96
+ executor([this, runtimeExecutor, runtimeExecutorThatWaitsForInspectorSetup](
97
+ jsinspector_modern::HostTarget& hostTarget) {
98
+ // Callbacks scheduled through the page target executor are generally
99
+ // not guaranteed to run (e.g.: if the page target is destroyed)
100
+ // but in this case it is because the page target cannot be destroyed
101
+ // before the instance finishes its setup:
102
+ // * On iOS it's because we do the setup synchronously.
103
+ // * On Android it's because we explicitly wait for the instance
104
+ // creation task to finish before starting the destruction.
105
+ inspectorTarget_ = &hostTarget.registerInstance(*this);
106
+ runtimeInspectorTarget_ =
107
+ &inspectorTarget_->registerRuntime(*runtime_, runtimeExecutor);
108
+ runtimeExecutorThatWaitsForInspectorSetup->flush();
109
+ });
110
+
111
+ // We decorate the runtime executor used everywhere else to wait for the
112
+ // inspector to finish its setup.
113
+ runtimeExecutor =
114
+ [runtimeExecutorThatWaitsForInspectorSetup](
115
+ std::function<void(jsi::Runtime & runtime)>&& callback) {
116
+ runtimeExecutorThatWaitsForInspectorSetup->execute(
117
+ std::move(callback));
118
+ };
93
119
  }
94
120
 
95
- runtimeScheduler_ =
96
- std::make_shared<RuntimeScheduler>(std::move(runtimeExecutor));
121
+ runtimeScheduler_ = std::make_shared<RuntimeScheduler>(runtimeExecutor);
97
122
 
98
- auto pipedRuntimeExecutor =
123
+ bufferedRuntimeExecutor_ = std::make_shared<BufferedRuntimeExecutor>(
99
124
  [runtimeScheduler = runtimeScheduler_.get()](
100
125
  std::function<void(jsi::Runtime & runtime)>&& callback) {
101
126
  runtimeScheduler->scheduleWork(std::move(callback));
102
- };
103
-
104
- bufferedRuntimeExecutor_ =
105
- std::make_shared<BufferedRuntimeExecutor>(pipedRuntimeExecutor);
127
+ });
106
128
  }
107
129
 
108
130
  void ReactInstance::unregisterFromInspector() {
109
131
  if (inspectorTarget_) {
110
132
  assert(runtimeInspectorTarget_);
111
133
  inspectorTarget_->unregisterRuntime(*runtimeInspectorTarget_);
134
+
112
135
  assert(parentInspectorTarget_);
113
136
  parentInspectorTarget_->unregisterInstance(*inspectorTarget_);
137
+
114
138
  inspectorTarget_ = nullptr;
115
139
  }
116
140
  }
@@ -137,6 +161,8 @@ RuntimeExecutor ReactInstance::getBufferedRuntimeExecutor() noexcept {
137
161
  };
138
162
  }
139
163
 
164
+ // TODO(T184010230): Should the RuntimeScheduler returned from this method be
165
+ // buffered?
140
166
  std::shared_ptr<RuntimeScheduler>
141
167
  ReactInstance::getRuntimeScheduler() noexcept {
142
168
  return runtimeScheduler_;
@@ -194,9 +220,7 @@ void ReactInstance::loadScript(
194
220
  strongBufferedRuntimeExecuter->flush();
195
221
  }
196
222
  } catch (jsi::JSError& error) {
197
- // Handle uncaught JS errors during loading JS bundle
198
- *hasFatalJsError_ = true;
199
- this->jsErrorHandler_.handleJsError(error, true);
223
+ jsErrorHandler_->handleFatalError(error);
200
224
  }
201
225
  });
202
226
  }
@@ -208,20 +232,24 @@ void ReactInstance::loadScript(
208
232
  void ReactInstance::callFunctionOnModule(
209
233
  const std::string& moduleName,
210
234
  const std::string& methodName,
211
- const folly::dynamic& args) {
212
- // TODO (C++ 20): This code previously implicitly captured `this` in a [=]
213
- // capture group. Was it meaning to pass modules_ by value?
214
- bufferedRuntimeExecutor_->execute([=, this](jsi::Runtime& runtime) {
235
+ folly::dynamic&& args) {
236
+ bufferedRuntimeExecutor_->execute([this,
237
+ moduleName = moduleName,
238
+ methodName = methodName,
239
+ args = std::move(args)](
240
+ jsi::Runtime& runtime) {
215
241
  SystraceSection s(
216
242
  "ReactInstance::callFunctionOnModule",
217
243
  "moduleName",
218
244
  moduleName,
219
245
  "methodName",
220
246
  methodName);
221
- if (modules_.find(moduleName) == modules_.end()) {
247
+ auto it = callableModules_.find(moduleName);
248
+ if (it == callableModules_.end()) {
222
249
  std::ostringstream knownModules;
223
250
  int i = 0;
224
- for (auto it = modules_.begin(); it != modules_.end(); it++, i++) {
251
+ for (it = callableModules_.begin(); it != callableModules_.end();
252
+ it++, i++) {
225
253
  const char* space = (i > 0 ? ", " : " ");
226
254
  knownModules << space << it->first;
227
255
  }
@@ -230,24 +258,25 @@ void ReactInstance::callFunctionOnModule(
230
258
  "Failed to call into JavaScript module method " + moduleName + "." +
231
259
  methodName +
232
260
  "(). Module has not been registered as callable. Registered callable JavaScript modules (n = " +
233
- std::to_string(modules_.size()) + "):" + knownModules.str() +
234
- ". Did you forget to call `RN$registerCallableModule`?");
261
+ std::to_string(callableModules_.size()) +
262
+ "):" + knownModules.str() +
263
+ ". Did you forget to call `registerCallableModule`?");
235
264
  }
236
265
 
237
- auto module = modules_[moduleName]->factory.call(runtime).asObject(runtime);
238
- auto method = module.getProperty(runtime, methodName.c_str());
239
- if (method.isUndefined()) {
240
- throw jsi::JSError(
241
- runtime,
242
- "Failed to call into JavaScript module method " + moduleName + "." +
243
- methodName + ". Module exists, but the method is undefined.");
266
+ if (std::holds_alternative<jsi::Function>(it->second)) {
267
+ auto module =
268
+ std::get<jsi::Function>(it->second).call(runtime).asObject(runtime);
269
+ it->second = std::move(module);
244
270
  }
245
271
 
272
+ auto& module = std::get<jsi::Object>(it->second);
273
+ auto method = module.getPropertyAsFunction(runtime, methodName.c_str());
274
+
246
275
  std::vector<jsi::Value> jsArgs;
247
276
  for (auto& arg : args) {
248
277
  jsArgs.push_back(jsi::valueFromDynamic(runtime, arg));
249
278
  }
250
- method.asObject(runtime).asFunction(runtime).callWithThis(
279
+ method.callWithThis(
251
280
  runtime, module, (const jsi::Value*)jsArgs.data(), jsArgs.size());
252
281
  });
253
282
  }
@@ -343,13 +372,14 @@ void ReactInstance::initializeRuntime(
343
372
  }
344
373
  auto name = args[0].asString(runtime).utf8(runtime);
345
374
  if (!args[1].isObject() ||
346
- !args[1].asObject(runtime).isFunction(runtime)) {
375
+ !args[1].getObject(runtime).isFunction(runtime)) {
347
376
  throw jsi::JSError(
348
377
  runtime,
349
378
  "The second argument to registerCallableModule must be a function that returns the JS module.");
350
379
  }
351
- modules_[name] = std::make_shared<CallableModule>(
352
- args[1].getObject(runtime).asFunction(runtime));
380
+ callableModules_.emplace(
381
+ std::move(name),
382
+ args[1].getObject(runtime).getFunction(runtime));
353
383
  return jsi::Value::undefined();
354
384
  }));
355
385
 
@@ -16,7 +16,7 @@ If ($PSBoundParameters['Debug']) {
16
16
  Write-Output "Creating filtered version of : $nuspec"
17
17
  $xml = [xml](gc $nuspec)
18
18
 
19
- $allSlices = @("x64.Release", "x64.Debug", "x86.Release", "x86.Debug", "ARM64.Release", "ARM64.Debug")
19
+ $allSlices = @("x64.Release", "x64.Debug", "x86.Release", "x86.Debug", "ARM64.Release", "ARM64.Debug", "ARM64EC.Debug", "ARM64EC.Release")
20
20
 
21
21
  $nodesToRemove = @();
22
22