@office-iss/react-native-win32 0.72.7 → 0.73.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 (272) hide show
  1. package/.flowconfig +15 -4
  2. package/CHANGELOG.json +523 -94
  3. package/CHANGELOG.md +209 -52
  4. package/IntegrationTests/PromiseTest.js +1 -0
  5. package/IntegrationTests/websocket_integration_test_server.js +1 -1
  6. package/Libraries/Animated/Animated.js +1 -1
  7. package/Libraries/Animated/AnimatedImplementation.js +1 -1
  8. package/Libraries/Animated/NativeAnimatedHelper.js +14 -10
  9. package/Libraries/Animated/NativeAnimatedHelper.win32.js +16 -12
  10. package/Libraries/Animated/NativeAnimatedModule.js +6 -2
  11. package/Libraries/Animated/NativeAnimatedTurboModule.js +7 -4
  12. package/Libraries/Animated/animations/Animation.js +57 -3
  13. package/Libraries/Animated/animations/DecayAnimation.js +9 -0
  14. package/Libraries/Animated/animations/SpringAnimation.js +8 -0
  15. package/Libraries/Animated/animations/TimingAnimation.js +8 -0
  16. package/Libraries/Animated/components/AnimatedFlatList.js +2 -1
  17. package/Libraries/Animated/components/AnimatedScrollView.js +2 -0
  18. package/Libraries/Animated/components/AnimatedSectionList.js +2 -1
  19. package/Libraries/Animated/createAnimatedComponent.js +1 -0
  20. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  21. package/Libraries/Animated/nodes/AnimatedObject.js +146 -0
  22. package/Libraries/Animated/nodes/AnimatedProps.js +19 -7
  23. package/Libraries/Animated/nodes/AnimatedStyle.js +29 -55
  24. package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -17
  25. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +17 -0
  26. package/Libraries/Animated/useAnimatedProps.js +9 -10
  27. package/Libraries/AppState/AppState.d.ts +1 -1
  28. package/Libraries/AppState/NativeAppState.js +8 -4
  29. package/Libraries/BatchedBridge/MessageQueue.js +45 -36
  30. package/Libraries/Blob/Blob.js +6 -2
  31. package/Libraries/Blob/BlobManager.js +9 -10
  32. package/Libraries/Blob/BlobRegistry.js +14 -9
  33. package/Libraries/Blob/File.js +1 -1
  34. package/Libraries/Blob/FileReader.js +1 -2
  35. package/Libraries/Components/Button/ButtonWin32.Props.d.ts +1 -1
  36. package/Libraries/Components/Button/ButtonWin32.Props.js.map +1 -1
  37. package/Libraries/Components/Button/ButtonWin32.d.ts +1 -1
  38. package/Libraries/Components/Button/ButtonWin32.js +1 -4
  39. package/Libraries/Components/Button/ButtonWin32.js.map +1 -1
  40. package/Libraries/Components/Clipboard/Clipboard.d.ts +4 -4
  41. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +3 -1
  42. package/Libraries/Components/EnterString.win32.d.ts +1 -1
  43. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +26 -6
  44. package/Libraries/Components/Pressable/Pressable.js +3 -2
  45. package/Libraries/Components/Pressable/Pressable.win32.js +4 -3
  46. package/Libraries/Components/Pressable/useAndroidRippleForView.js +1 -1
  47. package/Libraries/Components/SafeAreaView/SafeAreaView.js +7 -7
  48. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +7 -8
  49. package/Libraries/Components/ScrollView/ScrollView.js +3 -1
  50. package/Libraries/Components/ScrollView/ScrollView.win32.js +3 -1
  51. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +39 -46
  52. package/Libraries/Components/Switch/Switch.js +1 -0
  53. package/Libraries/Components/Text/TextWin32.d.ts +1 -1
  54. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +1 -0
  55. package/Libraries/Components/TextInput/TextInput.d.ts +49 -7
  56. package/Libraries/Components/TextInput/TextInput.flow.js +43 -10
  57. package/Libraries/Components/TextInput/TextInput.js +62 -10
  58. package/Libraries/Components/TextInput/TextInput.win32.js +953 -206
  59. package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +23 -0
  60. package/Libraries/Components/ToastAndroid/{ToastAndroid.ios.js → ToastAndroid.js} +9 -1
  61. package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +9 -1
  62. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js +2 -2
  63. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  64. package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
  65. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  66. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  67. package/Libraries/Components/Touchable/TouchableOpacity.js +4 -1
  68. package/Libraries/Components/Touchable/TouchableWin32.d.ts +1 -1
  69. package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
  70. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -0
  71. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +16 -6
  72. package/Libraries/Components/View/ReactNativeStyleAttributes.js +9 -0
  73. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  74. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  75. package/Libraries/Components/View/View.js +46 -32
  76. package/Libraries/Components/View/View.win32.js +37 -6
  77. package/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
  78. package/Libraries/Components/View/ViewNativeComponent.js +1 -0
  79. package/Libraries/Components/View/ViewPropTypes.js +18 -3
  80. package/Libraries/Components/View/ViewPropTypes.win32.js +30 -4
  81. package/Libraries/Components/View/ViewWin32.js +3 -2
  82. package/Libraries/Core/Devtools/loadBundleFromServer.js +152 -0
  83. package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -1
  84. package/Libraries/Core/ExceptionsManager.js +16 -7
  85. package/Libraries/Core/ExtendedError.js +12 -0
  86. package/Libraries/Core/ReactNativeVersion.js +3 -3
  87. package/Libraries/Core/ReactNativeVersionCheck.js +0 -2
  88. package/Libraries/Core/ReactNativeVersionCheck.win32.js +0 -2
  89. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +20 -0
  90. package/Libraries/Core/setUpDeveloperTools.js +5 -1
  91. package/Libraries/Core/setUpIntersectionObserver.js +16 -0
  92. package/Libraries/{Components/ProgressBarAndroid/ProgressBarAndroid.ios.js → Core/setUpMutationObserver.js} +6 -2
  93. package/Libraries/Core/setUpPerformance.js +6 -13
  94. package/Libraries/Core/setUpPerformanceObserver.js +16 -0
  95. package/Libraries/Core/setUpRegeneratorRuntime.js +4 -2
  96. package/Libraries/DOM/Nodes/ReactNativeElement.js +135 -18
  97. package/Libraries/DOM/Nodes/ReadOnlyCharacterData.js +72 -0
  98. package/Libraries/DOM/Nodes/ReadOnlyElement.js +209 -21
  99. package/Libraries/DOM/Nodes/ReadOnlyNode.js +206 -17
  100. package/Libraries/DOM/Nodes/ReadOnlyText.js +30 -0
  101. package/Libraries/DOM/Nodes/Utilities/Traversal.js +54 -0
  102. package/Libraries/EventEmitter/NativeEventEmitter.d.ts +0 -6
  103. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +15 -4
  104. package/Libraries/Image/Image.android.js +8 -2
  105. package/Libraries/Image/Image.d.ts +1 -1
  106. package/Libraries/Image/Image.ios.js +4 -1
  107. package/Libraries/Image/Image.win32.js +6 -3
  108. package/Libraries/Image/ImageBackground.js +3 -0
  109. package/Libraries/Image/resolveAssetSource.win32.js +1 -1
  110. package/Libraries/Inspector/DevtoolsOverlay.js +6 -3
  111. package/Libraries/Inspector/NetworkOverlay.js +2 -2
  112. package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -5
  113. package/Libraries/Interaction/PanResponder.js +1 -4
  114. package/Libraries/IntersectionObserver/IntersectionObserver.js +252 -0
  115. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +140 -0
  116. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +221 -0
  117. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +41 -0
  118. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +162 -0
  119. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -1
  120. package/Libraries/Lists/FlatList.d.ts +2 -1
  121. package/Libraries/Lists/FlatList.js +15 -5
  122. package/Libraries/Lists/SectionList.js +4 -0
  123. package/Libraries/LogBox/Data/LogBoxLog.js +4 -1
  124. package/Libraries/LogBox/Data/LogBoxSymbolication.js +5 -2
  125. package/Libraries/LogBox/Data/parseLogBoxLog.js +57 -20
  126. package/Libraries/LogBox/UI/AnsiHighlight.js +1 -1
  127. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +24 -31
  128. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  129. package/Libraries/LogBox/UI/LogBoxMessage.js +4 -7
  130. package/Libraries/MutationObserver/MutationObserver.js +184 -0
  131. package/Libraries/MutationObserver/MutationObserverManager.js +218 -0
  132. package/Libraries/MutationObserver/MutationRecord.js +82 -0
  133. package/Libraries/MutationObserver/NativeMutationObserver.js +58 -0
  134. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +327 -0
  135. package/Libraries/NativeComponent/BaseViewConfig.android.js +18 -3
  136. package/Libraries/NativeComponent/BaseViewConfig.ios.js +33 -0
  137. package/Libraries/NativeComponent/BaseViewConfig.win32.js +33 -0
  138. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -5
  139. package/Libraries/NativeModules/specs/NativeSourceCode.js +6 -6
  140. package/Libraries/Network/RCTNetworking.android.js +2 -1
  141. package/Libraries/Network/XMLHttpRequest.js +1 -1
  142. package/Libraries/NewAppScreen/components/DebugInstructions.js +4 -4
  143. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +9 -2
  144. package/Libraries/Performance/QuickPerformanceLogger.js +1 -1
  145. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
  146. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +1 -0
  147. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -1
  148. package/Libraries/Pressability/Pressability.js +28 -3
  149. package/Libraries/Pressability/Pressability.win32.js +30 -5
  150. package/Libraries/ReactNative/AppContainer.js +2 -3
  151. package/Libraries/ReactNative/AppRegistry.d.ts +0 -5
  152. package/Libraries/ReactNative/AppRegistry.js +66 -53
  153. package/Libraries/ReactNative/BridgelessUIManager.js +38 -9
  154. package/Libraries/ReactNative/FabricUIManager.js +143 -34
  155. package/Libraries/ReactNative/I18nManager.js +5 -11
  156. package/Libraries/ReactNative/NativeI18nManager.js +7 -5
  157. package/Libraries/ReactNative/PaperUIManager.win32.js +2 -2
  158. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +151 -0
  159. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +81 -0
  160. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +492 -0
  161. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +32 -0
  162. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +19 -3
  163. package/Libraries/ReactNative/UIManager.js +8 -0
  164. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +648 -0
  165. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +38 -2
  166. package/Libraries/Renderer/implementations/ReactFabric-dev.js +27 -27
  167. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3 -3
  168. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3 -3
  169. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +27 -27
  170. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -3
  171. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -3
  172. package/Libraries/Renderer/shims/ReactFabric.js +5 -6
  173. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -3
  174. package/Libraries/Renderer/shims/ReactNative.js +2 -3
  175. package/Libraries/Renderer/shims/ReactNativeTypes.js +35 -17
  176. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -3
  177. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -3
  178. package/Libraries/Settings/{Settings.android.js → Settings.js} +4 -4
  179. package/Libraries/Share/Share.d.ts +3 -9
  180. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +9 -4
  181. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +28 -13
  182. package/Libraries/StyleSheet/PlatformColorValueTypes.win32.js +14 -4
  183. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -1
  184. package/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  185. package/Libraries/StyleSheet/StyleSheet.d.ts +10 -1
  186. package/Libraries/StyleSheet/StyleSheet.js +3 -0
  187. package/Libraries/StyleSheet/StyleSheet.win32.js +3 -0
  188. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +31 -17
  189. package/Libraries/StyleSheet/StyleSheetTypes.js +90 -6
  190. package/Libraries/StyleSheet/flattenStyle.js +4 -0
  191. package/Libraries/StyleSheet/private/_TransformStyle.js +16 -2
  192. package/Libraries/StyleSheet/processColor.js +1 -2
  193. package/Libraries/StyleSheet/processTransformOrigin.js +136 -0
  194. package/Libraries/StyleSheet/splitLayoutProps.js +1 -0
  195. package/Libraries/Text/Text.d.ts +5 -5
  196. package/Libraries/Text/Text.js +17 -10
  197. package/Libraries/Text/Text.win32.js +354 -0
  198. package/Libraries/Text/TextProps.win32.js +281 -0
  199. package/Libraries/TurboModule/TurboModuleRegistry.js +47 -7
  200. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
  201. package/Libraries/Types/CoreEventTypes.d.ts +5 -2
  202. package/Libraries/Utilities/GlobalPerformanceLogger.js +2 -12
  203. package/Libraries/Utilities/NativeDeviceInfo.js +8 -9
  204. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +23 -18
  205. package/Libraries/Utilities/NativePlatformConstantsIOS.js +16 -13
  206. package/Libraries/Utilities/NativePlatformConstantsWin.js +13 -10
  207. package/Libraries/Utilities/PerformanceLoggerContext.js +1 -1
  208. package/Libraries/Utilities/Platform.android.js +12 -8
  209. package/Libraries/Utilities/Platform.d.ts +1 -0
  210. package/Libraries/Utilities/Platform.flow.js +84 -0
  211. package/Libraries/Utilities/Platform.flow.win32.js +111 -0
  212. package/Libraries/Utilities/Platform.ios.js +12 -8
  213. package/Libraries/Utilities/Platform.win32.js +12 -8
  214. package/Libraries/Utilities/PolyfillFunctions.js +1 -1
  215. package/Libraries/Utilities/ReactNativeTestTools.js +1 -2
  216. package/Libraries/Utilities/SceneTracker.js +1 -1
  217. package/Libraries/Utilities/createPerformanceLogger.js +63 -32
  218. package/Libraries/Utilities/useColorScheme.js +7 -8
  219. package/Libraries/WebPerformance/MemoryInfo.js +1 -1
  220. package/Libraries/WebPerformance/NativePerformance.js +3 -8
  221. package/Libraries/WebPerformance/NativePerformanceObserver.js +4 -0
  222. package/Libraries/WebPerformance/Performance.js +42 -15
  223. package/Libraries/WebPerformance/PerformanceEntry.js +14 -6
  224. package/Libraries/WebPerformance/PerformanceEventTiming.js +18 -1
  225. package/Libraries/WebPerformance/ReactNativeStartupTiming.js +40 -14
  226. package/Libraries/WebPerformance/__mocks__/NativePerformance.js +4 -2
  227. package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +21 -3
  228. package/Libraries/promiseRejectionTrackingOptions.js +1 -3
  229. package/Libraries/vendor/emitter/EventEmitter.js +17 -17
  230. package/flow/global.js +1 -3
  231. package/flow/jest.js +5 -1
  232. package/{Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js → jest/ReactNativeInternalFeatureFlagsMock.js} +2 -1
  233. package/jest/__tests__/setup-test.js +18 -0
  234. package/jest/mockModal.js +6 -4
  235. package/jest/setup.js +61 -30
  236. package/jest.config.js +1 -1
  237. package/just-task.js +1 -0
  238. package/overrides.json +51 -46
  239. package/package.json +35 -33
  240. package/src/Libraries/Components/Button/ButtonWin32.Props.ts +1 -1
  241. package/src/Libraries/Components/Button/ButtonWin32.tsx +0 -2
  242. package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +2 -2
  243. package/src/Libraries/Components/Touchable/TouchableWin32.tsx +1 -1
  244. package/src/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
  245. package/src/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  246. package/types/experimental.d.ts +44 -0
  247. package/types/index.d.ts +2 -1
  248. package/types/modules/Devtools.d.ts +1 -0
  249. package/types/modules/globals.d.ts +16 -1
  250. package/IntegrationTests/BUCK +0 -32
  251. package/IntegrationTests/PropertiesUpdateTest.js +0 -29
  252. package/IntegrationTests/RCTRootViewIntegrationTestApp.js +0 -86
  253. package/IntegrationTests/ReactContentSizeUpdateTest.js +0 -89
  254. package/IntegrationTests/SizeFlexibilityUpdateTest.js +0 -106
  255. package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +0 -51
  256. package/Libraries/Components/TextInput/TextInput.Types.win32.js +0 -3
  257. package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +0 -1
  258. package/Libraries/Utilities/AcessibilityMapping.js +0 -154
  259. package/Libraries/Utilities/AcessibilityMapping.win32.js +0 -156
  260. package/Libraries/Utilities/NativeDevSplitBundleLoader.js +0 -19
  261. package/Libraries/Utilities/useColorScheme.win32.js +0 -26
  262. package/flow/use-sync-external-store.js +0 -20
  263. package/flow-typed/npm/base64-js_v1.x.x.js +0 -12
  264. package/flow-typed/npm/glob_v7.x.x.js +0 -79
  265. package/flow-typed/npm/pretty-format_v26.x.x.js +0 -49
  266. package/flow-typed/npm/promise_v8.x.x.js +0 -30
  267. package/flow-typed/npm/react-dom_v17.x.x.js +0 -139
  268. package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -79
  269. package/flow-typed/npm/stacktrace-parser_v0.1.x.js +0 -17
  270. package/flow-typed/npm/yargs_v17.x.x.js +0 -341
  271. package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +0 -68
  272. /package/Libraries/{Renderer/public → ReactNative/ReactFabricPublicInstance}/ReactFabricPublicInstanceUtils.js +0 -0
@@ -0,0 +1,84 @@
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
+ export type PlatformSelectSpec<T> = {
12
+ default?: T,
13
+ native?: T,
14
+ ios?: T,
15
+ android?: T,
16
+ ...
17
+ };
18
+
19
+ type IOSPlatform = {
20
+ __constants: null,
21
+ OS: $TEMPORARY$string<'ios'>,
22
+ // $FlowFixMe[unsafe-getters-setters]
23
+ get Version(): string,
24
+ // $FlowFixMe[unsafe-getters-setters]
25
+ get constants(): {|
26
+ forceTouchAvailable: boolean,
27
+ interfaceIdiom: string,
28
+ isTesting: boolean,
29
+ isDisableAnimations?: boolean,
30
+ osVersion: string,
31
+ reactNativeVersion: {|
32
+ major: number,
33
+ minor: number,
34
+ patch: number,
35
+ prerelease: ?number,
36
+ |},
37
+ systemName: string,
38
+ |},
39
+ // $FlowFixMe[unsafe-getters-setters]
40
+ get isPad(): boolean,
41
+ // $FlowFixMe[unsafe-getters-setters]
42
+ get isTV(): boolean,
43
+ // $FlowFixMe[unsafe-getters-setters]
44
+ get isTesting(): boolean,
45
+ // $FlowFixMe[unsafe-getters-setters]
46
+ get isDisableAnimations(): boolean,
47
+ select: <T>(spec: PlatformSelectSpec<T>) => T,
48
+ };
49
+
50
+ type AndroidPlatform = {
51
+ __constants: null,
52
+ OS: $TEMPORARY$string<'android'>,
53
+ // $FlowFixMe[unsafe-getters-setters]
54
+ get Version(): number,
55
+ // $FlowFixMe[unsafe-getters-setters]
56
+ get constants(): {|
57
+ isTesting: boolean,
58
+ isDisableAnimations?: boolean,
59
+ reactNativeVersion: {|
60
+ major: number,
61
+ minor: number,
62
+ patch: number,
63
+ prerelease: ?number,
64
+ |},
65
+ Version: number,
66
+ Release: string,
67
+ Serial: string,
68
+ Fingerprint: string,
69
+ Model: string,
70
+ ServerHost?: string,
71
+ uiMode: string,
72
+ Brand: string,
73
+ Manufacturer: string,
74
+ |},
75
+ // $FlowFixMe[unsafe-getters-setters]
76
+ get isTV(): boolean,
77
+ // $FlowFixMe[unsafe-getters-setters]
78
+ get isTesting(): boolean,
79
+ // $FlowFixMe[unsafe-getters-setters]
80
+ get isDisableAnimations(): boolean,
81
+ select: <T>(spec: PlatformSelectSpec<T>) => T,
82
+ };
83
+
84
+ export type Platform = IOSPlatform | AndroidPlatform;
@@ -0,0 +1,111 @@
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
+ export type PlatformSelectSpec<T> = {
12
+ default?: T,
13
+ native?: T,
14
+ ios?: T,
15
+ android?: T,
16
+ win32?: T,
17
+ ...
18
+ };
19
+
20
+ type IOSPlatform = {
21
+ __constants: null,
22
+ OS: $TEMPORARY$string<'ios'>,
23
+ // $FlowFixMe[unsafe-getters-setters]
24
+ get Version(): string,
25
+ // $FlowFixMe[unsafe-getters-setters]
26
+ get constants(): {|
27
+ forceTouchAvailable: boolean,
28
+ interfaceIdiom: string,
29
+ isTesting: boolean,
30
+ isDisableAnimations?: boolean,
31
+ osVersion: string,
32
+ reactNativeVersion: {|
33
+ major: number,
34
+ minor: number,
35
+ patch: number,
36
+ prerelease: ?number,
37
+ |},
38
+ systemName: string,
39
+ |},
40
+ // $FlowFixMe[unsafe-getters-setters]
41
+ get isPad(): boolean,
42
+ // $FlowFixMe[unsafe-getters-setters]
43
+ get isTV(): boolean,
44
+ // $FlowFixMe[unsafe-getters-setters]
45
+ get isTesting(): boolean,
46
+ // $FlowFixMe[unsafe-getters-setters]
47
+ get isDisableAnimations(): boolean,
48
+ select: <T>(spec: PlatformSelectSpec<T>) => T,
49
+ };
50
+
51
+ type AndroidPlatform = {
52
+ __constants: null,
53
+ OS: $TEMPORARY$string<'android'>,
54
+ // $FlowFixMe[unsafe-getters-setters]
55
+ get Version(): number,
56
+ // $FlowFixMe[unsafe-getters-setters]
57
+ get constants(): {|
58
+ isTesting: boolean,
59
+ isDisableAnimations?: boolean,
60
+ reactNativeVersion: {|
61
+ major: number,
62
+ minor: number,
63
+ patch: number,
64
+ prerelease: ?number,
65
+ |},
66
+ Version: number,
67
+ Release: string,
68
+ Serial: string,
69
+ Fingerprint: string,
70
+ Model: string,
71
+ ServerHost?: string,
72
+ uiMode: string,
73
+ Brand: string,
74
+ Manufacturer: string,
75
+ |},
76
+ // $FlowFixMe[unsafe-getters-setters]
77
+ get isTV(): boolean,
78
+ // $FlowFixMe[unsafe-getters-setters]
79
+ get isTesting(): boolean,
80
+ // $FlowFixMe[unsafe-getters-setters]
81
+ get isDisableAnimations(): boolean,
82
+ select: <T>(spec: PlatformSelectSpec<T>) => T,
83
+ };
84
+
85
+ type Win32Platform = {
86
+ __constants: null,
87
+ OS: $TEMPORARY$string<'win32'>,
88
+ // $FlowFixMe[unsafe-getters-setters]
89
+ get Version(): number,
90
+ // $FlowFixMe[unsafe-getters-setters]
91
+ get constants(): {|
92
+ isTesting: boolean,
93
+ isDisableAnimations?: boolean,
94
+ reactNativeVersion: {|
95
+ major: number,
96
+ minor: number,
97
+ patch: number,
98
+ prerelease: ?string | number,
99
+ |},
100
+ osVersion: number,
101
+ |},
102
+ // $FlowFixMe[unsafe-getters-setters]
103
+ get isTV(): boolean,
104
+ // $FlowFixMe[unsafe-getters-setters]
105
+ get isTesting(): boolean,
106
+ // $FlowFixMe[unsafe-getters-setters]
107
+ get isDisableAnimations(): boolean,
108
+ select: <T>(spec: PlatformSelectSpec<T>) => T,
109
+ };
110
+
111
+ export type Platform = IOSPlatform | AndroidPlatform | Win32Platform;
@@ -8,16 +8,14 @@
8
8
  * @flow strict
9
9
  */
10
10
 
11
- import NativePlatformConstantsIOS from './NativePlatformConstantsIOS';
11
+ import type {
12
+ Platform as PlatformType,
13
+ PlatformSelectSpec,
14
+ } from './Platform.flow';
12
15
 
13
- export type PlatformSelectSpec<T> = {
14
- default?: T,
15
- native?: T,
16
- ios?: T,
17
- ...
18
- };
16
+ import NativePlatformConstantsIOS from './NativePlatformConstantsIOS';
19
17
 
20
- const Platform = {
18
+ const Platform: PlatformType = {
21
19
  __constants: null,
22
20
  OS: 'ios',
23
21
  // $FlowFixMe[unsafe-getters-setters]
@@ -30,6 +28,7 @@ const Platform = {
30
28
  forceTouchAvailable: boolean,
31
29
  interfaceIdiom: string,
32
30
  isTesting: boolean,
31
+ isDisableAnimations?: boolean,
33
32
  osVersion: string,
34
33
  reactNativeVersion: {|
35
34
  major: number,
@@ -65,6 +64,11 @@ const Platform = {
65
64
  }
66
65
  return false;
67
66
  },
67
+ // $FlowFixMe[unsafe-getters-setters]
68
+ get isDisableAnimations(): boolean {
69
+ // $FlowFixMe[object-this-reference]
70
+ return this.constants.isDisableAnimations ?? this.isTesting;
71
+ },
68
72
  select: <T>(spec: PlatformSelectSpec<T>): T =>
69
73
  // $FlowFixMe[incompatible-return]
70
74
  'ios' in spec ? spec.ios : 'native' in spec ? spec.native : spec.default,
@@ -6,16 +6,14 @@
6
6
  * @flow strict
7
7
  */
8
8
 
9
- import NativePlatformConstantsWin from './NativePlatformConstantsWin';
9
+ import type {
10
+ Platform as PlatformType,
11
+ PlatformSelectSpec,
12
+ } from './Platform.flow';
10
13
 
11
- export type PlatformSelectSpec<T> = {
12
- win32?: T,
13
- native?: T,
14
- default?: T,
15
- ...
16
- };
14
+ import NativePlatformConstantsWin from './NativePlatformConstantsWin';
17
15
 
18
- const Platform = {
16
+ const Platform: PlatformType = {
19
17
  __constants: null,
20
18
  OS: 'win32',
21
19
  // $FlowFixMe[unsafe-getters-setters]
@@ -26,6 +24,7 @@ const Platform = {
26
24
  // $FlowFixMe[unsafe-getters-setters]
27
25
  get constants(): {|
28
26
  isTesting: boolean,
27
+ isDisableAnimations?: boolean,
29
28
  reactNativeVersion: {|
30
29
  major: number,
31
30
  minor: number,
@@ -51,6 +50,11 @@ const Platform = {
51
50
  return false;
52
51
  },
53
52
  // $FlowFixMe[unsafe-getters-setters]
53
+ get isDisableAnimations(): boolean {
54
+ // $FlowFixMe[object-this-reference]
55
+ return this.constants.isDisableAnimations ?? this.isTesting;
56
+ },
57
+ // $FlowFixMe[unsafe-getters-setters]
54
58
  get isTV(): boolean {
55
59
  // $FlowFixMe[object-this-reference]
56
60
  return false;
@@ -32,7 +32,7 @@ function polyfillObjectProperty<T>(
32
32
  ): void {
33
33
  const descriptor = Object.getOwnPropertyDescriptor<$FlowFixMe>(object, name);
34
34
  if (__DEV__ && descriptor) {
35
- const backupName = `original${name[0].toUpperCase()}${name.substr(1)}`;
35
+ const backupName = `original${name[0].toUpperCase()}${name.slice(1)}`;
36
36
  Object.defineProperty(object, backupName, descriptor);
37
37
  }
38
38
 
@@ -28,7 +28,6 @@ const ReactTestRenderer = require('react-test-renderer');
28
28
  const shallowRenderer = new ShallowRenderer();
29
29
  export type ReactTestInstance = $PropertyType<ReactTestRendererType, 'root'>;
30
30
  export type Predicate = (node: ReactTestInstance) => boolean;
31
- type $ReturnType<Fn> = $Call<<Ret, A>((...A) => Ret) => Ret, Fn>;
32
31
  /* $FlowFixMe[value-as-type] (>=0.125.1 site=react_native_fb) This comment
33
32
  * suppresses an error found when Flow v0.125.1 was deployed. To see the error,
34
33
  * delete this comment and run Flow. */
@@ -36,7 +35,7 @@ export type ReactTestRendererJSON =
36
35
  /* $FlowFixMe[prop-missing] (>=0.125.1 site=react_native_fb) This comment
37
36
  * suppresses an error found when Flow v0.125.1 was deployed. To see the error,
38
37
  * delete this comment and run Flow. */
39
- $ReturnType<ReactTestRenderer.create.toJSON>;
38
+ ReturnType<ReactTestRenderer.create.toJSON>;
40
39
 
41
40
  function byClickable(): Predicate {
42
41
  return withMessage(
@@ -10,7 +10,7 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- export type Scene = {name: string, ...};
13
+ export type Scene = {name: string, [string]: mixed, ...};
14
14
 
15
15
  let _listeners: Array<(scene: Scene) => void> = [];
16
16
 
@@ -16,7 +16,8 @@ import type {
16
16
  } from './IPerformanceLogger';
17
17
 
18
18
  import * as Systrace from '../Performance/Systrace';
19
- import Performance from '../WebPerformance/Performance';
19
+ import ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';
20
+ import NativePerformance from '../WebPerformance/NativePerformance';
20
21
  import infoLog from './infoLog';
21
22
 
22
23
  const _cookies: {[key: string]: number, ...} = {};
@@ -27,11 +28,8 @@ const PRINT_TO_CONSOLE: false = false; // Type as false to prevent accidentally
27
28
  // used to separate these internally from other marks/measures
28
29
  const WEB_PERFORMANCE_PREFIX = 'global_perf_';
29
30
 
30
- // TODO: Remove once T143070419 is done
31
- const performance = new Performance();
32
-
33
31
  export const getCurrentTimestamp: () => number =
34
- global.nativeQPLTimestamp ?? global.performance.now.bind(global.performance);
32
+ global.nativeQPLTimestamp ?? (() => global.performance.now());
35
33
 
36
34
  class PerformanceLogger implements IPerformanceLogger {
37
35
  _timespans: {[key: string]: ?Timespan} = {};
@@ -39,10 +37,50 @@ class PerformanceLogger implements IPerformanceLogger {
39
37
  _points: {[key: string]: ?number} = {};
40
38
  _pointExtras: {[key: string]: ?Extras, ...} = {};
41
39
  _closed: boolean = false;
42
- _isLoggingForWebPerformance: boolean = false;
40
+ _isGlobalLogger: boolean = false;
41
+ _isGlobalWebPerformanceLoggerEnabled: ?boolean;
43
42
 
44
- constructor(isLoggingForWebPerformance?: boolean) {
45
- this._isLoggingForWebPerformance = isLoggingForWebPerformance === true;
43
+ constructor(isGlobalLogger?: boolean) {
44
+ this._isGlobalLogger = isGlobalLogger === true;
45
+ }
46
+
47
+ _isLoggingForWebPerformance(): boolean {
48
+ if (!this._isGlobalLogger || NativePerformance == null) {
49
+ return false;
50
+ }
51
+ if (this._isGlobalWebPerformanceLoggerEnabled == null) {
52
+ this._isGlobalWebPerformanceLoggerEnabled =
53
+ ReactNativeFeatureFlags.isGlobalWebPerformanceLoggerEnabled();
54
+ }
55
+ return this._isGlobalWebPerformanceLoggerEnabled === true;
56
+ }
57
+
58
+ // NOTE: The Performance.mark/measure calls are wrapped here to ensure that
59
+ // we are safe from the cases when the global 'peformance' object is still not yet defined.
60
+ // It is only necessary in this file because of potential race conditions in the initialization
61
+ // order between 'createPerformanceLogger' and 'setUpPerformance'.
62
+ //
63
+ // In most of the other cases this kind of check for `performance` being defined
64
+ // wouldn't be necessary.
65
+ _performanceMark(key: string, startTime: number) {
66
+ if (this._isLoggingForWebPerformance()) {
67
+ global.performance?.mark?.(key, {
68
+ startTime,
69
+ });
70
+ }
71
+ }
72
+
73
+ _performanceMeasure(
74
+ key: string,
75
+ start: number | string,
76
+ end: number | string,
77
+ ) {
78
+ if (this._isLoggingForWebPerformance()) {
79
+ global.performance?.measure?.(key, {
80
+ start,
81
+ end,
82
+ });
83
+ }
46
84
  }
47
85
 
48
86
  addTimespan(
@@ -76,12 +114,11 @@ class PerformanceLogger implements IPerformanceLogger {
76
114
  endExtras,
77
115
  };
78
116
 
79
- if (this._isLoggingForWebPerformance) {
80
- performance.measure(`${WEB_PERFORMANCE_PREFIX}_${key}`, {
81
- start: startTime,
82
- end: endTime,
83
- });
84
- }
117
+ this._performanceMeasure(
118
+ `${WEB_PERFORMANCE_PREFIX}_${key}`,
119
+ startTime,
120
+ endTime,
121
+ );
85
122
  }
86
123
 
87
124
  append(performanceLogger: IPerformanceLogger) {
@@ -197,11 +234,7 @@ class PerformanceLogger implements IPerformanceLogger {
197
234
  this._pointExtras[key] = extras;
198
235
  }
199
236
 
200
- if (this._isLoggingForWebPerformance) {
201
- performance.mark(`${WEB_PERFORMANCE_PREFIX}_${key}`, {
202
- startTime: timestamp,
203
- });
204
- }
237
+ this._performanceMark(`${WEB_PERFORMANCE_PREFIX}_${key}`, timestamp);
205
238
  }
206
239
 
207
240
  removeExtra(key: string): ?ExtraValue {
@@ -264,11 +297,10 @@ class PerformanceLogger implements IPerformanceLogger {
264
297
  infoLog('PerformanceLogger.js', 'start: ' + key);
265
298
  }
266
299
 
267
- if (this._isLoggingForWebPerformance) {
268
- performance.mark(`${WEB_PERFORMANCE_PREFIX}_timespan_start_${key}`, {
269
- startTime: timestamp,
270
- });
271
- }
300
+ this._performanceMark(
301
+ `${WEB_PERFORMANCE_PREFIX}_timespan_start_${key}`,
302
+ timestamp,
303
+ );
272
304
  }
273
305
 
274
306
  stopTimespan(
@@ -315,12 +347,11 @@ class PerformanceLogger implements IPerformanceLogger {
315
347
  delete _cookies[key];
316
348
  }
317
349
 
318
- if (this._isLoggingForWebPerformance) {
319
- performance.measure(`${WEB_PERFORMANCE_PREFIX}_${key}`, {
320
- start: `${WEB_PERFORMANCE_PREFIX}_timespan_start_${key}`,
321
- end: timestamp,
322
- });
323
- }
350
+ this._performanceMeasure(
351
+ `${WEB_PERFORMANCE_PREFIX}_${key}`,
352
+ `${WEB_PERFORMANCE_PREFIX}_timespan_start_${key}`,
353
+ timestamp,
354
+ );
324
355
  }
325
356
  }
326
357
 
@@ -334,7 +365,7 @@ export type {Extras, ExtraValue, IPerformanceLogger, Timespan};
334
365
  * The loggers need to have minimal overhead since they're used in production.
335
366
  */
336
367
  export default function createPerformanceLogger(
337
- isLoggingForWebPerformance?: boolean,
368
+ isGlobalLogger?: boolean,
338
369
  ): IPerformanceLogger {
339
- return new PerformanceLogger(isLoggingForWebPerformance);
370
+ return new PerformanceLogger(isGlobalLogger);
340
371
  }
@@ -13,14 +13,13 @@
13
13
  import type {ColorSchemeName} from './NativeAppearance';
14
14
 
15
15
  import Appearance from './Appearance';
16
- import {useSyncExternalStore} from 'use-sync-external-store/shim';
16
+ import {useSyncExternalStore} from 'react';
17
+
18
+ const subscribe = (onStoreChange: () => void) => {
19
+ const appearanceSubscription = Appearance.addChangeListener(onStoreChange);
20
+ return () => appearanceSubscription.remove();
21
+ };
17
22
 
18
23
  export default function useColorScheme(): ?ColorSchemeName {
19
- return useSyncExternalStore(
20
- callback => {
21
- const appearanceSubscription = Appearance.addChangeListener(callback);
22
- return () => appearanceSubscription.remove();
23
- },
24
- () => Appearance.getColorScheme(),
25
- );
24
+ return useSyncExternalStore(subscribe, Appearance.getColorScheme);
26
25
  }
@@ -11,7 +11,7 @@
11
11
 
12
12
  // flowlint unsafe-getters-setters:off
13
13
 
14
- export type MemoryInfoLike = {
14
+ type MemoryInfoLike = {
15
15
  jsHeapSizeLimit: ?number,
16
16
  totalJSHeapSize: ?number,
17
17
  usedJSHeapSize: ?number,
@@ -12,17 +12,12 @@ import type {TurboModule} from '../TurboModule/RCTExport';
12
12
 
13
13
  import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
14
14
 
15
- export type NativeMemoryInfo = {[key: string]: number};
15
+ export type NativeMemoryInfo = {[key: string]: ?number};
16
16
 
17
- export type ReactNativeStartupTiming = {|
18
- startTime: number,
19
- endTime: number,
20
- executeJavaScriptBundleEntryPointStart: number,
21
- executeJavaScriptBundleEntryPointEnd: number,
22
- |};
17
+ export type ReactNativeStartupTiming = {[key: string]: ?number};
23
18
 
24
19
  export interface Spec extends TurboModule {
25
- +mark: (name: string, startTime: number, duration: number) => void;
20
+ +mark: (name: string, startTime: number) => void;
26
21
  +measure: (
27
22
  name: string,
28
23
  startTime: number,
@@ -33,6 +33,10 @@ export type GetPendingEntriesResult = {|
33
33
  export interface Spec extends TurboModule {
34
34
  +startReporting: (entryType: RawPerformanceEntryType) => void;
35
35
  +stopReporting: (entryType: RawPerformanceEntryType) => void;
36
+ +setIsBuffered: (
37
+ entryTypes: $ReadOnlyArray<RawPerformanceEntryType>,
38
+ isBuffered: boolean,
39
+ ) => void;
36
40
  +popPendingEntries: () => GetPendingEntriesResult;
37
41
  +setOnPerformanceEntryCallback: (callback?: () => void) => void;
38
42
  +logRawEntry: (entry: RawPerformanceEntry) => void;
@@ -18,7 +18,7 @@ import EventCounts from './EventCounts';
18
18
  import MemoryInfo from './MemoryInfo';
19
19
  import NativePerformance from './NativePerformance';
20
20
  import NativePerformanceObserver from './NativePerformanceObserver';
21
- import {PerformanceEntry} from './PerformanceEntry';
21
+ import {ALWAYS_LOGGED_ENTRY_TYPES, PerformanceEntry} from './PerformanceEntry';
22
22
  import {warnNoNativePerformanceObserver} from './PerformanceObserver';
23
23
  import {
24
24
  performanceEntryTypeToRaw,
@@ -43,6 +43,17 @@ const getCurrentTimeStamp: () => HighResTimeStamp = global.nativePerformanceNow
43
43
  ? global.nativePerformanceNow
44
44
  : () => Date.now();
45
45
 
46
+ // We want some of the performance entry types to be always logged,
47
+ // even if they are not currently observed - this is either to be able to
48
+ // retrieve them at any time via Performance.getEntries* or to refer by other entries
49
+ // (such as when measures may refer to marks, even if the latter are not observed)
50
+ if (NativePerformanceObserver?.setIsBuffered) {
51
+ NativePerformanceObserver?.setIsBuffered(
52
+ ALWAYS_LOGGED_ENTRY_TYPES.map(performanceEntryTypeToRaw),
53
+ true,
54
+ );
55
+ }
56
+
46
57
  export class PerformanceMark extends PerformanceEntry {
47
58
  detail: DetailType;
48
59
 
@@ -132,9 +143,22 @@ export default class Performance {
132
143
  // Startup metrics is not used in web, but only in React Native.
133
144
  get reactNativeStartupTiming(): ReactNativeStartupTiming {
134
145
  if (NativePerformance?.getReactNativeStartupTiming) {
135
- return new ReactNativeStartupTiming(
136
- NativePerformance.getReactNativeStartupTiming(),
137
- );
146
+ const {
147
+ startTime,
148
+ endTime,
149
+ initializeRuntimeStart,
150
+ initializeRuntimeEnd,
151
+ executeJavaScriptBundleEntryPointStart,
152
+ executeJavaScriptBundleEntryPointEnd,
153
+ } = NativePerformance.getReactNativeStartupTiming();
154
+ return new ReactNativeStartupTiming({
155
+ startTime,
156
+ endTime,
157
+ initializeRuntimeStart,
158
+ initializeRuntimeEnd,
159
+ executeJavaScriptBundleEntryPointStart,
160
+ executeJavaScriptBundleEntryPointEnd,
161
+ });
138
162
  }
139
163
  return new ReactNativeStartupTiming();
140
164
  }
@@ -146,7 +170,7 @@ export default class Performance {
146
170
  const mark = new PerformanceMark(markName, markOptions);
147
171
 
148
172
  if (NativePerformance?.mark) {
149
- NativePerformance.mark(markName, mark.startTime, mark.duration);
173
+ NativePerformance.mark(markName, mark.startTime);
150
174
  } else {
151
175
  warnNoNativePerformance();
152
176
  }
@@ -261,7 +285,7 @@ export default class Performance {
261
285
  * https://www.w3.org/TR/performance-timeline/#extensions-to-the-performance-interface
262
286
  */
263
287
  getEntries(): PerformanceEntryList {
264
- if (!NativePerformanceObserver?.clearEntries) {
288
+ if (!NativePerformanceObserver?.getEntries) {
265
289
  warnNoNativePerformanceObserver();
266
290
  return [];
267
291
  }
@@ -269,14 +293,16 @@ export default class Performance {
269
293
  }
270
294
 
271
295
  getEntriesByType(entryType: PerformanceEntryType): PerformanceEntryList {
272
- if (entryType !== 'mark' && entryType !== 'measure') {
273
- console.log(
274
- `Performance.getEntriesByType: Only valid for 'mark' and 'measure' entry types, got ${entryType}`,
296
+ if (!ALWAYS_LOGGED_ENTRY_TYPES.includes(entryType)) {
297
+ console.warn(
298
+ `Performance.getEntriesByType: Only valid for ${JSON.stringify(
299
+ ALWAYS_LOGGED_ENTRY_TYPES,
300
+ )} entry types, got ${entryType}`,
275
301
  );
276
302
  return [];
277
303
  }
278
304
 
279
- if (!NativePerformanceObserver?.clearEntries) {
305
+ if (!NativePerformanceObserver?.getEntries) {
280
306
  warnNoNativePerformanceObserver();
281
307
  return [];
282
308
  }
@@ -291,16 +317,17 @@ export default class Performance {
291
317
  ): PerformanceEntryList {
292
318
  if (
293
319
  entryType !== undefined &&
294
- entryType !== 'mark' &&
295
- entryType !== 'measure'
320
+ !ALWAYS_LOGGED_ENTRY_TYPES.includes(entryType)
296
321
  ) {
297
- console.log(
298
- `Performance.getEntriesByName: Only valid for 'mark' and 'measure' entry types, got ${entryType}`,
322
+ console.warn(
323
+ `Performance.getEntriesByName: Only valid for ${JSON.stringify(
324
+ ALWAYS_LOGGED_ENTRY_TYPES,
325
+ )} entry types, got ${entryType}`,
299
326
  );
300
327
  return [];
301
328
  }
302
329
 
303
- if (!NativePerformanceObserver?.clearEntries) {
330
+ if (!NativePerformanceObserver?.getEntries) {
304
331
  warnNoNativePerformanceObserver();
305
332
  return [];
306
333
  }
@@ -11,6 +11,19 @@
11
11
  export type HighResTimeStamp = number;
12
12
  export type PerformanceEntryType = 'mark' | 'measure' | 'event';
13
13
 
14
+ export type PerformanceEntryJSON = {
15
+ name: string,
16
+ entryType: PerformanceEntryType,
17
+ startTime: HighResTimeStamp,
18
+ duration: HighResTimeStamp,
19
+ ...
20
+ };
21
+
22
+ export const ALWAYS_LOGGED_ENTRY_TYPES: $ReadOnlyArray<PerformanceEntryType> = [
23
+ 'mark',
24
+ 'measure',
25
+ ];
26
+
14
27
  export class PerformanceEntry {
15
28
  name: string;
16
29
  entryType: PerformanceEntryType;
@@ -29,12 +42,7 @@ export class PerformanceEntry {
29
42
  this.duration = init.duration;
30
43
  }
31
44
 
32
- toJSON(): {
33
- name: string,
34
- entryType: PerformanceEntryType,
35
- startTime: HighResTimeStamp,
36
- duration: HighResTimeStamp,
37
- } {
45
+ toJSON(): PerformanceEntryJSON {
38
46
  return {
39
47
  name: this.name,
40
48
  entryType: this.entryType,