@office-iss/react-native-win32 0.0.0-canary.297 → 0.0.0-canary.299

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 (456) hide show
  1. package/.flowconfig +8 -4
  2. package/CHANGELOG.json +55 -1
  3. package/CHANGELOG.md +25 -5
  4. package/IntegrationTests/AccessibilityManagerTest.js +1 -1
  5. package/IntegrationTests/AppEventsTest.js +1 -1
  6. package/IntegrationTests/GlobalEvalWithSourceUrlTest.js +1 -1
  7. package/IntegrationTests/ImageCachePolicyTest.js +2 -2
  8. package/IntegrationTests/ImageSnapshotTest.js +1 -1
  9. package/IntegrationTests/IntegrationTestHarnessTest.js +1 -1
  10. package/IntegrationTests/IntegrationTestsApp.js +2 -1
  11. package/IntegrationTests/LayoutEventsTest.js +1 -1
  12. package/IntegrationTests/LoggingTestModule.js +16 -20
  13. package/IntegrationTests/PromiseTest.js +1 -1
  14. package/IntegrationTests/SimpleSnapshotTest.js +1 -1
  15. package/IntegrationTests/SyncMethodTest.js +1 -1
  16. package/IntegrationTests/TimersTest.js +2 -1
  17. package/IntegrationTests/WebSocketTest.js +2 -1
  18. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +1 -0
  19. package/Libraries/Alert/Alert.js +3 -3
  20. package/Libraries/Alert/Alert.win32.js +1 -1
  21. package/Libraries/Alert/NativeAlertManager.js +1 -0
  22. package/Libraries/Alert/RCTAlertManager.android.js +19 -13
  23. package/Libraries/Alert/RCTAlertManager.ios.js +10 -12
  24. package/Libraries/Alert/RCTAlertManager.js +1 -3
  25. package/Libraries/Alert/RCTAlertManager.js.flow +5 -7
  26. package/Libraries/Animated/AnimatedEvent.js +4 -3
  27. package/Libraries/Animated/AnimatedExports.js +2 -2
  28. package/Libraries/Animated/AnimatedExports.js.flow +5 -0
  29. package/Libraries/Animated/AnimatedImplementation.js +44 -44
  30. package/Libraries/Animated/AnimatedMock.js +2 -2
  31. package/Libraries/Animated/Easing.js +1 -1
  32. package/Libraries/Animated/NativeAnimatedModule.js +1 -0
  33. package/Libraries/Animated/NativeAnimatedTurboModule.js +1 -0
  34. package/Libraries/Animated/SpringConfig.js +1 -1
  35. package/Libraries/Animated/animations/Animation.js +6 -1
  36. package/Libraries/Animated/components/AnimatedFlatList.js +7 -6
  37. package/Libraries/Animated/components/AnimatedScrollView.js +6 -5
  38. package/Libraries/Animated/components/AnimatedSectionList.js +11 -7
  39. package/Libraries/Animated/components/AnimatedText.js +2 -5
  40. package/Libraries/Animated/components/AnimatedView.js +2 -1
  41. package/Libraries/Animated/createAnimatedComponent.js +2 -4
  42. package/Libraries/Animated/nodes/AnimatedProps.js +31 -4
  43. package/Libraries/Animated/nodes/AnimatedStyle.js +35 -34
  44. package/Libraries/AppState/NativeAppState.js +1 -0
  45. package/Libraries/BatchedBridge/BatchedBridge.js +1 -1
  46. package/Libraries/BatchedBridge/NativeModules.js +1 -1
  47. package/Libraries/Blob/BlobManager.js +4 -0
  48. package/Libraries/Blob/NativeBlobModule.js +1 -0
  49. package/Libraries/Blob/NativeFileReaderModule.js +1 -0
  50. package/Libraries/Blob/URL.js +1 -1
  51. package/Libraries/Blob/URLSearchParams.js +5 -1
  52. package/Libraries/Blob/URLSearchParams.js.flow +2 -1
  53. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +1 -2
  54. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfoWin32.js +1 -2
  55. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js +1 -2
  56. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +1 -1
  57. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.ios.js +1 -1
  58. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.js.flow +1 -1
  59. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.win32.js +1 -1
  60. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +1 -1
  61. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +2 -3
  62. package/Libraries/Components/Button.js +8 -5
  63. package/Libraries/Components/Button.win32.js +8 -5
  64. package/Libraries/Components/Clipboard/Clipboard.js +1 -1
  65. package/Libraries/Components/Clipboard/NativeClipboard.js +1 -2
  66. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +2 -3
  67. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -1
  68. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js +1 -1
  69. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +1 -1
  70. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js.flow +1 -1
  71. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidFallback.js +1 -1
  72. package/Libraries/Components/Keyboard/Keyboard.js +1 -1
  73. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -1
  74. package/Libraries/Components/Keyboard/NativeKeyboardObserver.js +1 -2
  75. package/Libraries/Components/Pressable/Pressable.js +8 -2
  76. package/Libraries/Components/Pressable/Pressable.win32.js +8 -8
  77. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +1 -1
  78. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +2 -3
  79. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +2 -3
  80. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +2 -1
  81. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  82. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +2 -3
  83. package/Libraries/Components/SafeAreaView/SafeAreaView.d.ts +9 -0
  84. package/Libraries/Components/SafeAreaView/SafeAreaView.js +3 -2
  85. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +3 -2
  86. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +2 -3
  87. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +1 -1
  88. package/Libraries/Components/ScrollView/ScrollView.d.ts +24 -1
  89. package/Libraries/Components/ScrollView/ScrollView.js +7 -3
  90. package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
  91. package/Libraries/Components/ScrollView/processDecelerationRate.js +1 -1
  92. package/Libraries/Components/Sound/NativeSoundManager.js +1 -2
  93. package/Libraries/Components/Sound/SoundManager.js +1 -1
  94. package/Libraries/Components/StaticRenderer.js +1 -1
  95. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +1 -2
  96. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +1 -2
  97. package/Libraries/Components/StatusBar/StatusBar.d.ts +4 -0
  98. package/Libraries/Components/StatusBar/StatusBar.js +6 -1
  99. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +2 -3
  100. package/Libraries/Components/Switch/Switch.js +2 -1
  101. package/Libraries/Components/Switch/SwitchNativeComponent.js +2 -3
  102. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +8 -19
  103. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +2 -3
  104. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +1 -1
  105. package/Libraries/Components/TextInput/TextInput.d.ts +9 -3
  106. package/Libraries/Components/TextInput/TextInput.flow.js +12 -10
  107. package/Libraries/Components/TextInput/TextInput.flow.win32.js +11 -9
  108. package/Libraries/Components/TextInput/TextInput.js +16 -14
  109. package/Libraries/Components/TextInput/TextInput.win32.js +42 -13
  110. package/Libraries/Components/TextInput/TextInputState.js +1 -1
  111. package/Libraries/Components/TextInput/TextInputState.win32.js +1 -1
  112. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +1 -2
  113. package/Libraries/Components/ToastAndroid/ToastAndroid.android.js +1 -1
  114. package/Libraries/Components/ToastAndroid/ToastAndroid.ios.js +1 -1
  115. package/Libraries/Components/ToastAndroid/ToastAndroid.js +1 -1
  116. package/Libraries/Components/ToastAndroid/ToastAndroid.js.flow +1 -1
  117. package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +1 -1
  118. package/Libraries/Components/ToastAndroid/ToastAndroidFallback.js +1 -1
  119. package/Libraries/Components/Touchable/BoundingDimensions.js +1 -1
  120. package/Libraries/Components/Touchable/PooledClass.js +1 -1
  121. package/Libraries/Components/Touchable/Position.js +1 -1
  122. package/Libraries/Components/Touchable/Touchable.js +17 -3
  123. package/Libraries/Components/Touchable/Touchable.win32.js +17 -3
  124. package/Libraries/Components/Touchable/TouchableHighlight.js +5 -1
  125. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +3 -2
  126. package/Libraries/Components/Touchable/TouchableNativeFeedback.win32.js +3 -2
  127. package/Libraries/Components/Touchable/TouchableOpacity.d.ts +1 -0
  128. package/Libraries/Components/Touchable/TouchableOpacity.js +3 -2
  129. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -1
  130. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +2 -3
  131. package/Libraries/Components/View/ReactNativeStyleAttributes.js +7 -16
  132. package/Libraries/Components/View/View.js +18 -19
  133. package/Libraries/Components/View/View.win32.js +17 -3
  134. package/Libraries/Components/View/ViewAccessibility.js +1 -8
  135. package/Libraries/Components/View/ViewAccessibility.win32.js +1 -8
  136. package/Libraries/Components/View/ViewPropTypes.d.ts +22 -2
  137. package/Libraries/Components/View/ViewPropTypes.js +9 -1
  138. package/Libraries/Components/View/ViewPropTypes.win32.js +9 -1
  139. package/Libraries/Core/Devtools/getDevServer.js +1 -1
  140. package/Libraries/Core/Devtools/openFileInEditor.js +1 -1
  141. package/Libraries/Core/Devtools/openURLInBrowser.js +1 -1
  142. package/Libraries/Core/Devtools/parseErrorStack.js +1 -1
  143. package/Libraries/Core/Devtools/parseHermesStack.js +1 -1
  144. package/Libraries/Core/Devtools/symbolicateStackTrace.js +1 -1
  145. package/Libraries/Core/ExceptionsManager.js +29 -16
  146. package/Libraries/Core/InitializeCore.js +1 -1
  147. package/Libraries/Core/NativeExceptionsManager.js +1 -0
  148. package/Libraries/Core/ReactFiberErrorDialog.js +1 -1
  149. package/Libraries/Core/ReactNativeVersion.js +1 -1
  150. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +1 -0
  151. package/Libraries/Core/Timers/JSTimers.js +1 -1
  152. package/Libraries/Core/Timers/NativeTiming.js +1 -0
  153. package/Libraries/Core/Timers/immediateShim.js +1 -1
  154. package/Libraries/Core/Timers/queueMicrotask.js +1 -1
  155. package/Libraries/Core/checkNativeVersion.js +1 -0
  156. package/Libraries/Core/setUpDeveloperTools.js +13 -11
  157. package/Libraries/Core/setUpReactDevTools.js +21 -4
  158. package/Libraries/Debugging/DebuggingOverlay.js +6 -6
  159. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +2 -1
  160. package/Libraries/EventEmitter/NativeEventEmitter.js +3 -3
  161. package/Libraries/EventEmitter/RCTEventEmitter.js +1 -1
  162. package/Libraries/EventEmitter/RCTNativeAppEventEmitter.js +1 -1
  163. package/Libraries/Image/Image.android.js +3 -3
  164. package/Libraries/Image/ImageInjection.js +1 -1
  165. package/Libraries/Image/ImageSource.d.ts +5 -0
  166. package/Libraries/Image/ImageViewNativeComponent.js +3 -3
  167. package/Libraries/Image/NativeImageEditor.js +1 -0
  168. package/Libraries/Image/NativeImageLoaderAndroid.js +1 -0
  169. package/Libraries/Image/NativeImageLoaderIOS.js +1 -0
  170. package/Libraries/Image/NativeImageLoaderWin32.js +1 -0
  171. package/Libraries/Image/NativeImageStoreAndroid.js +1 -0
  172. package/Libraries/Image/NativeImageStoreIOS.js +1 -0
  173. package/Libraries/Image/RelativeImageStub.js +2 -2
  174. package/Libraries/Image/TextInlineImageNativeComponent.js +4 -4
  175. package/Libraries/Image/resolveAssetSource.js +1 -1
  176. package/Libraries/Interaction/FrameRateLogger.js +1 -1
  177. package/Libraries/Interaction/InteractionManager.js +68 -54
  178. package/Libraries/Interaction/NativeFrameRateLogger.js +1 -0
  179. package/Libraries/Interaction/TaskQueue.js +22 -9
  180. package/Libraries/Interaction/TouchHistoryMath.js +1 -1
  181. package/Libraries/LayoutAnimation/LayoutAnimation.js +12 -8
  182. package/Libraries/Linking/Linking.js +1 -1
  183. package/Libraries/Linking/NativeIntentAndroid.js +1 -0
  184. package/Libraries/Linking/NativeLinkingManager.js +1 -0
  185. package/Libraries/Lists/FlatList.js +5 -6
  186. package/Libraries/Lists/SectionList.js +4 -4
  187. package/Libraries/Lists/VirtualizedList.js +3 -2
  188. package/Libraries/LogBox/Data/LogBoxData.js +7 -4
  189. package/Libraries/LogBox/Data/parseLogBoxLog.js +2 -0
  190. package/Libraries/LogBox/LogBox.js +72 -99
  191. package/Libraries/Modal/Modal.d.ts +8 -2
  192. package/Libraries/Modal/Modal.js +24 -3
  193. package/Libraries/Modal/NativeModalManager.js +1 -0
  194. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +2 -1
  195. package/Libraries/NativeComponent/BaseViewConfig.android.js +21 -18
  196. package/Libraries/NativeComponent/BaseViewConfig.ios.js +8 -17
  197. package/Libraries/NativeComponent/BaseViewConfig.js.flow +1 -1
  198. package/Libraries/NativeComponent/BaseViewConfig.win32.js +8 -17
  199. package/Libraries/NativeComponent/PlatformBaseViewConfig.js +1 -1
  200. package/Libraries/NativeComponent/ViewConfigIgnore.js +3 -3
  201. package/Libraries/NativeModules/specs/NativeDevMenu.js +1 -0
  202. package/Libraries/NativeModules/specs/NativeDevSettings.js +1 -0
  203. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +1 -0
  204. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +1 -0
  205. package/Libraries/NativeModules/specs/NativeLogBox.js +1 -0
  206. package/Libraries/NativeModules/specs/NativeRedBox.js +1 -0
  207. package/Libraries/NativeModules/specs/NativeSourceCode.js +1 -0
  208. package/Libraries/Network/FormData.js +1 -1
  209. package/Libraries/Network/NativeNetworkingAndroid.js +1 -0
  210. package/Libraries/Network/NativeNetworkingIOS.js +1 -0
  211. package/Libraries/Network/RCTNetworking.android.js +2 -2
  212. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  213. package/Libraries/Network/RCTNetworking.js.flow +1 -1
  214. package/Libraries/Network/RCTNetworking.win32.js +1 -1
  215. package/Libraries/Network/XMLHttpRequest.js +5 -3
  216. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
  217. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -3
  218. package/Libraries/Pressability/Pressability.js +1 -1
  219. package/Libraries/Pressability/Pressability.win32.js +1 -1
  220. package/Libraries/Promise.js +1 -1
  221. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +1 -0
  222. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +3 -2
  223. package/Libraries/ReactNative/AppContainer.js +1 -1
  224. package/Libraries/ReactNative/AppRegistry.flow.js +2 -2
  225. package/Libraries/ReactNative/AppRegistryImpl.js +2 -13
  226. package/Libraries/ReactNative/BridgelessUIManager.js +1 -1
  227. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +1 -0
  228. package/Libraries/ReactNative/NativeI18nManager.js +1 -0
  229. package/Libraries/ReactNative/NativeUIManager.js +1 -0
  230. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +1 -1
  231. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +1 -1
  232. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstanceUtils.js +1 -1
  233. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +81 -62
  234. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +1 -1
  235. package/Libraries/ReactNative/RendererImplementation.js +1 -1
  236. package/Libraries/ReactNative/RendererProxy.js +1 -1
  237. package/Libraries/ReactNative/renderApplication.js +1 -1
  238. package/Libraries/ReactPrivate/ReactNativePrivateInitializeCore.js +1 -1
  239. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +2 -2
  240. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js.flow +3 -3
  241. package/Libraries/Renderer/implementations/ReactFabric-dev.js +3 -1
  242. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3 -1
  243. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3 -1
  244. package/Libraries/Renderer/shims/ReactNativeTypes.js +3 -12
  245. package/Libraries/Renderer/shims/ReactNativeTypes.win32.js +3 -12
  246. package/Libraries/Settings/NativeSettingsManager.js +1 -0
  247. package/Libraries/Settings/Settings.ios.js +1 -1
  248. package/Libraries/Settings/Settings.js +1 -1
  249. package/Libraries/Settings/SettingsFallback.js +1 -1
  250. package/Libraries/Share/NativeShareModule.js +1 -0
  251. package/Libraries/Share/Share.js +1 -1
  252. package/Libraries/StyleSheet/EdgeInsetsPropType.js +1 -1
  253. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +1 -1
  254. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
  255. package/Libraries/StyleSheet/PlatformColorValueTypes.js.flow +1 -1
  256. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -1
  257. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.js +1 -1
  258. package/Libraries/StyleSheet/PointPropType.js +1 -1
  259. package/Libraries/StyleSheet/Rect.js +1 -1
  260. package/Libraries/StyleSheet/StyleSheet.js +1 -0
  261. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  262. package/Libraries/StyleSheet/processAspectRatio.js +3 -1
  263. package/Libraries/StyleSheet/processBackgroundImage.js +1 -1
  264. package/Libraries/StyleSheet/processColor.js +1 -1
  265. package/Libraries/StyleSheet/processColorArray.js +1 -1
  266. package/Libraries/StyleSheet/processFilter.js +1 -1
  267. package/Libraries/StyleSheet/processFontVariant.js +1 -1
  268. package/Libraries/StyleSheet/processTransform.js +1 -1
  269. package/Libraries/StyleSheet/processTransformOrigin.js +1 -1
  270. package/Libraries/StyleSheet/setNormalizedColorAlpha.js +1 -1
  271. package/Libraries/Text/Text.js +5 -7
  272. package/Libraries/Text/Text.win32.js +1 -1
  273. package/Libraries/Text/TextAncestor.js +3 -10
  274. package/Libraries/Text/TextAncestorContext.js +23 -0
  275. package/Libraries/Text/TextNativeComponent.js +4 -0
  276. package/Libraries/Text/TextNativeComponent.win32.js +4 -0
  277. package/Libraries/Text/TextProps.js +2 -2
  278. package/Libraries/Text/TextProps.win32.js +2 -2
  279. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +1 -0
  280. package/Libraries/Types/CodegenTypes.js +1 -1
  281. package/Libraries/Types/CodegenTypesNamespace.js +2 -1
  282. package/Libraries/Types/CoreEventTypes.d.ts +4 -0
  283. package/Libraries/Utilities/Appearance.js +1 -1
  284. package/Libraries/Utilities/BackHandler.js.flow +1 -1
  285. package/Libraries/Utilities/DevLoadingView.js +1 -1
  286. package/Libraries/Utilities/DeviceInfo.js +1 -1
  287. package/Libraries/Utilities/Dimensions.js +1 -1
  288. package/Libraries/Utilities/Dimensions.win32.js +1 -1
  289. package/Libraries/Utilities/HMRClient.js +13 -3
  290. package/Libraries/Utilities/HMRClientProdShim.js +1 -1
  291. package/Libraries/Utilities/NativeAppearance.js +1 -0
  292. package/Libraries/Utilities/NativeDevLoadingView.js +1 -0
  293. package/Libraries/Utilities/NativeDeviceInfo.js +1 -2
  294. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +1 -0
  295. package/Libraries/Utilities/NativePlatformConstantsIOS.js +1 -0
  296. package/Libraries/Utilities/NativePlatformConstantsWin.js +1 -0
  297. package/Libraries/Utilities/PixelRatio.js +1 -1
  298. package/Libraries/Utilities/Platform.android.js +2 -5
  299. package/Libraries/Utilities/Platform.ios.js +2 -5
  300. package/Libraries/Utilities/Platform.js +1 -1
  301. package/Libraries/Utilities/Platform.js.flow +2 -2
  302. package/Libraries/Utilities/Platform.win32.js +2 -5
  303. package/Libraries/Utilities/PlatformTypes.js +1 -1
  304. package/Libraries/Utilities/RCTLog.js +1 -1
  305. package/Libraries/Utilities/SceneTracker.js +1 -1
  306. package/Libraries/Utilities/binaryToBase64.js +1 -1
  307. package/Libraries/Utilities/codegenNativeCommands.js +5 -3
  308. package/Libraries/Utilities/codegenNativeComponent.js +4 -4
  309. package/Libraries/Utilities/createPerformanceLogger.js +59 -20
  310. package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +1 -1
  311. package/Libraries/Utilities/defineLazyObjectProperty.js +1 -1
  312. package/Libraries/Utilities/differ/deepDiffer.js +1 -1
  313. package/Libraries/Utilities/differ/insetsDiffer.js +1 -1
  314. package/Libraries/Utilities/differ/matricesDiffer.js +1 -1
  315. package/Libraries/Utilities/differ/pointsDiffer.js +1 -1
  316. package/Libraries/Utilities/logError.js +1 -1
  317. package/Libraries/Utilities/mapWithSeparator.js +1 -1
  318. package/Libraries/Utilities/stringifySafe.js +1 -1
  319. package/Libraries/Utilities/stringifyViewConfig.js +1 -1
  320. package/Libraries/Utilities/useColorScheme.js +1 -1
  321. package/Libraries/Utilities/useWindowDimensions.js +1 -1
  322. package/Libraries/Utilities/warnOnce.js +1 -1
  323. package/Libraries/Vibration/NativeVibration.js +1 -0
  324. package/Libraries/Vibration/Vibration.js +1 -2
  325. package/Libraries/WebSocket/NativeWebSocketModule.js +1 -0
  326. package/Libraries/WebSocket/WebSocket.js +1 -1
  327. package/Libraries/WebSocket/WebSocketInterceptor.js +1 -1
  328. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  329. package/Libraries/vendor/core/ErrorUtils.js +1 -1
  330. package/Libraries/vendor/emitter/EventEmitter.js +6 -6
  331. package/index.js +22 -1
  332. package/index.win32.js +15 -2
  333. package/interface.js +1 -1
  334. package/jest/MockNativeMethods.js +9 -3
  335. package/jest/RefreshControlMock.js +32 -0
  336. package/jest/assetFileTransformer.js +1 -0
  337. package/jest/local-setup.js +4 -3
  338. package/jest/mock.js +39 -0
  339. package/jest/mockComponent.js +47 -17
  340. package/jest/mockNativeComponent.js +24 -14
  341. package/jest/mocks/AccessibilityInfo.js +62 -0
  342. package/jest/mocks/ActivityIndicator.js +23 -0
  343. package/jest/mocks/AppState.js +19 -0
  344. package/{flow/Stringish.js → jest/mocks/Clipboard.js} +6 -4
  345. package/jest/mocks/Image.js +23 -0
  346. package/jest/mocks/InitializeCore.js +9 -0
  347. package/jest/mocks/Linking.js +28 -0
  348. package/jest/mocks/Modal.js +33 -0
  349. package/jest/mocks/NativeComponentRegistry.js +30 -0
  350. package/jest/mocks/NativeModules.js +239 -0
  351. package/jest/mocks/RefreshControl.js +31 -0
  352. package/jest/mocks/RendererProxy.js +45 -0
  353. package/jest/mocks/ScrollView.js +58 -0
  354. package/jest/mocks/Text.js +27 -0
  355. package/jest/mocks/TextInput.js +32 -0
  356. package/jest/mocks/UIManager.js +60 -0
  357. package/jest/mocks/Vibration.js +16 -0
  358. package/jest/mocks/View.js +27 -0
  359. package/jest/mocks/ViewNativeComponent.js +23 -0
  360. package/jest/mocks/requireNativeComponent.js +22 -0
  361. package/{Libraries/Utilities/infoLog.js → jest/mocks/useColorScheme.js} +7 -9
  362. package/jest/react-native-env.js +1 -0
  363. package/jest/renderer.js +1 -1
  364. package/jest/resolver.js +1 -0
  365. package/jest/setup.js +64 -445
  366. package/overrides.json +38 -38
  367. package/package.json +14 -14
  368. package/src/private/animated/NativeAnimatedHelper.js +2 -0
  369. package/src/private/animated/NativeAnimatedHelper.win32.js +2 -0
  370. package/src/private/animated/createAnimatedPropsHook.js +4 -1
  371. package/src/private/animated/createAnimatedPropsMemoHook.js +2 -2
  372. package/src/private/components/virtualview/VirtualView.js +145 -0
  373. package/src/private/components/virtualview/VirtualViewNativeComponent.js +90 -0
  374. package/src/private/devsupport/devmenu/elementinspector/BorderBox.js +1 -1
  375. package/src/private/devsupport/devmenu/elementinspector/BoxInspector.js +1 -1
  376. package/src/private/devsupport/devmenu/elementinspector/ElementBox.js +1 -1
  377. package/src/private/devsupport/devmenu/elementinspector/ElementProperties.js +1 -1
  378. package/src/private/devsupport/devmenu/elementinspector/Inspector.js +1 -1
  379. package/src/private/devsupport/devmenu/elementinspector/InspectorOverlay.js +1 -1
  380. package/src/private/devsupport/devmenu/elementinspector/InspectorPanel.js +1 -1
  381. package/src/private/devsupport/devmenu/elementinspector/NetworkOverlay.js +1 -1
  382. package/src/private/devsupport/devmenu/elementinspector/ReactDevToolsOverlay.js +1 -1
  383. package/src/private/devsupport/devmenu/elementinspector/StyleInspector.js +1 -1
  384. package/src/private/devsupport/devmenu/elementinspector/XHRInterceptor.js +1 -1
  385. package/src/private/devsupport/devmenu/elementinspector/getInspectorDataForViewAtPoint.js +1 -1
  386. package/src/private/devsupport/devmenu/elementinspector/resolveBoxStyle.js +1 -1
  387. package/src/private/devsupport/devmenu/perfmonitor/PerformanceOverlay.js +1 -1
  388. package/src/private/featureflags/ReactNativeFeatureFlags.js +75 -30
  389. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +2 -0
  390. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +14 -5
  391. package/src/private/renderer/errorhandling/ErrorHandlers.js +1 -1
  392. package/src/private/setup/setUpPerformanceObserver.js +7 -0
  393. package/src/private/specs_DEPRECATED/components/ActivityIndicatorViewNativeComponent.js +8 -5
  394. package/src/private/specs_DEPRECATED/components/AndroidDrawerLayoutNativeComponent.js +4 -4
  395. package/src/private/specs_DEPRECATED/components/AndroidHorizontalScrollContentViewNativeComponent.js +4 -4
  396. package/src/private/specs_DEPRECATED/components/AndroidSwipeRefreshLayoutNativeComponent.js +4 -4
  397. package/src/private/specs_DEPRECATED/components/AndroidSwitchNativeComponent.js +10 -7
  398. package/src/private/specs_DEPRECATED/components/DebuggingOverlayNativeComponent.js +5 -4
  399. package/src/private/specs_DEPRECATED/components/ProgressBarAndroidNativeComponent.js +7 -4
  400. package/src/private/specs_DEPRECATED/components/PullToRefreshViewNativeComponent.js +10 -7
  401. package/src/private/specs_DEPRECATED/components/RCTInputAccessoryViewNativeComponent.js +9 -6
  402. package/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js +15 -6
  403. package/src/private/specs_DEPRECATED/components/RCTSafeAreaViewNativeComponent.js +9 -6
  404. package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +5 -5
  405. package/src/private/specs_DEPRECATED/components/UnimplementedNativeViewNativeComponent.js +4 -4
  406. package/src/private/specs_DEPRECATED/modules/NativeDeviceInfo.js +1 -0
  407. package/src/private/specs_DEPRECATED/modules/NativeFrameRateLogger.js +1 -1
  408. package/src/private/specs_DEPRECATED/modules/NativePermissionsAndroid.js +1 -1
  409. package/src/private/specs_DEPRECATED/modules/NativePushNotificationManagerIOS.js +1 -1
  410. package/src/private/specs_DEPRECATED/modules/NativeUIManager.js +9 -6
  411. package/src/private/styles/composeStyles.js +5 -12
  412. package/src/private/types/HostInstance.js +1 -1
  413. package/src/private/webapis/dom/nodes/ReactNativeDocument.js +1 -1
  414. package/src/private/webapis/dom/nodes/ReactNativeElement.js +1 -1
  415. package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +1 -1
  416. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +1 -1
  417. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +1 -1
  418. package/src/private/webapis/dom/nodes/ReadOnlyText.js +1 -1
  419. package/src/private/webapis/dom/nodes/internals/NodeInternals.js +1 -1
  420. package/src/private/webapis/dom/nodes/internals/ReactNativeDocumentElementInstanceHandle.js +1 -1
  421. package/src/private/webapis/dom/nodes/internals/ReactNativeDocumentInstanceHandle.js +1 -1
  422. package/src/private/webapis/dom/nodes/internals/Traversal.js +1 -1
  423. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +1 -1
  424. package/src/private/webapis/dom/oldstylecollections/NodeList.js +1 -1
  425. package/src/private/webapis/errors/DOMException.js +1 -1
  426. package/src/private/webapis/geometry/DOMRectList.js +1 -1
  427. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +4 -2
  428. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +4 -1
  429. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -1
  430. package/src/private/webapis/mutationobserver/MutationObserver.js +2 -17
  431. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +19 -73
  432. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +1 -7
  433. package/src/private/webapis/performance/EventTiming.js +1 -1
  434. package/src/private/webapis/performance/LongTasks.js +1 -1
  435. package/src/private/webapis/performance/Performance.js +165 -62
  436. package/src/private/webapis/performance/PerformanceEntry.js +21 -17
  437. package/src/private/webapis/performance/PerformanceObserver.js +32 -28
  438. package/src/private/webapis/performance/ResourceTiming.js +108 -0
  439. package/src/private/webapis/performance/UserTiming.js +61 -9
  440. package/src/private/webapis/performance/internals/RawPerformanceEntry.js +48 -33
  441. package/src/private/webapis/performance/internals/Utilities.js +1 -1
  442. package/src/private/webapis/performance/specs/NativePerformance.js +13 -1
  443. package/src/private/webapis/utils/ArrayLikeUtils.js +1 -1
  444. package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +22 -2
  445. package/types/modules/Devtools.d.ts +23 -9
  446. package/Libraries/BugReporting/BugReporting.js +0 -140
  447. package/Libraries/BugReporting/NativeBugReporting.js +0 -13
  448. package/Libraries/BugReporting/dumpReactTree.js +0 -151
  449. package/Libraries/BugReporting/getReactData.js +0 -187
  450. package/Libraries/Interaction/JSEventLoopWatchdog.js +0 -88
  451. package/flow/HermesInternalType.js +0 -114
  452. package/flow/console.js +0 -49
  453. package/flow/global.js +0 -88
  454. package/jest/mockModal.js +0 -32
  455. package/jest/mockScrollView.js +0 -35
  456. package/src/private/specs_DEPRECATED/modules/NativeBugReporting.js +0 -20
@@ -16,7 +16,6 @@ import type MutationRecord from './MutationRecord';
16
16
  import ReactNativeElement from '../dom/nodes/ReactNativeElement';
17
17
  import {setPlatformObject} from '../webidl/PlatformObjects';
18
18
  import * as MutationObserverManager from './internals/MutationObserverManager';
19
- import nullthrows from 'nullthrows';
20
19
 
21
20
  export type MutationObserverCallback = (
22
21
  mutationRecords: $ReadOnlyArray<MutationRecord>,
@@ -118,15 +117,11 @@ export default class MutationObserver {
118
117
 
119
118
  const mutationObserverId = this._getOrCreateMutationObserverId();
120
119
 
121
- const didStartObserving = MutationObserverManager.observe({
120
+ MutationObserverManager.observe({
122
121
  mutationObserverId,
123
122
  target,
124
123
  subtree: Boolean(options?.subtree),
125
124
  });
126
-
127
- if (didStartObserving && !MutationObserverManager.unobserveAll) {
128
- this._observationTargets.add(target);
129
- }
130
125
  }
131
126
 
132
127
  /**
@@ -139,17 +134,7 @@ export default class MutationObserver {
139
134
  return;
140
135
  }
141
136
 
142
- if (MutationObserverManager.unobserveAll) {
143
- MutationObserverManager.unobserveAll(mutationObserverId);
144
- } else if (MutationObserverManager.unobserve) {
145
- for (const target of this._observationTargets.keys()) {
146
- nullthrows(MutationObserverManager.unobserve)(
147
- mutationObserverId,
148
- target,
149
- );
150
- }
151
- this._observationTargets.clear();
152
- }
137
+ MutationObserverManager.unobserveAll(mutationObserverId);
153
138
 
154
139
  MutationObserverManager.unregisterObserver(mutationObserverId);
155
140
  this._mutationObserverId = null;
@@ -41,14 +41,6 @@ const registeredMutationObservers: Map<
41
41
  $ReadOnly<{observer: MutationObserver, callback: MutationObserverCallback}>,
42
42
  > = new Map();
43
43
 
44
- // The mapping between ReactNativeElement and their corresponding shadow node
45
- // needs to be kept here because React removes the link when unmounting.
46
- // TODO: remove this code when NativeMutationObserver.unobserveAll is available in all apps
47
- const targetToShadowNodeMap: WeakMap<
48
- ReactNativeElement,
49
- ReturnType<typeof getNativeNodeReference>,
50
- > = new WeakMap();
51
-
52
44
  /**
53
45
  * Registers the given mutation observer and returns a unique ID for it,
54
46
  * which is required to start observing targets.
@@ -91,10 +83,10 @@ export function observe({
91
83
  mutationObserverId: MutationObserverId,
92
84
  target: ReactNativeElement,
93
85
  subtree: boolean,
94
- }): boolean {
86
+ }): void {
95
87
  if (NativeMutationObserver == null) {
96
88
  warnNoNativeMutationObserver();
97
- return false;
89
+ return;
98
90
  }
99
91
 
100
92
  const registeredObserver =
@@ -103,19 +95,13 @@ export function observe({
103
95
  console.error(
104
96
  `MutationObserverManager: could not start observing target because MutationObserver with ID ${mutationObserverId} was not registered.`,
105
97
  );
106
- return false;
98
+ return;
107
99
  }
108
100
 
109
101
  const targetShadowNode = getNativeNodeReference(target);
110
102
  if (targetShadowNode == null) {
111
103
  // The target is disconnected. We can't observe it anymore.
112
- return false;
113
- }
114
-
115
- // We need to keep this temporarily until the changes in the native module have propagated.
116
- // After that, we don't need to keep this mapping that can cause memory leaks.
117
- if (!nativeUnobserveAll) {
118
- targetToShadowNodeMap.set(target, targetShadowNode);
104
+ return;
119
105
  }
120
106
 
121
107
  if (!isConnected) {
@@ -136,65 +122,25 @@ export function observe({
136
122
  targetShadowNode,
137
123
  subtree,
138
124
  });
139
-
140
- return true;
141
125
  }
142
126
 
143
- const nativeUnobserve = NativeMutationObserver?.unobserve;
144
-
145
- // TODO: delete in the next version, when NativeMutationObserver.unobserveAll is available in all apps
146
- export const unobserve: ?(
147
- mutationObserverId: number,
148
- target: ReactNativeElement,
149
- ) => void = nativeUnobserve
150
- ? function unobserve(
151
- mutationObserverId: number,
152
- target: ReactNativeElement,
153
- ): void {
154
- if (NativeMutationObserver == null) {
155
- warnNoNativeMutationObserver();
156
- return;
157
- }
158
-
159
- const registeredObserver =
160
- registeredMutationObservers.get(mutationObserverId);
161
- if (registeredObserver == null) {
162
- console.error(
163
- `MutationObserverManager: could not stop observing target because MutationObserver with ID ${mutationObserverId} was not registered.`,
164
- );
165
- return;
166
- }
167
-
168
- const targetShadowNode = targetToShadowNodeMap.get(target);
169
- if (targetShadowNode == null) {
170
- console.error(
171
- 'MutationObserverManager: could not find registration data for target',
172
- );
173
- return;
174
- }
175
-
176
- nativeUnobserve(mutationObserverId, targetShadowNode);
177
- }
178
- : null;
179
-
180
- const nativeUnobserveAll = NativeMutationObserver?.unobserveAll;
127
+ export function unobserveAll(mutationObserverId: number): void {
128
+ if (NativeMutationObserver == null) {
129
+ warnNoNativeMutationObserver();
130
+ return;
131
+ }
181
132
 
182
- // TODO: clean up as a regular export in the next version, when NativeMutationObserver.unobserveAll is available in all apps
183
- export const unobserveAll: ?(mutationObserverId: number) => void =
184
- nativeUnobserveAll
185
- ? function unobserveAll(mutationObserverId: MutationObserverId): void {
186
- const registeredObserver =
187
- registeredMutationObservers.get(mutationObserverId);
188
- if (registeredObserver == null) {
189
- console.error(
190
- `MutationObserverManager: could not stop observing target because MutationObserver with ID ${mutationObserverId} was not registered.`,
191
- );
192
- return;
193
- }
133
+ const registeredObserver =
134
+ registeredMutationObservers.get(mutationObserverId);
135
+ if (registeredObserver == null) {
136
+ console.error(
137
+ `MutationObserverManager: could not disconnect MutationObserver with ID ${mutationObserverId} because it was not registered.`,
138
+ );
139
+ return;
140
+ }
194
141
 
195
- nativeUnobserveAll(mutationObserverId);
196
- }
197
- : null;
142
+ NativeMutationObserver.unobserveAll(mutationObserverId);
143
+ }
198
144
 
199
145
  /**
200
146
  * This function is called from native when there are `MutationObserver`
@@ -36,13 +36,7 @@ export type NativeMutationObserverObserveOptions = {
36
36
 
37
37
  export interface Spec extends TurboModule {
38
38
  +observe: (options: NativeMutationObserverObserveOptions) => void;
39
- // TODO: remove in the next version
40
- +unobserve?: (
41
- mutationObserverId: number,
42
- targetShadowNode: ShadowNode,
43
- ) => void;
44
- // TODO: remove optionality in the next version
45
- +unobserveAll?: (mutationObserverId: number) => void;
39
+ +unobserveAll: (mutationObserverId: number) => void;
46
40
  +connect: (
47
41
  notifyMutationObservers: () => void,
48
42
  // We need this to retain the public instance before React removes the
@@ -4,8 +4,8 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @format
8
7
  * @flow strict
8
+ * @format
9
9
  */
10
10
 
11
11
  // flowlint unsafe-getters-setters:off
@@ -4,8 +4,8 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @format
8
7
  * @flow strict
8
+ * @format
9
9
  */
10
10
 
11
11
  // flowlint unsafe-getters-setters:off
@@ -4,8 +4,8 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @format
8
7
  * @flow strict
8
+ * @format
9
9
  */
10
10
 
11
11
  // flowlint unsafe-getters-setters:off
@@ -18,6 +18,7 @@ import type {
18
18
  import type {DetailType, PerformanceMarkOptions} from './UserTiming';
19
19
 
20
20
  import DOMException from '../errors/DOMException';
21
+ import structuredClone from '../structuredClone/structuredClone';
21
22
  import {setPlatformObject} from '../webidl/PlatformObjects';
22
23
  import {EventCounts} from './EventTiming';
23
24
  import {
@@ -38,12 +39,17 @@ declare var global: {
38
39
  const getCurrentTimeStamp: () => DOMHighResTimeStamp =
39
40
  NativePerformance?.now ?? global.nativePerformanceNow ?? (() => Date.now());
40
41
 
41
- export type PerformanceMeasureOptions = {
42
- detail?: DetailType,
43
- start?: DOMHighResTimeStamp,
44
- duration?: DOMHighResTimeStamp,
45
- end?: DOMHighResTimeStamp,
46
- };
42
+ export type PerformanceMeasureOptions =
43
+ | {
44
+ detail?: DetailType,
45
+ start?: DOMHighResTimeStamp | string,
46
+ duration?: DOMHighResTimeStamp,
47
+ }
48
+ | {
49
+ detail?: DetailType,
50
+ start?: DOMHighResTimeStamp | string,
51
+ end?: DOMHighResTimeStamp | string,
52
+ };
47
53
 
48
54
  const ENTRY_TYPES_AVAILABLE_FROM_TIMELINE: $ReadOnlyArray<PerformanceEntryType> =
49
55
  ['mark', 'measure'];
@@ -111,11 +117,39 @@ export default class Performance {
111
117
  markName: string,
112
118
  markOptions?: PerformanceMarkOptions,
113
119
  ): PerformanceMark {
120
+ if (markName == null) {
121
+ throw new TypeError(
122
+ `Failed to execute 'mark' on 'Performance': 1 argument required, but only 0 present.`,
123
+ );
124
+ }
125
+
126
+ let resolvedDetail;
127
+ if (markOptions?.detail != null) {
128
+ resolvedDetail = structuredClone(markOptions.detail);
129
+ }
130
+
114
131
  let computedStartTime;
115
132
  if (NativePerformance?.markWithResult) {
133
+ let resolvedStartTime;
134
+
135
+ const startTime = markOptions?.startTime;
136
+ if (startTime !== undefined) {
137
+ resolvedStartTime = Number(startTime);
138
+ if (resolvedStartTime < 0) {
139
+ throw new TypeError(
140
+ `Failed to execute 'mark' on 'Performance': '${markName}' cannot have a negative start time.`,
141
+ );
142
+ } else if (!Number.isFinite(resolvedStartTime)) {
143
+ throw new TypeError(
144
+ `Failed to execute 'mark' on 'Performance': Failed to read the 'startTime' property from 'PerformanceMarkOptions': The provided double value is non-finite.`,
145
+ );
146
+ }
147
+ }
148
+
149
+ // $FlowExpectedError[not-a-function]
116
150
  computedStartTime = NativePerformance.markWithResult(
117
151
  markName,
118
- markOptions?.startTime,
152
+ resolvedStartTime,
119
153
  );
120
154
  } else {
121
155
  warnNoNativePerformance();
@@ -124,7 +158,7 @@ export default class Performance {
124
158
 
125
159
  return new PerformanceMark(markName, {
126
160
  startTime: computedStartTime,
127
- detail: markOptions?.detail,
161
+ detail: resolvedDetail,
128
162
  });
129
163
  }
130
164
 
@@ -142,66 +176,135 @@ export default class Performance {
142
176
  startMarkOrOptions?: string | PerformanceMeasureOptions,
143
177
  endMark?: string,
144
178
  ): PerformanceMeasure {
145
- let options;
146
- let startMarkName,
147
- endMarkName = endMark,
148
- duration,
149
- startTime = 0,
150
- endTime = 0;
151
-
152
- if (typeof startMarkOrOptions === 'string') {
153
- startMarkName = startMarkOrOptions;
154
- options = {};
155
- } else if (startMarkOrOptions !== undefined) {
156
- options = startMarkOrOptions;
157
- if (endMark !== undefined) {
158
- throw new TypeError(
159
- "Performance.measure: Can't have both options and endMark",
160
- );
161
- }
162
- if (options.start === undefined && options.end === undefined) {
163
- throw new TypeError(
164
- 'Performance.measure: Must have at least one of start/end specified in options',
165
- );
179
+ let resolvedStartTime: number | void;
180
+ let resolvedStartMark: string | void;
181
+ let resolvedEndTime: number | void;
182
+ let resolvedEndMark: string | void;
183
+ let resolvedDuration: number | void;
184
+ let resolvedDetail: mixed;
185
+
186
+ if (startMarkOrOptions != null) {
187
+ switch (typeof startMarkOrOptions) {
188
+ case 'object': {
189
+ if (endMark != null) {
190
+ throw new TypeError(
191
+ `Failed to execute 'measure' on 'Performance': If a non-empty PerformanceMeasureOptions object was passed, |end_mark| must not be passed.`,
192
+ );
193
+ }
194
+
195
+ const start = startMarkOrOptions.start;
196
+ switch (typeof start) {
197
+ case 'number': {
198
+ resolvedStartTime = start;
199
+ break;
200
+ }
201
+ case 'string': {
202
+ resolvedStartMark = start;
203
+ break;
204
+ }
205
+ case 'undefined': {
206
+ break;
207
+ }
208
+ default: {
209
+ resolvedStartMark = String(start);
210
+ }
211
+ }
212
+
213
+ const end = startMarkOrOptions.end;
214
+ switch (typeof end) {
215
+ case 'number': {
216
+ resolvedEndTime = end;
217
+ break;
218
+ }
219
+ case 'string': {
220
+ resolvedEndMark = end;
221
+ break;
222
+ }
223
+ case 'undefined': {
224
+ break;
225
+ }
226
+ default: {
227
+ resolvedEndMark = String(end);
228
+ }
229
+ }
230
+
231
+ const duration = startMarkOrOptions.duration;
232
+ switch (typeof duration) {
233
+ case 'number': {
234
+ resolvedDuration = duration;
235
+ break;
236
+ }
237
+ case 'undefined':
238
+ break;
239
+ default: {
240
+ resolvedDuration = Number(duration);
241
+ if (!Number.isFinite(resolvedDuration)) {
242
+ throw new TypeError(
243
+ `Failed to execute 'measure' on 'Performance': Failed to read the 'duration' property from 'PerformanceMeasureOptions': The provided double value is non-finite.`,
244
+ );
245
+ }
246
+ }
247
+ }
248
+
249
+ if (
250
+ resolvedDuration != null &&
251
+ (resolvedEndMark != null || resolvedEndTime != null)
252
+ ) {
253
+ throw new TypeError(
254
+ `Failed to execute 'measure' on 'Performance': If a non-empty PerformanceMeasureOptions object was passed, it must not have all of its 'start', 'duration', and 'end' properties defined`,
255
+ );
256
+ }
257
+
258
+ const detail = startMarkOrOptions.detail;
259
+ if (detail != null) {
260
+ resolvedDetail = structuredClone(detail);
261
+ }
262
+
263
+ break;
264
+ }
265
+ case 'string': {
266
+ resolvedStartMark = startMarkOrOptions;
267
+
268
+ if (endMark !== undefined) {
269
+ resolvedEndMark = String(endMark);
270
+ }
271
+ break;
272
+ }
273
+ default: {
274
+ resolvedStartMark = String(startMarkOrOptions);
275
+ }
166
276
  }
167
- if (
168
- options.start !== undefined &&
169
- options.end !== undefined &&
170
- options.duration !== undefined
171
- ) {
172
- throw new TypeError(
173
- "Performance.measure: Can't have both start/end and duration explicitly in options",
174
- );
175
- }
176
-
177
- if (typeof options.start === 'number') {
178
- startTime = options.start;
179
- } else {
180
- startMarkName = options.start;
181
- }
182
-
183
- if (typeof options.end === 'number') {
184
- endTime = options.end;
185
- } else {
186
- endMarkName = options.end;
187
- }
188
-
189
- duration = options.duration ?? duration;
190
277
  }
191
278
 
192
- let computedStartTime = startTime;
193
- let computedDuration = duration;
279
+ let computedStartTime = 0;
280
+ let computedDuration = 0;
194
281
 
195
- if (NativePerformance?.measureWithResult) {
282
+ if (NativePerformance?.measure) {
283
+ try {
284
+ [computedStartTime, computedDuration] = NativePerformance.measure(
285
+ measureName,
286
+ resolvedStartTime,
287
+ resolvedEndTime,
288
+ resolvedDuration,
289
+ resolvedStartMark,
290
+ resolvedEndMark,
291
+ );
292
+ } catch (error) {
293
+ throw new DOMException(
294
+ "Failed to execute 'measure' on 'Performance': " + error.message,
295
+ 'SyntaxError',
296
+ );
297
+ }
298
+ } else if (NativePerformance?.measureWithResult) {
196
299
  try {
197
300
  [computedStartTime, computedDuration] =
198
301
  NativePerformance.measureWithResult(
199
302
  measureName,
200
- startTime,
201
- endTime,
202
- duration,
203
- startMarkName,
204
- endMarkName,
303
+ resolvedStartTime ?? 0,
304
+ resolvedEndTime ?? 0,
305
+ resolvedDuration,
306
+ resolvedStartMark,
307
+ resolvedEndMark,
205
308
  );
206
309
  } catch (error) {
207
310
  throw new DOMException(
@@ -216,7 +319,7 @@ export default class Performance {
216
319
  const measure = new PerformanceMeasure(measureName, {
217
320
  startTime: computedStartTime,
218
321
  duration: computedDuration ?? 0,
219
- detail: options?.detail,
322
+ detail: resolvedDetail,
220
323
  });
221
324
 
222
325
  return measure;
@@ -4,8 +4,8 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @format
8
7
  * @flow strict
8
+ * @format
9
9
  */
10
10
 
11
11
  // flowlint unsafe-getters-setters:off
@@ -29,10 +29,14 @@ export type PerformanceEntryJSON = {
29
29
  };
30
30
 
31
31
  export class PerformanceEntry {
32
- #name: string;
33
- #entryType: PerformanceEntryType;
34
- #startTime: DOMHighResTimeStamp;
35
- #duration: DOMHighResTimeStamp;
32
+ // We don't use private fields because they're significantly slower to
33
+ // initialize on construction and to access.
34
+ // We also need these to be protected so they can be initialized in subclasses
35
+ // where we avoid calling `super()` for performance reasons.
36
+ __name: string;
37
+ __entryType: PerformanceEntryType;
38
+ __startTime: DOMHighResTimeStamp;
39
+ __duration: DOMHighResTimeStamp;
36
40
 
37
41
  constructor(init: {
38
42
  name: string,
@@ -40,34 +44,34 @@ export class PerformanceEntry {
40
44
  startTime: DOMHighResTimeStamp,
41
45
  duration: DOMHighResTimeStamp,
42
46
  }) {
43
- this.#name = init.name;
44
- this.#entryType = init.entryType;
45
- this.#startTime = init.startTime;
46
- this.#duration = init.duration;
47
+ this.__name = init.name;
48
+ this.__entryType = init.entryType;
49
+ this.__startTime = init.startTime;
50
+ this.__duration = init.duration;
47
51
  }
48
52
 
49
53
  get name(): string {
50
- return this.#name;
54
+ return this.__name;
51
55
  }
52
56
 
53
57
  get entryType(): PerformanceEntryType {
54
- return this.#entryType;
58
+ return this.__entryType;
55
59
  }
56
60
 
57
61
  get startTime(): DOMHighResTimeStamp {
58
- return this.#startTime;
62
+ return this.__startTime;
59
63
  }
60
64
 
61
65
  get duration(): DOMHighResTimeStamp {
62
- return this.#duration;
66
+ return this.__duration;
63
67
  }
64
68
 
65
69
  toJSON(): PerformanceEntryJSON {
66
70
  return {
67
- name: this.#name,
68
- entryType: this.#entryType,
69
- startTime: this.#startTime,
70
- duration: this.#duration,
71
+ name: this.__name,
72
+ entryType: this.__entryType,
73
+ startTime: this.__startTime,
74
+ duration: this.__duration,
71
75
  };
72
76
  }
73
77
  }
@@ -4,8 +4,8 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @format
8
7
  * @flow strict
8
+ * @format
9
9
  */
10
10
 
11
11
  import type {
@@ -23,6 +23,7 @@ import {
23
23
  } from './internals/RawPerformanceEntry';
24
24
  import {warnNoNativePerformance} from './internals/Utilities';
25
25
  import NativePerformance from './specs/NativePerformance';
26
+ import nullthrows from 'nullthrows';
26
27
 
27
28
  export {PerformanceEntry} from './PerformanceEntry';
28
29
 
@@ -130,14 +131,16 @@ export class PerformanceObserver {
130
131
  this.#nativeObserverHandle = this.#createNativeObserver();
131
132
  }
132
133
 
134
+ const observerHandle = nullthrows(this.#nativeObserverHandle);
135
+
133
136
  if (options.entryTypes) {
134
137
  this.#type = 'multiple';
135
- NativePerformance.observe?.(this.#nativeObserverHandle, {
138
+ NativePerformance.observe?.(observerHandle, {
136
139
  entryTypes: options.entryTypes.map(performanceEntryTypeToRaw),
137
140
  });
138
141
  } else if (options.type) {
139
142
  this.#type = 'single';
140
- NativePerformance.observe?.(this.#nativeObserverHandle, {
143
+ NativePerformance.observe?.(observerHandle, {
141
144
  type: performanceEntryTypeToRaw(options.type),
142
145
  buffered: options.buffered,
143
146
  durationThreshold: options.durationThreshold,
@@ -158,37 +161,38 @@ export class PerformanceObserver {
158
161
  NativePerformance.disconnect(this.#nativeObserverHandle);
159
162
  }
160
163
 
161
- #createNativeObserver(): OpaqueNativeObserverHandle {
164
+ #createNativeObserver(): OpaqueNativeObserverHandle | null {
162
165
  if (!NativePerformance || !NativePerformance.createObserver) {
163
166
  warnNoNativePerformance();
164
- return;
167
+ return null;
165
168
  }
166
169
 
167
170
  this.#calledAtLeastOnce = false;
168
171
 
169
- return NativePerformance.createObserver(() => {
170
- const rawEntries = NativePerformance.takeRecords?.(
171
- this.#nativeObserverHandle,
172
- true, // sort records
173
- );
174
- if (!rawEntries) {
175
- return;
176
- }
177
-
178
- const entries = rawEntries.map(rawToPerformanceEntry);
179
- const entryList = new PerformanceObserverEntryList(entries);
180
-
181
- let droppedEntriesCount = 0;
182
- if (!this.#calledAtLeastOnce) {
183
- droppedEntriesCount =
184
- NativePerformance.getDroppedEntriesCount?.(
185
- this.#nativeObserverHandle,
186
- ) ?? 0;
187
- this.#calledAtLeastOnce = true;
188
- }
189
-
190
- this.#callback(entryList, this, {droppedEntriesCount});
191
- });
172
+ const observerHandle: OpaqueNativeObserverHandle =
173
+ NativePerformance.createObserver(() => {
174
+ const rawEntries = NativePerformance.takeRecords?.(
175
+ observerHandle,
176
+ true, // sort records
177
+ );
178
+ if (!rawEntries) {
179
+ return;
180
+ }
181
+
182
+ const entries = rawEntries.map(rawToPerformanceEntry);
183
+ const entryList = new PerformanceObserverEntryList(entries);
184
+
185
+ let droppedEntriesCount = 0;
186
+ if (!this.#calledAtLeastOnce) {
187
+ droppedEntriesCount =
188
+ NativePerformance.getDroppedEntriesCount?.(observerHandle) ?? 0;
189
+ this.#calledAtLeastOnce = true;
190
+ }
191
+
192
+ this.#callback(entryList, this, {droppedEntriesCount});
193
+ });
194
+
195
+ return observerHandle;
192
196
  }
193
197
 
194
198
  #validateObserveOptions(options: PerformanceObserverInit): void {