@office-iss/react-native-win32 0.71.4 → 0.72.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/.flowconfig +15 -3
  2. package/CHANGELOG.json +310 -40
  3. package/CHANGELOG.md +145 -23
  4. package/IntegrationTests/IntegrationTestHarnessTest.js +1 -0
  5. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +1 -1
  6. package/Libraries/Alert/Alert.d.ts +4 -4
  7. package/Libraries/Alert/Alert.win32.js +1 -0
  8. package/Libraries/Animated/Animated.d.ts +17 -6
  9. package/Libraries/Animated/NativeAnimatedHelper.js +18 -6
  10. package/Libraries/Animated/NativeAnimatedHelper.win32.js +606 -0
  11. package/Libraries/Animated/bezier.js +1 -1
  12. package/Libraries/Animated/components/AnimatedFlatList.js +8 -3
  13. package/Libraries/Animated/components/AnimatedScrollView.js +4 -1
  14. package/Libraries/Animated/components/AnimatedSectionList.js +12 -3
  15. package/Libraries/Animated/createAnimatedComponent.js +26 -239
  16. package/Libraries/Animated/nodes/AnimatedColor.js +47 -80
  17. package/Libraries/Animated/nodes/AnimatedInterpolation.js +167 -121
  18. package/Libraries/Animated/nodes/AnimatedNode.js +3 -5
  19. package/Libraries/Animated/nodes/AnimatedProps.js +7 -6
  20. package/Libraries/Animated/nodes/AnimatedStyle.js +42 -8
  21. package/Libraries/Animated/nodes/AnimatedTransform.js +1 -1
  22. package/Libraries/Animated/nodes/AnimatedValue.js +8 -12
  23. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -1
  24. package/Libraries/Animated/useAnimatedProps.js +7 -10
  25. package/Libraries/BatchedBridge/MessageQueue.js +2 -1
  26. package/Libraries/BatchedBridge/NativeModules.d.ts +1 -1
  27. package/Libraries/BatchedBridge/NativeModules.js +1 -0
  28. package/Libraries/Blob/Blob.js +4 -0
  29. package/Libraries/Blob/FileReader.js +30 -2
  30. package/Libraries/Blob/URL.js +3 -1
  31. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +2 -2
  32. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +2 -3
  33. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +2 -3
  34. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +6 -4
  35. package/Libraries/Components/Button.js +3 -2
  36. package/Libraries/Components/Button.win32.js +451 -0
  37. package/Libraries/Components/Clipboard/Clipboard.js +1 -1
  38. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -0
  39. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -0
  40. package/Libraries/Components/Pressable/Pressable.d.ts +1 -1
  41. package/Libraries/Components/Pressable/Pressable.js +1 -1
  42. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -0
  43. package/Libraries/Components/SafeAreaView/SafeAreaView.js +1 -2
  44. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +1 -2
  45. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +12 -6
  46. package/Libraries/Components/ScrollView/ScrollView.d.ts +2 -2
  47. package/Libraries/Components/ScrollView/ScrollView.js +149 -91
  48. package/Libraries/Components/ScrollView/ScrollView.win32.js +1939 -0
  49. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -6
  50. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +5 -7
  51. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +1 -1
  52. package/Libraries/Components/StatusBar/StatusBar.js +3 -0
  53. package/Libraries/Components/Switch/Switch.js +3 -1
  54. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +21 -11
  55. package/Libraries/Components/TextInput/InputAccessoryView.d.ts +1 -1
  56. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +11 -5
  57. package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +51 -0
  58. package/Libraries/Components/TextInput/TextInput.Types.win32.js +3 -0
  59. package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +1 -0
  60. package/Libraries/Components/TextInput/TextInput.d.ts +15 -5
  61. package/Libraries/Components/TextInput/TextInput.flow.js +1 -1
  62. package/Libraries/Components/TextInput/TextInput.js +130 -103
  63. package/Libraries/Components/TextInput/TextInput.win32.js +202 -890
  64. package/Libraries/Components/Touchable/Touchable.d.ts +1 -1
  65. package/Libraries/Components/Touchable/Touchable.flow.js +30 -4
  66. package/Libraries/Components/Touchable/Touchable.js +6 -3
  67. package/Libraries/Components/Touchable/Touchable.win32.js +6 -3
  68. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  69. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -2
  70. package/Libraries/Components/Touchable/TouchableOpacity.js +3 -0
  71. package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +1 -1
  72. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
  73. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +189 -0
  74. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +43 -0
  75. package/Libraries/Components/View/ReactNativeStyleAttributes.js +26 -0
  76. package/Libraries/Components/View/View.js +71 -45
  77. package/Libraries/Components/View/View.win32.js +38 -16
  78. package/Libraries/Components/View/ViewAccessibility.d.ts +6 -6
  79. package/Libraries/Components/View/ViewAccessibility.js +10 -1
  80. package/Libraries/Components/View/ViewAccessibility.win32.d.ts +5 -5
  81. package/Libraries/Components/View/ViewNativeComponent.js +32 -8
  82. package/Libraries/Components/View/ViewPropTypes.d.ts +1 -1
  83. package/Libraries/Components/View/ViewPropTypes.js +1 -1
  84. package/Libraries/Components/View/ViewPropTypes.win32.d.ts +1 -1
  85. package/Libraries/Components/View/ViewPropTypes.win32.js +1 -1
  86. package/Libraries/Core/Devtools/openFileInEditor.js +1 -0
  87. package/Libraries/Core/Devtools/openURLInBrowser.js +1 -0
  88. package/Libraries/Core/Devtools/parseErrorStack.js +2 -2
  89. package/Libraries/Core/Devtools/parseHermesStack.js +54 -34
  90. package/Libraries/Core/ExceptionsManager.js +2 -2
  91. package/Libraries/Core/InitializeCore.js +2 -1
  92. package/Libraries/Core/ReactNativeVersion.js +3 -3
  93. package/Libraries/Core/ReactNativeVersionCheck.js +1 -9
  94. package/Libraries/Core/ReactNativeVersionCheck.win32.js +1 -9
  95. package/Libraries/Core/Timers/JSTimers.js +1 -1
  96. package/Libraries/Core/Timers/immediateShim.js +1 -0
  97. package/Libraries/Core/Timers/queueMicrotask.js +1 -1
  98. package/Libraries/Core/setUpAlert.js +1 -1
  99. package/Libraries/Core/setUpDOM.js +18 -0
  100. package/Libraries/Core/setUpDeveloperTools.js +1 -1
  101. package/Libraries/Core/setUpGlobals.js +5 -2
  102. package/Libraries/Core/setUpNavigator.js +6 -5
  103. package/Libraries/Core/setUpPerformance.js +23 -13
  104. package/Libraries/Core/setUpReactDevTools.js +2 -0
  105. package/Libraries/Core/setUpSegmentFetcher.js +0 -41
  106. package/Libraries/Core/setUpTimers.js +2 -2
  107. package/Libraries/DOM/Geometry/DOMRect.js +82 -0
  108. package/Libraries/DOM/Geometry/DOMRectReadOnly.js +188 -0
  109. package/Libraries/DOM/Nodes/ReactNativeElement.js +75 -0
  110. package/Libraries/DOM/Nodes/ReadOnlyElement.js +89 -0
  111. package/Libraries/DOM/Nodes/ReadOnlyNode.js +167 -0
  112. package/Libraries/DOM/OldStyleCollections/ArrayLikeUtils.js +46 -0
  113. package/Libraries/DOM/OldStyleCollections/DOMRectList.js +76 -0
  114. package/Libraries/DOM/OldStyleCollections/HTMLCollection.js +82 -0
  115. package/Libraries/DOM/OldStyleCollections/NodeList.js +104 -0
  116. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +35 -0
  117. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +20 -0
  118. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +49 -0
  119. package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +35 -0
  120. package/Libraries/{Utilities/NativeDevSplitBundleLoader.js → DevToolsSettings/NativeDevToolsSettingsManager.js} +7 -2
  121. package/Libraries/EventEmitter/NativeEventEmitter.d.ts +1 -2
  122. package/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts +1 -2
  123. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +9 -1
  124. package/Libraries/Events/EventPolyfill.js +1 -1
  125. package/Libraries/Image/AssetRegistry.js +1 -1
  126. package/Libraries/Image/AssetSourceResolver.js +3 -3
  127. package/Libraries/Image/Image.android.js +4 -1
  128. package/Libraries/Image/Image.d.ts +63 -2
  129. package/Libraries/Image/Image.ios.js +3 -0
  130. package/Libraries/Image/Image.win32.js +3 -0
  131. package/Libraries/Image/ImageBackground.js +1 -0
  132. package/Libraries/Image/ImageProps.js +1 -1
  133. package/Libraries/Image/ImageViewNativeComponent.js +4 -4
  134. package/Libraries/Image/RelativeImageStub.js +1 -1
  135. package/Libraries/Image/TextInlineImageNativeComponent.js +1 -1
  136. package/Libraries/Image/resolveAssetSource.js +1 -1
  137. package/Libraries/Inspector/DevtoolsOverlay.js +29 -19
  138. package/Libraries/Inspector/ElementBox.js +4 -1
  139. package/Libraries/Inspector/Inspector.js +5 -6
  140. package/Libraries/Inspector/Inspector.win32.js +7 -6
  141. package/Libraries/Inspector/InspectorOverlay.js +3 -3
  142. package/Libraries/Inspector/InspectorOverlay.win32.js +2 -1
  143. package/Libraries/Inspector/NetworkOverlay.js +1 -1
  144. package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -1
  145. package/Libraries/Interaction/PanResponder.js +5 -6
  146. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -1
  147. package/Libraries/Linking/Linking.js +1 -4
  148. package/Libraries/Lists/FillRateHelper.js +4 -238
  149. package/Libraries/Lists/FlatList.d.ts +15 -22
  150. package/Libraries/Lists/FlatList.js +9 -6
  151. package/Libraries/Lists/SectionList.d.ts +10 -6
  152. package/Libraries/Lists/SectionList.js +5 -3
  153. package/Libraries/Lists/SectionListModern.js +3 -3
  154. package/Libraries/Lists/ViewabilityHelper.js +8 -344
  155. package/Libraries/Lists/VirtualizeUtils.js +4 -244
  156. package/Libraries/Lists/VirtualizedList.js +10 -1867
  157. package/Libraries/Lists/VirtualizedListContext.js +6 -104
  158. package/Libraries/Lists/VirtualizedSectionList.js +9 -602
  159. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +1 -0
  160. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  161. package/Libraries/LogBox/Data/LogBoxData.js +1 -1
  162. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  163. package/Libraries/LogBox/LogBox.js +1 -1
  164. package/Libraries/LogBox/UI/LogBoxInspector.js +1 -3
  165. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +168 -0
  166. package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +3 -0
  167. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +193 -0
  168. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -0
  169. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +2 -2
  170. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js +7 -3
  171. package/Libraries/LogBox/UI/LogBoxMessage.js +87 -5
  172. package/Libraries/LogBox/UI/LogBoxNotification.js +5 -7
  173. package/Libraries/Modal/Modal.js +2 -2
  174. package/Libraries/NativeComponent/BaseViewConfig.android.js +32 -12
  175. package/Libraries/NativeComponent/BaseViewConfig.ios.js +43 -19
  176. package/Libraries/NativeComponent/BaseViewConfig.win32.js +43 -19
  177. package/Libraries/NativeComponent/NativeComponentRegistryUnstable.js +4 -1
  178. package/Libraries/NativeComponent/ViewConfig.js +1 -0
  179. package/Libraries/NativeComponent/ViewConfigIgnore.js +1 -4
  180. package/Libraries/Network/RCTNetworking.android.js +2 -2
  181. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  182. package/Libraries/Network/RCTNetworking.win32.js +1 -1
  183. package/Libraries/Network/XMLHttpRequest.js +1 -1
  184. package/Libraries/Pressability/Pressability.js +11 -5
  185. package/Libraries/Pressability/Pressability.win32.js +9 -3
  186. package/Libraries/ReactNative/AppContainer.js +7 -1
  187. package/Libraries/ReactNative/AppRegistry.d.ts +1 -1
  188. package/Libraries/ReactNative/AppRegistry.js +10 -13
  189. package/Libraries/ReactNative/FabricUIManager.js +24 -8
  190. package/Libraries/ReactNative/NativeUIManager.js +5 -5
  191. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +10 -10
  192. package/Libraries/ReactNative/UIManager.js +142 -1
  193. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +5 -5
  194. package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -1
  195. package/Libraries/ReactNative/requireNativeComponent.d.ts +1 -1
  196. package/Libraries/ReactNative/requireNativeComponent.js +1 -1
  197. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -0
  198. package/Libraries/Renderer/implementations/ReactFabric-dev.js +26 -3
  199. package/Libraries/Renderer/implementations/ReactFabric-prod.js +13 -1
  200. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +13 -1
  201. package/Libraries/Renderer/public/ReactFabricPublicInstanceUtils.js +38 -0
  202. package/Libraries/Renderer/shims/ReactNativeTypes.js +38 -20
  203. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -7
  204. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  205. package/Libraries/Share/Share.js +1 -1
  206. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
  207. package/Libraries/StyleSheet/StyleSheet.js +1 -1
  208. package/Libraries/StyleSheet/StyleSheet.win32.js +1 -1
  209. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +115 -76
  210. package/Libraries/StyleSheet/StyleSheetTypes.js +188 -33
  211. package/Libraries/StyleSheet/flattenStyle.js +2 -0
  212. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  213. package/Libraries/StyleSheet/processColor.js +1 -1
  214. package/Libraries/Text/Text.d.ts +12 -2
  215. package/Libraries/Text/Text.js +50 -41
  216. package/Libraries/Text/TextProps.js +3 -4
  217. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
  218. package/Libraries/Types/CodegenTypes.js +1 -0
  219. package/Libraries/UTFSequence.js +3 -1
  220. package/Libraries/Utilities/Appearance.d.ts +10 -0
  221. package/Libraries/Utilities/Appearance.js +13 -0
  222. package/Libraries/Utilities/Dimensions.js +1 -1
  223. package/Libraries/Utilities/Dimensions.win32.js +1 -1
  224. package/Libraries/Utilities/GlobalPerformanceLogger.js +12 -1
  225. package/Libraries/Utilities/HMRClient.js +16 -10
  226. package/Libraries/Utilities/{createPerformanceLogger.d.ts → IPerformanceLogger.d.ts} +4 -4
  227. package/Libraries/Utilities/IPerformanceLogger.js +49 -0
  228. package/Libraries/Utilities/LoadingView.android.js +28 -11
  229. package/Libraries/Utilities/NativeAppearance.js +1 -0
  230. package/Libraries/Utilities/NativePlatformConstantsWin.js +1 -1
  231. package/Libraries/Utilities/PixelRatio.js +2 -2
  232. package/Libraries/Utilities/Platform.win32.js +1 -1
  233. package/Libraries/Utilities/ReactNativeTestTools.js +1 -1
  234. package/Libraries/Utilities/__mocks__/PixelRatio.js +1 -1
  235. package/Libraries/Utilities/codegenNativeCommands.js +2 -0
  236. package/Libraries/Utilities/createPerformanceLogger.js +55 -43
  237. package/Libraries/Utilities/stringifySafe.js +2 -7
  238. package/Libraries/Utilities/useColorScheme.js +1 -1
  239. package/Libraries/Utilities/useWindowDimensions.js +3 -3
  240. package/Libraries/WebPerformance/EventCounts.js +78 -0
  241. package/Libraries/WebPerformance/MemoryInfo.js +54 -0
  242. package/Libraries/WebPerformance/NativePerformance.js +38 -0
  243. package/Libraries/WebPerformance/NativePerformanceObserver.js +22 -7
  244. package/Libraries/WebPerformance/Performance.js +312 -0
  245. package/Libraries/WebPerformance/PerformanceEntry.js +45 -0
  246. package/Libraries/WebPerformance/PerformanceEventTiming.js +38 -0
  247. package/Libraries/WebPerformance/PerformanceObserver.js +196 -101
  248. package/Libraries/WebPerformance/RawPerformanceEntry.js +87 -0
  249. package/Libraries/WebPerformance/ReactNativeStartupTiming.js +65 -0
  250. package/Libraries/WebPerformance/__mocks__/NativePerformance.js +65 -0
  251. package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +101 -0
  252. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
  253. package/Libraries/vendor/core/ErrorUtils.js +1 -1
  254. package/Libraries/vendor/emitter/EventEmitter.d.ts +2 -2
  255. package/Libraries/vendor/emitter/EventEmitter.js +9 -1
  256. package/flow/global.js +29 -4
  257. package/flow/jest.js +258 -164
  258. package/index.js +56 -42
  259. package/index.win32.js +56 -42
  260. package/interface.js +1 -1
  261. package/jest/local-setup.js +33 -0
  262. package/jest/mockComponent.js +4 -2
  263. package/jest/mockNativeComponent.js +1 -1
  264. package/jest/mockScrollView.js +2 -1
  265. package/jest/react-native-env.js +1 -3
  266. package/jest/setup.js +11 -8
  267. package/overrides.json +115 -85
  268. package/package.json +38 -28
  269. package/rn-get-polyfills.js +1 -1
  270. package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +68 -0
  271. package/src/Libraries/Components/View/ViewAccessibility.win32.d.ts +5 -5
  272. package/src/Libraries/Components/View/ViewPropTypes.win32.d.ts +1 -1
  273. package/types/index.d.ts +2 -6
  274. package/types/modules/Codegen.d.ts +4 -4
  275. package/types/modules/globals.d.ts +27 -25
  276. package/types/public/DeprecatedPropertiesAlias.d.ts +0 -20
  277. package/types/public/ReactNativeRenderer.d.ts +2 -7
  278. package/Libraries/Animated/createAnimatedComponentInjection.js +0 -48
  279. package/Libraries/Animated/createAnimatedComponent_EXPERIMENTAL.js +0 -48
  280. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.flow.js +0 -208
  281. package/Libraries/Components/ActivityIndicator/ActivityIndicator.flow.js +0 -58
  282. package/Libraries/Components/DatePicker/DatePickerIOS.android.js +0 -47
  283. package/Libraries/Components/DatePicker/DatePickerIOS.d.ts +0 -92
  284. package/Libraries/Components/DatePicker/DatePickerIOS.flow.android.js +0 -14
  285. package/Libraries/Components/DatePicker/DatePickerIOS.flow.ios.js +0 -113
  286. package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +0 -242
  287. package/Libraries/Components/DatePicker/DatePickerIOS.win32.js +0 -47
  288. package/Libraries/Components/DatePicker/RCTDatePickerNativeComponent.js +0 -60
  289. package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +0 -26
  290. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.android.js +0 -45
  291. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.d.ts +0 -62
  292. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.ios.js +0 -75
  293. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.win32.js +0 -45
  294. package/Libraries/Components/ProgressViewIOS/RCTProgressViewNativeComponent.js +0 -33
  295. package/Libraries/Components/SafeAreaView/SafeAreaView.flow.js +0 -19
  296. package/Libraries/Components/Slider/Slider.d.ts +0 -132
  297. package/Libraries/Components/Slider/Slider.js +0 -282
  298. package/Libraries/Components/Slider/SliderNativeComponent.js +0 -56
  299. package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +0 -23
  300. package/Libraries/Interaction/Batchinator.js +0 -76
  301. package/Libraries/Interaction/BridgeSpyStallHandler.js +0 -63
  302. package/Libraries/Interaction/InteractionStallDebugger.js +0 -23
  303. package/Libraries/Interaction/PanResponder.flow.js +0 -257
  304. package/Libraries/Lists/CellRenderMask.js +0 -155
  305. package/Libraries/Lists/ChildListCollection.js +0 -72
  306. package/Libraries/Lists/StateSafePureComponent.js +0 -85
  307. package/Libraries/Lists/VirtualizedList.d.ts +0 -347
  308. package/Libraries/Lists/VirtualizedListCellRenderer.js +0 -259
  309. package/Libraries/Lists/VirtualizedListProps.js +0 -279
  310. package/Libraries/Performance/PureComponentDebug.js +0 -74
  311. package/Libraries/Reliability/UserFlow.js +0 -158
  312. package/Libraries/Renderer/implementations/ReactNativeRenderer.d.ts +0 -149
  313. package/Libraries/Renderer/shims/ReactNativeTypes.d.ts +0 -141
  314. package/Libraries/Utilities/MatrixMath.js +0 -748
  315. package/Libraries/Utilities/buildStyleInterpolator.js +0 -209
  316. package/Libraries/Utilities/clamp.js +0 -23
  317. package/Libraries/Utilities/deprecatedPropType.js +0 -36
  318. package/Libraries/Utilities/groupByEveryN.js +0 -51
  319. package/Libraries/Utilities/mergeIntoFast.js +0 -26
  320. package/Libraries/Utilities/setAndForwardRef.js +0 -71
  321. package/Libraries/Utilities/truncate.js +0 -51
  322. package/flow/JSITimerInternalType.js +0 -30
  323. package/flow/use-sync-external-store.js +0 -19
@@ -8,62 +8,15 @@
8
8
  * @flow strict
9
9
  */
10
10
 
11
- import type {
12
- RawPerformanceEntry,
13
- RawPerformanceEntryType,
14
- } from './NativePerformanceObserver';
11
+ import type {HighResTimeStamp, PerformanceEntryType} from './PerformanceEntry';
15
12
 
16
13
  import warnOnce from '../Utilities/warnOnce';
17
14
  import NativePerformanceObserver from './NativePerformanceObserver';
18
-
19
- export type HighResTimeStamp = number;
20
- // TODO: Extend once new types (such as event) are supported.
21
- // TODO: Get rid of the "undefined" once there is at least one type supported.
22
- export type PerformanceEntryType = 'undefined';
23
-
24
- export class PerformanceEntry {
25
- name: string;
26
- entryType: PerformanceEntryType;
27
- startTime: HighResTimeStamp;
28
- duration: number;
29
-
30
- constructor(init: {
31
- name: string,
32
- entryType: PerformanceEntryType,
33
- startTime: HighResTimeStamp,
34
- duration: number,
35
- }) {
36
- this.name = init.name;
37
- this.entryType = init.entryType;
38
- this.startTime = init.startTime;
39
- this.duration = init.duration;
40
- }
41
-
42
- // $FlowIgnore: Flow(unclear-type)
43
- toJSON(): Object {
44
- return {
45
- name: this.name,
46
- entryType: this.entryType,
47
- startTime: this.startTime,
48
- duration: this.duration,
49
- };
50
- }
51
- }
52
-
53
- function rawToPerformanceEntryType(
54
- type: RawPerformanceEntryType,
55
- ): PerformanceEntryType {
56
- return 'undefined';
57
- }
58
-
59
- function rawToPerformanceEntry(entry: RawPerformanceEntry): PerformanceEntry {
60
- return new PerformanceEntry({
61
- name: entry.name,
62
- entryType: rawToPerformanceEntryType(entry.entryType),
63
- startTime: entry.startTime,
64
- duration: entry.duration,
65
- });
66
- }
15
+ import {PerformanceEntry} from './PerformanceEntry';
16
+ import {
17
+ performanceEntryTypeToRaw,
18
+ rawToPerformanceEntry,
19
+ } from './RawPerformanceEntry';
67
20
 
68
21
  export type PerformanceEntryList = $ReadOnlyArray<PerformanceEntry>;
69
22
 
@@ -99,6 +52,8 @@ export class PerformanceObserverEntryList {
99
52
  export type PerformanceObserverCallback = (
100
53
  list: PerformanceObserverEntryList,
101
54
  observer: PerformanceObserver,
55
+ // The number of buffered entries which got dropped from the buffer due to the buffer being full:
56
+ droppedEntryCount?: number,
102
57
  ) => void;
103
58
 
104
59
  export type PerformanceObserverInit =
@@ -107,21 +62,73 @@ export type PerformanceObserverInit =
107
62
  }
108
63
  | {
109
64
  type: PerformanceEntryType,
65
+ durationThreshold?: HighResTimeStamp,
110
66
  };
111
67
 
112
- let _observedEntryTypeRefCount: Map<PerformanceEntryType, number> = new Map();
68
+ type PerformanceObserverConfig = {|
69
+ callback: PerformanceObserverCallback,
70
+ // Map of {entryType: durationThreshold}
71
+ entryTypes: $ReadOnlyMap<PerformanceEntryType, ?number>,
72
+ |};
113
73
 
114
- let _observers: Set<PerformanceObserver> = new Set();
74
+ const observerCountPerEntryType: Map<PerformanceEntryType, number> = new Map();
75
+ const registeredObservers: Map<PerformanceObserver, PerformanceObserverConfig> =
76
+ new Map();
77
+ let isOnPerformanceEntryCallbackSet: boolean = false;
115
78
 
116
- let _onPerformanceEntryCallbackIsSet: boolean = false;
79
+ // This is a callback that gets scheduled and periodically called from the native side
80
+ const onPerformanceEntry = () => {
81
+ if (!NativePerformanceObserver) {
82
+ return;
83
+ }
84
+ const entryResult = NativePerformanceObserver.popPendingEntries();
85
+ const rawEntries = entryResult?.entries ?? [];
86
+ const droppedEntriesCount = entryResult?.droppedEntriesCount;
87
+ if (rawEntries.length === 0) {
88
+ return;
89
+ }
90
+ const entries = rawEntries.map(rawToPerformanceEntry);
91
+ for (const [observer, observerConfig] of registeredObservers.entries()) {
92
+ const entriesForObserver: PerformanceEntryList = entries.filter(entry => {
93
+ if (!observerConfig.entryTypes.has(entry.entryType)) {
94
+ return false;
95
+ }
96
+ const durationThreshold = observerConfig.entryTypes.get(entry.entryType);
97
+ return entry.duration >= (durationThreshold ?? 0);
98
+ });
99
+ observerConfig.callback(
100
+ new PerformanceObserverEntryList(entriesForObserver),
101
+ observer,
102
+ droppedEntriesCount,
103
+ );
104
+ }
105
+ };
117
106
 
118
- function warnNoNativePerformanceObserver() {
107
+ export function warnNoNativePerformanceObserver() {
119
108
  warnOnce(
120
109
  'missing-native-performance-observer',
121
110
  'Missing native implementation of PerformanceObserver',
122
111
  );
123
112
  }
124
113
 
114
+ function applyDurationThresholds() {
115
+ const durationThresholds: Map<PerformanceEntryType, ?number> = Array.from(
116
+ registeredObservers.values(),
117
+ )
118
+ .map(config => config.entryTypes)
119
+ .reduce(
120
+ (accumulator, currentValue) => union(accumulator, currentValue),
121
+ new Map(),
122
+ );
123
+
124
+ for (const [entryType, durationThreshold] of durationThresholds) {
125
+ NativePerformanceObserver?.setDurationThreshold(
126
+ performanceEntryTypeToRaw(entryType),
127
+ durationThreshold ?? 0,
128
+ );
129
+ }
130
+ }
131
+
125
132
  /**
126
133
  * Implementation of the PerformanceObserver interface for RN,
127
134
  * corresponding to the standard in https://www.w3.org/TR/performance-timeline/
@@ -144,38 +151,77 @@ function warnNoNativePerformanceObserver() {
144
151
  */
145
152
  export default class PerformanceObserver {
146
153
  _callback: PerformanceObserverCallback;
147
- _entryTypes: $ReadOnlySet<PerformanceEntryType>;
154
+ _type: 'single' | 'multiple' | void;
148
155
 
149
156
  constructor(callback: PerformanceObserverCallback) {
150
157
  this._callback = callback;
151
158
  }
152
159
 
153
- observe(options: PerformanceObserverInit) {
160
+ observe(options: PerformanceObserverInit): void {
154
161
  if (!NativePerformanceObserver) {
155
162
  warnNoNativePerformanceObserver();
156
163
  return;
157
164
  }
158
- if (!_onPerformanceEntryCallbackIsSet) {
165
+
166
+ this._validateObserveOptions(options);
167
+
168
+ let requestedEntryTypes;
169
+
170
+ if (options.entryTypes) {
171
+ this._type = 'multiple';
172
+ requestedEntryTypes = new Map(
173
+ options.entryTypes.map(t => [t, undefined]),
174
+ );
175
+ } else {
176
+ this._type = 'single';
177
+ requestedEntryTypes = new Map([
178
+ [options.type, options.durationThreshold],
179
+ ]);
180
+ }
181
+
182
+ // The same observer may receive multiple calls to "observe", so we need
183
+ // to check what is new on this call vs. previous ones.
184
+ const currentEntryTypes = registeredObservers.get(this)?.entryTypes;
185
+ const nextEntryTypes = currentEntryTypes
186
+ ? union(requestedEntryTypes, currentEntryTypes)
187
+ : requestedEntryTypes;
188
+
189
+ // This `observe` call is a no-op because there are no new things to observe.
190
+ if (currentEntryTypes && currentEntryTypes.size === nextEntryTypes.size) {
191
+ return;
192
+ }
193
+
194
+ registeredObservers.set(this, {
195
+ callback: this._callback,
196
+ entryTypes: nextEntryTypes,
197
+ });
198
+
199
+ if (!isOnPerformanceEntryCallbackSet) {
159
200
  NativePerformanceObserver.setOnPerformanceEntryCallback(
160
201
  onPerformanceEntry,
161
202
  );
162
- _onPerformanceEntryCallbackIsSet = true;
163
- }
164
- if (options.entryTypes) {
165
- this._entryTypes = new Set(options.entryTypes);
166
- } else {
167
- this._entryTypes = new Set([options.type]);
203
+ isOnPerformanceEntryCallbackSet = true;
168
204
  }
169
- this._entryTypes.forEach(type => {
170
- if (!_observedEntryTypeRefCount.has(type)) {
171
- NativePerformanceObserver.startReporting(type);
205
+
206
+ // We only need to start listenening to new entry types being observed in
207
+ // this observer.
208
+ const newEntryTypes = currentEntryTypes
209
+ ? difference(
210
+ new Set(requestedEntryTypes.keys()),
211
+ new Set(currentEntryTypes.keys()),
212
+ )
213
+ : new Set(requestedEntryTypes.keys());
214
+ for (const type of newEntryTypes) {
215
+ if (!observerCountPerEntryType.has(type)) {
216
+ const rawType = performanceEntryTypeToRaw(type);
217
+ NativePerformanceObserver.startReporting(rawType);
172
218
  }
173
- _observedEntryTypeRefCount.set(
219
+ observerCountPerEntryType.set(
174
220
  type,
175
- (_observedEntryTypeRefCount.get(type) ?? 0) + 1,
221
+ (observerCountPerEntryType.get(type) ?? 0) + 1,
176
222
  );
177
- });
178
- _observers.add(this);
223
+ }
224
+ applyDurationThresholds();
179
225
  }
180
226
 
181
227
  disconnect(): void {
@@ -183,41 +229,90 @@ export default class PerformanceObserver {
183
229
  warnNoNativePerformanceObserver();
184
230
  return;
185
231
  }
186
- this._entryTypes.forEach(type => {
187
- const entryTypeRefCount = _observedEntryTypeRefCount.get(type) ?? 0;
188
- if (entryTypeRefCount === 1) {
189
- _observedEntryTypeRefCount.delete(type);
190
- NativePerformanceObserver.stopReporting(type);
191
- } else if (entryTypeRefCount !== 0) {
192
- _observedEntryTypeRefCount.set(type, entryTypeRefCount - 1);
232
+
233
+ const observerConfig = registeredObservers.get(this);
234
+ if (!observerConfig) {
235
+ return;
236
+ }
237
+
238
+ // Disconnect this observer
239
+ for (const type of observerConfig.entryTypes.keys()) {
240
+ const numberOfObserversForThisType =
241
+ observerCountPerEntryType.get(type) ?? 0;
242
+ if (numberOfObserversForThisType === 1) {
243
+ observerCountPerEntryType.delete(type);
244
+ NativePerformanceObserver.stopReporting(
245
+ performanceEntryTypeToRaw(type),
246
+ );
247
+ } else if (numberOfObserversForThisType !== 0) {
248
+ observerCountPerEntryType.set(type, numberOfObserversForThisType - 1);
193
249
  }
194
- });
195
- _observers.delete(this);
196
- if (_observers.size === 0) {
250
+ }
251
+
252
+ // Disconnect all observers if this was the last one
253
+ registeredObservers.delete(this);
254
+ if (registeredObservers.size === 0) {
197
255
  NativePerformanceObserver.setOnPerformanceEntryCallback(undefined);
198
- _onPerformanceEntryCallbackIsSet = false;
256
+ isOnPerformanceEntryCallbackSet = false;
257
+ }
258
+
259
+ applyDurationThresholds();
260
+ }
261
+
262
+ _validateObserveOptions(options: PerformanceObserverInit): void {
263
+ const {type, entryTypes, durationThreshold} = options;
264
+
265
+ if (!type && !entryTypes) {
266
+ throw new TypeError(
267
+ "Failed to execute 'observe' on 'PerformanceObserver': An observe() call must not include both entryTypes and type arguments.",
268
+ );
269
+ }
270
+
271
+ if (entryTypes && type) {
272
+ throw new TypeError(
273
+ "Failed to execute 'observe' on 'PerformanceObserver': An observe() call must include either entryTypes or type arguments.",
274
+ );
275
+ }
276
+
277
+ if (this._type === 'multiple' && type) {
278
+ throw new Error(
279
+ "Failed to execute 'observe' on 'PerformanceObserver': This observer has performed observe({entryTypes:...}, therefore it cannot perform observe({type:...})",
280
+ );
281
+ }
282
+
283
+ if (this._type === 'single' && entryTypes) {
284
+ throw new Error(
285
+ "Failed to execute 'observe' on 'PerformanceObserver': This PerformanceObserver has performed observe({type:...}, therefore it cannot perform observe({entryTypes:...})",
286
+ );
287
+ }
288
+
289
+ if (entryTypes && durationThreshold !== undefined) {
290
+ throw new TypeError(
291
+ "Failed to execute 'observe' on 'PerformanceObserver': An observe() call must not include both entryTypes and durationThreshold arguments.",
292
+ );
199
293
  }
200
294
  }
201
295
 
202
296
  static supportedEntryTypes: $ReadOnlyArray<PerformanceEntryType> =
203
- // TODO: add types once they are fully supported
204
- Object.freeze([]);
297
+ Object.freeze(['mark', 'measure', 'event']);
205
298
  }
206
299
 
207
- // This is a callback that gets scheduled and periodically called from the native side
208
- function onPerformanceEntry() {
209
- if (!NativePerformanceObserver) {
210
- return;
300
+ // As a Set union, except if value exists in both, we take minimum
301
+ function union<T>(
302
+ a: $ReadOnlyMap<T, ?number>,
303
+ b: $ReadOnlyMap<T, ?number>,
304
+ ): Map<T, ?number> {
305
+ const res = new Map<T, ?number>();
306
+ for (const [k, v] of a) {
307
+ if (!b.has(k)) {
308
+ res.set(k, v);
309
+ } else {
310
+ res.set(k, Math.min(v ?? 0, b.get(k) ?? 0));
311
+ }
211
312
  }
212
- const rawEntries = NativePerformanceObserver.getPendingEntries();
213
- const entries = rawEntries.map(rawToPerformanceEntry);
214
- _observers.forEach(observer => {
215
- const entriesForObserver: PerformanceEntryList = entries.filter(entry =>
216
- observer._entryTypes.has(entry.entryType),
217
- );
218
- observer._callback(
219
- new PerformanceObserverEntryList(entriesForObserver),
220
- observer,
221
- );
222
- });
313
+ return res;
314
+ }
315
+
316
+ function difference<T>(a: $ReadOnlySet<T>, b: $ReadOnlySet<T>): Set<T> {
317
+ return new Set([...a].filter(x => !b.has(x)));
223
318
  }
@@ -0,0 +1,87 @@
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
+ * @format
8
+ * @flow strict
9
+ */
10
+
11
+ import type {
12
+ RawPerformanceEntry,
13
+ RawPerformanceEntryType,
14
+ } from './NativePerformanceObserver';
15
+ import type {PerformanceEntryType} from './PerformanceEntry';
16
+
17
+ import {PerformanceEntry} from './PerformanceEntry';
18
+ import {PerformanceEventTiming} from './PerformanceEventTiming';
19
+
20
+ export const RawPerformanceEntryTypeValues = {
21
+ UNDEFINED: 0,
22
+ MARK: 1,
23
+ MEASURE: 2,
24
+ EVENT: 3,
25
+ };
26
+
27
+ export function rawToPerformanceEntry(
28
+ entry: RawPerformanceEntry,
29
+ ): PerformanceEntry {
30
+ if (entry.entryType === RawPerformanceEntryTypeValues.EVENT) {
31
+ return new PerformanceEventTiming({
32
+ name: entry.name,
33
+ startTime: entry.startTime,
34
+ duration: entry.duration,
35
+ processingStart: entry.processingStart,
36
+ processingEnd: entry.processingEnd,
37
+ interactionId: entry.interactionId,
38
+ });
39
+ } else {
40
+ return new PerformanceEntry({
41
+ name: entry.name,
42
+ entryType: rawToPerformanceEntryType(entry.entryType),
43
+ startTime: entry.startTime,
44
+ duration: entry.duration,
45
+ });
46
+ }
47
+ }
48
+
49
+ export function rawToPerformanceEntryType(
50
+ type: RawPerformanceEntryType,
51
+ ): PerformanceEntryType {
52
+ switch (type) {
53
+ case RawPerformanceEntryTypeValues.MARK:
54
+ return 'mark';
55
+ case RawPerformanceEntryTypeValues.MEASURE:
56
+ return 'measure';
57
+ case RawPerformanceEntryTypeValues.EVENT:
58
+ return 'event';
59
+ case RawPerformanceEntryTypeValues.UNDEFINED:
60
+ throw new TypeError(
61
+ "rawToPerformanceEntryType: UNDEFINED can't be cast to PerformanceEntryType",
62
+ );
63
+ default:
64
+ throw new TypeError(
65
+ `rawToPerformanceEntryType: unexpected performance entry type received: ${type}`,
66
+ );
67
+ }
68
+ }
69
+
70
+ export function performanceEntryTypeToRaw(
71
+ type: PerformanceEntryType,
72
+ ): RawPerformanceEntryType {
73
+ switch (type) {
74
+ case 'mark':
75
+ return RawPerformanceEntryTypeValues.MARK;
76
+ case 'measure':
77
+ return RawPerformanceEntryTypeValues.MEASURE;
78
+ case 'event':
79
+ return RawPerformanceEntryTypeValues.EVENT;
80
+ default:
81
+ // Verify exhaustive check with Flow
82
+ (type: empty);
83
+ throw new TypeError(
84
+ `performanceEntryTypeToRaw: unexpected performance entry type received: ${type}`,
85
+ );
86
+ }
87
+ }
@@ -0,0 +1,65 @@
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
+ * @flow strict
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ // flowlint unsafe-getters-setters:off
13
+
14
+ import type {ReactNativeStartupTiming as ReactNativeStartupTimingType} from './NativePerformance';
15
+
16
+ // Read-only object with RN startup timing information.
17
+ // This is returned by the performance.reactNativeStartup API.
18
+ export default class ReactNativeStartupTiming {
19
+ // All time information here are in ms. To match web spec,
20
+ // the default value for timings are zero if not present.
21
+ // See https://www.w3.org/TR/performance-timeline/#performancetiming-interface
22
+ _startTime = 0;
23
+ _endTime = 0;
24
+ _executeJavaScriptBundleEntryPointStart = 0;
25
+ _executeJavaScriptBundleEntryPointEnd = 0;
26
+
27
+ constructor(startUpTiming: ?ReactNativeStartupTimingType) {
28
+ if (startUpTiming != null) {
29
+ this._startTime = startUpTiming.startTime;
30
+ this._endTime = startUpTiming.endTime;
31
+ this._executeJavaScriptBundleEntryPointStart =
32
+ startUpTiming.executeJavaScriptBundleEntryPointStart;
33
+ this._executeJavaScriptBundleEntryPointEnd =
34
+ startUpTiming.executeJavaScriptBundleEntryPointEnd;
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Start time of the RN app startup process. This is provided by the platform by implementing the `ReactMarker.setAppStartTime` API in the native platform code.
40
+ */
41
+ get startTime(): number {
42
+ return this._startTime;
43
+ }
44
+
45
+ /**
46
+ * End time of the RN app startup process. This is equal to `executeJavaScriptBundleEntryPointEnd`.
47
+ */
48
+ get endTime(): number {
49
+ return this._endTime;
50
+ }
51
+
52
+ /**
53
+ * Start time of JS bundle being executed. This indicates the RN JS bundle is loaded and start to be evaluated.
54
+ */
55
+ get executeJavaScriptBundleEntryPointStart(): number {
56
+ return this._executeJavaScriptBundleEntryPointStart;
57
+ }
58
+
59
+ /**
60
+ * End time of JS bundle being executed. This indicates all the synchronous entry point jobs are finished.
61
+ */
62
+ get executeJavaScriptBundleEntryPointEnd(): number {
63
+ return this._executeJavaScriptBundleEntryPointEnd;
64
+ }
65
+ }
@@ -0,0 +1,65 @@
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
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ import type {
12
+ NativeMemoryInfo,
13
+ ReactNativeStartupTiming,
14
+ Spec as NativePerformance,
15
+ } from '../NativePerformance';
16
+
17
+ import NativePerformanceObserver from '../NativePerformanceObserver';
18
+ import {RawPerformanceEntryTypeValues} from '../RawPerformanceEntry';
19
+
20
+ const marks: Map<string, number> = new Map();
21
+
22
+ const NativePerformanceMock: NativePerformance = {
23
+ mark: (name: string, startTime: number, duration: number): void => {
24
+ NativePerformanceObserver?.logRawEntry({
25
+ name,
26
+ entryType: RawPerformanceEntryTypeValues.MARK,
27
+ startTime,
28
+ duration,
29
+ });
30
+ marks.set(name, startTime);
31
+ },
32
+
33
+ measure: (
34
+ name: string,
35
+ startTime: number,
36
+ endTime: number,
37
+ duration?: number,
38
+ startMark?: string,
39
+ endMark?: string,
40
+ ): void => {
41
+ const start = startMark != null ? marks.get(startMark) ?? 0 : startTime;
42
+ const end = endMark != null ? marks.get(endMark) ?? 0 : endTime;
43
+ NativePerformanceObserver?.logRawEntry({
44
+ name,
45
+ entryType: RawPerformanceEntryTypeValues.MEASURE,
46
+ startTime: start,
47
+ duration: duration ?? (end ? end - start : 0),
48
+ });
49
+ },
50
+
51
+ getSimpleMemoryInfo: (): NativeMemoryInfo => {
52
+ return {};
53
+ },
54
+
55
+ getReactNativeStartupTiming: (): ReactNativeStartupTiming => {
56
+ return {
57
+ startTime: 0,
58
+ endTime: 0,
59
+ executeJavaScriptBundleEntryPointStart: 0,
60
+ executeJavaScriptBundleEntryPointEnd: 0,
61
+ };
62
+ },
63
+ };
64
+
65
+ export default NativePerformanceMock;
@@ -0,0 +1,101 @@
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
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ import type {
12
+ GetPendingEntriesResult,
13
+ RawPerformanceEntry,
14
+ RawPerformanceEntryType,
15
+ Spec as NativePerformanceObserver,
16
+ } from '../NativePerformanceObserver';
17
+
18
+ import {RawPerformanceEntryTypeValues} from '../RawPerformanceEntry';
19
+
20
+ const reportingType: Set<RawPerformanceEntryType> = new Set();
21
+ const eventCounts: Map<string, number> = new Map();
22
+ const durationThresholds: Map<RawPerformanceEntryType, number> = new Map();
23
+ let entries: Array<RawPerformanceEntry> = [];
24
+ let onPerformanceEntryCallback: ?() => void;
25
+
26
+ const NativePerformanceObserverMock: NativePerformanceObserver = {
27
+ startReporting: (entryType: RawPerformanceEntryType) => {
28
+ reportingType.add(entryType);
29
+ },
30
+
31
+ stopReporting: (entryType: RawPerformanceEntryType) => {
32
+ reportingType.delete(entryType);
33
+ durationThresholds.delete(entryType);
34
+ },
35
+
36
+ popPendingEntries: (): GetPendingEntriesResult => {
37
+ const res = entries;
38
+ entries = [];
39
+ return {
40
+ droppedEntriesCount: 0,
41
+ entries: res,
42
+ };
43
+ },
44
+
45
+ setOnPerformanceEntryCallback: (callback?: () => void) => {
46
+ onPerformanceEntryCallback = callback;
47
+ },
48
+
49
+ logRawEntry: (entry: RawPerformanceEntry) => {
50
+ if (reportingType.has(entry.entryType)) {
51
+ const durationThreshold = durationThresholds.get(entry.entryType);
52
+ if (
53
+ durationThreshold !== undefined &&
54
+ entry.duration < durationThreshold
55
+ ) {
56
+ return;
57
+ }
58
+ entries.push(entry);
59
+ // $FlowFixMe[incompatible-call]
60
+ global.queueMicrotask(() => {
61
+ // We want to emulate the way it's done in native (i.e. async/batched)
62
+ onPerformanceEntryCallback?.();
63
+ });
64
+ }
65
+ if (entry.entryType === RawPerformanceEntryTypeValues.EVENT) {
66
+ eventCounts.set(entry.name, (eventCounts.get(entry.name) ?? 0) + 1);
67
+ }
68
+ },
69
+
70
+ getEventCounts: (): $ReadOnlyArray<[string, number]> => {
71
+ return Array.from(eventCounts.entries());
72
+ },
73
+
74
+ setDurationThreshold: (
75
+ entryType: RawPerformanceEntryType,
76
+ durationThreshold: number,
77
+ ) => {
78
+ durationThresholds.set(entryType, durationThreshold);
79
+ },
80
+
81
+ clearEntries: (entryType: RawPerformanceEntryType, entryName?: string) => {
82
+ entries = entries.filter(
83
+ e =>
84
+ e.entryType === entryType &&
85
+ (entryName == null || e.name === entryName),
86
+ );
87
+ },
88
+
89
+ getEntries: (
90
+ entryType?: RawPerformanceEntryType,
91
+ entryName?: string,
92
+ ): $ReadOnlyArray<RawPerformanceEntry> => {
93
+ return entries.filter(
94
+ e =>
95
+ (entryType == null || e.entryType === entryType) &&
96
+ (entryName == null || e.name === entryName),
97
+ );
98
+ },
99
+ };
100
+
101
+ export default NativePerformanceObserverMock;
@@ -12,7 +12,7 @@
12
12
 
13
13
  import type {IgnorePattern} from '../LogBox/Data/LogBoxData';
14
14
 
15
- const LogBox = require('../LogBox/LogBox');
15
+ const LogBox = require('../LogBox/LogBox').default;
16
16
  const React = require('react');
17
17
 
18
18
  type Props = $ReadOnly<{||}>;