@office-iss/react-native-win32 0.0.0-canary.283 → 0.0.0-canary.284

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 (244) hide show
  1. package/.flowconfig +1 -1
  2. package/CHANGELOG.json +40 -1
  3. package/CHANGELOG.md +20 -8
  4. package/IntegrationTests/AccessibilityManagerTest.js +17 -12
  5. package/IntegrationTests/AppEventsTest.js +47 -32
  6. package/IntegrationTests/GlobalEvalWithSourceUrlTest.js +10 -14
  7. package/IntegrationTests/ImageCachePolicyTest.js +64 -81
  8. package/IntegrationTests/ImageSnapshotTest.js +17 -20
  9. package/IntegrationTests/IntegrationTestHarnessTest.js +34 -52
  10. package/IntegrationTests/IntegrationTestsApp.js +11 -6
  11. package/IntegrationTests/LayoutEventsTest.js +1 -1
  12. package/IntegrationTests/LoggingTestModule.js +2 -1
  13. package/IntegrationTests/PromiseTest.js +51 -43
  14. package/IntegrationTests/SimpleSnapshotTest.js +19 -24
  15. package/IntegrationTests/SyncMethodTest.js +9 -13
  16. package/IntegrationTests/TimersTest.js +3 -3
  17. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +3 -3
  18. package/Libraries/Alert/Alert.js +1 -1
  19. package/Libraries/Alert/Alert.win32.js +1 -1
  20. package/Libraries/Alert/RCTAlertManager.android.js +1 -1
  21. package/Libraries/Alert/RCTAlertManager.ios.js +1 -1
  22. package/Libraries/Animated/AnimatedMock.js +1 -1
  23. package/Libraries/Animated/AnimatedWeb.js +27 -9
  24. package/Libraries/Animated/nodes/AnimatedValue.js +35 -13
  25. package/Libraries/Animated/useAnimatedProps.js +47 -85
  26. package/Libraries/AppState/AppState.js +1 -1
  27. package/Libraries/BatchedBridge/BatchedBridge.js +4 -2
  28. package/Libraries/BatchedBridge/MessageQueue.js +2 -2
  29. package/Libraries/BatchedBridge/NativeModules.js +4 -3
  30. package/Libraries/Blob/Blob.js +4 -4
  31. package/Libraries/Blob/BlobManager.js +3 -2
  32. package/Libraries/Blob/BlobRegistry.js +3 -9
  33. package/Libraries/Blob/File.js +3 -2
  34. package/Libraries/Blob/FileReader.js +1 -1
  35. package/Libraries/BugReporting/BugReporting.js +2 -2
  36. package/Libraries/BugReporting/dumpReactTree.js +2 -2
  37. package/Libraries/BugReporting/getReactData.js +1 -1
  38. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +1 -1
  39. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.ios.js +1 -1
  40. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.win32.js +1 -1
  41. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +5 -5
  42. package/Libraries/Components/Button.js +2 -2
  43. package/Libraries/Components/Button.win32.js +2 -2
  44. package/Libraries/Components/Clipboard/Clipboard.js +1 -1
  45. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +7 -7
  46. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +1 -2
  47. package/Libraries/Components/Keyboard/Keyboard.js +9 -9
  48. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +4 -4
  49. package/Libraries/Components/Pressable/Pressable.js +4 -4
  50. package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
  51. package/Libraries/Components/Pressable/useAndroidRippleForView.js +9 -9
  52. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +10 -11
  53. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +1 -1
  54. package/Libraries/Components/RefreshControl/RefreshControl.js +9 -9
  55. package/Libraries/Components/ScrollView/ScrollView.js +32 -26
  56. package/Libraries/Components/ScrollView/ScrollViewCommands.js +2 -2
  57. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +2 -2
  58. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
  59. package/Libraries/Components/ScrollView/processDecelerationRate.js +1 -1
  60. package/Libraries/Components/Sound/SoundManager.js +1 -1
  61. package/Libraries/Components/StaticRenderer.js +4 -4
  62. package/Libraries/Components/StatusBar/StatusBar.js +33 -18
  63. package/Libraries/Components/Switch/Switch.js +6 -6
  64. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +31 -31
  65. package/Libraries/Components/TextInput/InputAccessoryView.js +2 -2
  66. package/Libraries/Components/TextInput/TextInput.flow.js +35 -35
  67. package/Libraries/Components/TextInput/TextInput.js +35 -35
  68. package/Libraries/Components/TextInput/TextInput.win32.js +35 -35
  69. package/Libraries/Components/TextInput/TextInputNativeCommands.js +1 -1
  70. package/Libraries/Components/ToastAndroid/ToastAndroid.d.ts +68 -6
  71. package/Libraries/Components/Touchable/TouchableBounce.js +5 -5
  72. package/Libraries/Components/Touchable/TouchableHighlight.js +11 -11
  73. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +14 -14
  74. package/Libraries/Components/Touchable/TouchableNativeFeedback.win32.js +6 -6
  75. package/Libraries/Components/Touchable/TouchableOpacity.js +6 -6
  76. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
  77. package/Libraries/Components/UnimplementedViews/UnimplementedView.js +9 -1
  78. package/Libraries/Components/View/ViewAccessibility.js +2 -2
  79. package/Libraries/Components/View/ViewAccessibility.win32.js +2 -2
  80. package/Libraries/Components/View/ViewPropTypes.js +22 -22
  81. package/Libraries/Components/View/ViewPropTypes.win32.js +22 -22
  82. package/Libraries/Core/RawEventEmitter.js +2 -2
  83. package/Libraries/Core/ReactNativeVersion.js +3 -5
  84. package/Libraries/Core/Timers/JSTimers.js +3 -3
  85. package/Libraries/Core/polyfillPromise.js +1 -1
  86. package/Libraries/Core/registerCallableModule.js +1 -1
  87. package/Libraries/Core/setUpAlert.js +1 -1
  88. package/Libraries/Core/setUpDeveloperTools.js +0 -2
  89. package/Libraries/Core/setUpErrorHandling.js +6 -1
  90. package/Libraries/Core/setUpReactDevTools.js +1 -1
  91. package/Libraries/Core/setUpTimers.js +35 -56
  92. package/Libraries/Core/setUpXHR.js +5 -5
  93. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
  94. package/Libraries/Events/CustomEvent.js +2 -2
  95. package/Libraries/Image/AssetRegistry.js +6 -1
  96. package/Libraries/Image/AssetSourceResolver.js +2 -2
  97. package/Libraries/Image/ImageProps.js +17 -17
  98. package/Libraries/Image/nativeImageSource.js +2 -2
  99. package/Libraries/Inspector/ElementProperties.js +4 -3
  100. package/Libraries/Inspector/Inspector.js +1 -1
  101. package/Libraries/Inspector/Inspector.win32.js +1 -1
  102. package/Libraries/Inspector/InspectorOverlay.js +4 -3
  103. package/Libraries/Inspector/InspectorOverlay.win32.js +3 -3
  104. package/Libraries/Inspector/InspectorPanel.js +6 -6
  105. package/Libraries/Inspector/NetworkOverlay.js +6 -5
  106. package/Libraries/Inspector/PerformanceOverlay.js +2 -1
  107. package/Libraries/Inspector/resolveBoxStyle.js +2 -2
  108. package/Libraries/Interaction/InteractionManager.js +3 -2
  109. package/Libraries/Interaction/PanResponder.js +6 -6
  110. package/Libraries/Interaction/TouchHistoryMath.js +26 -0
  111. package/Libraries/JSInspector/NetworkAgent.js +2 -1
  112. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
  113. package/Libraries/Linking/Linking.js +0 -1
  114. package/Libraries/Lists/FlatList.js +9 -10
  115. package/Libraries/Lists/SectionList.js +7 -9
  116. package/Libraries/Lists/SectionListModern.js +6 -6
  117. package/Libraries/LogBox/Data/LogBoxData.js +14 -14
  118. package/Libraries/LogBox/Data/LogBoxLog.js +51 -29
  119. package/Libraries/LogBox/Data/parseLogBoxLog.js +10 -10
  120. package/Libraries/LogBox/LogBox.js +13 -1
  121. package/Libraries/LogBox/LogBoxInspectorContainer.js +3 -3
  122. package/Libraries/LogBox/LogBoxNotificationContainer.js +3 -3
  123. package/Libraries/LogBox/UI/LogBoxButton.js +4 -4
  124. package/Libraries/LogBox/UI/LogBoxInspectorBody.js +8 -2
  125. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +50 -31
  126. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +50 -31
  127. package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +2 -2
  128. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +2 -2
  129. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +2 -2
  130. package/Libraries/LogBox/UI/LogBoxInspectorSection.js +2 -2
  131. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +2 -2
  132. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +2 -2
  133. package/Libraries/Modal/Modal.js +7 -7
  134. package/Libraries/Network/XMLHttpRequest.js +1 -1
  135. package/Libraries/Network/convertRequestBody.js +3 -1
  136. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  137. package/Libraries/Pressability/Pressability.js +10 -10
  138. package/Libraries/Pressability/Pressability.win32.js +10 -10
  139. package/Libraries/Pressability/PressabilityDebug.js +2 -2
  140. package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +2 -2
  141. package/Libraries/Promise.js +2 -2
  142. package/Libraries/ReactNative/AppContainer.js +2 -2
  143. package/Libraries/ReactNative/BridgelessUIManager.js +3 -8
  144. package/Libraries/ReactNative/I18nManager.js +3 -2
  145. package/Libraries/ReactNative/PaperUIManager.js +1 -1
  146. package/Libraries/ReactNative/PaperUIManager.win32.js +1 -1
  147. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +2 -2
  148. package/Libraries/ReactNative/ReactNativeRuntimeDiagnostics.js +2 -2
  149. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +3 -2
  150. package/Libraries/StyleSheet/Rect.js +2 -2
  151. package/Libraries/StyleSheet/StyleSheet.js +1 -1
  152. package/Libraries/StyleSheet/StyleSheet.win32.js +1 -1
  153. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
  154. package/Libraries/StyleSheet/private/_TransformStyle.js +18 -18
  155. package/Libraries/StyleSheet/processBackgroundImage.js +138 -136
  156. package/Libraries/Text/TextAncestor.js +1 -2
  157. package/Libraries/TurboModule/TurboModuleRegistry.js +1 -1
  158. package/Libraries/Types/CodegenTypes.js +2 -1
  159. package/Libraries/Types/CoreEventTypes.js +40 -40
  160. package/Libraries/Types/CoreEventTypes.win32.js +40 -40
  161. package/Libraries/UTFSequence.js +2 -2
  162. package/Libraries/Utilities/BackHandler.android.js +2 -2
  163. package/Libraries/Utilities/BackHandler.ios.js +2 -2
  164. package/Libraries/Utilities/BackHandler.win32.js +2 -2
  165. package/Libraries/Utilities/HMRClient.js +2 -2
  166. package/Libraries/Utilities/Platform.android.js +4 -4
  167. package/Libraries/Utilities/Platform.flow.js +8 -8
  168. package/Libraries/Utilities/Platform.flow.win32.js +8 -8
  169. package/Libraries/Utilities/Platform.ios.js +4 -4
  170. package/Libraries/Utilities/Platform.win32.js +2 -2
  171. package/Libraries/Utilities/ReactNativeTestTools.js +3 -2
  172. package/Libraries/Utilities/codegenNativeCommands.js +2 -2
  173. package/Libraries/Utilities/codegenNativeComponent.js +2 -2
  174. package/Libraries/Utilities/differ/deepDiffer.js +3 -3
  175. package/Libraries/Utilities/stringifySafe.js +2 -2
  176. package/Libraries/Vibration/Vibration.js +1 -1
  177. package/Libraries/WebSocket/WebSocketEvent.js +1 -1
  178. package/Libraries/YellowBox/YellowBoxDeprecated.js +4 -3
  179. package/Libraries/vendor/core/ErrorUtils.js +1 -1
  180. package/flow/jest.js +14 -14
  181. package/index.js +16 -13
  182. package/index.win32.js +16 -13
  183. package/jest/setup.js +214 -197
  184. package/overrides.json +26 -26
  185. package/package.json +16 -16
  186. package/src/private/featureflags/ReactNativeFeatureFlags.js +11 -30
  187. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -2
  188. package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +2 -2
  189. package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +6 -6
  190. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +2 -2
  191. package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
  192. package/src/private/specs/components/AndroidSwitchNativeComponent.js +4 -4
  193. package/src/private/specs/components/DebuggingOverlayNativeComponent.js +2 -2
  194. package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +2 -2
  195. package/src/private/specs/components/PullToRefreshViewNativeComponent.js +2 -2
  196. package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +2 -2
  197. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +4 -4
  198. package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +2 -2
  199. package/src/private/specs/components/SwitchNativeComponent.js +4 -4
  200. package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +2 -2
  201. package/src/private/specs/modules/NativeAccessibilityManager.js +2 -2
  202. package/src/private/specs/modules/NativeActionSheetManager.js +7 -7
  203. package/src/private/specs/modules/NativeAlertManager.js +2 -2
  204. package/src/private/specs/modules/NativeAnimatedModule.js +2 -2
  205. package/src/private/specs/modules/NativeAnimatedTurboModule.js +2 -2
  206. package/src/private/specs/modules/NativeAppState.js +3 -3
  207. package/src/private/specs/modules/NativeBlobModule.js +1 -1
  208. package/src/private/specs/modules/NativeClipboard.js +1 -1
  209. package/src/private/specs/modules/NativeDeviceInfo.js +8 -8
  210. package/src/private/specs/modules/NativeDialogManagerAndroid.js +4 -4
  211. package/src/private/specs/modules/NativeExceptionsManager.js +2 -2
  212. package/src/private/specs/modules/NativeFantom.js +6 -0
  213. package/src/private/specs/modules/NativeFrameRateLogger.js +1 -1
  214. package/src/private/specs/modules/NativeI18nManager.js +2 -2
  215. package/src/private/specs/modules/NativeImageEditor.js +9 -9
  216. package/src/private/specs/modules/NativeImageLoaderAndroid.js +1 -1
  217. package/src/private/specs/modules/NativeImageLoaderIOS.js +1 -1
  218. package/src/private/specs/modules/NativeImageLoaderWin32.js +1 -1
  219. package/src/private/specs/modules/NativeImageStoreAndroid.js +1 -1
  220. package/src/private/specs/modules/NativeImageStoreIOS.js +3 -3
  221. package/src/private/specs/modules/NativeNetworkingIOS.js +2 -2
  222. package/src/private/specs/modules/NativePlatformConstantsAndroid.js +4 -4
  223. package/src/private/specs/modules/NativePlatformConstantsIOS.js +4 -4
  224. package/src/private/specs/modules/NativePlatformConstantsWin.js +5 -10
  225. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +7 -7
  226. package/src/private/specs/modules/NativeSampleTurboModule.js +2 -2
  227. package/src/private/specs/modules/NativeSettingsManager.js +2 -2
  228. package/src/private/specs/modules/NativeShareModule.js +3 -3
  229. package/src/private/specs/modules/NativeSourceCode.js +2 -2
  230. package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +4 -4
  231. package/src/private/specs/modules/NativeStatusBarManagerIOS.js +6 -6
  232. package/src/private/specs/modules/NativeToastAndroid.js +2 -2
  233. package/src/private/specs/modules/NativeVibration.js +1 -1
  234. package/src/private/specs/modules/NativeWebSocketModule.js +1 -1
  235. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +2 -2
  236. package/src/private/webapis/intersectionobserver/{IntersectionObserverManager.js → internals/IntersectionObserverManager.js} +9 -9
  237. package/src/private/webapis/mutationobserver/MutationObserver.js +2 -2
  238. package/src/private/webapis/mutationobserver/{MutationObserverManager.js → internals/MutationObserverManager.js} +8 -8
  239. package/src/private/webapis/performance/EventTiming.js +1 -1
  240. package/src/private/webapis/performance/Performance.js +3 -3
  241. package/src/private/webapis/performance/PerformanceObserver.js +2 -2
  242. package/src/private/webapis/performance/{RawPerformanceEntry.js → internals/RawPerformanceEntry.js} +6 -6
  243. package/src/private/webapis/performance/{Utilities.js → internals/Utilities.js} +1 -1
  244. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +1 -1
@@ -174,13 +174,13 @@ const LayoutAnimation = {
174
174
  easeIn: 'easeIn',
175
175
  easeOut: 'easeOut',
176
176
  keyboard: 'keyboard',
177
- }),
177
+ }) as $ReadOnly<{[K in LayoutAnimationType]: K}>,
178
178
  Properties: Object.freeze({
179
179
  opacity: 'opacity',
180
180
  scaleX: 'scaleX',
181
181
  scaleY: 'scaleY',
182
182
  scaleXY: 'scaleXY',
183
- }),
183
+ }) as $ReadOnly<{[K in LayoutAnimationProperty]: K}>,
184
184
  checkConfig(...args: Array<mixed>) {
185
185
  console.error('LayoutAnimation.checkConfig(...) has been disabled.');
186
186
  },
@@ -41,7 +41,6 @@ class Linking extends NativeEventEmitter<LinkingEventDefinitions> {
41
41
  addEventListener<K: $Keys<LinkingEventDefinitions>>(
42
42
  eventType: K,
43
43
  listener: (...$ElementType<LinkingEventDefinitions, K>) => mixed,
44
- context: $FlowFixMe,
45
44
  ): EventSubscription {
46
45
  return this.addListener(eventType, listener);
47
46
  }
@@ -19,27 +19,27 @@ import type {
19
19
 
20
20
  import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNativeFeatureFlags';
21
21
  import {type ScrollResponderType} from '../Components/ScrollView/ScrollView';
22
+ import View from '../Components/View/View';
22
23
  import {
23
24
  VirtualizedList,
24
25
  keyExtractor as defaultKeyExtractor,
25
26
  } from '@react-native/virtualized-lists';
26
27
  import memoizeOne from 'memoize-one';
28
+ import React from 'react';
27
29
 
28
- const View = require('../Components/View/View');
29
30
  const StyleSheet = require('../StyleSheet/StyleSheet');
30
31
  const deepDiffer = require('../Utilities/differ/deepDiffer');
31
32
  const Platform = require('../Utilities/Platform');
32
33
  const invariant = require('invariant');
33
- const React = require('react');
34
34
 
35
- type RequiredProps<ItemT> = {|
35
+ type RequiredProps<ItemT> = {
36
36
  /**
37
37
  * An array (or array-like list) of items to render. Other data types can be
38
38
  * used by targeting VirtualizedList directly.
39
39
  */
40
40
  data: ?$ReadOnly<$ArrayLike<ItemT>>,
41
- |};
42
- type OptionalProps<ItemT> = {|
41
+ };
42
+ type OptionalProps<ItemT> = {
43
43
  /**
44
44
  * Takes an item from `data` and renders it into the list. Example usage:
45
45
  *
@@ -150,7 +150,7 @@ type OptionalProps<ItemT> = {|
150
150
  * Enable an optimization to memoize the item renderer to prevent unnecessary rerenders.
151
151
  */
152
152
  strictMode?: boolean,
153
- |};
153
+ };
154
154
 
155
155
  /**
156
156
  * Default Props Helper Functions
@@ -176,10 +176,10 @@ function isArrayLike(data: mixed): boolean {
176
176
  return typeof Object(data).length === 'number';
177
177
  }
178
178
 
179
- type FlatListProps<ItemT> = {|
179
+ type FlatListProps<ItemT> = {
180
180
  ...RequiredProps<ItemT>,
181
181
  ...OptionalProps<ItemT>,
182
- |};
182
+ };
183
183
 
184
184
  type VirtualizedListProps = React.ElementConfig<typeof VirtualizedList>;
185
185
 
@@ -672,8 +672,7 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
672
672
  : {renderItem: renderProp};
673
673
  };
674
674
 
675
- // $FlowFixMe[missing-local-annot]
676
- _memoizedRenderer = memoizeOne(this._renderer);
675
+ _memoizedRenderer: ReturnType<typeof memoizeOne> = memoizeOne(this._renderer);
677
676
 
678
677
  render(): React.Node {
679
678
  const {
@@ -25,7 +25,7 @@ type Item = any;
25
25
 
26
26
  export type SectionBase<SectionItemT> = _SectionBase<SectionItemT>;
27
27
 
28
- type RequiredProps<SectionT: SectionBase<any>> = {|
28
+ type RequiredProps<SectionT: SectionBase<any>> = {
29
29
  /**
30
30
  * The actual data to render, akin to the `data` prop in [`<FlatList>`](https://reactnative.dev/docs/flatlist).
31
31
  *
@@ -38,9 +38,9 @@ type RequiredProps<SectionT: SectionBase<any>> = {|
38
38
  * }>
39
39
  */
40
40
  sections: $ReadOnlyArray<SectionT>,
41
- |};
41
+ };
42
42
 
43
- type OptionalProps<SectionT: SectionBase<any>> = {|
43
+ type OptionalProps<SectionT: SectionBase<any>> = {
44
44
  /**
45
45
  * Default renderer for every item in every section. Can be over-ridden on a per-section basis.
46
46
  */
@@ -90,9 +90,9 @@ type OptionalProps<SectionT: SectionBase<any>> = {|
90
90
  * This may improve scroll performance for large lists.
91
91
  */
92
92
  removeClippedSubviews?: boolean,
93
- |};
93
+ };
94
94
 
95
- export type Props<SectionT> = {|
95
+ export type Props<SectionT> = {
96
96
  ...$Diff<
97
97
  VirtualizedSectionListProps<SectionT>,
98
98
  {
@@ -114,7 +114,7 @@ export type Props<SectionT> = {|
114
114
  >,
115
115
  ...RequiredProps<SectionT>,
116
116
  ...OptionalProps<SectionT>,
117
- |};
117
+ };
118
118
 
119
119
  /**
120
120
  * A performant interface for rendering sectioned lists, supporting the most handy features:
@@ -261,9 +261,7 @@ export default class SectionList<
261
261
  }
262
262
 
263
263
  _wrapperListRef: ?React.ElementRef<typeof VirtualizedSectionList>;
264
- /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's
265
- * LTI update could not be added via codemod */
266
- _captureRef = ref => {
264
+ _captureRef = (ref: ?React.RefOf<VirtualizedSectionList>) => {
267
265
  this._wrapperListRef = ref;
268
266
  };
269
267
  }
@@ -26,7 +26,7 @@ type Item = any;
26
26
 
27
27
  export type SectionBase<SectionItemT> = _SectionBase<SectionItemT>;
28
28
 
29
- type RequiredProps<SectionT: SectionBase<any>> = {|
29
+ type RequiredProps<SectionT: SectionBase<any>> = {
30
30
  /**
31
31
  * The actual data to render, akin to the `data` prop in [`<FlatList>`](https://reactnative.dev/docs/flatlist).
32
32
  *
@@ -39,9 +39,9 @@ type RequiredProps<SectionT: SectionBase<any>> = {|
39
39
  * }>
40
40
  */
41
41
  sections: $ReadOnlyArray<SectionT>,
42
- |};
42
+ };
43
43
 
44
- type OptionalProps<SectionT: SectionBase<any>> = {|
44
+ type OptionalProps<SectionT: SectionBase<any>> = {
45
45
  /**
46
46
  * Default renderer for every item in every section. Can be over-ridden on a per-section basis.
47
47
  */
@@ -91,9 +91,9 @@ type OptionalProps<SectionT: SectionBase<any>> = {|
91
91
  * This may improve scroll performance for large lists.
92
92
  */
93
93
  removeClippedSubviews?: boolean,
94
- |};
94
+ };
95
95
 
96
- export type Props<SectionT: SectionBase<any>> = $ReadOnly<{|
96
+ export type Props<SectionT: SectionBase<any>> = $ReadOnly<{
97
97
  ...$Diff<
98
98
  VirtualizedSectionListProps<SectionT>,
99
99
  {
@@ -115,7 +115,7 @@ export type Props<SectionT: SectionBase<any>> = $ReadOnly<{|
115
115
  >,
116
116
  ...RequiredProps<SectionT>,
117
117
  ...OptionalProps<SectionT>,
118
- |}>;
118
+ }>;
119
119
 
120
120
  /**
121
121
  * A performant interface for rendering sectioned lists, supporting the most handy features:
@@ -37,20 +37,20 @@ export type LogData = $ReadOnly<{
37
37
  }>;
38
38
 
39
39
  export type Observer = (
40
- $ReadOnly<{|
40
+ $ReadOnly<{
41
41
  logs: LogBoxLogs,
42
42
  isDisabled: boolean,
43
43
  selectedLogIndex: number,
44
- |}>,
44
+ }>,
45
45
  ) => void;
46
46
 
47
47
  export type IgnorePattern = string | RegExp;
48
48
 
49
- export type Subscription = $ReadOnly<{|
49
+ export type Subscription = $ReadOnly<{
50
50
  unsubscribe: () => void,
51
- |}>;
51
+ }>;
52
52
 
53
- export type WarningInfo = {|
53
+ export type WarningInfo = {
54
54
  finalFormat: string,
55
55
  forceDialogImmediately: boolean,
56
56
  suppressDialog_LEGACY: boolean,
@@ -58,15 +58,15 @@ export type WarningInfo = {|
58
58
  monitorEvent: string | null,
59
59
  monitorListVersion: number,
60
60
  monitorSampleRate: number,
61
- |};
61
+ };
62
62
 
63
63
  export type WarningFilter = (format: string) => WarningInfo;
64
64
 
65
- type AppInfo = $ReadOnly<{|
65
+ type AppInfo = $ReadOnly<{
66
66
  appVersion: string,
67
67
  engine: string,
68
68
  onPress?: ?() => void,
69
- |}>;
69
+ }>;
70
70
 
71
71
  const observers: Set<{observer: Observer, ...}> = new Set();
72
72
  const ignorePatterns: Set<IgnorePattern> = new Set();
@@ -413,25 +413,25 @@ export function observe(observer: Observer): Subscription {
413
413
  };
414
414
  }
415
415
 
416
- type Props = $ReadOnly<{||}>;
417
- type State = $ReadOnly<{|
416
+ type Props = $ReadOnly<{}>;
417
+ type State = $ReadOnly<{
418
418
  logs: LogBoxLogs,
419
419
  isDisabled: boolean,
420
420
  hasError: boolean,
421
421
  selectedLogIndex: number,
422
- |}>;
422
+ }>;
423
423
 
424
424
  type SubscribedComponent = React.ComponentType<
425
- $ReadOnly<{|
425
+ $ReadOnly<{
426
426
  logs: $ReadOnlyArray<LogBoxLog>,
427
427
  isDisabled: boolean,
428
428
  selectedLogIndex: number,
429
- |}>,
429
+ }>,
430
430
  >;
431
431
 
432
432
  export function withSubscription(
433
433
  WrappedComponent: SubscribedComponent,
434
- ): React.ComponentType<{||}> {
434
+ ): React.ComponentType<{}> {
435
435
  class LogBoxStateSubscription extends React.Component<Props, State> {
436
436
  static getDerivedStateFromError(): {hasError: boolean} {
437
437
  return {hasError: true};
@@ -79,26 +79,27 @@ class LogBoxLog {
79
79
  count: number;
80
80
  level: LogLevel;
81
81
  codeFrame: ?CodeFrame;
82
+ componentCodeFrame: ?CodeFrame;
82
83
  isComponentError: boolean;
83
84
  extraData: mixed | void;
84
85
  symbolicated:
85
- | $ReadOnly<{|error: null, stack: null, status: 'NONE'|}>
86
- | $ReadOnly<{|error: null, stack: null, status: 'PENDING'|}>
87
- | $ReadOnly<{|error: null, stack: Stack, status: 'COMPLETE'|}>
88
- | $ReadOnly<{|error: Error, stack: null, status: 'FAILED'|}> = {
86
+ | $ReadOnly<{error: null, stack: null, status: 'NONE'}>
87
+ | $ReadOnly<{error: null, stack: null, status: 'PENDING'}>
88
+ | $ReadOnly<{error: null, stack: Stack, status: 'COMPLETE'}>
89
+ | $ReadOnly<{error: Error, stack: null, status: 'FAILED'}> = {
89
90
  error: null,
90
91
  stack: null,
91
92
  status: 'NONE',
92
93
  };
93
94
  symbolicatedComponentStack:
94
- | $ReadOnly<{|error: null, componentStack: null, status: 'NONE'|}>
95
- | $ReadOnly<{|error: null, componentStack: null, status: 'PENDING'|}>
96
- | $ReadOnly<{|
95
+ | $ReadOnly<{error: null, componentStack: null, status: 'NONE'}>
96
+ | $ReadOnly<{error: null, componentStack: null, status: 'PENDING'}>
97
+ | $ReadOnly<{
97
98
  error: null,
98
99
  componentStack: ComponentStack,
99
100
  status: 'COMPLETE',
100
- |}>
101
- | $ReadOnly<{|error: Error, componentStack: null, status: 'FAILED'|}> = {
101
+ }>
102
+ | $ReadOnly<{error: Error, componentStack: null, status: 'FAILED'}> = {
102
103
  error: null,
103
104
  componentStack: null,
104
105
  status: 'NONE',
@@ -140,8 +141,18 @@ class LogBoxLog {
140
141
  }
141
142
 
142
143
  retrySymbolicate(callback?: (status: SymbolicationStatus) => void): void {
144
+ let retry = false;
143
145
  if (this.symbolicated.status !== 'COMPLETE') {
144
146
  LogBoxSymbolication.deleteStack(this.stack);
147
+ retry = true;
148
+ }
149
+ if (this.symbolicatedComponentStack.status !== 'COMPLETE') {
150
+ LogBoxSymbolication.deleteStack(
151
+ convertComponentStateToStack(this.componentStack),
152
+ );
153
+ retry = true;
154
+ }
155
+ if (retry) {
145
156
  this.handleSymbolicate(callback);
146
157
  }
147
158
  }
@@ -153,7 +164,10 @@ class LogBoxLog {
153
164
  }
154
165
 
155
166
  handleSymbolicate(callback?: (status: SymbolicationStatus) => void): void {
156
- if (this.symbolicated.status !== 'PENDING') {
167
+ if (
168
+ this.symbolicated.status !== 'PENDING' &&
169
+ this.symbolicated.status !== 'COMPLETE'
170
+ ) {
157
171
  this.updateStatus(null, null, null, callback);
158
172
  LogBoxSymbolication.symbolicate(this.stack, this.extraData).then(
159
173
  data => {
@@ -163,25 +177,30 @@ class LogBoxLog {
163
177
  this.updateStatus(error, null, null, callback);
164
178
  },
165
179
  );
166
- if (this.componentStack != null && this.componentStackType === 'stack') {
167
- this.updateComponentStackStatus(null, null, null, callback);
168
- const componentStackFrames = convertComponentStateToStack(
169
- this.componentStack,
170
- );
171
- LogBoxSymbolication.symbolicate(componentStackFrames, []).then(
172
- data => {
173
- this.updateComponentStackStatus(
174
- null,
175
- convertStackToComponentStack(data.stack),
176
- null,
177
- callback,
178
- );
179
- },
180
- error => {
181
- this.updateComponentStackStatus(error, null, null, callback);
182
- },
183
- );
184
- }
180
+ }
181
+ if (
182
+ this.componentStack != null &&
183
+ this.componentStackType === 'stack' &&
184
+ this.symbolicatedComponentStack.status !== 'PENDING' &&
185
+ this.symbolicatedComponentStack.status !== 'COMPLETE'
186
+ ) {
187
+ this.updateComponentStackStatus(null, null, null, callback);
188
+ const componentStackFrames = convertComponentStateToStack(
189
+ this.componentStack,
190
+ );
191
+ LogBoxSymbolication.symbolicate(componentStackFrames, []).then(
192
+ data => {
193
+ this.updateComponentStackStatus(
194
+ null,
195
+ convertStackToComponentStack(data.stack),
196
+ data?.codeFrame,
197
+ callback,
198
+ );
199
+ },
200
+ error => {
201
+ this.updateComponentStackStatus(error, null, null, callback);
202
+ },
203
+ );
185
204
  }
186
205
  }
187
206
 
@@ -235,6 +254,9 @@ class LogBoxLog {
235
254
  status: 'FAILED',
236
255
  };
237
256
  } else if (componentStack != null) {
257
+ if (codeFrame) {
258
+ this.componentCodeFrame = codeFrame;
259
+ }
238
260
  this.symbolicatedComponentStack = {
239
261
  error: null,
240
262
  componentStack,
@@ -107,7 +107,7 @@ export type ExtendedExceptionData = ExceptionData & {
107
107
  ...
108
108
  };
109
109
  export type Category = string;
110
- export type CodeFrame = $ReadOnly<{|
110
+ export type CodeFrame = $ReadOnly<{
111
111
  content: string,
112
112
  location: ?{
113
113
  row: number,
@@ -120,26 +120,26 @@ export type CodeFrame = $ReadOnly<{|
120
120
  // we gained the ability to use the collapse flag, but
121
121
  // it is not integrated into the LogBox UI.
122
122
  collapse?: boolean,
123
- |}>;
124
- export type Message = $ReadOnly<{|
123
+ }>;
124
+ export type Message = $ReadOnly<{
125
125
  content: string,
126
126
  substitutions: $ReadOnlyArray<
127
- $ReadOnly<{|
127
+ $ReadOnly<{
128
128
  length: number,
129
129
  offset: number,
130
- |}>,
130
+ }>,
131
131
  >,
132
- |}>;
132
+ }>;
133
133
 
134
134
  export type ComponentStack = $ReadOnlyArray<CodeFrame>;
135
135
  export type ComponentStackType = 'legacy' | 'stack';
136
136
 
137
137
  const SUBSTITUTION = UTFSequence.BOM + '%s';
138
138
 
139
- export function parseInterpolation(args: $ReadOnlyArray<mixed>): $ReadOnly<{|
139
+ export function parseInterpolation(args: $ReadOnlyArray<mixed>): $ReadOnly<{
140
140
  category: Category,
141
141
  message: Message,
142
- |}> {
142
+ }> {
143
143
  const categoryParts = [];
144
144
  const contentParts = [];
145
145
  const substitutionOffsets = [];
@@ -456,12 +456,12 @@ export function withoutANSIColorStyles(message: mixed): mixed {
456
456
  );
457
457
  }
458
458
 
459
- export function parseLogBoxLog(args: $ReadOnlyArray<mixed>): {|
459
+ export function parseLogBoxLog(args: $ReadOnlyArray<mixed>): {
460
460
  componentStack: ComponentStack,
461
461
  componentStackType: ComponentStackType,
462
462
  category: Category,
463
463
  message: Message,
464
- |} {
464
+ } {
465
465
  const message = withoutANSIColorStyles(args[0]);
466
466
  let argsWithoutComponentStack: Array<mixed> = [];
467
467
  let componentStack: ComponentStack = [];
@@ -14,6 +14,7 @@ import type {ExtendedExceptionData} from './Data/parseLogBoxLog';
14
14
  import Platform from '../Utilities/Platform';
15
15
  import RCTLog from '../Utilities/RCTLog';
16
16
  import {hasComponentStack} from './Data/parseLogBoxLog';
17
+ import * as React from 'react';
17
18
 
18
19
  export type {LogData, ExtendedExceptionData, IgnorePattern};
19
20
 
@@ -192,9 +193,20 @@ if (__DEV__) {
192
193
  }
193
194
 
194
195
  try {
196
+ let stack;
197
+ // $FlowFixMe[prop-missing] Not added to flow types yet.
198
+ if (!hasComponentStack(args) && React.captureOwnerStack != null) {
199
+ stack = React.captureOwnerStack();
200
+ if (!hasComponentStack(args)) {
201
+ if (stack !== '') {
202
+ args[0] = args[0] += '%s';
203
+ args.push(stack);
204
+ }
205
+ }
206
+ }
195
207
  if (!isWarningModuleWarning(...args) && !hasComponentStack(args)) {
196
208
  // Only show LogBox for the 'warning' module, or React errors with
197
- // component stacks, otherwise pass the error through.u
209
+ // component stacks, otherwise pass the error through.
198
210
  //
199
211
  // By passing through, this will get picked up by the React console override,
200
212
  // potentially adding the component stack. React then passes it back to the
@@ -16,11 +16,11 @@ import * as LogBoxData from './Data/LogBoxData';
16
16
  import LogBoxInspector from './UI/LogBoxInspector';
17
17
  import * as React from 'react';
18
18
 
19
- type Props = $ReadOnly<{|
19
+ type Props = $ReadOnly<{
20
20
  logs: $ReadOnlyArray<LogBoxLog>,
21
21
  selectedLogIndex: number,
22
22
  isDisabled?: ?boolean,
23
- |}>;
23
+ }>;
24
24
 
25
25
  export class _LogBoxInspectorContainer extends React.Component<Props> {
26
26
  render(): React.Node {
@@ -65,4 +65,4 @@ export class _LogBoxInspectorContainer extends React.Component<Props> {
65
65
 
66
66
  export default (LogBoxData.withSubscription(
67
67
  _LogBoxInspectorContainer,
68
- ): React.ComponentType<{||}>);
68
+ ): React.ComponentType<{}>);
@@ -16,11 +16,11 @@ import LogBoxLog from './Data/LogBoxLog';
16
16
  import LogBoxLogNotification from './UI/LogBoxNotification';
17
17
  import * as React from 'react';
18
18
 
19
- type Props = $ReadOnly<{|
19
+ type Props = $ReadOnly<{
20
20
  logs: $ReadOnlyArray<LogBoxLog>,
21
21
  selectedLogIndex: number,
22
22
  isDisabled?: ?boolean,
23
- |}>;
23
+ }>;
24
24
 
25
25
  export function _LogBoxNotificationContainer(props: Props): React.Node {
26
26
  const {logs} = props;
@@ -102,4 +102,4 @@ const styles = StyleSheet.create({
102
102
 
103
103
  export default (LogBoxData.withSubscription(
104
104
  _LogBoxNotificationContainer,
105
- ): React.ComponentType<{||}>);
105
+ ): React.ComponentType<{}>);
@@ -18,16 +18,16 @@ import StyleSheet from '../../StyleSheet/StyleSheet';
18
18
  import * as LogBoxStyle from './LogBoxStyle';
19
19
  import * as React from 'react';
20
20
 
21
- type Props = $ReadOnly<{|
22
- backgroundColor: $ReadOnly<{|
21
+ type Props = $ReadOnly<{
22
+ backgroundColor: $ReadOnly<{
23
23
  default: string,
24
24
  pressed: string,
25
- |}>,
25
+ }>,
26
26
  children?: React.Node,
27
27
  hitSlop?: ?EdgeInsetsProp,
28
28
  onPress?: ?(event: PressEvent) => void,
29
29
  style?: ViewStyleProp,
30
- |}>;
30
+ }>;
31
31
 
32
32
  function LogBoxButton(props: Props): React.Node {
33
33
  const [pressed, setPressed] = React.useState(false);
@@ -52,7 +52,10 @@ export default function LogBoxInspectorBody(props: {
52
52
  title={headerTitle}
53
53
  />
54
54
  <ScrollView style={styles.scrollBody}>
55
- <LogBoxInspectorCodeFrame codeFrame={props.log.codeFrame} />
55
+ <LogBoxInspectorCodeFrame
56
+ codeFrame={props.log.codeFrame}
57
+ componentCodeFrame={props.log.componentCodeFrame}
58
+ />
56
59
  <LogBoxInspectorReactFrames log={props.log} />
57
60
  <LogBoxInspectorStackFrames log={props.log} onRetry={props.onRetry} />
58
61
  </ScrollView>
@@ -68,7 +71,10 @@ export default function LogBoxInspectorBody(props: {
68
71
  level={props.log.level}
69
72
  title={headerTitle}
70
73
  />
71
- <LogBoxInspectorCodeFrame codeFrame={props.log.codeFrame} />
74
+ <LogBoxInspectorCodeFrame
75
+ codeFrame={props.log.codeFrame}
76
+ componentCodeFrame={props.log.componentCodeFrame}
77
+ />
72
78
  <LogBoxInspectorReactFrames log={props.log} />
73
79
  <LogBoxInspectorStackFrames log={props.log} onRetry={props.onRetry} />
74
80
  </ScrollView>
@@ -22,16 +22,13 @@ import LogBoxButton from './LogBoxButton';
22
22
  import LogBoxInspectorSection from './LogBoxInspectorSection';
23
23
  import * as LogBoxStyle from './LogBoxStyle';
24
24
  import * as React from 'react';
25
- type Props = $ReadOnly<{|
26
- codeFrame: ?CodeFrame,
27
- |}>;
28
25
 
29
- function LogBoxInspectorCodeFrame(props: Props): React.Node {
30
- const codeFrame = props.codeFrame;
31
- if (codeFrame == null) {
32
- return null;
33
- }
26
+ type Props = $ReadOnly<{
27
+ componentCodeFrame: ?CodeFrame,
28
+ codeFrame: ?CodeFrame,
29
+ }>;
34
30
 
31
+ function CodeFrameDisplay({codeFrame}: {codeFrame: CodeFrame}): React.Node {
35
32
  function getFileName() {
36
33
  // $FlowFixMe[incompatible-use]
37
34
  const matches = /[^/]*$/.exec(codeFrame.fileName);
@@ -56,30 +53,52 @@ function LogBoxInspectorCodeFrame(props: Props): React.Node {
56
53
  }
57
54
 
58
55
  return (
59
- <LogBoxInspectorSection heading="Source" action={<AppInfo />}>
60
- <View style={styles.box}>
61
- <View style={styles.frame}>
62
- <ScrollView
63
- horizontal
64
- contentContainerStyle={styles.contentContainer}>
65
- <AnsiHighlight style={styles.content} text={codeFrame.content} />
66
- </ScrollView>
67
- </View>
68
- <LogBoxButton
69
- backgroundColor={{
70
- default: 'transparent',
71
- pressed: LogBoxStyle.getBackgroundDarkColor(1),
72
- }}
73
- style={styles.button}
74
- onPress={() => {
75
- openFileInEditor(codeFrame.fileName, codeFrame.location?.row ?? 0);
76
- }}>
77
- <Text style={styles.fileText}>
78
- {getFileName()}
79
- {getLocation()}
80
- </Text>
81
- </LogBoxButton>
56
+ <View style={styles.box}>
57
+ <View style={styles.frame}>
58
+ <ScrollView horizontal contentContainerStyle={styles.contentContainer}>
59
+ <AnsiHighlight style={styles.content} text={codeFrame.content} />
60
+ </ScrollView>
82
61
  </View>
62
+ <LogBoxButton
63
+ backgroundColor={{
64
+ default: 'transparent',
65
+ pressed: LogBoxStyle.getBackgroundDarkColor(1),
66
+ }}
67
+ style={styles.button}
68
+ onPress={() => {
69
+ openFileInEditor(codeFrame.fileName, codeFrame.location?.row ?? 0);
70
+ }}>
71
+ <Text style={styles.fileText}>
72
+ {getFileName()}
73
+ {getLocation()}
74
+ </Text>
75
+ </LogBoxButton>
76
+ </View>
77
+ );
78
+ }
79
+
80
+ function LogBoxInspectorCodeFrame(props: Props): React.Node {
81
+ const {codeFrame, componentCodeFrame} = props;
82
+ let sources = [];
83
+ if (codeFrame != null) {
84
+ sources.push(codeFrame);
85
+ }
86
+ if (
87
+ componentCodeFrame != null &&
88
+ componentCodeFrame?.content !== codeFrame?.content
89
+ ) {
90
+ sources.push(componentCodeFrame);
91
+ }
92
+ if (sources.length === 0) {
93
+ return null;
94
+ }
95
+ return (
96
+ <LogBoxInspectorSection
97
+ heading={sources.length > 1 ? 'Sources' : 'Source'}
98
+ action={<AppInfo />}>
99
+ {sources.map((frame, index) => (
100
+ <CodeFrameDisplay key={index} codeFrame={frame} />
101
+ ))}
83
102
  </LogBoxInspectorSection>
84
103
  );
85
104
  }