react-native-windows 0.76.3 → 0.77.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 (369) hide show
  1. package/.flowconfig +5 -1
  2. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
  3. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
  4. package/Libraries/Animated/AnimatedEvent.js +1 -1
  5. package/Libraries/Animated/AnimatedImplementation.js +2 -2
  6. package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
  7. package/Libraries/Animated/NativeAnimatedAllowlist.windows.js +122 -0
  8. package/Libraries/Animated/animations/Animation.js +60 -25
  9. package/Libraries/Animated/animations/DecayAnimation.js +26 -38
  10. package/Libraries/Animated/animations/SpringAnimation.js +33 -39
  11. package/Libraries/Animated/animations/TimingAnimation.js +34 -42
  12. package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
  13. package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
  14. package/Libraries/Animated/createAnimatedComponent.js +60 -33
  15. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  16. package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
  17. package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
  18. package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
  19. package/Libraries/Animated/nodes/AnimatedProps.js +96 -46
  20. package/Libraries/Animated/nodes/AnimatedProps.windows.js +281 -0
  21. package/Libraries/Animated/nodes/AnimatedStyle.js +108 -39
  22. package/Libraries/Animated/nodes/AnimatedStyle.windows.js +251 -0
  23. package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
  24. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  25. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
  26. package/Libraries/Animated/useAnimatedProps.js +41 -35
  27. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  28. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
  29. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +82 -5
  30. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
  31. package/Libraries/Components/Button.js +9 -4
  32. package/Libraries/Components/Button.windows.js +19 -5
  33. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
  34. package/Libraries/Components/Glyph/Glyph.js +2 -1
  35. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
  36. package/Libraries/Components/Popup/PopupNativeComponent.js +0 -1
  37. package/Libraries/Components/Pressable/Pressable.js +4 -4
  38. package/Libraries/Components/Pressable/Pressable.windows.js +10 -4
  39. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
  40. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
  41. package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
  42. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
  43. package/Libraries/Components/ScrollView/ScrollView.js +49 -88
  44. package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
  45. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
  46. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
  47. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +0 -5
  48. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
  49. package/Libraries/Components/Switch/Switch.js +8 -6
  50. package/Libraries/Components/Switch/Switch.windows.js +8 -6
  51. package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
  52. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
  53. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
  54. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
  55. package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
  56. package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
  57. package/Libraries/Components/TextInput/TextInput.js +37 -13
  58. package/Libraries/Components/TextInput/TextInput.windows.js +47 -16
  59. package/Libraries/Components/TextInput/TextInputState.js +11 -13
  60. package/Libraries/Components/TextInput/TextInputState.windows.js +11 -13
  61. package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
  62. package/Libraries/Components/Touchable/Position.js +7 -2
  63. package/Libraries/Components/Touchable/Touchable.js +4 -0
  64. package/Libraries/Components/Touchable/Touchable.windows.js +4 -0
  65. package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
  66. package/Libraries/Components/Touchable/TouchableBounce.windows.js +227 -0
  67. package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
  68. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +5 -5
  69. package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +371 -0
  70. package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
  71. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
  72. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
  73. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +9 -3
  74. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
  75. package/Libraries/Components/View/View.js +4 -4
  76. package/Libraries/Components/View/View.windows.js +12 -5
  77. package/Libraries/Components/View/ViewAccessibility.d.ts +10 -0
  78. package/Libraries/Components/View/ViewAccessibility.windows.js +2 -0
  79. package/Libraries/Components/View/ViewNativeComponent.js +6 -98
  80. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  81. package/Libraries/Components/View/ViewPropTypes.js +0 -3
  82. package/Libraries/Components/View/ViewPropTypes.windows.js +2 -3
  83. package/Libraries/Core/ExceptionsManager.js +50 -29
  84. package/Libraries/Core/ReactNativeVersion.js +3 -3
  85. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
  86. package/Libraries/Core/setUpBatchedBridge.js +1 -10
  87. package/Libraries/Core/setUpDeveloperTools.js +1 -5
  88. package/Libraries/Core/setUpErrorHandling.js +20 -18
  89. package/Libraries/Core/setUpReactDevTools.js +107 -8
  90. package/Libraries/Core/setUpSegmentFetcher.js +1 -0
  91. package/Libraries/Core/setUpTimers.js +21 -18
  92. package/Libraries/Debugging/DebuggingOverlay.js +4 -5
  93. package/Libraries/Image/AssetSourceResolver.js +12 -1
  94. package/Libraries/Image/AssetSourceResolver.windows.js +12 -1
  95. package/Libraries/Image/Image.android.js +1 -5
  96. package/Libraries/Image/Image.d.ts +20 -29
  97. package/Libraries/Image/Image.ios.js +0 -2
  98. package/Libraries/Image/Image.windows.js +5 -1
  99. package/Libraries/Image/ImageBackground.js +2 -5
  100. package/Libraries/Image/ImageProps.js +7 -6
  101. package/Libraries/Image/ImageResizeMode.d.ts +8 -1
  102. package/Libraries/Image/ImageResizeMode.js +4 -1
  103. package/Libraries/Image/ImageSource.d.ts +0 -2
  104. package/Libraries/Image/ImageSource.js +0 -2
  105. package/Libraries/Image/ImageTypes.flow.js +11 -9
  106. package/Libraries/Image/ImageUtils.js +6 -3
  107. package/Libraries/Image/ImageViewNativeComponent.js +5 -3
  108. package/Libraries/Inspector/Inspector.js +1 -0
  109. package/Libraries/Inspector/NetworkOverlay.js +4 -0
  110. package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
  111. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
  112. package/Libraries/Interaction/InteractionManager.js +6 -1
  113. package/Libraries/Interaction/InteractionManagerStub.js +176 -0
  114. package/Libraries/Interaction/TouchHistoryMath.js +22 -19
  115. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  116. package/Libraries/Lists/FlatList.d.ts +1 -2
  117. package/Libraries/Lists/FlatList.js +2 -2
  118. package/Libraries/Lists/SectionListModern.js +7 -7
  119. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
  120. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  121. package/Libraries/LogBox/Data/LogBoxData.js +3 -3
  122. package/Libraries/LogBox/LogBox.js +18 -5
  123. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  124. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  125. package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
  126. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
  127. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js +6 -1
  128. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  129. package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +1 -1
  130. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
  131. package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
  132. package/Libraries/Modal/Modal.d.ts +12 -0
  133. package/Libraries/Modal/Modal.js +31 -4
  134. package/Libraries/Modal/Modal.windows.js +18 -0
  135. package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
  136. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
  137. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -11
  138. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
  139. package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
  140. package/Libraries/Network/XHRInterceptor.js +63 -14
  141. package/Libraries/Network/XMLHttpRequest.js +26 -1
  142. package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
  143. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
  144. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  145. package/Libraries/Pressability/HoverState.js +2 -0
  146. package/Libraries/Pressability/Pressability.js +2 -3
  147. package/Libraries/Pressability/Pressability.windows.js +2 -3
  148. package/Libraries/Pressability/usePressability.js +4 -1
  149. package/Libraries/ReactNative/AppContainer.js +1 -1
  150. package/Libraries/ReactNative/AppRegistry.js +1 -11
  151. package/Libraries/ReactNative/DisplayMode.js +1 -1
  152. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
  153. package/Libraries/ReactNative/RendererImplementation.js +18 -17
  154. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
  155. package/Libraries/ReactNative/renderApplication.js +9 -8
  156. package/Libraries/ReactNative/requireNativeComponent.js +5 -2
  157. package/Libraries/Renderer/shims/ReactFabric.js +3 -3
  158. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  159. package/Libraries/Renderer/shims/ReactNative.js +3 -3
  160. package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
  161. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
  162. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  163. package/Libraries/StyleSheet/StyleSheet.js +7 -1
  164. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
  165. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
  166. package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
  167. package/Libraries/StyleSheet/processTransform.js +3 -34
  168. package/Libraries/Text/Text.js +248 -249
  169. package/Libraries/Text/Text.windows.js +298 -292
  170. package/Libraries/Text/TextNativeComponent.js +0 -1
  171. package/Libraries/Text/TextProps.windows.js +2 -0
  172. package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
  173. package/Libraries/Types/CoreEventTypes.d.ts +3 -10
  174. package/Libraries/Types/CoreEventTypes.js +4 -6
  175. package/Libraries/Types/CoreEventTypes.windows.js +4 -6
  176. package/Libraries/Utilities/Appearance.js +3 -1
  177. package/Libraries/Utilities/BackHandler.android.js +6 -18
  178. package/Libraries/Utilities/BackHandler.d.ts +0 -4
  179. package/Libraries/Utilities/BackHandler.ios.js +0 -7
  180. package/Libraries/Utilities/BackHandler.windows.js +6 -18
  181. package/Libraries/Utilities/HMRClient.js +3 -4
  182. package/Libraries/Utilities/Platform.flow.js +2 -2
  183. package/Libraries/Utilities/Platform.flow.windows.js +3 -2
  184. package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
  185. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  186. package/Libraries/Utilities/useMergeRefs.js +26 -7
  187. package/Libraries/WebSocket/WebSocketEvent.js +4 -1
  188. package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
  189. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
  190. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  191. package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +9 -8
  192. package/Microsoft.ReactNative/AsynchronousEventBeat.h +5 -5
  193. package/Microsoft.ReactNative/FBReactNativeSpec/FBReactNativeSpecJSI.h +5 -0
  194. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +2 -2
  195. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +197 -18
  196. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +19 -1
  197. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +13 -0
  198. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +1 -1
  199. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +6 -8
  200. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +2 -2
  201. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +3 -2
  202. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
  203. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +24 -0
  204. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +5 -0
  205. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +12 -12
  206. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +4 -4
  207. package/Microsoft.ReactNative/Fabric/ImageRequest.cpp +4 -8
  208. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +16 -15
  209. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +15 -0
  210. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +9 -0
  211. package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +20 -1
  212. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -6
  213. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  214. package/Microsoft.ReactNative/SynchronousEventBeat.cpp +14 -4
  215. package/Microsoft.ReactNative/SynchronousEventBeat.h +4 -2
  216. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.cpp +78 -0
  217. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.h +51 -0
  218. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.inc +48 -0
  219. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.cpp +41 -0
  220. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.h +127 -0
  221. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.inc +125 -0
  222. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_posix.cpp +16 -0
  223. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_win.cpp +23 -0
  224. package/Microsoft.ReactNative.Cxx/JSI/decorator.h +834 -0
  225. package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +117 -0
  226. package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +366 -0
  227. package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +560 -0
  228. package/Microsoft.ReactNative.Cxx/JSI/jsi.h +1611 -0
  229. package/Microsoft.ReactNative.Cxx/JSI/threadsafe.h +79 -0
  230. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +7 -11
  231. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -1
  232. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +2878 -0
  233. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.h +36 -0
  234. package/Microsoft.ReactNative.Cxx/ReactCommon/CallInvoker.h +64 -0
  235. package/Microsoft.ReactNative.Cxx/ReactCommon/SchedulerPriority.h +22 -0
  236. package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModule.cpp +63 -63
  237. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +165 -0
  238. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +105 -0
  239. package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModuleUtils.h +57 -58
  240. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/AString.h +42 -0
  241. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Array.h +151 -0
  242. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Base.h +177 -154
  243. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +25 -0
  244. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bridging.h +21 -0
  245. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/CallbackWrapper.h +67 -0
  246. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +90 -0
  247. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Convert.h +170 -172
  248. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Error.h +51 -0
  249. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/EventEmitter.h +134 -136
  250. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Function.h +283 -283
  251. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.cpp +63 -0
  252. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.h +61 -0
  253. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Object.h +93 -0
  254. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Promise.h +104 -0
  255. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Value.h +107 -0
  256. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/flags.h +22 -0
  257. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/react_native_assert.h +72 -0
  258. package/Microsoft.ReactNative.Cxx/node-api/js_native_api.h +553 -0
  259. package/Microsoft.ReactNative.Cxx/node-api/js_native_api_types.h +167 -0
  260. package/Microsoft.ReactNative.Cxx/node-api/js_runtime_api.h +186 -0
  261. package/Microsoft.ReactNative.Cxx/stubs/glog/logging.h +82 -0
  262. package/PropertySheets/Bundle.Common.targets +1 -1
  263. package/PropertySheets/Bundle.props +3 -0
  264. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  265. package/PropertySheets/ManagedCodeGen/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
  266. package/PropertySheets/OutputMSBuildProperties.targets +3 -1
  267. package/ReactCommon/ReactCommon.vcxproj +5 -0
  268. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +2 -3
  269. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +61 -0
  270. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +26 -23
  271. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +150 -0
  272. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +252 -0
  273. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/accessibilityPropsConversions.h +795 -0
  274. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/runtimescheduler/SchedulerPriorityUtils.h +59 -0
  275. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +188 -39
  276. package/Scripts/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
  277. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +97 -62
  278. package/Shared/InspectorPackagerConnection.cpp +3 -6
  279. package/Shared/InspectorPackagerConnection.h +2 -2
  280. package/Shared/InstanceManager.h +1 -1
  281. package/Shared/OInstance.h +1 -1
  282. package/Shared/Shared.vcxitems +17 -2
  283. package/Shared/Shared.vcxitems.filters +3 -1
  284. package/Shared/TurboModuleManager.cpp +29 -4
  285. package/codegen/NativeAccessibilityInfoSpec.g.h +27 -9
  286. package/codegen/NativeAccessibilityManagerSpec.g.h +19 -13
  287. package/codegen/NativeActionSheetManagerSpec.g.h +4 -0
  288. package/codegen/NativeExceptionsManagerSpec.g.h +1 -7
  289. package/codegen/NativeIntersectionObserverSpec.g.h +2 -0
  290. package/codegen/NativePerformanceSpec.g.h +127 -3
  291. package/codegen/NativeReactDevToolsRuntimeSettingsModuleSpec.g.h +67 -0
  292. package/codegen/NativeReactDevToolsSettingsManagerSpec.g.h +41 -0
  293. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +125 -137
  294. package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
  295. package/codegen/react/components/rnwcore/Props.cpp +1 -0
  296. package/codegen/react/components/rnwcore/Props.h +1 -0
  297. package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
  298. package/codegen/react/components/rnwcore/ShadowNodes.h +0 -11
  299. package/codegen/react/components/rnwcore/States.h +0 -12
  300. package/codegen/rnwcoreJSI-generated.cpp +219 -186
  301. package/codegen/rnwcoreJSI.h +942 -511
  302. package/index.js +10 -3
  303. package/index.windows.js +10 -3
  304. package/jest/setup.js +36 -1
  305. package/just-task.js +15 -0
  306. package/package.json +22 -22
  307. package/src/private/animated/NativeAnimatedHelper.js +18 -16
  308. package/src/private/animated/useAnimatedPropsMemo.js +348 -0
  309. package/src/private/animated/useAnimatedPropsMemo.windows.js +356 -0
  310. package/src/private/components/HScrollViewNativeComponents.js +1 -27
  311. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
  312. package/src/private/components/VScrollViewNativeComponents.js +2 -25
  313. package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
  314. package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
  315. package/src/private/debugging/ReactDevToolsSettingsManager.windows.js +20 -0
  316. package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
  317. package/src/private/devmenu/DevMenu.d.ts +20 -0
  318. package/src/private/devmenu/DevMenu.js +31 -0
  319. package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
  320. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
  321. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
  322. package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
  323. package/src/private/setup/setUpDOM.js +14 -6
  324. package/src/private/setup/setUpMutationObserver.js +5 -0
  325. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
  326. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
  327. package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
  328. package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
  329. package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
  330. package/src/private/specs/modules/NativeAppearance.js +4 -10
  331. package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
  332. package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
  333. package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
  334. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
  335. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
  336. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
  337. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
  338. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
  339. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  340. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
  341. package/src/private/webapis/performance/EventTiming.js +13 -8
  342. package/src/private/webapis/performance/Performance.js +66 -73
  343. package/src/private/webapis/performance/PerformanceEntry.js +2 -5
  344. package/src/private/webapis/performance/PerformanceObserver.js +65 -164
  345. package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
  346. package/src/private/webapis/performance/UserTiming.js +11 -7
  347. package/src/private/webapis/performance/Utilities.js +18 -0
  348. package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
  349. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
  350. package/templates/cpp-lib/template.config.js +13 -7
  351. package/templates/templateUtils.js +10 -0
  352. package/types/index.d.ts +1 -1
  353. package/types/public/ReactNativeTypes.d.ts +4 -8
  354. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
  355. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
  356. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
  357. package/Libraries/DevToolsSettings/DevToolsSettingsManager.windows.js +0 -35
  358. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
  359. package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
  360. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +0 -101
  361. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +0 -569
  362. package/codegen/NativeDevToolsSettingsManagerSpec.g.h +0 -53
  363. package/codegen/NativePerformanceObserverSpec.g.h +0 -131
  364. package/src/private/components/useSyncOnScroll.js +0 -48
  365. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
  366. package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
  367. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
  368. package/types/experimental.d.ts +0 -59
  369. /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
@@ -1,283 +1,283 @@
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 <Base.h> // [Windows #13391]
11
- #include <CallbackWrapper.h> // [Windows #13391]
12
-
13
- #include <ReactCommon/CallInvoker.h>
14
- #include <ReactCommon/SchedulerPriority.h>
15
-
16
- namespace facebook::react {
17
-
18
- template <typename F>
19
- class SyncCallback;
20
-
21
- template <typename... Args>
22
- class AsyncCallback {
23
- public:
24
- AsyncCallback(
25
- jsi::Runtime& runtime,
26
- jsi::Function function,
27
- std::shared_ptr<CallInvoker> jsInvoker)
28
- : callback_(std::make_shared<SyncCallback<void(Args...)>>(
29
- runtime,
30
- std::move(function),
31
- std::move(jsInvoker))) {}
32
-
33
- void operator()(Args... args) const noexcept {
34
- call(std::forward<Args>(args)...);
35
- }
36
-
37
- void call(Args... args) const noexcept {
38
- callWithArgs(std::nullopt, std::forward<Args>(args)...);
39
- }
40
-
41
- void callWithPriority(SchedulerPriority priority, Args... args)
42
- const noexcept {
43
- callWithArgs(priority, std::forward<Args>(args)...);
44
- }
45
-
46
- void call(std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
47
- const noexcept {
48
- callWithFunction(std::nullopt, std::move(callImpl));
49
- }
50
-
51
- void callWithPriority(
52
- SchedulerPriority priority,
53
- std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
54
- const noexcept {
55
- callWithFunction(priority, std::move(callImpl));
56
- }
57
-
58
- private:
59
- friend Bridging<AsyncCallback>;
60
-
61
- std::shared_ptr<SyncCallback<void(Args...)>> callback_;
62
-
63
- void callWithArgs(std::optional<SchedulerPriority> priority, Args... args)
64
- const noexcept {
65
- if (auto wrapper = callback_->wrapper_.lock()) {
66
- auto fn = [callback = callback_,
67
- argsPtr = std::make_shared<std::tuple<Args...>>(
68
- std::make_tuple(std::forward<Args>(args)...))](
69
- jsi::Runtime&) { callback->apply(std::move(*argsPtr)); };
70
-
71
- auto& jsInvoker = wrapper->jsInvoker();
72
- if (priority) {
73
- jsInvoker.invokeAsync(*priority, std::move(fn));
74
- } else {
75
- jsInvoker.invokeAsync(std::move(fn));
76
- }
77
- }
78
- }
79
-
80
- void callWithFunction(
81
- std::optional<SchedulerPriority> priority,
82
- std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
83
- const noexcept {
84
- if (auto wrapper = callback_->wrapper_.lock()) {
85
- // Capture callback_ and not wrapper_. If callback_ is deallocated or the
86
- // JSVM is shutdown before the async task is scheduled, the underlying
87
- // function will have been deallocated.
88
- auto fn = [callback = callback_,
89
- callImpl = std::move(callImpl)](jsi::Runtime& rt) {
90
- if (auto wrapper2 = callback->wrapper_.lock()) {
91
- callImpl(rt, wrapper2->callback());
92
- }
93
- };
94
-
95
- auto& jsInvoker = wrapper->jsInvoker();
96
- if (priority) {
97
- jsInvoker.invokeAsync(*priority, std::move(fn));
98
- } else {
99
- jsInvoker.invokeAsync(std::move(fn));
100
- }
101
- }
102
- }
103
- };
104
-
105
- // You must ensure that when invoking this you're located on the JS thread, or
106
- // have exclusive control of the JS VM context. If you cannot ensure this, use
107
- // AsyncCallback instead.
108
- template <typename R, typename... Args>
109
- class SyncCallback<R(Args...)> {
110
- public:
111
- SyncCallback(
112
- jsi::Runtime& rt,
113
- jsi::Function function,
114
- std::shared_ptr<CallInvoker> jsInvoker)
115
- : wrapper_(CallbackWrapper::createWeak(
116
- std::move(function),
117
- rt,
118
- std::move(jsInvoker))) {}
119
-
120
- // Disallow copying, as we can no longer safely destroy the callback
121
- // from the destructor if there's multiple copies
122
- SyncCallback(const SyncCallback&) = delete;
123
- SyncCallback& operator=(const SyncCallback&) = delete;
124
-
125
- // Allow move
126
- SyncCallback(SyncCallback&& other) noexcept
127
- : wrapper_(std::move(other.wrapper_)) {}
128
-
129
- SyncCallback& operator=(SyncCallback&& other) noexcept {
130
- wrapper_ = std::move(other.wrapper_);
131
- return *this;
132
- }
133
-
134
- ~SyncCallback() {
135
- if (auto wrapper = wrapper_.lock()) {
136
- wrapper->destroy();
137
- }
138
- }
139
-
140
- R operator()(Args... args) const {
141
- return call(std::forward<Args>(args)...);
142
- }
143
-
144
- R call(Args... args) const {
145
- auto wrapper = wrapper_.lock();
146
-
147
- // If the wrapper has been deallocated, we can no longer provide a return
148
- // value consistently, so our only option is to throw
149
- if (!wrapper) {
150
- if constexpr (std::is_void_v<R>) {
151
- return;
152
- } else {
153
- throw std::runtime_error("Failed to call invalidated sync callback");
154
- }
155
- }
156
-
157
- auto& callback = wrapper->callback();
158
- auto& rt = wrapper->runtime();
159
- auto jsInvoker = wrapper->jsInvokerPtr();
160
-
161
- if constexpr (std::is_void_v<R>) {
162
- callback.call(
163
- rt, bridging::toJs(rt, std::forward<Args>(args), jsInvoker)...);
164
- } else {
165
- return bridging::fromJs<R>(
166
- rt,
167
- callback.call(
168
- rt, bridging::toJs(rt, std::forward<Args>(args), jsInvoker)...),
169
- jsInvoker);
170
- }
171
- }
172
-
173
- private:
174
- friend AsyncCallback<Args...>;
175
- friend Bridging<SyncCallback>;
176
-
177
- R apply(std::tuple<Args...>&& args) const {
178
- return apply(std::move(args), std::index_sequence_for<Args...>{});
179
- }
180
-
181
- template <size_t... Index>
182
- R apply(std::tuple<Args...>&& args, std::index_sequence<Index...>) const {
183
- return call(std::move(std::get<Index>(args))...);
184
- }
185
-
186
- // Held weakly so lifetime is managed by LongLivedObjectCollection.
187
- std::weak_ptr<CallbackWrapper> wrapper_;
188
- };
189
-
190
- template <typename... Args>
191
- struct Bridging<AsyncCallback<Args...>> {
192
- static AsyncCallback<Args...> fromJs(
193
- jsi::Runtime& rt,
194
- jsi::Function&& value,
195
- const std::shared_ptr<CallInvoker>& jsInvoker) {
196
- return AsyncCallback<Args...>(rt, std::move(value), jsInvoker);
197
- }
198
-
199
- static jsi::Function toJs(
200
- jsi::Runtime& rt,
201
- const AsyncCallback<Args...>& value) {
202
- return value.callback_->function_.getFunction(rt);
203
- }
204
- };
205
-
206
- template <typename R, typename... Args>
207
- struct Bridging<SyncCallback<R(Args...)>> {
208
- static SyncCallback<R(Args...)> fromJs(
209
- jsi::Runtime& rt,
210
- jsi::Function&& value,
211
- const std::shared_ptr<CallInvoker>& jsInvoker) {
212
- return SyncCallback<R(Args...)>(rt, std::move(value), jsInvoker);
213
- }
214
-
215
- static jsi::Function toJs(
216
- jsi::Runtime& rt,
217
- const SyncCallback<R(Args...)>& value) {
218
- return value.function_.getFunction(rt);
219
- }
220
- };
221
-
222
- template <typename R, typename... Args>
223
- struct Bridging<std::function<R(Args...)>> {
224
- using Func = std::function<R(Args...)>;
225
- using IndexSequence = std::index_sequence_for<Args...>;
226
-
227
- static constexpr size_t kArgumentCount = sizeof...(Args);
228
-
229
- static jsi::Function toJs(
230
- jsi::Runtime& rt,
231
- Func fn,
232
- const std::shared_ptr<CallInvoker>& jsInvoker) {
233
- return jsi::Function::createFromHostFunction(
234
- rt,
235
- jsi::PropNameID::forAscii(rt, "BridgedFunction"),
236
- kArgumentCount,
237
- [fn = std::make_shared<Func>(std::move(fn)), jsInvoker](
238
- jsi::Runtime& rt,
239
- const jsi::Value&,
240
- const jsi::Value* args,
241
- size_t count) -> jsi::Value {
242
- if (count < kArgumentCount) {
243
- throw jsi::JSError(rt, "Incorrect number of arguments");
244
- }
245
-
246
- if constexpr (std::is_void_v<R>) {
247
- callFromJs(*fn, rt, args, jsInvoker, IndexSequence{});
248
- return jsi::Value();
249
- } else {
250
- return bridging::toJs(
251
- rt,
252
- callFromJs(*fn, rt, args, jsInvoker, IndexSequence{}),
253
- jsInvoker);
254
- }
255
- });
256
- }
257
-
258
- private:
259
- template <size_t... Index>
260
- static R callFromJs(
261
- Func& fn,
262
- jsi::Runtime& rt,
263
- const jsi::Value* args,
264
- const std::shared_ptr<CallInvoker>& jsInvoker,
265
- std::index_sequence<Index...>) {
266
- return fn(bridging::fromJs<Args>(rt, args[Index], jsInvoker)...);
267
- }
268
- };
269
-
270
- template <typename R, typename... Args>
271
- struct Bridging<
272
- std::function<R(Args...)>,
273
- std::enable_if_t<
274
- !std::is_same_v<std::function<R(Args...)>, std::function<R(Args...)>>>>
275
- : Bridging<std::function<R(Args...)>> {};
276
-
277
- template <typename R, typename... Args>
278
- struct Bridging<R(Args...)> : Bridging<std::function<R(Args...)>> {};
279
-
280
- template <typename R, typename... Args>
281
- struct Bridging<R (*)(Args...)> : Bridging<std::function<R(Args...)>> {};
282
-
283
- } // namespace facebook::react
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 <react/bridging/Base.h>
11
+ #include <react/bridging/CallbackWrapper.h>
12
+
13
+ #include <ReactCommon/CallInvoker.h>
14
+ #include <ReactCommon/SchedulerPriority.h>
15
+
16
+ namespace facebook::react {
17
+
18
+ template <typename F>
19
+ class SyncCallback;
20
+
21
+ template <typename... Args>
22
+ class AsyncCallback {
23
+ public:
24
+ AsyncCallback(
25
+ jsi::Runtime& runtime,
26
+ jsi::Function function,
27
+ std::shared_ptr<CallInvoker> jsInvoker)
28
+ : callback_(std::make_shared<SyncCallback<void(Args...)>>(
29
+ runtime,
30
+ std::move(function),
31
+ std::move(jsInvoker))) {}
32
+
33
+ void operator()(Args... args) const noexcept {
34
+ call(std::forward<Args>(args)...);
35
+ }
36
+
37
+ void call(Args... args) const noexcept {
38
+ callWithArgs(std::nullopt, std::forward<Args>(args)...);
39
+ }
40
+
41
+ void callWithPriority(SchedulerPriority priority, Args... args)
42
+ const noexcept {
43
+ callWithArgs(priority, std::forward<Args>(args)...);
44
+ }
45
+
46
+ void call(std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
47
+ const noexcept {
48
+ callWithFunction(std::nullopt, std::move(callImpl));
49
+ }
50
+
51
+ void callWithPriority(
52
+ SchedulerPriority priority,
53
+ std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
54
+ const noexcept {
55
+ callWithFunction(priority, std::move(callImpl));
56
+ }
57
+
58
+ private:
59
+ friend Bridging<AsyncCallback>;
60
+
61
+ std::shared_ptr<SyncCallback<void(Args...)>> callback_;
62
+
63
+ void callWithArgs(std::optional<SchedulerPriority> priority, Args... args)
64
+ const noexcept {
65
+ if (auto wrapper = callback_->wrapper_.lock()) {
66
+ auto fn = [callback = callback_,
67
+ argsPtr = std::make_shared<std::tuple<Args...>>(
68
+ std::make_tuple(std::forward<Args>(args)...))](
69
+ jsi::Runtime&) { callback->apply(std::move(*argsPtr)); };
70
+
71
+ auto& jsInvoker = wrapper->jsInvoker();
72
+ if (priority) {
73
+ jsInvoker.invokeAsync(*priority, std::move(fn));
74
+ } else {
75
+ jsInvoker.invokeAsync(std::move(fn));
76
+ }
77
+ }
78
+ }
79
+
80
+ void callWithFunction(
81
+ std::optional<SchedulerPriority> priority,
82
+ std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
83
+ const noexcept {
84
+ if (auto wrapper = callback_->wrapper_.lock()) {
85
+ // Capture callback_ and not wrapper_. If callback_ is deallocated or the
86
+ // JSVM is shutdown before the async task is scheduled, the underlying
87
+ // function will have been deallocated.
88
+ auto fn = [callback = callback_,
89
+ callImpl = std::move(callImpl)](jsi::Runtime& rt) {
90
+ if (auto wrapper2 = callback->wrapper_.lock()) {
91
+ callImpl(rt, wrapper2->callback());
92
+ }
93
+ };
94
+
95
+ auto& jsInvoker = wrapper->jsInvoker();
96
+ if (priority) {
97
+ jsInvoker.invokeAsync(*priority, std::move(fn));
98
+ } else {
99
+ jsInvoker.invokeAsync(std::move(fn));
100
+ }
101
+ }
102
+ }
103
+ };
104
+
105
+ // You must ensure that when invoking this you're located on the JS thread, or
106
+ // have exclusive control of the JS VM context. If you cannot ensure this, use
107
+ // AsyncCallback instead.
108
+ template <typename R, typename... Args>
109
+ class SyncCallback<R(Args...)> {
110
+ public:
111
+ SyncCallback(
112
+ jsi::Runtime& rt,
113
+ jsi::Function function,
114
+ std::shared_ptr<CallInvoker> jsInvoker)
115
+ : wrapper_(CallbackWrapper::createWeak(
116
+ std::move(function),
117
+ rt,
118
+ std::move(jsInvoker))) {}
119
+
120
+ // Disallow copying, as we can no longer safely destroy the callback
121
+ // from the destructor if there's multiple copies
122
+ SyncCallback(const SyncCallback&) = delete;
123
+ SyncCallback& operator=(const SyncCallback&) = delete;
124
+
125
+ // Allow move
126
+ SyncCallback(SyncCallback&& other) noexcept
127
+ : wrapper_(std::move(other.wrapper_)) {}
128
+
129
+ SyncCallback& operator=(SyncCallback&& other) noexcept {
130
+ wrapper_ = std::move(other.wrapper_);
131
+ return *this;
132
+ }
133
+
134
+ ~SyncCallback() {
135
+ if (auto wrapper = wrapper_.lock()) {
136
+ wrapper->destroy();
137
+ }
138
+ }
139
+
140
+ R operator()(Args... args) const {
141
+ return call(std::forward<Args>(args)...);
142
+ }
143
+
144
+ R call(Args... args) const {
145
+ auto wrapper = wrapper_.lock();
146
+
147
+ // If the wrapper has been deallocated, we can no longer provide a return
148
+ // value consistently, so our only option is to throw
149
+ if (!wrapper) {
150
+ if constexpr (std::is_void_v<R>) {
151
+ return;
152
+ } else {
153
+ throw std::runtime_error("Failed to call invalidated sync callback");
154
+ }
155
+ }
156
+
157
+ auto& callback = wrapper->callback();
158
+ auto& rt = wrapper->runtime();
159
+ auto jsInvoker = wrapper->jsInvokerPtr();
160
+
161
+ if constexpr (std::is_void_v<R>) {
162
+ callback.call(
163
+ rt, bridging::toJs(rt, std::forward<Args>(args), jsInvoker)...);
164
+ } else {
165
+ return bridging::fromJs<R>(
166
+ rt,
167
+ callback.call(
168
+ rt, bridging::toJs(rt, std::forward<Args>(args), jsInvoker)...),
169
+ jsInvoker);
170
+ }
171
+ }
172
+
173
+ private:
174
+ friend AsyncCallback<Args...>;
175
+ friend Bridging<SyncCallback>;
176
+
177
+ R apply(std::tuple<Args...>&& args) const {
178
+ return apply(std::move(args), std::index_sequence_for<Args...>{});
179
+ }
180
+
181
+ template <size_t... Index>
182
+ R apply(std::tuple<Args...>&& args, std::index_sequence<Index...>) const {
183
+ return call(std::move(std::get<Index>(args))...);
184
+ }
185
+
186
+ // Held weakly so lifetime is managed by LongLivedObjectCollection.
187
+ std::weak_ptr<CallbackWrapper> wrapper_;
188
+ };
189
+
190
+ template <typename... Args>
191
+ struct Bridging<AsyncCallback<Args...>> {
192
+ static AsyncCallback<Args...> fromJs(
193
+ jsi::Runtime& rt,
194
+ jsi::Function&& value,
195
+ const std::shared_ptr<CallInvoker>& jsInvoker) {
196
+ return AsyncCallback<Args...>(rt, std::move(value), jsInvoker);
197
+ }
198
+
199
+ static jsi::Function toJs(
200
+ jsi::Runtime& rt,
201
+ const AsyncCallback<Args...>& value) {
202
+ return value.callback_->function_.getFunction(rt);
203
+ }
204
+ };
205
+
206
+ template <typename R, typename... Args>
207
+ struct Bridging<SyncCallback<R(Args...)>> {
208
+ static SyncCallback<R(Args...)> fromJs(
209
+ jsi::Runtime& rt,
210
+ jsi::Function&& value,
211
+ const std::shared_ptr<CallInvoker>& jsInvoker) {
212
+ return SyncCallback<R(Args...)>(rt, std::move(value), jsInvoker);
213
+ }
214
+
215
+ static jsi::Function toJs(
216
+ jsi::Runtime& rt,
217
+ const SyncCallback<R(Args...)>& value) {
218
+ return value.function_.getFunction(rt);
219
+ }
220
+ };
221
+
222
+ template <typename R, typename... Args>
223
+ struct Bridging<std::function<R(Args...)>> {
224
+ using Func = std::function<R(Args...)>;
225
+ using IndexSequence = std::index_sequence_for<Args...>;
226
+
227
+ static constexpr size_t kArgumentCount = sizeof...(Args);
228
+
229
+ static jsi::Function toJs(
230
+ jsi::Runtime& rt,
231
+ Func fn,
232
+ const std::shared_ptr<CallInvoker>& jsInvoker) {
233
+ return jsi::Function::createFromHostFunction(
234
+ rt,
235
+ jsi::PropNameID::forAscii(rt, "BridgedFunction"),
236
+ kArgumentCount,
237
+ [fn = std::make_shared<Func>(std::move(fn)), jsInvoker](
238
+ jsi::Runtime& rt,
239
+ const jsi::Value&,
240
+ const jsi::Value* args,
241
+ size_t count) -> jsi::Value {
242
+ if (count < kArgumentCount) {
243
+ throw jsi::JSError(rt, "Incorrect number of arguments");
244
+ }
245
+
246
+ if constexpr (std::is_void_v<R>) {
247
+ callFromJs(*fn, rt, args, jsInvoker, IndexSequence{});
248
+ return jsi::Value();
249
+ } else {
250
+ return bridging::toJs(
251
+ rt,
252
+ callFromJs(*fn, rt, args, jsInvoker, IndexSequence{}),
253
+ jsInvoker);
254
+ }
255
+ });
256
+ }
257
+
258
+ private:
259
+ template <size_t... Index>
260
+ static R callFromJs(
261
+ Func& fn,
262
+ jsi::Runtime& rt,
263
+ const jsi::Value* args,
264
+ const std::shared_ptr<CallInvoker>& jsInvoker,
265
+ std::index_sequence<Index...>) {
266
+ return fn(bridging::fromJs<Args>(rt, args[Index], jsInvoker)...);
267
+ }
268
+ };
269
+
270
+ template <typename R, typename... Args>
271
+ struct Bridging<
272
+ std::function<R(Args...)>,
273
+ std::enable_if_t<
274
+ !std::is_same_v<std::function<R(Args...)>, std::function<R(Args...)>>>>
275
+ : Bridging<std::function<R(Args...)>> {};
276
+
277
+ template <typename R, typename... Args>
278
+ struct Bridging<R(Args...)> : Bridging<std::function<R(Args...)>> {};
279
+
280
+ template <typename R, typename... Args>
281
+ struct Bridging<R (*)(Args...)> : Bridging<std::function<R(Args...)>> {};
282
+
283
+ } // namespace facebook::react
@@ -0,0 +1,63 @@
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 "LongLivedObject.h"
9
+ #include <unordered_map>
10
+
11
+ namespace facebook::react {
12
+
13
+ // LongLivedObjectCollection
14
+
15
+ LongLivedObjectCollection& LongLivedObjectCollection::get(
16
+ jsi::Runtime& runtime) {
17
+ static std::unordered_map<void*, std::shared_ptr<LongLivedObjectCollection>>
18
+ instances;
19
+ static std::mutex instancesMutex;
20
+
21
+ std::scoped_lock lock(instancesMutex);
22
+ void* key = static_cast<void*>(&runtime);
23
+ auto entry = instances.find(key);
24
+ if (entry == instances.end()) {
25
+ entry =
26
+ instances.emplace(key, std::make_shared<LongLivedObjectCollection>())
27
+ .first;
28
+ }
29
+ return *(entry->second);
30
+ }
31
+
32
+ void LongLivedObjectCollection::add(std::shared_ptr<LongLivedObject> so) {
33
+ std::scoped_lock lock(collectionMutex_);
34
+ collection_.insert(std::move(so));
35
+ }
36
+
37
+ void LongLivedObjectCollection::remove(const LongLivedObject* o) {
38
+ std::scoped_lock lock(collectionMutex_);
39
+ for (auto p = collection_.begin(); p != collection_.end(); p++) {
40
+ if (p->get() == o) {
41
+ collection_.erase(p);
42
+ break;
43
+ }
44
+ }
45
+ }
46
+
47
+ void LongLivedObjectCollection::clear() {
48
+ std::scoped_lock lock(collectionMutex_);
49
+ collection_.clear();
50
+ }
51
+
52
+ size_t LongLivedObjectCollection::size() const {
53
+ std::scoped_lock lock(collectionMutex_);
54
+ return collection_.size();
55
+ }
56
+
57
+ // LongLivedObject
58
+
59
+ void LongLivedObject::allowRelease() {
60
+ LongLivedObjectCollection::get(runtime_).remove(this);
61
+ }
62
+
63
+ } // namespace facebook::react