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,152 @@
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 <jsi/jsi.h>
11
+ #include <Convert.h> // [Windows]
12
+
13
+ #include <cstdint>
14
+ #include <memory>
15
+ #include <type_traits>
16
+
17
+ namespace facebook::react {
18
+
19
+ class CallInvoker;
20
+
21
+ template <typename T, typename = void>
22
+ struct Bridging;
23
+
24
+ template <>
25
+ struct Bridging<void> {
26
+ // Highly generic code may result in "casting" to void.
27
+ static void fromJs(jsi::Runtime&, const jsi::Value&) {}
28
+ };
29
+
30
+ namespace bridging {
31
+ namespace detail {
32
+
33
+ template <typename F>
34
+ struct function_wrapper;
35
+
36
+ template <typename C, typename R, typename... Args>
37
+ struct function_wrapper<R (C::*)(Args...)> {
38
+ using type = std::function<R(Args...)>;
39
+ };
40
+
41
+ template <typename C, typename R, typename... Args>
42
+ struct function_wrapper<R (C::*)(Args...) const> {
43
+ using type = std::function<R(Args...)>;
44
+ };
45
+
46
+ template <typename T, typename = void>
47
+ struct bridging_wrapper {
48
+ using type = remove_cvref_t<T>;
49
+ };
50
+
51
+ // Convert lambda types to move-only function types since we can't specialize
52
+ // Bridging templates for arbitrary lambdas.
53
+ template <typename T>
54
+ struct bridging_wrapper<
55
+ T,
56
+ std::void_t<decltype(&remove_cvref_t<T>::operator())>>
57
+ : function_wrapper<decltype(&remove_cvref_t<T>::operator())> {};
58
+
59
+ } // namespace detail
60
+
61
+ template <typename T>
62
+ using bridging_t = typename detail::bridging_wrapper<T>::type;
63
+
64
+ template <typename R, typename T, std::enable_if_t<is_jsi_v<T>, int> = 0>
65
+ auto fromJs(jsi::Runtime& rt, T&& value, const std::shared_ptr<CallInvoker>&)
66
+ -> decltype(static_cast<R>(convert(rt, std::forward<T>(value)))) {
67
+ return convert(rt, std::forward<T>(value));
68
+ }
69
+
70
+ template <typename R, typename T>
71
+ auto fromJs(jsi::Runtime& rt, T&& value, const std::shared_ptr<CallInvoker>&)
72
+ -> decltype(Bridging<remove_cvref_t<R>>::fromJs(
73
+ rt,
74
+ convert(rt, std::forward<T>(value)))) {
75
+ return Bridging<remove_cvref_t<R>>::fromJs(
76
+ rt, convert(rt, std::forward<T>(value)));
77
+ }
78
+
79
+ template <typename R, typename T>
80
+ auto fromJs(
81
+ jsi::Runtime& rt,
82
+ T&& value,
83
+ const std::shared_ptr<CallInvoker>& jsInvoker)
84
+ -> decltype(Bridging<remove_cvref_t<R>>::fromJs(
85
+ rt,
86
+ convert(rt, std::forward<T>(value)),
87
+ jsInvoker)) {
88
+ return Bridging<remove_cvref_t<R>>::fromJs(
89
+ rt, convert(rt, std::forward<T>(value)), jsInvoker);
90
+ }
91
+
92
+ template <typename T, std::enable_if_t<is_jsi_v<T>, int> = 0>
93
+ auto toJs(
94
+ jsi::Runtime& rt,
95
+ T&& value,
96
+ const std::shared_ptr<CallInvoker>& = nullptr) -> remove_cvref_t<T> {
97
+ return convert(rt, std::forward<T>(value));
98
+ }
99
+
100
+ template <typename T>
101
+ auto toJs(
102
+ jsi::Runtime& rt,
103
+ T&& value,
104
+ const std::shared_ptr<CallInvoker>& = nullptr)
105
+ -> decltype(Bridging<bridging_t<T>>::toJs(rt, std::forward<T>(value))) {
106
+ return Bridging<bridging_t<T>>::toJs(rt, std::forward<T>(value));
107
+ }
108
+
109
+ template <typename T>
110
+ auto toJs(
111
+ jsi::Runtime& rt,
112
+ T&& value,
113
+ const std::shared_ptr<CallInvoker>& jsInvoker)
114
+ -> decltype(Bridging<bridging_t<T>>::toJs(
115
+ rt,
116
+ std::forward<T>(value),
117
+ jsInvoker)) {
118
+ return Bridging<bridging_t<T>>::toJs(rt, std::forward<T>(value), jsInvoker);
119
+ }
120
+
121
+ template <typename, typename = jsi::Value, typename = void>
122
+ inline constexpr bool supportsFromJs = false;
123
+
124
+ template <typename T, typename Arg = jsi::Value>
125
+ inline constexpr bool supportsFromJs<
126
+ T,
127
+ Arg,
128
+ std::void_t<decltype(fromJs<T>(
129
+ std::declval<jsi::Runtime&>(),
130
+ std::declval<Arg>(),
131
+ nullptr))>> = true;
132
+
133
+ template <typename, typename = jsi::Value, typename = void>
134
+ inline constexpr bool supportsToJs = false;
135
+
136
+ template <typename T, typename Ret = jsi::Value>
137
+ inline constexpr bool supportsToJs<
138
+ T,
139
+ Ret,
140
+ std::void_t<decltype(toJs(
141
+ std::declval<jsi::Runtime&>(),
142
+ std::declval<T>(),
143
+ nullptr))>> =
144
+ std::is_convertible_v<
145
+ decltype(toJs(
146
+ std::declval<jsi::Runtime&>(),
147
+ std::declval<T>(),
148
+ nullptr)),
149
+ Ret>;
150
+
151
+ } // namespace bridging
152
+ } // namespace facebook::react
@@ -13,8 +13,9 @@
13
13
  #include <react/bridging/Class.h>
14
14
  // #include <react/bridging/Dynamic.h> // Line causes Error C1083 Cannot open include file: 'double-conversion/double-conversion.h' #11644
15
15
  #include <react/bridging/Error.h>
16
+ #include <react/bridging/EventEmitter.h>
16
17
  #include <react/bridging/Function.h>
17
18
  #include <react/bridging/Number.h>
18
19
  #include <react/bridging/Object.h>
19
20
  #include <react/bridging/Promise.h>
20
- #include <react/bridging/Value.h>
21
+ #include <react/bridging/Value.h>
@@ -8,23 +8,24 @@
8
8
  #pragma once
9
9
 
10
10
  #include <jsi/jsi.h>
11
- #include <LongLivedObject.h>
12
11
 
13
12
  #include <memory>
14
13
 
15
- namespace facebook {
16
- namespace react {
14
+ #include <LongLivedObject.h> // [Windows]
15
+
16
+ namespace facebook::react {
17
+
18
+ class CallInvoker;
17
19
 
18
20
  // Helper for passing jsi::Function arg to other methods.
19
21
  class CallbackWrapper : public LongLivedObject {
20
22
  private:
21
23
  CallbackWrapper(
22
- jsi::Function &&callback,
23
- jsi::Runtime &runtime,
24
+ jsi::Function&& callback,
25
+ jsi::Runtime& runtime,
24
26
  std::shared_ptr<CallInvoker> jsInvoker)
25
- : longLivedObjectCollection_(),
27
+ : LongLivedObject(runtime),
26
28
  callback_(std::move(callback)),
27
- runtime_(runtime),
28
29
  jsInvoker_(std::move(jsInvoker)) {}
29
30
 
30
31
  CallbackWrapper(
@@ -32,9 +33,8 @@ class CallbackWrapper : public LongLivedObject {
32
33
  jsi::Function &&callback,
33
34
  jsi::Runtime &runtime,
34
35
  std::shared_ptr<CallInvoker> jsInvoker)
35
- : longLivedObjectCollection_(longLivedObjectCollection),
36
+ : LongLivedObject(runtime),
36
37
  callback_(std::move(callback)),
37
- runtime_(runtime),
38
38
  jsInvoker_(std::move(jsInvoker)) {}
39
39
 
40
40
  // Use a weak_ptr to avoid a retain cycle: LongLivedObjectCollection owns all
@@ -42,7 +42,6 @@ class CallbackWrapper : public LongLivedObject {
42
42
  // LongLivedObjectCollection.
43
43
  std::weak_ptr<LongLivedObjectCollection> longLivedObjectCollection_;
44
44
  jsi::Function callback_;
45
- jsi::Runtime &runtime_;
46
45
  std::shared_ptr<CallInvoker> jsInvoker_;
47
46
 
48
47
  public:
@@ -50,9 +49,9 @@ class CallbackWrapper : public LongLivedObject {
50
49
  jsi::Function &&callback,
51
50
  jsi::Runtime &runtime,
52
51
  std::shared_ptr<CallInvoker> jsInvoker) {
53
- auto wrapper = std::shared_ptr<CallbackWrapper>(
54
- new CallbackWrapper(std::move(callback), runtime, jsInvoker));
55
- LongLivedObjectCollection::get().add(wrapper);
52
+ auto wrapper = std::shared_ptr<CallbackWrapper>(new CallbackWrapper(
53
+ std::move(callback), runtime, std::move(jsInvoker)));
54
+ LongLivedObjectCollection::get(runtime).add(wrapper);
56
55
  return wrapper;
57
56
  }
58
57
 
@@ -99,5 +98,4 @@ class CallbackWrapper : public LongLivedObject {
99
98
  }
100
99
  };
101
100
 
102
- } // namespace react
103
- } // namespace facebook
101
+ } // namespace facebook::react
@@ -0,0 +1,137 @@
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 <Function.h> // [Windows]
11
+ #include <functional>
12
+ #include <memory>
13
+ #include <mutex>
14
+ #include <unordered_map>
15
+
16
+ #define FRIEND_TEST(test_case_name, test_name) \
17
+ friend class test_case_name##_##test_name##_Test
18
+
19
+ namespace facebook::react {
20
+
21
+ class EventSubscription {
22
+ public:
23
+ explicit EventSubscription(std::function<void()> remove)
24
+ : remove_(std::move(remove)) {}
25
+ ~EventSubscription() = default;
26
+ EventSubscription(EventSubscription&&) noexcept = default;
27
+ EventSubscription& operator=(EventSubscription&&) noexcept = default;
28
+ EventSubscription(const EventSubscription&) = delete;
29
+ EventSubscription& operator=(const EventSubscription&) = delete;
30
+
31
+ private:
32
+ friend Bridging<EventSubscription>;
33
+
34
+ std::function<void()> remove_;
35
+ };
36
+
37
+ template <>
38
+ struct Bridging<EventSubscription> {
39
+ static jsi::Object toJs(
40
+ jsi::Runtime& rt,
41
+ const EventSubscription& eventSubscription,
42
+ const std::shared_ptr<CallInvoker>& jsInvoker) {
43
+ auto result = jsi::Object(rt);
44
+ result.setProperty(
45
+ rt, "remove", bridging::toJs(rt, eventSubscription.remove_, jsInvoker));
46
+ return result;
47
+ }
48
+ };
49
+
50
+ class IAsyncEventEmitter {
51
+ public:
52
+ IAsyncEventEmitter() noexcept = default;
53
+ virtual ~IAsyncEventEmitter() noexcept = default;
54
+ IAsyncEventEmitter(IAsyncEventEmitter&&) noexcept = default;
55
+ IAsyncEventEmitter& operator=(IAsyncEventEmitter&&) noexcept = default;
56
+ IAsyncEventEmitter(const IAsyncEventEmitter&) = delete;
57
+ IAsyncEventEmitter& operator=(const IAsyncEventEmitter&) = delete;
58
+
59
+ virtual jsi::Object get(
60
+ jsi::Runtime& rt,
61
+ const std::shared_ptr<CallInvoker>& jsInvoker) const = 0;
62
+ };
63
+
64
+ template <typename... Args>
65
+ class AsyncEventEmitter : public IAsyncEventEmitter {
66
+ static_assert(
67
+ sizeof...(Args) <= 1,
68
+ "AsyncEventEmitter must have at most one argument");
69
+
70
+ public:
71
+ AsyncEventEmitter() : state_(std::make_shared<SharedState>()) {
72
+ listen_ = [state = state_](AsyncCallback<Args...> listener) {
73
+ std::lock_guard<std::mutex> lock(state->mutex);
74
+ auto listenerId = state->listenerId++;
75
+ state->listeners.emplace(listenerId, std::move(listener));
76
+ return EventSubscription([state, listenerId]() {
77
+ std::lock_guard<std::mutex> innerLock(state->mutex);
78
+ state->listeners.erase(listenerId);
79
+ });
80
+ };
81
+ }
82
+ ~AsyncEventEmitter() override = default;
83
+ AsyncEventEmitter(AsyncEventEmitter&&) noexcept = default;
84
+ AsyncEventEmitter& operator=(AsyncEventEmitter&&) noexcept = default;
85
+ AsyncEventEmitter(const AsyncEventEmitter&) = delete;
86
+ AsyncEventEmitter& operator=(const AsyncEventEmitter&) = delete;
87
+
88
+ void emit(std::function<jsi::Value(jsi::Runtime&)>&& converter) {
89
+ std::lock_guard<std::mutex> lock(state_->mutex);
90
+ for (auto& [_, listener] : state_->listeners) {
91
+ listener.call([converter](jsi::Runtime& rt, jsi::Function& jsFunction) {
92
+ jsFunction.call(rt, converter(rt));
93
+ });
94
+ }
95
+ }
96
+
97
+ void emit(Args... value) {
98
+ std::lock_guard<std::mutex> lock(state_->mutex);
99
+ for (const auto& [_, listener] : state_->listeners) {
100
+ listener.call(static_cast<Args>(value)...);
101
+ }
102
+ }
103
+
104
+ jsi::Object get(
105
+ jsi::Runtime& rt,
106
+ const std::shared_ptr<CallInvoker>& jsInvoker) const override {
107
+ auto result = jsi::Object(rt);
108
+ result.setProperty(
109
+ rt, "addListener", bridging::toJs(rt, listen_, jsInvoker));
110
+ return result;
111
+ }
112
+
113
+ private:
114
+ friend Bridging<AsyncEventEmitter>;
115
+ FRIEND_TEST(BridgingTest, eventEmitterTest);
116
+
117
+ struct SharedState {
118
+ std::mutex mutex;
119
+ std::unordered_map<size_t, AsyncCallback<Args...>> listeners;
120
+ size_t listenerId{};
121
+ };
122
+
123
+ std::function<EventSubscription(AsyncCallback<Args...>)> listen_;
124
+ std::shared_ptr<SharedState> state_;
125
+ };
126
+
127
+ template <typename... Args>
128
+ struct Bridging<AsyncEventEmitter<Args...>> {
129
+ static jsi::Object toJs(
130
+ jsi::Runtime& rt,
131
+ const AsyncEventEmitter<Args...>& eventEmitter,
132
+ const std::shared_ptr<CallInvoker>& jsInvoker) {
133
+ return eventEmitter.get(rt, jsInvoker);
134
+ }
135
+ };
136
+
137
+ } // namespace facebook::react
@@ -0,0 +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]
11
+ #include <CallbackWrapper.h> // [Windows]
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
@@ -40,25 +40,22 @@ TurboModule::TurboModule(
40
40
  : name_(std::move(name)), jsInvoker_(std::move(jsInvoker)) {}
41
41
 
42
42
  void TurboModule::emitDeviceEvent(
43
- jsi::Runtime& runtime,
44
43
  const std::string& eventName,
45
44
  ArgFactory argFactory) {
46
- jsInvoker_->invokeAsync([&runtime, eventName, argFactory]() {
47
- jsi::Value emitter =
48
- runtime.global().getProperty(runtime, "__rctDeviceEventEmitter");
45
+ jsInvoker_->invokeAsync([eventName, argFactory](jsi::Runtime& rt) {
46
+ jsi::Value emitter = rt.global().getProperty(rt, "__rctDeviceEventEmitter");
49
47
  if (!emitter.isUndefined()) {
50
- jsi::Object emitterObject = emitter.asObject(runtime);
48
+ jsi::Object emitterObject = emitter.asObject(rt);
51
49
  // TODO: consider caching these
52
50
  jsi::Function emitFunction =
53
- emitterObject.getPropertyAsFunction(runtime, "emit");
51
+ emitterObject.getPropertyAsFunction(rt, "emit");
54
52
  std::vector<jsi::Value> args;
55
- args.emplace_back(
56
- jsi::String::createFromAscii(runtime, eventName.c_str()));
53
+ args.emplace_back(jsi::String::createFromAscii(rt, eventName.c_str()));
57
54
  if (argFactory) {
58
- argFactory(runtime, args);
55
+ argFactory(rt, args);
59
56
  }
60
57
  emitFunction.callWithThis(
61
- runtime, emitterObject, (const jsi::Value*)args.data(), args.size());
58
+ rt, emitterObject, (const jsi::Value*)args.data(), args.size());
62
59
  }
63
60
  });
64
61
  }