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,560 @@
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 <cassert>
9
+ #include <cmath>
10
+ #include <cstdlib>
11
+ #include <stdexcept>
12
+
13
+ #include <jsi/instrumentation.h>
14
+ #include <jsi/jsi.h>
15
+
16
+ namespace facebook {
17
+ namespace jsi {
18
+
19
+ namespace {
20
+
21
+ // This is used for generating short exception strings.
22
+ std::string kindToString(const Value& v, Runtime* rt = nullptr) {
23
+ if (v.isUndefined()) {
24
+ return "undefined";
25
+ } else if (v.isNull()) {
26
+ return "null";
27
+ } else if (v.isBool()) {
28
+ return v.getBool() ? "true" : "false";
29
+ } else if (v.isNumber()) {
30
+ return "a number";
31
+ } else if (v.isString()) {
32
+ return "a string";
33
+ } else if (v.isSymbol()) {
34
+ return "a symbol";
35
+ #if JSI_VERSION >= 6
36
+ } else if (v.isBigInt()) {
37
+ return "a bigint";
38
+ #endif
39
+ } else {
40
+ assert(v.isObject() && "Expecting object.");
41
+ return rt != nullptr && v.getObject(*rt).isFunction(*rt) ? "a function"
42
+ : "an object";
43
+ }
44
+ }
45
+
46
+ // getPropertyAsFunction() will try to create a JSError. If the
47
+ // failure is in building a JSError, this will lead to infinite
48
+ // recursion. This function is used in place of getPropertyAsFunction
49
+ // when building JSError, to avoid that infinite recursion.
50
+ Value callGlobalFunction(Runtime& runtime, const char* name, const Value& arg) {
51
+ Value v = runtime.global().getProperty(runtime, name);
52
+ if (!v.isObject()) {
53
+ throw JSINativeException(
54
+ std::string("callGlobalFunction: JS global property '") + name +
55
+ "' is " + kindToString(v, &runtime) + ", expected a Function");
56
+ }
57
+ Object o = v.getObject(runtime);
58
+ if (!o.isFunction(runtime)) {
59
+ throw JSINativeException(
60
+ std::string("callGlobalFunction: JS global property '") + name +
61
+ "' is a non-callable Object, expected a Function");
62
+ }
63
+ Function f = std::move(o).getFunction(runtime);
64
+ return f.call(runtime, arg);
65
+ }
66
+
67
+ } // namespace
68
+
69
+ Buffer::~Buffer() = default;
70
+
71
+ #if JSI_VERSION >= 9
72
+ MutableBuffer::~MutableBuffer() = default;
73
+ #endif
74
+
75
+ PreparedJavaScript::~PreparedJavaScript() = default;
76
+
77
+ Value HostObject::get(Runtime&, const PropNameID&) {
78
+ return Value();
79
+ }
80
+
81
+ void HostObject::set(Runtime& rt, const PropNameID& name, const Value&) {
82
+ std::string msg("TypeError: Cannot assign to property '");
83
+ msg += name.utf8(rt);
84
+ msg += "' on HostObject with default setter";
85
+ throw JSError(rt, msg);
86
+ }
87
+
88
+ HostObject::~HostObject() {}
89
+
90
+ #if JSI_VERSION >= 7
91
+ NativeState::~NativeState() {}
92
+ #endif
93
+
94
+ Runtime::~Runtime() {}
95
+
96
+ Instrumentation& Runtime::instrumentation() {
97
+ class NoInstrumentation : public Instrumentation {
98
+ std::string getRecordedGCStats() override {
99
+ return "";
100
+ }
101
+
102
+ std::unordered_map<std::string, int64_t> getHeapInfo(bool) override {
103
+ return std::unordered_map<std::string, int64_t>{};
104
+ }
105
+
106
+ void collectGarbage(std::string) override {}
107
+
108
+ void startTrackingHeapObjectStackTraces(
109
+ std::function<void(
110
+ uint64_t,
111
+ std::chrono::microseconds,
112
+ std::vector<HeapStatsUpdate>)>) override {}
113
+ void stopTrackingHeapObjectStackTraces() override {}
114
+
115
+ void startHeapSampling(size_t) override {}
116
+ void stopHeapSampling(std::ostream&) override {}
117
+
118
+ void createSnapshotToFile(const std::string&) override {
119
+ throw JSINativeException(
120
+ "Default instrumentation cannot create a heap snapshot");
121
+ }
122
+
123
+ void createSnapshotToStream(std::ostream&) override {
124
+ throw JSINativeException(
125
+ "Default instrumentation cannot create a heap snapshot");
126
+ }
127
+
128
+ std::string flushAndDisableBridgeTrafficTrace() override {
129
+ std::abort();
130
+ }
131
+
132
+ void writeBasicBlockProfileTraceToFile(const std::string&) const override {
133
+ std::abort();
134
+ }
135
+
136
+ void dumpProfilerSymbolsToFile(const std::string&) const override {
137
+ std::abort();
138
+ }
139
+ };
140
+
141
+ static NoInstrumentation sharedInstance;
142
+ return sharedInstance;
143
+ }
144
+
145
+ #if JSI_VERSION >= 2
146
+ Value Runtime::createValueFromJsonUtf8(const uint8_t* json, size_t length) {
147
+ Function parseJson = global()
148
+ .getPropertyAsObject(*this, "JSON")
149
+ .getPropertyAsFunction(*this, "parse");
150
+ return parseJson.call(*this, String::createFromUtf8(*this, json, length));
151
+ }
152
+ #else
153
+ Value Value::createFromJsonUtf8(
154
+ Runtime& runtime,
155
+ const uint8_t* json,
156
+ size_t length) {
157
+ Function parseJson = runtime.global()
158
+ .getPropertyAsObject(runtime, "JSON")
159
+ .getPropertyAsFunction(runtime, "parse");
160
+ return parseJson.call(runtime, String::createFromUtf8(runtime, json, length));
161
+ }
162
+ #endif
163
+
164
+ Pointer& Pointer::operator=(Pointer&& other) {
165
+ if (ptr_) {
166
+ ptr_->invalidate();
167
+ }
168
+ ptr_ = other.ptr_;
169
+ other.ptr_ = nullptr;
170
+ return *this;
171
+ }
172
+
173
+ Object Object::getPropertyAsObject(Runtime& runtime, const char* name) const {
174
+ Value v = getProperty(runtime, name);
175
+
176
+ if (!v.isObject()) {
177
+ throw JSError(
178
+ runtime,
179
+ std::string("getPropertyAsObject: property '") + name + "' is " +
180
+ kindToString(v, &runtime) + ", expected an Object");
181
+ }
182
+
183
+ return v.getObject(runtime);
184
+ }
185
+
186
+ Function Object::getPropertyAsFunction(Runtime& runtime, const char* name)
187
+ const {
188
+ Object obj = getPropertyAsObject(runtime, name);
189
+ if (!obj.isFunction(runtime)) {
190
+ throw JSError(
191
+ runtime,
192
+ std::string("getPropertyAsFunction: property '") + name + "' is " +
193
+ kindToString(std::move(obj), &runtime) + ", expected a Function");
194
+ };
195
+
196
+ return std::move(obj).getFunction(runtime);
197
+ }
198
+
199
+ Array Object::asArray(Runtime& runtime) const& {
200
+ if (!isArray(runtime)) {
201
+ throw JSError(
202
+ runtime,
203
+ "Object is " + kindToString(Value(runtime, *this), &runtime) +
204
+ ", expected an array");
205
+ }
206
+ return getArray(runtime);
207
+ }
208
+
209
+ Array Object::asArray(Runtime& runtime) && {
210
+ if (!isArray(runtime)) {
211
+ throw JSError(
212
+ runtime,
213
+ "Object is " + kindToString(Value(runtime, *this), &runtime) +
214
+ ", expected an array");
215
+ }
216
+ return std::move(*this).getArray(runtime);
217
+ }
218
+
219
+ Function Object::asFunction(Runtime& runtime) const& {
220
+ if (!isFunction(runtime)) {
221
+ throw JSError(
222
+ runtime,
223
+ "Object is " + kindToString(Value(runtime, *this), &runtime) +
224
+ ", expected a function");
225
+ }
226
+ return getFunction(runtime);
227
+ }
228
+
229
+ Function Object::asFunction(Runtime& runtime) && {
230
+ if (!isFunction(runtime)) {
231
+ throw JSError(
232
+ runtime,
233
+ "Object is " + kindToString(Value(runtime, *this), &runtime) +
234
+ ", expected a function");
235
+ }
236
+ return std::move(*this).getFunction(runtime);
237
+ }
238
+
239
+ Value::Value(Value&& other) : Value(other.kind_) {
240
+ if (kind_ == BooleanKind) {
241
+ data_.boolean = other.data_.boolean;
242
+ } else if (kind_ == NumberKind) {
243
+ data_.number = other.data_.number;
244
+ } else if (kind_ >= PointerKind) {
245
+ new (&data_.pointer) Pointer(std::move(other.data_.pointer));
246
+ }
247
+ // when the other's dtor runs, nothing will happen.
248
+ other.kind_ = UndefinedKind;
249
+ }
250
+
251
+ Value::Value(Runtime& runtime, const Value& other) : Value(other.kind_) {
252
+ // data_ is uninitialized, so use placement new to create non-POD
253
+ // types in it. Any other kind of initialization will call a dtor
254
+ // first, which is incorrect.
255
+ if (kind_ == BooleanKind) {
256
+ data_.boolean = other.data_.boolean;
257
+ } else if (kind_ == NumberKind) {
258
+ data_.number = other.data_.number;
259
+ } else if (kind_ == SymbolKind) {
260
+ new (&data_.pointer) Pointer(runtime.cloneSymbol(other.data_.pointer.ptr_));
261
+ #if JSI_VERSION >= 6
262
+ } else if (kind_ == BigIntKind) {
263
+ new (&data_.pointer) Pointer(runtime.cloneBigInt(other.data_.pointer.ptr_));
264
+ #endif
265
+ } else if (kind_ == StringKind) {
266
+ new (&data_.pointer) Pointer(runtime.cloneString(other.data_.pointer.ptr_));
267
+ } else if (kind_ >= ObjectKind) {
268
+ new (&data_.pointer) Pointer(runtime.cloneObject(other.data_.pointer.ptr_));
269
+ }
270
+ }
271
+
272
+ Value::~Value() {
273
+ if (kind_ >= PointerKind) {
274
+ data_.pointer.~Pointer();
275
+ }
276
+ }
277
+
278
+ bool Value::strictEquals(Runtime& runtime, const Value& a, const Value& b) {
279
+ if (a.kind_ != b.kind_) {
280
+ return false;
281
+ }
282
+ switch (a.kind_) {
283
+ case UndefinedKind:
284
+ case NullKind:
285
+ return true;
286
+ case BooleanKind:
287
+ return a.data_.boolean == b.data_.boolean;
288
+ case NumberKind:
289
+ return a.data_.number == b.data_.number;
290
+ case SymbolKind:
291
+ return runtime.strictEquals(
292
+ static_cast<const Symbol&>(a.data_.pointer),
293
+ static_cast<const Symbol&>(b.data_.pointer));
294
+ #if JSI_VERSION >= 6
295
+ case BigIntKind:
296
+ return runtime.strictEquals(
297
+ static_cast<const BigInt&>(a.data_.pointer),
298
+ static_cast<const BigInt&>(b.data_.pointer));
299
+ #endif
300
+ case StringKind:
301
+ return runtime.strictEquals(
302
+ static_cast<const String&>(a.data_.pointer),
303
+ static_cast<const String&>(b.data_.pointer));
304
+ case ObjectKind:
305
+ return runtime.strictEquals(
306
+ static_cast<const Object&>(a.data_.pointer),
307
+ static_cast<const Object&>(b.data_.pointer));
308
+ }
309
+ return false;
310
+ }
311
+
312
+ bool Value::asBool() const {
313
+ if (!isBool()) {
314
+ throw JSINativeException(
315
+ "Value is " + kindToString(*this) + ", expected a boolean");
316
+ }
317
+
318
+ return getBool();
319
+ }
320
+
321
+ double Value::asNumber() const {
322
+ if (!isNumber()) {
323
+ throw JSINativeException(
324
+ "Value is " + kindToString(*this) + ", expected a number");
325
+ }
326
+
327
+ return getNumber();
328
+ }
329
+
330
+ Object Value::asObject(Runtime& rt) const& {
331
+ if (!isObject()) {
332
+ throw JSError(
333
+ rt, "Value is " + kindToString(*this, &rt) + ", expected an Object");
334
+ }
335
+
336
+ return getObject(rt);
337
+ }
338
+
339
+ Object Value::asObject(Runtime& rt) && {
340
+ if (!isObject()) {
341
+ throw JSError(
342
+ rt, "Value is " + kindToString(*this, &rt) + ", expected an Object");
343
+ }
344
+ auto ptr = data_.pointer.ptr_;
345
+ data_.pointer.ptr_ = nullptr;
346
+ return static_cast<Object>(ptr);
347
+ }
348
+
349
+ Symbol Value::asSymbol(Runtime& rt) const& {
350
+ if (!isSymbol()) {
351
+ throw JSError(
352
+ rt, "Value is " + kindToString(*this, &rt) + ", expected a Symbol");
353
+ }
354
+
355
+ return getSymbol(rt);
356
+ }
357
+
358
+ Symbol Value::asSymbol(Runtime& rt) && {
359
+ if (!isSymbol()) {
360
+ throw JSError(
361
+ rt, "Value is " + kindToString(*this, &rt) + ", expected a Symbol");
362
+ }
363
+
364
+ return std::move(*this).getSymbol(rt);
365
+ }
366
+
367
+ #if JSI_VERSION >= 6
368
+ BigInt Value::asBigInt(Runtime& rt) const& {
369
+ if (!isBigInt()) {
370
+ throw JSError(
371
+ rt, "Value is " + kindToString(*this, &rt) + ", expected a BigInt");
372
+ }
373
+
374
+ return getBigInt(rt);
375
+ }
376
+
377
+ BigInt Value::asBigInt(Runtime& rt) && {
378
+ if (!isBigInt()) {
379
+ throw JSError(
380
+ rt, "Value is " + kindToString(*this, &rt) + ", expected a BigInt");
381
+ }
382
+
383
+ return std::move(*this).getBigInt(rt);
384
+ }
385
+ #endif
386
+
387
+ String Value::asString(Runtime& rt) const& {
388
+ if (!isString()) {
389
+ throw JSError(
390
+ rt, "Value is " + kindToString(*this, &rt) + ", expected a String");
391
+ }
392
+
393
+ return getString(rt);
394
+ }
395
+
396
+ String Value::asString(Runtime& rt) && {
397
+ if (!isString()) {
398
+ throw JSError(
399
+ rt, "Value is " + kindToString(*this, &rt) + ", expected a String");
400
+ }
401
+
402
+ return std::move(*this).getString(rt);
403
+ }
404
+
405
+ String Value::toString(Runtime& runtime) const {
406
+ Function toString = runtime.global().getPropertyAsFunction(runtime, "String");
407
+ return toString.call(runtime, *this).getString(runtime);
408
+ }
409
+
410
+ #if JSI_VERSION >= 8
411
+ uint64_t BigInt::asUint64(Runtime& runtime) const {
412
+ if (!isUint64(runtime)) {
413
+ throw JSError(runtime, "Lossy truncation in BigInt64::asUint64");
414
+ }
415
+ return getUint64(runtime);
416
+ }
417
+
418
+ int64_t BigInt::asInt64(Runtime& runtime) const {
419
+ if (!isInt64(runtime)) {
420
+ throw JSError(runtime, "Lossy truncation in BigInt64::asInt64");
421
+ }
422
+ return getInt64(runtime);
423
+ }
424
+ #endif
425
+
426
+ Array Array::createWithElements(
427
+ Runtime& rt,
428
+ std::initializer_list<Value> elements) {
429
+ Array result(rt, elements.size());
430
+ size_t index = 0;
431
+ for (const auto& element : elements) {
432
+ result.setValueAtIndex(rt, index++, element);
433
+ }
434
+ return result;
435
+ }
436
+
437
+ std::vector<PropNameID> HostObject::getPropertyNames(Runtime&) {
438
+ return {};
439
+ }
440
+
441
+ Runtime::ScopeState* Runtime::pushScope() {
442
+ return nullptr;
443
+ }
444
+
445
+ void Runtime::popScope(ScopeState*) {}
446
+
447
+ JSError::JSError(Runtime& rt, Value&& value) {
448
+ setValue(rt, std::move(value));
449
+ }
450
+
451
+ JSError::JSError(Runtime& rt, std::string msg) : message_(std::move(msg)) {
452
+ try {
453
+ setValue(
454
+ rt,
455
+ callGlobalFunction(rt, "Error", String::createFromUtf8(rt, message_)));
456
+ } catch (const JSIException& ex) {
457
+ message_ = std::string(ex.what()) + " (while raising " + message_ + ")";
458
+ setValue(rt, String::createFromUtf8(rt, message_));
459
+ }
460
+ }
461
+
462
+ JSError::JSError(Runtime& rt, std::string msg, std::string stack)
463
+ : message_(std::move(msg)), stack_(std::move(stack)) {
464
+ try {
465
+ Object e(rt);
466
+ e.setProperty(rt, "message", String::createFromUtf8(rt, message_));
467
+ e.setProperty(rt, "stack", String::createFromUtf8(rt, stack_));
468
+ setValue(rt, std::move(e));
469
+ } catch (const JSIException& ex) {
470
+ setValue(rt, String::createFromUtf8(rt, ex.what()));
471
+ }
472
+ }
473
+
474
+ JSError::JSError(std::string what, Runtime& rt, Value&& value)
475
+ : JSIException(std::move(what)) {
476
+ setValue(rt, std::move(value));
477
+ }
478
+
479
+ JSError::JSError(Value&& value, std::string message, std::string stack)
480
+ : JSIException(message + "\n\n" + stack),
481
+ value_(std::make_shared<Value>(std::move(value))),
482
+ message_(std::move(message)),
483
+ stack_(std::move(stack)) {}
484
+
485
+ void JSError::setValue(Runtime& rt, Value&& value) {
486
+ value_ = std::make_shared<Value>(std::move(value));
487
+
488
+ if ((message_.empty() || stack_.empty()) && value_->isObject()) {
489
+ auto obj = value_->getObject(rt);
490
+
491
+ if (message_.empty()) {
492
+ try {
493
+ Value message = obj.getProperty(rt, "message");
494
+ if (!message.isUndefined() && !message.isString()) {
495
+ message = callGlobalFunction(rt, "String", message);
496
+ }
497
+ if (message.isString()) {
498
+ message_ = message.getString(rt).utf8(rt);
499
+ } else if (!message.isUndefined()) {
500
+ message_ = "String(e.message) is a " + kindToString(message, &rt);
501
+ }
502
+ } catch (const JSIException& ex) {
503
+ message_ = std::string("[Exception while creating message string: ") +
504
+ ex.what() + "]";
505
+ }
506
+ }
507
+
508
+ if (stack_.empty()) {
509
+ try {
510
+ Value stack = obj.getProperty(rt, "stack");
511
+ if (!stack.isUndefined() && !stack.isString()) {
512
+ stack = callGlobalFunction(rt, "String", stack);
513
+ }
514
+ if (stack.isString()) {
515
+ stack_ = stack.getString(rt).utf8(rt);
516
+ } else if (!stack.isUndefined()) {
517
+ stack_ = "String(e.stack) is a " + kindToString(stack, &rt);
518
+ }
519
+ } catch (const JSIException& ex) {
520
+ message_ = std::string("[Exception while creating stack string: ") +
521
+ ex.what() + "]";
522
+ }
523
+ }
524
+ }
525
+
526
+ if (message_.empty()) {
527
+ try {
528
+ if (value_->isString()) {
529
+ message_ = value_->getString(rt).utf8(rt);
530
+ } else {
531
+ Value message = callGlobalFunction(rt, "String", *value_);
532
+ if (message.isString()) {
533
+ message_ = message.getString(rt).utf8(rt);
534
+ } else {
535
+ message_ = "String(e) is a " + kindToString(message, &rt);
536
+ }
537
+ }
538
+ } catch (const JSIException& ex) {
539
+ message_ = std::string("[Exception while creating message string: ") +
540
+ ex.what() + "]";
541
+ }
542
+ }
543
+
544
+ if (stack_.empty()) {
545
+ stack_ = "no stack";
546
+ }
547
+
548
+ if (what_.empty()) {
549
+ what_ = message_ + "\n\n" + stack_;
550
+ }
551
+ }
552
+
553
+ JSIException::~JSIException() {}
554
+
555
+ JSINativeException::~JSINativeException() {}
556
+
557
+ JSError::~JSError() {}
558
+
559
+ } // namespace jsi
560
+ } // namespace facebook