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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/.flowconfig +5 -1
  2. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
  3. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
  4. package/Libraries/Animated/AnimatedEvent.js +1 -1
  5. package/Libraries/Animated/AnimatedImplementation.js +2 -2
  6. package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
  7. package/Libraries/Animated/animations/Animation.js +60 -25
  8. package/Libraries/Animated/animations/DecayAnimation.js +26 -38
  9. package/Libraries/Animated/animations/SpringAnimation.js +33 -39
  10. package/Libraries/Animated/animations/TimingAnimation.js +34 -42
  11. package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
  12. package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
  13. package/Libraries/Animated/createAnimatedComponent.js +60 -33
  14. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  15. package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
  16. package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
  17. package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
  18. package/Libraries/Animated/nodes/AnimatedProps.js +104 -46
  19. package/Libraries/Animated/nodes/AnimatedStyle.js +116 -39
  20. package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
  21. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  22. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
  23. package/Libraries/Animated/useAnimatedProps.js +41 -35
  24. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  25. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
  26. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +82 -5
  27. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
  28. package/Libraries/Components/Button.js +9 -4
  29. package/Libraries/Components/Button.windows.js +19 -5
  30. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
  31. package/Libraries/Components/Glyph/Glyph.js +2 -1
  32. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
  33. package/Libraries/Components/Popup/PopupNativeComponent.js +0 -1
  34. package/Libraries/Components/Pressable/Pressable.js +4 -4
  35. package/Libraries/Components/Pressable/Pressable.windows.js +10 -4
  36. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
  37. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
  38. package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
  39. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
  40. package/Libraries/Components/ScrollView/ScrollView.js +49 -88
  41. package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
  42. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
  43. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
  44. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +0 -5
  45. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
  46. package/Libraries/Components/Switch/Switch.js +8 -6
  47. package/Libraries/Components/Switch/Switch.windows.js +8 -6
  48. package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
  49. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
  50. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
  51. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
  52. package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
  53. package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
  54. package/Libraries/Components/TextInput/TextInput.js +37 -13
  55. package/Libraries/Components/TextInput/TextInput.windows.js +47 -16
  56. package/Libraries/Components/TextInput/TextInputState.js +11 -13
  57. package/Libraries/Components/TextInput/TextInputState.windows.js +11 -13
  58. package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
  59. package/Libraries/Components/Touchable/Position.js +7 -2
  60. package/Libraries/Components/Touchable/Touchable.js +4 -0
  61. package/Libraries/Components/Touchable/Touchable.windows.js +4 -0
  62. package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
  63. package/Libraries/Components/Touchable/TouchableBounce.windows.js +227 -0
  64. package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
  65. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +5 -5
  66. package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +371 -0
  67. package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
  68. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
  69. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
  70. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +9 -3
  71. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
  72. package/Libraries/Components/View/View.js +4 -4
  73. package/Libraries/Components/View/View.windows.js +12 -5
  74. package/Libraries/Components/View/ViewAccessibility.d.ts +10 -0
  75. package/Libraries/Components/View/ViewAccessibility.windows.js +2 -0
  76. package/Libraries/Components/View/ViewNativeComponent.js +6 -98
  77. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  78. package/Libraries/Components/View/ViewPropTypes.js +0 -3
  79. package/Libraries/Components/View/ViewPropTypes.windows.js +2 -3
  80. package/Libraries/Core/ExceptionsManager.js +50 -29
  81. package/Libraries/Core/ReactNativeVersion.js +3 -3
  82. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
  83. package/Libraries/Core/setUpBatchedBridge.js +1 -10
  84. package/Libraries/Core/setUpDeveloperTools.js +1 -5
  85. package/Libraries/Core/setUpErrorHandling.js +20 -18
  86. package/Libraries/Core/setUpReactDevTools.js +107 -8
  87. package/Libraries/Core/setUpSegmentFetcher.js +1 -0
  88. package/Libraries/Core/setUpTimers.js +21 -18
  89. package/Libraries/Debugging/DebuggingOverlay.js +4 -5
  90. package/Libraries/Image/AssetSourceResolver.js +12 -1
  91. package/Libraries/Image/AssetSourceResolver.windows.js +12 -1
  92. package/Libraries/Image/Image.android.js +1 -5
  93. package/Libraries/Image/Image.d.ts +20 -29
  94. package/Libraries/Image/Image.ios.js +0 -2
  95. package/Libraries/Image/Image.windows.js +5 -1
  96. package/Libraries/Image/ImageBackground.js +2 -5
  97. package/Libraries/Image/ImageProps.js +7 -6
  98. package/Libraries/Image/ImageResizeMode.d.ts +8 -1
  99. package/Libraries/Image/ImageResizeMode.js +4 -1
  100. package/Libraries/Image/ImageSource.d.ts +0 -2
  101. package/Libraries/Image/ImageSource.js +0 -2
  102. package/Libraries/Image/ImageTypes.flow.js +11 -9
  103. package/Libraries/Image/ImageUtils.js +6 -3
  104. package/Libraries/Image/ImageViewNativeComponent.js +5 -3
  105. package/Libraries/Inspector/Inspector.js +1 -0
  106. package/Libraries/Inspector/NetworkOverlay.js +4 -0
  107. package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
  108. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
  109. package/Libraries/Interaction/InteractionManager.js +6 -1
  110. package/Libraries/Interaction/InteractionManagerStub.js +176 -0
  111. package/Libraries/Interaction/TouchHistoryMath.js +22 -19
  112. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  113. package/Libraries/Lists/FlatList.d.ts +1 -2
  114. package/Libraries/Lists/FlatList.js +2 -2
  115. package/Libraries/Lists/SectionListModern.js +7 -7
  116. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
  117. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  118. package/Libraries/LogBox/Data/LogBoxData.js +3 -3
  119. package/Libraries/LogBox/LogBox.js +18 -5
  120. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  121. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  122. package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
  123. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
  124. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js +6 -1
  125. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  126. package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +1 -1
  127. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
  128. package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
  129. package/Libraries/Modal/Modal.d.ts +12 -0
  130. package/Libraries/Modal/Modal.js +31 -4
  131. package/Libraries/Modal/Modal.windows.js +18 -0
  132. package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
  133. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
  134. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -11
  135. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
  136. package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
  137. package/Libraries/Network/FormData.js +11 -3
  138. package/Libraries/Network/XHRInterceptor.js +63 -14
  139. package/Libraries/Network/XMLHttpRequest.js +26 -1
  140. package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
  141. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
  142. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  143. package/Libraries/Pressability/HoverState.js +2 -0
  144. package/Libraries/Pressability/Pressability.js +2 -3
  145. package/Libraries/Pressability/Pressability.windows.js +2 -3
  146. package/Libraries/Pressability/usePressability.js +4 -1
  147. package/Libraries/ReactNative/AppContainer.js +1 -1
  148. package/Libraries/ReactNative/AppRegistry.js +1 -11
  149. package/Libraries/ReactNative/DisplayMode.js +1 -1
  150. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
  151. package/Libraries/ReactNative/RendererImplementation.js +18 -17
  152. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
  153. package/Libraries/ReactNative/renderApplication.js +9 -8
  154. package/Libraries/ReactNative/requireNativeComponent.js +5 -2
  155. package/Libraries/Renderer/shims/ReactFabric.js +3 -3
  156. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  157. package/Libraries/Renderer/shims/ReactNative.js +3 -3
  158. package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
  159. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
  160. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  161. package/Libraries/StyleSheet/StyleSheet.js +7 -1
  162. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
  163. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
  164. package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
  165. package/Libraries/StyleSheet/processTransform.js +3 -34
  166. package/Libraries/Text/Text.js +248 -249
  167. package/Libraries/Text/Text.windows.js +298 -292
  168. package/Libraries/Text/TextNativeComponent.js +0 -1
  169. package/Libraries/Text/TextProps.windows.js +2 -0
  170. package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
  171. package/Libraries/Types/CoreEventTypes.d.ts +3 -10
  172. package/Libraries/Types/CoreEventTypes.js +4 -6
  173. package/Libraries/Types/CoreEventTypes.windows.js +4 -6
  174. package/Libraries/Utilities/Appearance.js +3 -1
  175. package/Libraries/Utilities/BackHandler.android.js +6 -18
  176. package/Libraries/Utilities/BackHandler.d.ts +0 -4
  177. package/Libraries/Utilities/BackHandler.ios.js +0 -7
  178. package/Libraries/Utilities/BackHandler.windows.js +6 -18
  179. package/Libraries/Utilities/HMRClient.js +3 -4
  180. package/Libraries/Utilities/Platform.flow.js +2 -2
  181. package/Libraries/Utilities/Platform.flow.windows.js +3 -2
  182. package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
  183. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  184. package/Libraries/Utilities/useMergeRefs.js +26 -7
  185. package/Libraries/WebSocket/WebSocketEvent.js +4 -1
  186. package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
  187. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
  188. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  189. package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +9 -8
  190. package/Microsoft.ReactNative/AsynchronousEventBeat.h +5 -5
  191. package/Microsoft.ReactNative/FBReactNativeSpec/FBReactNativeSpecJSI.h +5 -0
  192. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +2 -2
  193. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +197 -18
  194. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +19 -1
  195. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +13 -0
  196. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +1 -1
  197. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +6 -8
  198. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +2 -2
  199. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +3 -2
  200. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
  201. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +24 -0
  202. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +5 -0
  203. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +12 -12
  204. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +4 -4
  205. package/Microsoft.ReactNative/Fabric/ImageRequest.cpp +4 -8
  206. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +16 -15
  207. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +15 -0
  208. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +9 -0
  209. package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +20 -1
  210. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -6
  211. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  212. package/Microsoft.ReactNative/SynchronousEventBeat.cpp +14 -4
  213. package/Microsoft.ReactNative/SynchronousEventBeat.h +4 -2
  214. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.cpp +78 -0
  215. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.h +51 -0
  216. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.inc +48 -0
  217. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.cpp +41 -0
  218. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.h +127 -0
  219. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.inc +125 -0
  220. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_posix.cpp +16 -0
  221. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_win.cpp +23 -0
  222. package/Microsoft.ReactNative.Cxx/JSI/decorator.h +834 -0
  223. package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +117 -0
  224. package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +366 -0
  225. package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +560 -0
  226. package/Microsoft.ReactNative.Cxx/JSI/jsi.h +1611 -0
  227. package/Microsoft.ReactNative.Cxx/JSI/threadsafe.h +79 -0
  228. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +7 -11
  229. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -1
  230. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +2878 -0
  231. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.h +36 -0
  232. package/Microsoft.ReactNative.Cxx/ReactCommon/CallInvoker.h +64 -0
  233. package/Microsoft.ReactNative.Cxx/ReactCommon/SchedulerPriority.h +22 -0
  234. package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModule.cpp +63 -63
  235. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +165 -0
  236. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +105 -0
  237. package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModuleUtils.h +57 -58
  238. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/AString.h +42 -0
  239. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Array.h +151 -0
  240. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Base.h +177 -154
  241. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +25 -0
  242. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bridging.h +21 -0
  243. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/CallbackWrapper.h +67 -0
  244. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +90 -0
  245. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Convert.h +170 -172
  246. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Error.h +51 -0
  247. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/EventEmitter.h +134 -136
  248. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Function.h +283 -283
  249. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.cpp +63 -0
  250. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.h +61 -0
  251. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Object.h +93 -0
  252. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Promise.h +104 -0
  253. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Value.h +107 -0
  254. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/flags.h +22 -0
  255. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/react_native_assert.h +72 -0
  256. package/Microsoft.ReactNative.Cxx/node-api/js_native_api.h +553 -0
  257. package/Microsoft.ReactNative.Cxx/node-api/js_native_api_types.h +167 -0
  258. package/Microsoft.ReactNative.Cxx/node-api/js_runtime_api.h +186 -0
  259. package/Microsoft.ReactNative.Cxx/stubs/glog/logging.h +82 -0
  260. package/PropertySheets/Bundle.Common.targets +1 -1
  261. package/PropertySheets/Bundle.props +3 -0
  262. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  263. package/PropertySheets/ManagedCodeGen/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
  264. package/PropertySheets/OutputMSBuildProperties.targets +3 -1
  265. package/PropertySheets/React.Cpp.props +6 -0
  266. package/ReactCommon/ReactCommon.vcxproj +5 -0
  267. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +2 -3
  268. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +61 -0
  269. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +26 -23
  270. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +150 -0
  271. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +252 -0
  272. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/accessibilityPropsConversions.h +795 -0
  273. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/runtimescheduler/SchedulerPriorityUtils.h +59 -0
  274. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +227 -74
  275. package/Scripts/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
  276. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +97 -62
  277. package/Shared/InspectorPackagerConnection.cpp +3 -6
  278. package/Shared/InspectorPackagerConnection.h +2 -2
  279. package/Shared/InstanceManager.h +1 -1
  280. package/Shared/OInstance.h +1 -1
  281. package/Shared/Shared.vcxitems +17 -2
  282. package/Shared/Shared.vcxitems.filters +3 -1
  283. package/Shared/TurboModuleManager.cpp +29 -4
  284. package/codegen/NativeAccessibilityInfoSpec.g.h +27 -9
  285. package/codegen/NativeAccessibilityManagerSpec.g.h +19 -13
  286. package/codegen/NativeActionSheetManagerSpec.g.h +4 -0
  287. package/codegen/NativeExceptionsManagerSpec.g.h +1 -7
  288. package/codegen/NativeIntersectionObserverSpec.g.h +2 -0
  289. package/codegen/NativePerformanceSpec.g.h +127 -3
  290. package/codegen/NativeReactDevToolsRuntimeSettingsModuleSpec.g.h +67 -0
  291. package/codegen/NativeReactDevToolsSettingsManagerSpec.g.h +41 -0
  292. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +125 -137
  293. package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
  294. package/codegen/react/components/rnwcore/Props.cpp +1 -0
  295. package/codegen/react/components/rnwcore/Props.h +1 -0
  296. package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
  297. package/codegen/react/components/rnwcore/ShadowNodes.h +0 -11
  298. package/codegen/react/components/rnwcore/States.h +0 -12
  299. package/codegen/rnwcoreJSI-generated.cpp +219 -186
  300. package/codegen/rnwcoreJSI.h +942 -511
  301. package/index.js +10 -3
  302. package/index.windows.js +10 -3
  303. package/jest/setup.js +36 -1
  304. package/just-task.js +15 -0
  305. package/package.json +22 -22
  306. package/src/private/animated/NativeAnimatedHelper.js +18 -16
  307. package/src/private/animated/useAnimatedPropsMemo.js +356 -0
  308. package/src/private/components/HScrollViewNativeComponents.js +1 -27
  309. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
  310. package/src/private/components/VScrollViewNativeComponents.js +2 -25
  311. package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
  312. package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
  313. package/src/private/debugging/ReactDevToolsSettingsManager.windows.js +20 -0
  314. package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
  315. package/src/private/devmenu/DevMenu.d.ts +20 -0
  316. package/src/private/devmenu/DevMenu.js +31 -0
  317. package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
  318. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
  319. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
  320. package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
  321. package/src/private/setup/setUpDOM.js +14 -6
  322. package/src/private/setup/setUpMutationObserver.js +5 -0
  323. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
  324. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
  325. package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
  326. package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
  327. package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
  328. package/src/private/specs/modules/NativeAppearance.js +4 -10
  329. package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
  330. package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
  331. package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
  332. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
  333. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
  334. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
  335. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
  336. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
  337. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  338. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
  339. package/src/private/webapis/performance/EventTiming.js +13 -8
  340. package/src/private/webapis/performance/Performance.js +66 -73
  341. package/src/private/webapis/performance/PerformanceEntry.js +2 -5
  342. package/src/private/webapis/performance/PerformanceObserver.js +65 -164
  343. package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
  344. package/src/private/webapis/performance/UserTiming.js +11 -7
  345. package/src/private/webapis/performance/Utilities.js +18 -0
  346. package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
  347. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
  348. package/templates/cpp-lib/template.config.js +13 -7
  349. package/templates/templateUtils.js +10 -0
  350. package/types/index.d.ts +1 -1
  351. package/types/public/ReactNativeTypes.d.ts +4 -8
  352. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
  353. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
  354. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
  355. package/Libraries/DevToolsSettings/DevToolsSettingsManager.windows.js +0 -35
  356. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
  357. package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
  358. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +0 -101
  359. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +0 -569
  360. package/codegen/NativeDevToolsSettingsManagerSpec.g.h +0 -53
  361. package/codegen/NativePerformanceObserverSpec.g.h +0 -131
  362. package/src/private/components/useSyncOnScroll.js +0 -48
  363. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
  364. package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
  365. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
  366. package/types/experimental.d.ts +0 -59
  367. /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
@@ -0,0 +1,36 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+ #ifndef NODEAPIJSIRUNTIME_H_
6
+ #define NODEAPIJSIRUNTIME_H_
7
+
8
+ #include <jsi/jsi.h>
9
+ #include <functional>
10
+ #include <memory>
11
+ #include "ApiLoaders/JSRuntimeApi.h"
12
+
13
+ namespace Microsoft::NodeApiJsi {
14
+
15
+ std::unique_ptr<facebook::jsi::Runtime>
16
+ makeNodeApiJsiRuntime(napi_env env, JSRuntimeApi *jsrApi, std::function<void()> onDelete) noexcept;
17
+
18
+ struct NodeApiEnvScope {
19
+ NodeApiEnvScope(napi_env env) : env_(env) {
20
+ JSRuntimeApi::current()->jsr_open_napi_env_scope(env, &scope_);
21
+ }
22
+
23
+ NodeApiEnvScope(const NodeApiEnvScope &) = delete;
24
+ NodeApiEnvScope &operator=(const NodeApiEnvScope &) = delete;
25
+
26
+ ~NodeApiEnvScope() {
27
+ JSRuntimeApi::current()->jsr_close_napi_env_scope(env_, scope_);
28
+ }
29
+
30
+ private:
31
+ napi_env env_{};
32
+ jsr_napi_env_scope scope_{};
33
+ };
34
+ } // namespace Microsoft::NodeApiJsi
35
+
36
+ #endif // !NODEAPIJSIRUNTIME_H_
@@ -0,0 +1,64 @@
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 <functional>
11
+ #include <memory>
12
+
13
+ #include "SchedulerPriority.h"
14
+
15
+ namespace facebook::jsi {
16
+ class Runtime;
17
+ }
18
+
19
+ namespace facebook::react {
20
+
21
+ using CallFunc = std::function<void(jsi::Runtime&)>;
22
+
23
+ /**
24
+ * An interface for a generic native-to-JS call invoker. See BridgeJSCallInvoker
25
+ * for an implementation.
26
+ */
27
+ class CallInvoker {
28
+ public:
29
+ virtual void invokeAsync(CallFunc&& func) noexcept = 0;
30
+ virtual void invokeAsync(
31
+ SchedulerPriority /*priority*/,
32
+ CallFunc&& func) noexcept {
33
+ // When call with priority is not implemented, fall back to a regular async
34
+ // execution
35
+ invokeAsync(std::move(func));
36
+ }
37
+ virtual void invokeSync(CallFunc&& func) = 0;
38
+
39
+ // Backward compatibility only, prefer the CallFunc methods instead
40
+ virtual void invokeAsync(std::function<void()>&& func) noexcept {
41
+ invokeAsync([func](jsi::Runtime&) { func(); });
42
+ }
43
+
44
+ virtual void invokeSync(std::function<void()>&& func) {
45
+ invokeSync([func](jsi::Runtime&) { func(); });
46
+ }
47
+
48
+ virtual ~CallInvoker() {}
49
+ };
50
+
51
+ using NativeMethodCallFunc = std::function<void()>;
52
+
53
+ class NativeMethodCallInvoker {
54
+ public:
55
+ virtual void invokeAsync(
56
+ const std::string& methodName,
57
+ NativeMethodCallFunc&& func) noexcept = 0;
58
+ virtual void invokeSync(
59
+ const std::string& methodName,
60
+ NativeMethodCallFunc&& func) = 0;
61
+ virtual ~NativeMethodCallInvoker() {}
62
+ };
63
+
64
+ } // namespace facebook::react
@@ -0,0 +1,22 @@
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 <chrono>
11
+
12
+ namespace facebook::react {
13
+
14
+ enum class SchedulerPriority : int {
15
+ ImmediatePriority = 1,
16
+ UserBlockingPriority = 2,
17
+ NormalPriority = 3,
18
+ LowPriority = 4,
19
+ IdlePriority = 5,
20
+ };
21
+
22
+ } // namespace facebook::react
@@ -1,63 +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 "TurboModule.h"
9
- //#include <react/debug/react_native_assert.h>
10
-
11
- namespace facebook::react {
12
-
13
- TurboModuleMethodValueKind getTurboModuleMethodValueKind(
14
- jsi::Runtime& rt,
15
- const jsi::Value* value) {
16
- if (!value || value->isUndefined() || value->isNull()) {
17
- return VoidKind;
18
- } else if (value->isBool()) {
19
- return BooleanKind;
20
- } else if (value->isNumber()) {
21
- return NumberKind;
22
- } else if (value->isString()) {
23
- return StringKind;
24
- } else if (value->isObject()) {
25
- auto object = value->asObject(rt);
26
- if (object.isArray(rt)) {
27
- return ArrayKind;
28
- } else if (object.isFunction(rt)) {
29
- return FunctionKind;
30
- }
31
- return ObjectKind;
32
- }
33
- //react_native_assert(false && "Unsupported jsi::Value kind");
34
- return VoidKind;
35
- }
36
-
37
- TurboModule::TurboModule(
38
- std::string name,
39
- std::shared_ptr<CallInvoker> jsInvoker)
40
- : name_(std::move(name)), jsInvoker_(std::move(jsInvoker)) {}
41
-
42
- void TurboModule::emitDeviceEvent(
43
- const std::string& eventName,
44
- ArgFactory argFactory) {
45
- jsInvoker_->invokeAsync([eventName, argFactory](jsi::Runtime& rt) {
46
- jsi::Value emitter = rt.global().getProperty(rt, "__rctDeviceEventEmitter");
47
- if (!emitter.isUndefined()) {
48
- jsi::Object emitterObject = emitter.asObject(rt);
49
- // TODO: consider caching these
50
- jsi::Function emitFunction =
51
- emitterObject.getPropertyAsFunction(rt, "emit");
52
- std::vector<jsi::Value> args;
53
- args.emplace_back(jsi::String::createFromAscii(rt, eventName.c_str()));
54
- if (argFactory) {
55
- argFactory(rt, args);
56
- }
57
- emitFunction.callWithThis(
58
- rt, emitterObject, (const jsi::Value*)args.data(), args.size());
59
- }
60
- });
61
- }
62
-
63
- } // 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
+ #include "TurboModule.h"
9
+ #include <react/debug/react_native_assert.h>
10
+
11
+ namespace facebook::react {
12
+
13
+ TurboModuleMethodValueKind getTurboModuleMethodValueKind(
14
+ jsi::Runtime& rt,
15
+ const jsi::Value* value) {
16
+ if (!value || value->isUndefined() || value->isNull()) {
17
+ return VoidKind;
18
+ } else if (value->isBool()) {
19
+ return BooleanKind;
20
+ } else if (value->isNumber()) {
21
+ return NumberKind;
22
+ } else if (value->isString()) {
23
+ return StringKind;
24
+ } else if (value->isObject()) {
25
+ auto object = value->asObject(rt);
26
+ if (object.isArray(rt)) {
27
+ return ArrayKind;
28
+ } else if (object.isFunction(rt)) {
29
+ return FunctionKind;
30
+ }
31
+ return ObjectKind;
32
+ }
33
+ react_native_assert(false && "Unsupported jsi::Value kind");
34
+ return VoidKind;
35
+ }
36
+
37
+ TurboModule::TurboModule(
38
+ std::string name,
39
+ std::shared_ptr<CallInvoker> jsInvoker)
40
+ : name_(std::move(name)), jsInvoker_(std::move(jsInvoker)) {}
41
+
42
+ void TurboModule::emitDeviceEvent(
43
+ const std::string& eventName,
44
+ ArgFactory argFactory) {
45
+ jsInvoker_->invokeAsync([eventName, argFactory](jsi::Runtime& rt) {
46
+ jsi::Value emitter = rt.global().getProperty(rt, "__rctDeviceEventEmitter");
47
+ if (!emitter.isUndefined()) {
48
+ jsi::Object emitterObject = emitter.asObject(rt);
49
+ // TODO: consider caching these
50
+ jsi::Function emitFunction =
51
+ emitterObject.getPropertyAsFunction(rt, "emit");
52
+ std::vector<jsi::Value> args;
53
+ args.emplace_back(jsi::String::createFromAscii(rt, eventName.c_str()));
54
+ if (argFactory) {
55
+ argFactory(rt, args);
56
+ }
57
+ emitFunction.callWithThis(
58
+ rt, emitterObject, (const jsi::Value*)args.data(), args.size());
59
+ }
60
+ });
61
+ }
62
+
63
+ } // namespace facebook::react
@@ -0,0 +1,165 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <memory>
11
+ #include <string>
12
+ #include <unordered_map>
13
+
14
+ #include <jsi/jsi.h>
15
+
16
+ #include <ReactCommon/CallInvoker.h>
17
+ #include <react/bridging/EventEmitter.h>
18
+
19
+ namespace facebook::react {
20
+
21
+ /**
22
+ * For now, support the same set of return types as existing impl.
23
+ * This can be improved to support richer typed objects.
24
+ */
25
+ enum TurboModuleMethodValueKind {
26
+ VoidKind,
27
+ BooleanKind,
28
+ NumberKind,
29
+ StringKind,
30
+ ObjectKind,
31
+ ArrayKind,
32
+ FunctionKind,
33
+ PromiseKind,
34
+ };
35
+
36
+ /**
37
+ * Determines TurboModuleMethodValueKind based on the jsi::Value type.
38
+ */
39
+ TurboModuleMethodValueKind getTurboModuleMethodValueKind(
40
+ jsi::Runtime& rt,
41
+ const jsi::Value* value);
42
+
43
+ class TurboCxxModule;
44
+ class TurboModuleBinding;
45
+
46
+ /**
47
+ * Base HostObject class for every module to be exposed to JS
48
+ */
49
+ class JSI_EXPORT TurboModule : public jsi::HostObject {
50
+ public:
51
+ TurboModule(std::string name, std::shared_ptr<CallInvoker> jsInvoker);
52
+
53
+ // DO NOT OVERRIDE - it will become final in a future release.
54
+ // This method provides automatic caching of properties on the TurboModule's
55
+ // JS representation. To customize lookup of properties, override `create`.
56
+ // Note: keep this method declared inline to avoid conflicts
57
+ // between RTTI and non-RTTI compilation units
58
+ jsi::Value get(jsi::Runtime& runtime, const jsi::PropNameID& propName)
59
+ override {
60
+ auto prop = create(runtime, propName);
61
+ // If we have a JS wrapper, cache the result of this lookup
62
+ // We don't cache misses, to allow for methodMap_ to dynamically be
63
+ // extended
64
+ // [Windows] Reenable once https://github.com/microsoft/react-native-windows/issues/14128 is fixed
65
+ #ifndef WINAPI_FAMILY
66
+ if (jsRepresentation_ && !prop.isUndefined()) {
67
+ jsRepresentation_->lock(runtime).asObject(runtime).setProperty(
68
+ runtime, propName, prop);
69
+ }
70
+ #endif
71
+ return prop;
72
+ }
73
+
74
+ std::vector<jsi::PropNameID> getPropertyNames(
75
+ jsi::Runtime& runtime) override {
76
+ std::vector<jsi::PropNameID> result;
77
+ result.reserve(methodMap_.size());
78
+ for (auto it = methodMap_.cbegin(); it != methodMap_.cend(); ++it) {
79
+ result.push_back(jsi::PropNameID::forUtf8(runtime, it->first));
80
+ }
81
+ return result;
82
+ }
83
+
84
+ protected:
85
+ const std::string name_;
86
+ std::shared_ptr<CallInvoker> jsInvoker_;
87
+
88
+ struct MethodMetadata {
89
+ size_t argCount;
90
+ jsi::Value (*invoker)(
91
+ jsi::Runtime& rt,
92
+ TurboModule& turboModule,
93
+ const jsi::Value* args,
94
+ size_t count);
95
+ };
96
+ std::unordered_map<std::string, MethodMetadata> methodMap_;
97
+ std::unordered_map<std::string, std::shared_ptr<IAsyncEventEmitter>>
98
+ eventEmitterMap_;
99
+
100
+ using ArgFactory =
101
+ std::function<void(jsi::Runtime& runtime, std::vector<jsi::Value>& args)>;
102
+
103
+ /**
104
+ * Calls RCTDeviceEventEmitter.emit to JavaScript, with given event name and
105
+ * an optional list of arguments.
106
+ * If present, argFactory is a callback used to construct extra arguments,
107
+ * e.g.
108
+ *
109
+ * emitDeviceEvent(rt, "myCustomEvent",
110
+ * [](jsi::Runtime& rt, std::vector<jsi::Value>& args) {
111
+ * args.emplace_back(jsi::Value(true));
112
+ * args.emplace_back(jsi::Value(42));
113
+ * });
114
+ */
115
+ void emitDeviceEvent(
116
+ const std::string& eventName,
117
+ ArgFactory argFactory = nullptr);
118
+
119
+ // Backwards compatibility version
120
+ void emitDeviceEvent(
121
+ jsi::Runtime& /*runtime*/,
122
+
123
+ const std::string& eventName,
124
+ ArgFactory argFactory = nullptr) {
125
+ emitDeviceEvent(eventName, std::move(argFactory));
126
+ }
127
+
128
+ virtual jsi::Value create(
129
+ jsi::Runtime& runtime,
130
+ const jsi::PropNameID& propName) {
131
+ std::string propNameUtf8 = propName.utf8(runtime);
132
+ if (auto methodIter = methodMap_.find(propNameUtf8);
133
+ methodIter != methodMap_.end()) {
134
+ const MethodMetadata& meta = methodIter->second;
135
+ return jsi::Function::createFromHostFunction(
136
+ runtime,
137
+ propName,
138
+ static_cast<unsigned int>(meta.argCount),
139
+ [this, meta](
140
+ jsi::Runtime& rt,
141
+ [[maybe_unused]] const jsi::Value& thisVal,
142
+ const jsi::Value* args,
143
+ size_t count) { return meta.invoker(rt, *this, args, count); });
144
+ } else if (auto eventEmitterIter = eventEmitterMap_.find(propNameUtf8);
145
+ eventEmitterIter != eventEmitterMap_.end()) {
146
+ return eventEmitterIter->second->get(runtime, jsInvoker_);
147
+ } else {
148
+ // Neither Method nor EventEmitter were found, let JS decide what to do
149
+ return jsi::Value::undefined();
150
+ }
151
+ }
152
+
153
+ private:
154
+ friend class TurboModuleBinding;
155
+ std::unique_ptr<jsi::WeakObject> jsRepresentation_;
156
+ };
157
+
158
+ /**
159
+ * An app/platform-specific provider function to get an instance of a module
160
+ * given a name.
161
+ */
162
+ using TurboModuleProviderFunctionType =
163
+ std::function<std::shared_ptr<TurboModule>(const std::string& name)>;
164
+
165
+ } // namespace facebook::react
@@ -0,0 +1,105 @@
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 "TurboModuleUtils.h"
9
+
10
+ namespace facebook::react {
11
+
12
+ static jsi::Value deepCopyJSIValue(jsi::Runtime& rt, const jsi::Value& value) {
13
+ if (value.isNull()) {
14
+ return jsi::Value::null();
15
+ }
16
+
17
+ if (value.isBool()) {
18
+ return jsi::Value(value.getBool());
19
+ }
20
+
21
+ if (value.isNumber()) {
22
+ return jsi::Value(value.getNumber());
23
+ }
24
+
25
+ if (value.isString()) {
26
+ return value.getString(rt);
27
+ }
28
+
29
+ if (value.isObject()) {
30
+ jsi::Object o = value.getObject(rt);
31
+ if (o.isArray(rt)) {
32
+ return deepCopyJSIArray(rt, o.getArray(rt));
33
+ }
34
+ if (o.isFunction(rt)) {
35
+ return o.getFunction(rt);
36
+ }
37
+ return deepCopyJSIObject(rt, o);
38
+ }
39
+
40
+ return jsi::Value::undefined();
41
+ }
42
+
43
+ jsi::Object deepCopyJSIObject(jsi::Runtime& rt, const jsi::Object& obj) {
44
+ jsi::Object copy(rt);
45
+ jsi::Array propertyNames = obj.getPropertyNames(rt);
46
+ size_t size = propertyNames.size(rt);
47
+ for (size_t i = 0; i < size; i++) {
48
+ jsi::String name = propertyNames.getValueAtIndex(rt, i).getString(rt);
49
+ jsi::Value value = obj.getProperty(rt, name);
50
+ copy.setProperty(rt, name, deepCopyJSIValue(rt, value));
51
+ }
52
+ return copy;
53
+ }
54
+
55
+ jsi::Array deepCopyJSIArray(jsi::Runtime& rt, const jsi::Array& arr) {
56
+ size_t size = arr.size(rt);
57
+ jsi::Array copy(rt, size);
58
+ for (size_t i = 0; i < size; i++) {
59
+ copy.setValueAtIndex(
60
+ rt, i, deepCopyJSIValue(rt, arr.getValueAtIndex(rt, i)));
61
+ }
62
+ return copy;
63
+ }
64
+
65
+ Promise::Promise(jsi::Runtime& rt, jsi::Function resolve, jsi::Function reject)
66
+ : LongLivedObject(rt),
67
+ resolve_(std::move(resolve)),
68
+ reject_(std::move(reject)) {}
69
+
70
+ void Promise::resolve(const jsi::Value& result) {
71
+ resolve_.call(runtime_, result);
72
+ }
73
+
74
+ void Promise::reject(const std::string& message) {
75
+ jsi::Object error(runtime_);
76
+ error.setProperty(
77
+ runtime_, "message", jsi::String::createFromUtf8(runtime_, message));
78
+ reject_.call(runtime_, error);
79
+ }
80
+
81
+ jsi::Value createPromiseAsJSIValue(
82
+ jsi::Runtime& rt,
83
+ PromiseSetupFunctionType&& func) {
84
+ jsi::Function JSPromise = rt.global().getPropertyAsFunction(rt, "Promise");
85
+ jsi::Function fn = jsi::Function::createFromHostFunction(
86
+ rt,
87
+ jsi::PropNameID::forAscii(rt, "fn"),
88
+ 2,
89
+ [func = std::move(func)](
90
+ jsi::Runtime& rt2,
91
+ const jsi::Value& thisVal,
92
+ const jsi::Value* args,
93
+ size_t count) {
94
+ jsi::Function resolve = args[0].getObject(rt2).getFunction(rt2);
95
+ jsi::Function reject = args[1].getObject(rt2).getFunction(rt2);
96
+ auto wrapper = std::make_shared<Promise>(
97
+ rt2, std::move(resolve), std::move(reject));
98
+ func(rt2, wrapper);
99
+ return jsi::Value::undefined();
100
+ });
101
+
102
+ return JSPromise.callAsConstructor(rt, fn);
103
+ }
104
+
105
+ } // namespace facebook::react
@@ -1,58 +1,57 @@
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 <cassert>
11
- #include <string>
12
-
13
- #include <jsi/jsi.h>
14
- #include <LongLivedObject.h> // [Windows #13391]
15
-
16
- #include <CallbackWrapper.h> // [Windows #13391]
17
-
18
- namespace facebook::react {
19
-
20
- jsi::Object deepCopyJSIObject(jsi::Runtime& rt, const jsi::Object& obj);
21
- jsi::Array deepCopyJSIArray(jsi::Runtime& rt, const jsi::Array& arr);
22
-
23
- struct Promise : public LongLivedObject {
24
- Promise(jsi::Runtime& rt, jsi::Function resolve, jsi::Function reject);
25
-
26
- void resolve(const jsi::Value& result);
27
- void reject(const std::string& error);
28
-
29
- jsi::Function resolve_;
30
- jsi::Function reject_;
31
- };
32
-
33
- using PromiseSetupFunctionType =
34
- std::function<void(jsi::Runtime& rt, std::shared_ptr<Promise>)>;
35
- jsi::Value createPromiseAsJSIValue(
36
- jsi::Runtime& rt,
37
- PromiseSetupFunctionType&& func);
38
-
39
- // Deprecated. Use AsyncCallback instead.
40
- class RAIICallbackWrapperDestroyer {
41
- public:
42
- RAIICallbackWrapperDestroyer(std::weak_ptr<CallbackWrapper> callbackWrapper)
43
- : callbackWrapper_(callbackWrapper) {}
44
-
45
- ~RAIICallbackWrapperDestroyer() {
46
- auto strongWrapper = callbackWrapper_.lock();
47
- if (!strongWrapper) {
48
- return;
49
- }
50
-
51
- strongWrapper->destroy();
52
- }
53
-
54
- private:
55
- std::weak_ptr<CallbackWrapper> callbackWrapper_;
56
- };
57
-
58
- } // 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 <cassert>
11
+ #include <string>
12
+
13
+ #include <jsi/jsi.h>
14
+ #include <react/bridging/CallbackWrapper.h>
15
+ #include <react/bridging/LongLivedObject.h>
16
+
17
+ namespace facebook::react {
18
+
19
+ jsi::Object deepCopyJSIObject(jsi::Runtime& rt, const jsi::Object& obj);
20
+ jsi::Array deepCopyJSIArray(jsi::Runtime& rt, const jsi::Array& arr);
21
+
22
+ struct Promise : public LongLivedObject {
23
+ Promise(jsi::Runtime& rt, jsi::Function resolve, jsi::Function reject);
24
+
25
+ void resolve(const jsi::Value& result);
26
+ void reject(const std::string& error);
27
+
28
+ jsi::Function resolve_;
29
+ jsi::Function reject_;
30
+ };
31
+
32
+ using PromiseSetupFunctionType =
33
+ std::function<void(jsi::Runtime& rt, std::shared_ptr<Promise>)>;
34
+ jsi::Value createPromiseAsJSIValue(
35
+ jsi::Runtime& rt,
36
+ PromiseSetupFunctionType&& func);
37
+
38
+ // Deprecated. Use AsyncCallback instead.
39
+ class RAIICallbackWrapperDestroyer {
40
+ public:
41
+ RAIICallbackWrapperDestroyer(std::weak_ptr<CallbackWrapper> callbackWrapper)
42
+ : callbackWrapper_(callbackWrapper) {}
43
+
44
+ ~RAIICallbackWrapperDestroyer() {
45
+ auto strongWrapper = callbackWrapper_.lock();
46
+ if (!strongWrapper) {
47
+ return;
48
+ }
49
+
50
+ strongWrapper->destroy();
51
+ }
52
+
53
+ private:
54
+ std::weak_ptr<CallbackWrapper> callbackWrapper_;
55
+ };
56
+
57
+ } // namespace facebook::react
@@ -0,0 +1,42 @@
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
+
12
+ #include <string>
13
+ #include <string_view>
14
+
15
+ namespace facebook::react {
16
+
17
+ template <>
18
+ struct Bridging<std::string> {
19
+ static std::string fromJs(jsi::Runtime& rt, const jsi::String& value) {
20
+ return value.utf8(rt);
21
+ }
22
+
23
+ static jsi::String toJs(jsi::Runtime& rt, const std::string& value) {
24
+ return jsi::String::createFromUtf8(rt, value);
25
+ }
26
+ };
27
+
28
+ template <>
29
+ struct Bridging<std::string_view> {
30
+ static jsi::String toJs(jsi::Runtime& rt, std::string_view value) {
31
+ return jsi::String::createFromUtf8(
32
+ rt, reinterpret_cast<const uint8_t*>(value.data()), value.length());
33
+ }
34
+ };
35
+
36
+ template <>
37
+ struct Bridging<const char*> : Bridging<std::string_view> {};
38
+
39
+ template <size_t N>
40
+ struct Bridging<char[N]> : Bridging<std::string_view> {};
41
+
42
+ } // namespace facebook::react