react-native-windows 0.74.11 → 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 (336) 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 +14 -70
  33. package/Libraries/Components/TextInput/TextInput.windows.js +15 -72
  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/CompositionViewComponentView.cpp +1 -4
  161. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +10 -6
  162. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +4 -4
  163. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +0 -10
  164. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +0 -3
  165. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +29 -45
  166. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +1 -3
  167. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +1 -1
  168. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -12
  169. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +1 -2
  170. package/Microsoft.ReactNative/Fabric/Composition/UriImageManager.cpp +9 -3
  171. package/Microsoft.ReactNative/Fabric/Composition/UriImageManager.h +1 -1
  172. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +11 -18
  173. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +3 -5
  174. package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +23 -16
  175. package/Microsoft.ReactNative/Fabric/WindowsImageManager.h +5 -2
  176. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +2 -10
  177. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +107 -36
  178. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +18 -12
  179. package/Microsoft.ReactNative/Modules/DevSettingsModule.cpp +4 -0
  180. package/Microsoft.ReactNative/Modules/DevSettingsModule.h +1 -0
  181. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.cpp +1 -2
  182. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +7 -4
  183. package/Microsoft.ReactNative/Modules/NativeUIManager.h +1 -1
  184. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.cpp +2 -2
  185. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.h +3 -3
  186. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -17
  187. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  188. package/Microsoft.ReactNative/Timer.idl +1 -3
  189. package/Microsoft.ReactNative/Utils/BatchingEventEmitter.cpp +1 -1
  190. package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +2 -3
  191. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +1 -1
  192. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +2 -2
  193. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +1 -1
  194. package/Microsoft.ReactNative/packages.lock.json +45 -72
  195. package/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h +1 -1
  196. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +5 -0
  197. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -0
  198. package/Microsoft.ReactNative.Cxx/TurboModuleProvider.cpp +14 -6
  199. package/Microsoft.ReactNative.Cxx/TurboModuleProvider.h +2 -2
  200. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +1 -1
  201. package/Microsoft.ReactNative.Managed/packages.lock.json +3 -3
  202. package/PropertySheets/ARM64EC.props +13 -0
  203. package/PropertySheets/Application/ARM64EC.props +13 -0
  204. package/PropertySheets/DynamicLibrary/ARM64EC.props +13 -0
  205. package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +4 -4
  206. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  207. package/PropertySheets/JSEngine.props +2 -0
  208. package/PropertySheets/StaticLibrary/ARM64EC.props +13 -0
  209. package/README.md +21 -21
  210. package/ReactCommon/ReactCommon.vcxproj +11 -1
  211. package/ReactCommon/ReactCommon.vcxproj.filters +19 -12
  212. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +67 -0
  213. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.h +180 -0
  214. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +351 -0
  215. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +6 -3
  216. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Base.h +152 -0
  217. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Bridging.h +2 -1
  218. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +13 -15
  219. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/EventEmitter.h +137 -0
  220. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Function.h +283 -0
  221. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.cpp +7 -10
  222. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +162 -0
  223. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +2 -4
  224. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +33 -8
  225. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/JSRuntimeFactory.cpp +45 -0
  226. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/JSRuntimeFactory.h +67 -0
  227. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +104 -74
  228. package/Scripts/StripAdditionalPlatformsFromNuspec.ps1 +1 -1
  229. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +4 -0
  230. package/Scripts/rnw-dependencies.ps1 +36 -23
  231. package/Shared/HermesRuntimeHolder.cpp +19 -1
  232. package/Shared/HermesRuntimeHolder.h +8 -1
  233. package/Shared/HermesSamplingProfiler.cpp +1 -2
  234. package/Shared/Networking/WinRTWebSocketResource.cpp +3 -3
  235. package/Shared/OInstance.cpp +1 -2
  236. package/Shared/Shared.vcxitems +21 -15
  237. package/Shared/Shared.vcxitems.filters +8 -3
  238. package/Shared/Threading/BatchingQueueThread.cpp +6 -2
  239. package/Shared/Threading/BatchingQueueThread.h +2 -2
  240. package/Shared/Utils/CppWinrtLessExceptions.h +2 -2
  241. package/codegen/NativeAppStateSpec.g.h +8 -8
  242. package/codegen/NativeBlobModuleSpec.g.h +0 -10
  243. package/codegen/NativeDOMSpec.g.h +136 -0
  244. package/codegen/NativeDevSettingsSpec.g.h +11 -5
  245. package/codegen/NativeIdleCallbacksSpec.g.h +64 -0
  246. package/codegen/NativeIntersectionObserverSpec.g.h +14 -14
  247. package/codegen/NativeMicrotasksSpec.g.h +34 -0
  248. package/codegen/NativePerformanceSpec.g.h +35 -7
  249. package/codegen/NativePlatformConstantsWindowsSpec.g.h +81 -0
  250. package/codegen/NativePushNotificationManagerIOSSpec.g.h +15 -19
  251. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +111 -39
  252. package/codegen/NativeUIManagerSpec.g.h +5 -17
  253. package/codegen/react/components/rnwcore/Props.cpp +1 -1
  254. package/codegen/react/components/rnwcore/Props.h +16 -12
  255. package/codegen/react/components/rnwcore/States.h +0 -26
  256. package/codegen/rnwcoreJSI-generated.cpp +688 -463
  257. package/codegen/rnwcoreJSI.h +1374 -2867
  258. package/fmt/TEMP_UntilFmtUpdate/core.h +2925 -0
  259. package/fmt/fmt.vcxproj +10 -2
  260. package/jest/mockComponent.js +7 -0
  261. package/jest/renderer.js +25 -14
  262. package/jest/setup.js +19 -13
  263. package/package.json +29 -27
  264. package/rn-get-polyfills.js +1 -0
  265. package/src/private/core/composeStyles.js +27 -0
  266. package/src/private/featureflags/ReactNativeFeatureFlags.js +93 -33
  267. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
  268. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +56 -0
  269. package/src/private/fusebox/setUpFuseboxReactDevToolsDispatcher.js +108 -0
  270. package/src/private/specs/modules/NativeBlobModule.js +4 -2
  271. package/src/private/specs/modules/NativeDevSettings.js +1 -0
  272. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +0 -4
  273. package/src/private/specs/modules/NativeUIManager.js +0 -7
  274. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +24 -24
  275. package/src/private/webapis/dom/nodes/ReactNativeElement.js +11 -14
  276. package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +2 -3
  277. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +24 -54
  278. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -13
  279. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +468 -0
  280. package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +413 -0
  281. package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +4 -4
  282. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +4 -4
  283. package/src/private/webapis/dom/oldstylecollections/NodeList.js +5 -5
  284. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
  285. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
  286. package/src/private/webapis/performance/EventCounts.js +1 -1
  287. package/src/private/webapis/performance/MemoryInfo.js +9 -9
  288. package/src/private/webapis/performance/Performance.js +10 -56
  289. package/src/private/webapis/performance/PerformanceObserver.js +30 -22
  290. package/src/private/webapis/performance/RawPerformanceEntry.js +2 -7
  291. package/src/private/webapis/performance/ReactNativeStartupTiming.js +18 -18
  292. package/src/private/webapis/performance/UserTiming.js +63 -0
  293. package/src/private/webapis/performance/{NativePerformance.js → specs/NativePerformance.js} +3 -2
  294. package/src/private/webapis/performance/{NativePerformanceObserver.js → specs/NativePerformanceObserver.js} +2 -2
  295. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformance.js +1 -1
  296. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformanceObserver.js +3 -4
  297. package/stubs/glog/logging.h +1 -0
  298. package/template/cpp-lib/proj/MyLib.vcxproj +1 -1
  299. package/template/cs-lib/proj/MyLib.csproj +1 -1
  300. package/template/metro.config.js +13 -2
  301. package/templates/cpp-app/template.config.js +1 -1
  302. package/templates/cpp-lib/example/metro.config.js +2 -2
  303. package/templates/cpp-lib/template.config.js +1 -1
  304. package/templates/old/generateWrapper.js +4 -1
  305. package/types/modules/globals.d.ts +4 -0
  306. package/Libraries/Lists/FlatList.windows.js +0 -717
  307. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -13
  308. package/Libraries/Utilities/LoadingView.ios.js +0 -50
  309. package/Libraries/Utilities/LoadingView.js +0 -16
  310. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +0 -178
  311. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.cpp +0 -39
  312. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.h +0 -31
  313. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +0 -137
  314. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +0 -2377
  315. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.cpp +0 -140
  316. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.h +0 -92
  317. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +0 -40
  318. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.cpp +0 -48
  319. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.h +0 -122
  320. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.cpp +0 -366
  321. package/codegen/NativeAnimationsDebugModuleSpec.g.h +0 -40
  322. package/codegen/NativePlatformConstantsWinSpec.g.h +0 -81
  323. package/jest/ReactNativeInternalFeatureFlagsMock.js +0 -13
  324. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +0 -44
  325. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +0 -92
  326. package/src/private/specs/modules/NativeAnimationsDebugModule.js +0 -20
  327. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +0 -85
  328. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +0 -80
  329. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +0 -161
  330. package/src/private/webapis/performance/__tests__/EventCounts-test.js +0 -116
  331. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +0 -82
  332. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +0 -108
  333. package/src/private/webapis/performance/__tests__/Performance-test.js +0 -117
  334. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +0 -208
  335. package/template/metro.devMode.config.js +0 -56
  336. /package/src/private/specs/modules/{NativePlatformConstantsWin.js → NativePlatformConstantsWindows.js} +0 -0
@@ -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
+ #include "JSExecutor.h"
9
+
10
+ #include "RAMBundleRegistry.h"
11
+
12
+ #include <folly/Conv.h>
13
+ #include <jsinspector-modern/ReactCdp.h>
14
+ #include <jsinspector-modern/ConsoleMessage.h>
15
+
16
+ #include <chrono>
17
+
18
+ namespace facebook::react {
19
+
20
+ std::string JSExecutor::getSyntheticBundlePath(
21
+ uint32_t bundleId,
22
+ const std::string& bundlePath) {
23
+ if (bundleId == RAMBundleRegistry::MAIN_BUNDLE_ID) {
24
+ return bundlePath;
25
+ }
26
+ return folly::to<std::string>("seg-", bundleId, ".js");
27
+ }
28
+
29
+ double JSExecutor::performanceNow() {
30
+ auto time = std::chrono::steady_clock::now();
31
+ auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(
32
+ time.time_since_epoch())
33
+ .count();
34
+
35
+ constexpr double NANOSECONDS_IN_MILLISECOND = 1000000.0;
36
+ return duration / NANOSECONDS_IN_MILLISECOND;
37
+ }
38
+
39
+ void JSExecutor::addConsoleMessage(jsi::Runtime& runtime, jsinspector_modern::ConsoleMessage message){
40
+ return;
41
+ }
42
+
43
+ bool JSExecutor::supportsConsole() const {
44
+ return false;
45
+ }
46
+
47
+ std::unique_ptr<facebook::react::jsinspector_modern::StackTrace> JSExecutor::captureStackTrace(
48
+ facebook::jsi::Runtime &runtime,
49
+ size_t framesToSkip) {
50
+ return std::make_unique<facebook::react::jsinspector_modern::StackTrace>();
51
+ }
52
+
53
+ std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate>
54
+ JSExecutor::createAgentDelegate(
55
+ jsinspector_modern::FrontendChannel frontendChannel,
56
+ jsinspector_modern::SessionState& sessionState,
57
+ std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate::ExportedState>,
58
+ const jsinspector_modern::ExecutionContextDescription&
59
+ executionContextDescription,
60
+ RuntimeExecutor runtimeExecutor) {
61
+ (void)executionContextDescription;
62
+ (void)runtimeExecutor;
63
+ return std::make_unique<jsinspector_modern::FallbackRuntimeAgentDelegate>(
64
+ std::move(frontendChannel), sessionState, getDescription());
65
+ }
66
+
67
+ } // namespace facebook::react
@@ -0,0 +1,180 @@
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
+
13
+ #include <cxxreact/NativeModule.h>
14
+ #include <folly/dynamic.h>
15
+ #include <jsinspector-modern/InspectorInterfaces.h>
16
+ #include <jsinspector-modern/FallbackRuntimeAgentDelegate.h>
17
+ #include <jsinspector-modern/ReactCdp.h>
18
+ #include <jsinspector-modern/ConsoleMessage.h>
19
+ #include <jsinspector-modern/StackTrace.h>
20
+
21
+ #ifndef RN_EXPORT
22
+ #define RN_EXPORT __attribute__((visibility("default")))
23
+ #endif
24
+
25
+ namespace facebook::react {
26
+
27
+ class JSBigString;
28
+ class JSExecutor;
29
+ class JSModulesUnbundle;
30
+ class MessageQueueThread;
31
+ class ModuleRegistry;
32
+ class RAMBundleRegistry;
33
+
34
+ // This interface describes the delegate interface required by
35
+ // Executor implementations to call from JS into native code.
36
+ class ExecutorDelegate {
37
+ public:
38
+ virtual ~ExecutorDelegate() {}
39
+
40
+ virtual std::shared_ptr<ModuleRegistry> getModuleRegistry() = 0;
41
+
42
+ virtual void callNativeModules(
43
+ JSExecutor& executor,
44
+ folly::dynamic&& calls,
45
+ bool isEndOfBatch) = 0;
46
+ virtual MethodCallResult callSerializableNativeHook(
47
+ JSExecutor& executor,
48
+ unsigned int moduleId,
49
+ unsigned int methodId,
50
+ folly::dynamic&& args) = 0;
51
+ };
52
+
53
+ class JSExecutorFactory {
54
+ public:
55
+ virtual std::unique_ptr<JSExecutor> createJSExecutor(
56
+ std::shared_ptr<ExecutorDelegate> delegate,
57
+ std::shared_ptr<MessageQueueThread> jsQueue) = 0;
58
+ virtual ~JSExecutorFactory() {}
59
+ };
60
+
61
+ class RN_EXPORT JSExecutor : public jsinspector_modern::RuntimeTargetDelegate {
62
+ public:
63
+ /**
64
+ * Prepares the JS runtime for React Native by installing global variables.
65
+ * Called once before any JS is evaluated.
66
+ */
67
+ virtual void initializeRuntime() = 0;
68
+ /**
69
+ * Execute an application script bundle in the JS context.
70
+ */
71
+ virtual void loadBundle(
72
+ std::unique_ptr<const JSBigString> script,
73
+ std::string sourceURL) = 0;
74
+
75
+ /**
76
+ * Add an application "RAM" bundle registry
77
+ */
78
+ virtual void setBundleRegistry(
79
+ std::unique_ptr<RAMBundleRegistry> bundleRegistry) = 0;
80
+
81
+ /**
82
+ * Register a file path for an additional "RAM" bundle
83
+ */
84
+ virtual void registerBundle(
85
+ uint32_t bundleId,
86
+ const std::string& bundlePath) = 0;
87
+
88
+ /**
89
+ * Executes BatchedBridge.callFunctionReturnFlushedQueue with the module ID,
90
+ * method ID and optional additional arguments in JS. The executor is
91
+ * responsible for using Bridge->callNativeModules to invoke any necessary
92
+ * native modules methods.
93
+ */
94
+ virtual void callFunction(
95
+ const std::string& moduleId,
96
+ const std::string& methodId,
97
+ const folly::dynamic& arguments) = 0;
98
+
99
+ /**
100
+ * Executes BatchedBridge.invokeCallbackAndReturnFlushedQueue with the cbID,
101
+ * and optional additional arguments in JS and returns the next queue. The
102
+ * executor is responsible for using Bridge->callNativeModules to invoke any
103
+ * necessary native modules methods.
104
+ */
105
+ virtual void invokeCallback(
106
+ const double callbackId,
107
+ const folly::dynamic& arguments) = 0;
108
+
109
+ virtual void setGlobalVariable(
110
+ std::string propName,
111
+ std::unique_ptr<const JSBigString> jsonValue) = 0;
112
+
113
+ virtual void* getJavaScriptContext() {
114
+ return nullptr;
115
+ }
116
+
117
+ /**
118
+ * Returns whether or not the underlying executor supports debugging via the
119
+ * Chrome remote debugging protocol. If true, the executor should also
120
+ * override the \c createAgentDelegate method.
121
+ */
122
+ virtual bool isInspectable() {
123
+ return false;
124
+ }
125
+
126
+ /**
127
+ * The description is displayed in the dev menu, if there is one in
128
+ * this build. There is a default, but if this method returns a
129
+ * non-empty string, it will be used instead.
130
+ */
131
+ virtual std::string getDescription() = 0;
132
+
133
+ virtual void handleMemoryPressure([[maybe_unused]] int pressureLevel) {}
134
+
135
+ virtual void destroy() {}
136
+ virtual ~JSExecutor() override {}
137
+
138
+ virtual void flush() {}
139
+
140
+ static std::string getSyntheticBundlePath(
141
+ uint32_t bundleId,
142
+ const std::string& bundlePath);
143
+
144
+ static double performanceNow();
145
+
146
+ virtual void addConsoleMessage(jsi::Runtime& runtime, jsinspector_modern::ConsoleMessage message);
147
+
148
+ virtual bool supportsConsole() const;
149
+
150
+ /**
151
+ * \returns an opaque representation of a stack trace. This may be passed back
152
+ * to the `RuntimeTargetDelegate` as part of `addConsoleMessage` or other APIs
153
+ * that report stack traces.
154
+ * \param framesToSkip The number of call frames to skip. The first call frame
155
+ * is the topmost (current) frame on the Runtime's call stack, which will
156
+ * typically be the (native) JSI HostFunction that called this method.
157
+ * \note The method is called on the JS thread, and receives a valid reference
158
+ * to the current \c jsi::Runtime. The callee MAY use its own intrinsic
159
+ * Runtime reference, if it has one, without checking it for equivalence with
160
+ * the one provided here.
161
+ */
162
+ std::unique_ptr<jsinspector_modern::StackTrace> captureStackTrace(
163
+ jsi::Runtime& runtime,
164
+ size_t framesToSkip = 0) override;
165
+
166
+ /**
167
+ * Create a RuntimeAgentDelegate that can be used to debug the JS VM instance.
168
+ */
169
+ virtual std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate>
170
+ createAgentDelegate(
171
+ jsinspector_modern::FrontendChannel frontendChannel,
172
+ jsinspector_modern::SessionState& sessionState,
173
+ std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate::ExportedState>
174
+ previouslyExportedState,
175
+ const jsinspector_modern::ExecutionContextDescription&
176
+ executionContextDescription,
177
+ RuntimeExecutor runtimeExecutor) override;
178
+ };
179
+
180
+ } // namespace facebook::react
@@ -0,0 +1,351 @@
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 "NativeToJsBridge.h"
9
+
10
+ #include <ReactCommon/CallInvoker.h>
11
+ #include <folly/json.h>
12
+ #include <glog/logging.h>
13
+ #include <jsi/jsi.h>
14
+ #include <reactperflogger/BridgeNativeModulePerfLogger.h>
15
+
16
+ #include "ErrorUtils.h"
17
+ #include "Instance.h"
18
+ #include "JSBigString.h"
19
+ #include "MessageQueueThread.h"
20
+ #include "MethodCall.h"
21
+ #include "ModuleRegistry.h"
22
+ #include "MoveWrapper.h"
23
+ #include "RAMBundleRegistry.h"
24
+ #include "SystraceSection.h"
25
+
26
+ #include <memory>
27
+
28
+ #ifdef WITH_FBSYSTRACE
29
+ #include <fbsystrace.h>
30
+
31
+ using fbsystrace::FbSystraceAsyncFlow;
32
+ #endif
33
+
34
+ namespace facebook::react {
35
+
36
+ // This class manages calls from JS to native code.
37
+ class JsToNativeBridge : public react::ExecutorDelegate {
38
+ public:
39
+ JsToNativeBridge(
40
+ std::shared_ptr<ModuleRegistry> registry,
41
+ std::shared_ptr<InstanceCallback> callback)
42
+ : m_registry(registry), m_callback(callback) {}
43
+
44
+ std::shared_ptr<ModuleRegistry> getModuleRegistry() override {
45
+ return m_registry;
46
+ }
47
+
48
+ bool isBatchActive() {
49
+ return m_batchHadNativeModuleOrTurboModuleCalls;
50
+ }
51
+
52
+ void callNativeModules(
53
+ [[maybe_unused]] JSExecutor& executor,
54
+ folly::dynamic&& calls,
55
+ bool isEndOfBatch) override {
56
+ CHECK(m_registry || calls.empty())
57
+ << "native module calls cannot be completed with no native modules";
58
+ m_batchHadNativeModuleOrTurboModuleCalls =
59
+ m_batchHadNativeModuleOrTurboModuleCalls || !calls.empty();
60
+
61
+ std::vector<MethodCall> methodCalls = parseMethodCalls(std::move(calls));
62
+ BridgeNativeModulePerfLogger::asyncMethodCallBatchPreprocessEnd(
63
+ (int)methodCalls.size());
64
+
65
+ // An exception anywhere in here stops processing of the batch. This
66
+ // was the behavior of the Android bridge, and since exception handling
67
+ // terminates the whole bridge, there's not much point in continuing.
68
+ for (auto& call : methodCalls) {
69
+ m_registry->callNativeMethod(
70
+ call.moduleId, call.methodId, std::move(call.arguments), call.callId);
71
+ }
72
+ if (isEndOfBatch) {
73
+ // onBatchComplete will be called on the native (module) queue, but
74
+ // decrementPendingJSCalls will be called sync. Be aware that the bridge
75
+ // may still be processing native calls when the bridge idle signaler
76
+ // fires.
77
+ if (m_batchHadNativeModuleOrTurboModuleCalls) {
78
+ m_callback->onBatchComplete();
79
+ m_batchHadNativeModuleOrTurboModuleCalls = false;
80
+ }
81
+ m_callback->decrementPendingJSCalls();
82
+ }
83
+ }
84
+
85
+ MethodCallResult callSerializableNativeHook(
86
+ [[maybe_unused]] JSExecutor& executor,
87
+ unsigned int moduleId,
88
+ unsigned int methodId,
89
+ folly::dynamic&& args) override {
90
+ return m_registry->callSerializableNativeHook(
91
+ moduleId, methodId, std::move(args));
92
+ }
93
+
94
+ void recordTurboModuleAsyncMethodCall() noexcept {
95
+ m_batchHadNativeModuleOrTurboModuleCalls = true;
96
+ }
97
+
98
+ private:
99
+ // These methods are always invoked from an Executor. The NativeToJsBridge
100
+ // keeps a reference to the executor, and when destroy() is called, the
101
+ // executor is destroyed synchronously on its queue.
102
+ std::shared_ptr<ModuleRegistry> m_registry;
103
+ std::shared_ptr<InstanceCallback> m_callback;
104
+ std::atomic<bool> m_batchHadNativeModuleOrTurboModuleCalls{false};
105
+ };
106
+
107
+ NativeToJsBridge::NativeToJsBridge(
108
+ JSExecutorFactory* jsExecutorFactory,
109
+ std::shared_ptr<ModuleRegistry> registry,
110
+ std::shared_ptr<MessageQueueThread> jsQueue,
111
+ std::shared_ptr<InstanceCallback> callback)
112
+ : m_destroyed(std::make_shared<bool>(false)),
113
+ m_delegate(std::make_shared<JsToNativeBridge>(registry, callback)),
114
+ m_executor(jsExecutorFactory->createJSExecutor(m_delegate, jsQueue)),
115
+ m_executorMessageQueueThread(std::move(jsQueue)),
116
+ m_inspectable(m_executor->isInspectable()) {}
117
+
118
+ // This must be called on the same thread on which the constructor was called.
119
+ NativeToJsBridge::~NativeToJsBridge() {
120
+ CHECK(*m_destroyed)
121
+ << "NativeToJsBridge::destroy() must be called before deallocating the NativeToJsBridge!";
122
+ }
123
+
124
+ void NativeToJsBridge::initializeRuntime() {
125
+ runOnExecutorQueue(
126
+ [](JSExecutor* executor) mutable { executor->initializeRuntime(); });
127
+ }
128
+
129
+ void NativeToJsBridge::loadBundle(
130
+ std::unique_ptr<RAMBundleRegistry> bundleRegistry,
131
+ std::unique_ptr<const JSBigString> startupScript,
132
+ std::string startupScriptSourceURL) {
133
+ runOnExecutorQueue(
134
+ [this,
135
+ bundleRegistryWrap = makeMoveWrapper(std::move(bundleRegistry)),
136
+ startupScript = makeMoveWrapper(std::move(startupScript)),
137
+ startupScriptSourceURL =
138
+ std::move(startupScriptSourceURL)](JSExecutor* executor) mutable {
139
+ auto bundleRegistry = bundleRegistryWrap.move();
140
+ if (bundleRegistry) {
141
+ executor->setBundleRegistry(std::move(bundleRegistry));
142
+ }
143
+ try {
144
+ executor->loadBundle(
145
+ std::move(*startupScript), std::move(startupScriptSourceURL));
146
+ } catch (...) {
147
+ m_applicationScriptHasFailure = true;
148
+ throw;
149
+ }
150
+ });
151
+ }
152
+
153
+ void NativeToJsBridge::loadBundleSync(
154
+ std::unique_ptr<RAMBundleRegistry> bundleRegistry,
155
+ std::unique_ptr<const JSBigString> startupScript,
156
+ std::string startupScriptSourceURL) {
157
+ if (bundleRegistry) {
158
+ m_executor->setBundleRegistry(std::move(bundleRegistry));
159
+ }
160
+ try {
161
+ m_executor->loadBundle(
162
+ std::move(startupScript), std::move(startupScriptSourceURL));
163
+ } catch (...) {
164
+ m_applicationScriptHasFailure = true;
165
+ throw;
166
+ }
167
+ }
168
+
169
+ void NativeToJsBridge::callFunction(
170
+ std::string&& module,
171
+ std::string&& method,
172
+ folly::dynamic&& arguments) {
173
+ int systraceCookie = -1;
174
+ #ifdef WITH_FBSYSTRACE
175
+ systraceCookie = m_systraceCookie++;
176
+ FbSystraceAsyncFlow::begin(
177
+ TRACE_TAG_REACT_CXX_BRIDGE, "JSCall", systraceCookie);
178
+ #endif
179
+
180
+ runOnExecutorQueue([this,
181
+ module = std::move(module),
182
+ method = std::move(method),
183
+ arguments = std::move(arguments),
184
+ systraceCookie](JSExecutor* executor) {
185
+ if (m_applicationScriptHasFailure) {
186
+ LOG(ERROR)
187
+ << "Attempting to call JS function on a bad application bundle: "
188
+ << module.c_str() << "." << method.c_str() << "()";
189
+ throw std::runtime_error(
190
+ "Attempting to call JS function on a bad application bundle: " +
191
+ module + "." + method + "()");
192
+ }
193
+
194
+ #ifdef WITH_FBSYSTRACE
195
+ FbSystraceAsyncFlow::end(
196
+ TRACE_TAG_REACT_CXX_BRIDGE, "JSCall", systraceCookie);
197
+ SystraceSection s(
198
+ "NativeToJsBridge::callFunction", "module", module, "method", method);
199
+ #else
200
+ (void)(systraceCookie);
201
+ #endif
202
+ // This is safe because we are running on the executor's thread: it won't
203
+ // destruct until after it's been unregistered (which we check above) and
204
+ // that will happen on this thread
205
+ executor->callFunction(module, method, arguments);
206
+ });
207
+ }
208
+
209
+ void NativeToJsBridge::invokeCallback(
210
+ double callbackId,
211
+ folly::dynamic&& arguments) {
212
+ int systraceCookie = -1;
213
+ #ifdef WITH_FBSYSTRACE
214
+ systraceCookie = m_systraceCookie++;
215
+ FbSystraceAsyncFlow::begin(
216
+ TRACE_TAG_REACT_CXX_BRIDGE, "<callback>", systraceCookie);
217
+ #endif
218
+
219
+ runOnExecutorQueue(
220
+ [this, callbackId, arguments = std::move(arguments), systraceCookie](
221
+ JSExecutor* executor) {
222
+ if (m_applicationScriptHasFailure) {
223
+ LOG(ERROR)
224
+ << "Attempting to call JS callback on a bad application bundle: "
225
+ << callbackId;
226
+ throw std::runtime_error(
227
+ "Attempting to invoke JS callback on a bad application bundle.");
228
+ }
229
+ #ifdef WITH_FBSYSTRACE
230
+ FbSystraceAsyncFlow::end(
231
+ TRACE_TAG_REACT_CXX_BRIDGE, "<callback>", systraceCookie);
232
+ SystraceSection s("NativeToJsBridge::invokeCallback");
233
+ #else
234
+ (void)(systraceCookie);
235
+ #endif
236
+ executor->invokeCallback(callbackId, arguments);
237
+ });
238
+ }
239
+
240
+ void NativeToJsBridge::registerBundle(
241
+ uint32_t bundleId,
242
+ const std::string& bundlePath) {
243
+ runOnExecutorQueue([bundleId, bundlePath](JSExecutor* executor) {
244
+ executor->registerBundle(bundleId, bundlePath);
245
+ });
246
+ }
247
+
248
+ void NativeToJsBridge::setGlobalVariable(
249
+ std::string propName,
250
+ std::unique_ptr<const JSBigString> jsonValue) {
251
+ runOnExecutorQueue([propName = std::move(propName),
252
+ jsonValue = makeMoveWrapper(std::move(jsonValue))](
253
+ JSExecutor* executor) mutable {
254
+ executor->setGlobalVariable(propName, jsonValue.move());
255
+ });
256
+ }
257
+
258
+ void* NativeToJsBridge::getJavaScriptContext() {
259
+ // TODO(cjhopman): this seems unsafe unless we require that it is only called
260
+ // on the main js queue.
261
+ return m_executor->getJavaScriptContext();
262
+ }
263
+
264
+ bool NativeToJsBridge::isInspectable() {
265
+ return m_inspectable;
266
+ }
267
+
268
+ bool NativeToJsBridge::isBatchActive() {
269
+ return m_delegate->isBatchActive();
270
+ }
271
+
272
+ void NativeToJsBridge::handleMemoryPressure(int pressureLevel) {
273
+ runOnExecutorQueue([=](JSExecutor* executor) {
274
+ executor->handleMemoryPressure(pressureLevel);
275
+ });
276
+ }
277
+
278
+ void NativeToJsBridge::destroy() {
279
+ // All calls made through runOnExecutorQueue have an early exit if
280
+ // m_destroyed is true. Setting this before the runOnQueueSync will cause
281
+ // pending work to be cancelled and we won't have to wait for it.
282
+ *m_destroyed = true;
283
+ m_executorMessageQueueThread->runOnQueueSync([this] {
284
+ m_executor->destroy();
285
+ m_executorMessageQueueThread->quitSynchronous();
286
+ m_executor = nullptr;
287
+ });
288
+ }
289
+
290
+ void NativeToJsBridge::runOnExecutorQueue(
291
+ std::function<void(JSExecutor*)>&& task) noexcept {
292
+ if (*m_destroyed) {
293
+ return;
294
+ }
295
+
296
+ std::shared_ptr<bool> isDestroyed = m_destroyed;
297
+ m_executorMessageQueueThread->runOnQueue(
298
+ [this, isDestroyed, task = std::move(task)] {
299
+ if (*isDestroyed) {
300
+ return;
301
+ }
302
+
303
+ // The executor is guaranteed to be valid for the duration of the task
304
+ // because:
305
+ // 1. the executor is only destroyed after it is unregistered
306
+ // 2. the executor is unregistered on this queue
307
+ // 3. we just confirmed that the executor hasn't been unregistered above
308
+ task(m_executor.get());
309
+ });
310
+ }
311
+
312
+ std::shared_ptr<NativeMethodCallInvoker>
313
+ NativeToJsBridge::getDecoratedNativeMethodCallInvoker(
314
+ std::shared_ptr<NativeMethodCallInvoker> nativeMethodCallInvoker) const {
315
+ class NativeMethodCallInvokerImpl : public NativeMethodCallInvoker {
316
+ private:
317
+ std::weak_ptr<JsToNativeBridge> m_jsToNativeBridge;
318
+ std::shared_ptr<NativeMethodCallInvoker> m_nativeInvoker;
319
+
320
+ public:
321
+ NativeMethodCallInvokerImpl(
322
+ std::weak_ptr<JsToNativeBridge> jsToNativeBridge,
323
+ std::shared_ptr<NativeMethodCallInvoker> nativeInvoker)
324
+ : m_jsToNativeBridge(std::move(jsToNativeBridge)),
325
+ m_nativeInvoker(std::move(nativeInvoker)) {}
326
+
327
+ void invokeAsync(
328
+ const std::string& methodName,
329
+ NativeMethodCallFunc&& func) noexcept override {
330
+ if (auto strongJsToNativeBridge = m_jsToNativeBridge.lock()) {
331
+ strongJsToNativeBridge->recordTurboModuleAsyncMethodCall();
332
+ }
333
+ m_nativeInvoker->invokeAsync(methodName, std::move(func));
334
+ }
335
+
336
+ void invokeSync(const std::string& methodName, NativeMethodCallFunc&& func)
337
+ override {
338
+ m_nativeInvoker->invokeSync(methodName, std::move(func));
339
+ }
340
+ };
341
+
342
+ return std::make_shared<NativeMethodCallInvokerImpl>(
343
+ m_delegate, std::move(nativeMethodCallInvoker));
344
+ }
345
+
346
+ jsinspector_modern::RuntimeTargetDelegate&
347
+ NativeToJsBridge::getInspectorTargetDelegate() {
348
+ return *m_executor;
349
+ }
350
+
351
+ } // namespace facebook::react
@@ -1440,6 +1440,7 @@ TEST_P(JSITest, MultilevelDecoratedHostObject) {
1440
1440
  EXPECT_EQ(1, RD2::numGets);
1441
1441
  }
1442
1442
 
1443
+
1443
1444
  TEST_P(JSITest, ArrayBufferSizeTest) {
1444
1445
  auto ab =
1445
1446
  eval("var x = new ArrayBuffer(10); x").getObject(rt).getArrayBuffer(rt);
@@ -1453,9 +1454,11 @@ TEST_P(JSITest, ArrayBufferSizeTest) {
1453
1454
  }
1454
1455
 
1455
1456
  // Ensure that setting the byteLength property does not change the length.
1456
- // TODO: Make it pass on Hermes
1457
- //eval("Object.defineProperty(x, 'byteLength', {value: 20})");
1458
- //EXPECT_EQ(ab.size(rt), 10);
1457
+ // [Windows #12210
1458
+ // eval("Object.defineProperty(x, 'byteLength', {value: 20})");
1459
+ // EXPECT_EQ(ab.size(rt), 10);
1460
+ // Windows]
1461
+
1459
1462
  }
1460
1463
 
1461
1464
  namespace {