@office-iss/react-native-win32 0.74.4 → 0.75.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 (206) hide show
  1. package/.flowconfig +9 -4
  2. package/CHANGELOG.json +554 -51
  3. package/CHANGELOG.md +165 -30
  4. package/Libraries/Animated/AnimatedImplementation.js +2 -0
  5. package/Libraries/Animated/NativeAnimatedHelper.js +4 -0
  6. package/Libraries/Animated/NativeAnimatedHelper.win32.js +4 -0
  7. package/Libraries/Animated/createAnimatedComponent.js +10 -4
  8. package/Libraries/Animated/useAnimatedProps.js +56 -28
  9. package/Libraries/BatchedBridge/MessageQueue.js +1 -0
  10. package/Libraries/Components/Button.js +10 -5
  11. package/Libraries/Components/Button.win32.js +1 -0
  12. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +11 -2
  13. package/Libraries/Components/Pressable/Pressable.js +13 -6
  14. package/Libraries/Components/Pressable/Pressable.win32.js +13 -6
  15. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +4 -0
  16. package/Libraries/Components/ScrollView/ScrollView.js +109 -29
  17. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +6 -0
  18. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +13 -1
  19. package/Libraries/Components/StatusBar/StatusBar.js +1 -21
  20. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +0 -15
  21. package/Libraries/Components/TextInput/InputAccessoryView.js +10 -1
  22. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +0 -12
  23. package/Libraries/Components/TextInput/TextInput.d.ts +0 -19
  24. package/Libraries/Components/TextInput/TextInput.js +14 -70
  25. package/Libraries/Components/TextInput/TextInput.win32.js +15 -72
  26. package/Libraries/Components/Touchable/Touchable.js +2 -2
  27. package/Libraries/Components/Touchable/TouchableHighlight.d.ts +4 -10
  28. package/Libraries/Components/Touchable/TouchableHighlight.js +3 -1
  29. package/Libraries/Components/Touchable/TouchableOpacity.d.ts +4 -32
  30. package/Libraries/Components/Touchable/TouchableOpacity.js +3 -1
  31. package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +8 -0
  32. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +117 -111
  33. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -0
  34. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  35. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  36. package/Libraries/Components/View/View.js +0 -11
  37. package/Libraries/Components/View/View.win32.js +0 -11
  38. package/Libraries/Components/View/ViewAccessibility.js +4 -4
  39. package/Libraries/Components/View/ViewAccessibility.win32.js +6 -6
  40. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
  41. package/Libraries/Components/View/ViewPropTypes.js +7 -0
  42. package/Libraries/Components/View/ViewPropTypes.win32.js +7 -0
  43. package/Libraries/Core/Devtools/loadBundleFromServer.js +3 -3
  44. package/Libraries/Core/Devtools/loadBundleFromServer.win32.js +153 -0
  45. package/Libraries/Core/Devtools/parseErrorStack.js +5 -5
  46. package/Libraries/Core/Devtools/parseHermesStack.js +22 -16
  47. package/Libraries/Core/ErrorHandlers.js +116 -0
  48. package/Libraries/Core/ExceptionsManager.js +2 -2
  49. package/Libraries/Core/ReactNativeVersion.js +3 -3
  50. package/Libraries/Core/setUpDeveloperTools.js +3 -1
  51. package/Libraries/Core/setUpPerformance.js +6 -4
  52. package/Libraries/Core/setUpReactDevTools.js +70 -10
  53. package/Libraries/Core/setUpTimers.js +50 -31
  54. package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
  55. package/Libraries/Image/Image.android.js +23 -13
  56. package/Libraries/Image/Image.d.ts +14 -15
  57. package/Libraries/Image/Image.ios.js +21 -11
  58. package/Libraries/Image/Image.win32.js +5 -3
  59. package/Libraries/Image/ImageProps.js +16 -5
  60. package/Libraries/Image/ImageTypes.flow.js +7 -2
  61. package/Libraries/Image/ImageUtils.js +1 -0
  62. package/Libraries/Image/ImageViewNativeComponent.js +2 -1
  63. package/Libraries/Inspector/ElementBox.js +6 -3
  64. package/Libraries/Inspector/ElementProperties.js +1 -1
  65. package/Libraries/Interaction/TouchHistoryMath.js +4 -4
  66. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +6 -26
  67. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  68. package/Libraries/LogBox/Data/LogBoxData.js +39 -29
  69. package/Libraries/LogBox/Data/LogBoxLog.js +114 -2
  70. package/Libraries/LogBox/Data/parseLogBoxLog.js +168 -53
  71. package/Libraries/LogBox/LogBox.js +29 -12
  72. package/Libraries/LogBox/LogBoxNotificationContainer.js +4 -0
  73. package/Libraries/LogBox/UI/LogBoxInspector.js +8 -70
  74. package/Libraries/LogBox/UI/LogBoxInspectorBody.js +87 -0
  75. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -42
  76. package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +58 -0
  77. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +5 -66
  78. package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +8 -52
  79. package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +76 -0
  80. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +8 -5
  81. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +8 -5
  82. package/Libraries/LogBox/UI/LogBoxNotification.js +13 -152
  83. package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +63 -0
  84. package/Libraries/LogBox/UI/LogBoxNotificationDismissButton.js +67 -0
  85. package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +57 -0
  86. package/Libraries/NativeComponent/BaseViewConfig.android.js +5 -0
  87. package/Libraries/NativeComponent/BaseViewConfig.ios.js +5 -0
  88. package/Libraries/NativeComponent/BaseViewConfig.win32.js +5 -0
  89. package/Libraries/NativeComponent/NativeComponentRegistry.js +12 -5
  90. package/Libraries/NativeComponent/StaticViewConfigValidator.js +3 -0
  91. package/Libraries/Network/XMLHttpRequest.js +5 -1
  92. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +3 -3
  93. package/Libraries/Pressability/Pressability.js +3 -51
  94. package/Libraries/Pressability/Pressability.win32.js +3 -51
  95. package/Libraries/ReactNative/AppContainer-dev.js +3 -2
  96. package/Libraries/ReactNative/AppContainer-prod.js +2 -1
  97. package/Libraries/ReactNative/AppContainer.js +2 -0
  98. package/Libraries/ReactNative/AppRegistry.d.ts +7 -0
  99. package/Libraries/ReactNative/AppRegistry.js +10 -4
  100. package/Libraries/ReactNative/BridgelessUIManager.js +1 -21
  101. package/Libraries/ReactNative/FabricUIManager.js +0 -51
  102. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +1 -0
  103. package/Libraries/ReactNative/RendererImplementation.js +20 -2
  104. package/Libraries/ReactNative/UIManager.d.ts +0 -21
  105. package/Libraries/ReactNative/UIManagerProperties.js +0 -3
  106. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +5 -341
  107. package/Libraries/ReactNative/getNativeComponentAttributes.js +8 -8
  108. package/Libraries/ReactNative/renderApplication.js +3 -0
  109. package/Libraries/Renderer/implementations/ReactFabric-dev.js +15682 -27088
  110. package/Libraries/Renderer/implementations/ReactFabric-prod.js +5082 -4381
  111. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3480 -2571
  112. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +15943 -27543
  113. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5303 -4606
  114. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3450 -2572
  115. package/Libraries/Renderer/shims/ReactFabric.js +2 -2
  116. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  117. package/Libraries/Renderer/shims/ReactNative.js +2 -3
  118. package/Libraries/Renderer/shims/ReactNativeTypes.js +24 -3
  119. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -2
  120. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  121. package/Libraries/Share/Share.d.ts +16 -10
  122. package/Libraries/Share/Share.js +14 -15
  123. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -1
  124. package/Libraries/StyleSheet/StyleSheet.js +3 -10
  125. package/Libraries/StyleSheet/StyleSheet.win32.js +3 -10
  126. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +21 -21
  127. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -18
  128. package/Libraries/StyleSheet/flattenStyle.js +1 -0
  129. package/Libraries/StyleSheet/processFilter.js +132 -0
  130. package/Libraries/StyleSheet/processTransform.js +18 -3
  131. package/Libraries/Text/Text.js +151 -128
  132. package/Libraries/Text/Text.win32.js +163 -138
  133. package/Libraries/Text/TextNativeComponent.js +5 -4
  134. package/Libraries/Text/TextNativeComponent.win32.js +5 -4
  135. package/Libraries/Text/TextProps.js +6 -6
  136. package/Libraries/Text/TextProps.win32.js +6 -6
  137. package/Libraries/TurboModule/TurboModuleRegistry.js +2 -1
  138. package/Libraries/Types/CodegenTypes.js +3 -0
  139. package/Libraries/Utilities/{LoadingView.android.js → DevLoadingView.js} +33 -11
  140. package/Libraries/Utilities/Dimensions.js +1 -0
  141. package/Libraries/Utilities/Dimensions.win32.js +1 -0
  142. package/Libraries/Utilities/HMRClient.js +36 -8
  143. package/Libraries/Utilities/HMRClientProdShim.js +1 -0
  144. package/Libraries/Utilities/Platform.android.js +4 -4
  145. package/Libraries/Utilities/RCTLog.js +1 -0
  146. package/Libraries/Utilities/ReactNativeTestTools.js +12 -24
  147. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +11 -6
  148. package/Libraries/__tests__/ButtonWin32-test.js +7 -6
  149. package/Libraries/promiseRejectionTrackingOptions.js +1 -0
  150. package/jest/mockComponent.js +7 -0
  151. package/jest/renderer.js +25 -14
  152. package/jest/setup.js +19 -13
  153. package/jest.config.js +2 -1
  154. package/overrides.json +30 -29
  155. package/package.json +27 -25
  156. package/rn-get-polyfills.js +1 -0
  157. package/src/private/core/composeStyles.js +27 -0
  158. package/src/private/featureflags/ReactNativeFeatureFlags.js +93 -33
  159. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
  160. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +56 -0
  161. package/src/private/fusebox/setUpFuseboxReactDevToolsDispatcher.js +108 -0
  162. package/src/private/specs/modules/NativeBlobModule.js +4 -2
  163. package/src/private/specs/modules/NativeDevSettings.js +1 -0
  164. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +0 -4
  165. package/src/private/specs/modules/NativeUIManager.js +0 -7
  166. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +24 -24
  167. package/src/private/webapis/dom/nodes/ReactNativeElement.js +11 -14
  168. package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +2 -3
  169. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +24 -54
  170. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -13
  171. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +468 -0
  172. package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +413 -0
  173. package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +4 -4
  174. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +4 -4
  175. package/src/private/webapis/dom/oldstylecollections/NodeList.js +5 -5
  176. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
  177. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
  178. package/src/private/webapis/performance/EventCounts.js +1 -1
  179. package/src/private/webapis/performance/MemoryInfo.js +9 -9
  180. package/src/private/webapis/performance/Performance.js +10 -56
  181. package/src/private/webapis/performance/PerformanceObserver.js +30 -22
  182. package/src/private/webapis/performance/RawPerformanceEntry.js +2 -7
  183. package/src/private/webapis/performance/ReactNativeStartupTiming.js +18 -18
  184. package/src/private/webapis/performance/UserTiming.js +63 -0
  185. package/src/private/webapis/performance/{NativePerformance.js → specs/NativePerformance.js} +3 -2
  186. package/src/private/webapis/performance/{NativePerformanceObserver.js → specs/NativePerformanceObserver.js} +2 -2
  187. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformance.js +1 -1
  188. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformanceObserver.js +3 -4
  189. package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
  190. package/types/modules/globals.d.ts +4 -0
  191. package/Libraries/Components/ScrollView/ScrollView.win32.js +0 -1915
  192. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -13
  193. package/Libraries/Utilities/LoadingView.ios.js +0 -50
  194. package/Libraries/Utilities/LoadingView.js +0 -16
  195. package/jest/ReactNativeInternalFeatureFlagsMock.js +0 -13
  196. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +0 -44
  197. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +0 -92
  198. package/src/private/specs/modules/NativeAnimationsDebugModule.js +0 -20
  199. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +0 -85
  200. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +0 -80
  201. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +0 -161
  202. package/src/private/webapis/performance/__tests__/EventCounts-test.js +0 -116
  203. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +0 -82
  204. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +0 -108
  205. package/src/private/webapis/performance/__tests__/Performance-test.js +0 -117
  206. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +0 -208
@@ -26,6 +26,7 @@ let hmrUnavailableReason: string | null = null;
26
26
  let currentCompileErrorMessage: string | null = null;
27
27
  let didConnect: boolean = false;
28
28
  let pendingLogs: Array<[LogLevel, $ReadOnlyArray<mixed>]> = [];
29
+ let pendingFuseboxConsoleNotification = false;
29
30
 
30
31
  type LogLevel =
31
32
  | 'trace'
@@ -51,6 +52,7 @@ export type HMRClientNativeInterface = {|
51
52
  isEnabled: boolean,
52
53
  scheme?: string,
53
54
  ): void,
55
+ unstable_notifyFuseboxConsoleEnabled(): void,
54
56
  |};
55
57
 
56
58
  /**
@@ -68,7 +70,7 @@ const HMRClient: HMRClientNativeInterface = {
68
70
  }
69
71
 
70
72
  invariant(hmrClient, 'Expected HMRClient.setup() call at startup.');
71
- const LoadingView = require('./LoadingView');
73
+ const DevLoadingView = require('./DevLoadingView');
72
74
 
73
75
  // We use this for internal logging only.
74
76
  // It doesn't affect the logic.
@@ -79,13 +81,13 @@ const HMRClient: HMRClientNativeInterface = {
79
81
  const hasUpdates = hmrClient.hasPendingUpdates();
80
82
 
81
83
  if (hasUpdates) {
82
- LoadingView.showMessage('Refreshing...', 'refresh');
84
+ DevLoadingView.showMessage('Refreshing...', 'refresh');
83
85
  }
84
86
  try {
85
87
  hmrClient.enable();
86
88
  } finally {
87
89
  if (hasUpdates) {
88
- LoadingView.hide();
90
+ DevLoadingView.hide();
89
91
  }
90
92
  }
91
93
 
@@ -140,6 +142,29 @@ const HMRClient: HMRClientNativeInterface = {
140
142
  }
141
143
  },
142
144
 
145
+ unstable_notifyFuseboxConsoleEnabled() {
146
+ if (!hmrClient) {
147
+ pendingFuseboxConsoleNotification = true;
148
+ return;
149
+ }
150
+ hmrClient.send(
151
+ JSON.stringify({
152
+ type: 'log',
153
+ level: 'info',
154
+ data: [
155
+ '\n' +
156
+ '\x1b[7m' +
157
+ ' \x1b[1mJavaScript logs have moved!\x1b[22m They will now appear in the debugger console. ' +
158
+ 'Tip: Type \x1b[1mj\x1b[22m in the terminal to open the debugger (requires Google Chrome ' +
159
+ 'or Microsoft Edge).' +
160
+ '\x1b[27m' +
161
+ '\n',
162
+ ],
163
+ }),
164
+ );
165
+ pendingFuseboxConsoleNotification = false;
166
+ },
167
+
143
168
  // Called once by the bridge on startup, even if Fast Refresh is off.
144
169
  // It creates the HMR client but doesn't actually set up the socket yet.
145
170
  setup(
@@ -156,7 +181,7 @@ const HMRClient: HMRClientNativeInterface = {
156
181
  invariant(!hmrClient, 'Cannot initialize hmrClient twice');
157
182
 
158
183
  // Moving to top gives errors due to NativeModules not being initialized
159
- const LoadingView = require('./LoadingView');
184
+ const DevLoadingView = require('./DevLoadingView');
160
185
 
161
186
  const serverHost = port !== null && port !== '' ? `${host}:${port}` : host;
162
187
 
@@ -205,7 +230,7 @@ Error: ${e.message}`;
205
230
  didConnect = true;
206
231
 
207
232
  if (client.isEnabled() && !isInitialUpdate) {
208
- LoadingView.showMessage('Refreshing...', 'refresh');
233
+ DevLoadingView.showMessage('Refreshing...', 'refresh');
209
234
  }
210
235
  });
211
236
 
@@ -217,11 +242,11 @@ Error: ${e.message}`;
217
242
  });
218
243
 
219
244
  client.on('update-done', () => {
220
- LoadingView.hide();
245
+ DevLoadingView.hide();
221
246
  });
222
247
 
223
248
  client.on('error', data => {
224
- LoadingView.hide();
249
+ DevLoadingView.hide();
225
250
 
226
251
  if (data.type === 'GraphNotFoundError') {
227
252
  client.close();
@@ -242,7 +267,7 @@ Error: ${e.message}`;
242
267
  });
243
268
 
244
269
  client.on('close', closeEvent => {
245
- LoadingView.hide();
270
+ DevLoadingView.hide();
246
271
 
247
272
  // https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1
248
273
  // https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5
@@ -316,6 +341,9 @@ function flushEarlyLogs(client: MetroHMRClient) {
316
341
  pendingLogs.forEach(([level, data]) => {
317
342
  HMRClient.log(level, data);
318
343
  });
344
+ if (pendingFuseboxConsoleNotification) {
345
+ HMRClient.unstable_notifyFuseboxConsoleEnabled();
346
+ }
319
347
  } finally {
320
348
  pendingLogs.length = 0;
321
349
  }
@@ -25,6 +25,7 @@ const HMRClientProdShim: HMRClientNativeInterface = {
25
25
  disable() {},
26
26
  registerBundle() {},
27
27
  log() {},
28
+ unstable_notifyFuseboxConsoleEnabled() {},
28
29
  };
29
30
 
30
31
  module.exports = HMRClientProdShim;
@@ -78,10 +78,10 @@ const Platform: PlatformType = {
78
78
  ? // $FlowFixMe[incompatible-return]
79
79
  spec.android
80
80
  : 'native' in spec
81
- ? // $FlowFixMe[incompatible-return]
82
- spec.native
83
- : // $FlowFixMe[incompatible-return]
84
- spec.default,
81
+ ? // $FlowFixMe[incompatible-return]
82
+ spec.native
83
+ : // $FlowFixMe[incompatible-return]
84
+ spec.default,
85
85
  };
86
86
 
87
87
  module.exports = Platform;
@@ -38,6 +38,7 @@ const RCTLog = {
38
38
 
39
39
  // Log to console regardless of nativeLoggingHook
40
40
  logToConsole(level: string, ...args: Array<mixed>): void {
41
+ // $FlowFixMe[invalid-computed-prop]
41
42
  const logFn = levelsMap[level];
42
43
  invariant(
43
44
  logFn,
@@ -12,20 +12,16 @@
12
12
 
13
13
  import type {ReactTestRenderer as ReactTestRendererType} from 'react-test-renderer';
14
14
 
15
+ import TouchableWithoutFeedback from '../Components/Touchable/TouchableWithoutFeedback';
16
+
15
17
  const Switch = require('../Components/Switch/Switch').default;
16
18
  const TextInput = require('../Components/TextInput/TextInput');
17
19
  const View = require('../Components/View/View');
18
20
  const Text = require('../Text/Text');
19
21
  const {VirtualizedList} = require('@react-native/virtualized-lists');
20
22
  const React = require('react');
21
- const ShallowRenderer = require('react-shallow-renderer');
22
23
  const ReactTestRenderer = require('react-test-renderer');
23
24
 
24
- /* $FlowFixMe[not-a-function] (>=0.125.1 site=react_native_fb) This comment
25
- * suppresses an error found when Flow v0.125.1 was deployed. To see the error,
26
- * delete this comment and run Flow. */
27
- // $FlowFixMe[invalid-constructor]
28
- const shallowRenderer = new ShallowRenderer();
29
25
  export type ReactTestInstance = $PropertyType<ReactTestRendererType, 'root'>;
30
26
  export type Predicate = (node: ReactTestInstance) => boolean;
31
27
  /* $FlowFixMe[value-as-type] (>=0.125.1 site=react_native_fb) This comment
@@ -49,6 +45,9 @@ function byClickable(): Predicate {
49
45
  (node.type === Switch && node.props && node.props.disabled !== true) ||
50
46
  (node.type === View &&
51
47
  node?.props?.onStartShouldSetResponder?.testOnly_pressabilityConfig) ||
48
+ (node.type === TouchableWithoutFeedback &&
49
+ node.props &&
50
+ typeof node.props.onPress === 'function') ||
52
51
  // HACK: Find components that use `Pressability`.
53
52
  node.instance?.state?.pressability != null ||
54
53
  // TODO: Remove this after deleting `Touchable`.
@@ -114,7 +113,7 @@ function expectNoConsoleError() {
114
113
  });
115
114
  }
116
115
 
117
- function expectRendersMatchingSnapshot(
116
+ async function expectRendersMatchingSnapshot(
118
117
  name: string,
119
118
  ComponentProvider: () => React.Element<any>,
120
119
  unmockComponent: () => mixed,
@@ -123,7 +122,9 @@ function expectRendersMatchingSnapshot(
123
122
 
124
123
  jest.resetAllMocks();
125
124
 
126
- instance = ReactTestRenderer.create(<ComponentProvider />);
125
+ await ReactTestRenderer.act(() => {
126
+ instance = ReactTestRenderer.create(<ComponentProvider />);
127
+ });
127
128
  expect(instance).toMatchSnapshot(
128
129
  'should deep render when mocked (please verify output manually)',
129
130
  );
@@ -131,22 +132,9 @@ function expectRendersMatchingSnapshot(
131
132
  jest.resetAllMocks();
132
133
  unmockComponent();
133
134
 
134
- instance = shallowRenderer.render(<ComponentProvider />);
135
- expect(instance).toMatchSnapshot(
136
- `should shallow render as <${name} /> when not mocked`,
137
- );
138
-
139
- jest.resetAllMocks();
140
-
141
- instance = shallowRenderer.render(<ComponentProvider />);
142
- expect(instance).toMatchSnapshot(
143
- `should shallow render as <${name} /> when mocked`,
144
- );
145
-
146
- jest.resetAllMocks();
147
- unmockComponent();
148
-
149
- instance = ReactTestRenderer.create(<ComponentProvider />);
135
+ await ReactTestRenderer.act(() => {
136
+ instance = ReactTestRenderer.create(<ComponentProvider />);
137
+ });
150
138
  expect(instance).toMatchSnapshot(
151
139
  'should deep render when not mocked (please verify output manually)',
152
140
  );
@@ -104,16 +104,21 @@ export function getConfigWithoutViewProps(
104
104
  viewConfig: ViewConfig,
105
105
  propName: string,
106
106
  ): {...} {
107
+ // $FlowFixMe[invalid-computed-prop]
107
108
  if (!viewConfig[propName]) {
108
109
  return {};
109
110
  }
110
111
 
111
- return Object.keys(viewConfig[propName])
112
- .filter(prop => !PlatformBaseViewConfig[propName][prop])
113
- .reduce<{[string]: any}>((obj, prop) => {
114
- obj[prop] = viewConfig[propName][prop];
115
- return obj;
116
- }, {});
112
+ return (
113
+ Object.keys(viewConfig[propName])
114
+ // $FlowFixMe[invalid-computed-prop]
115
+ .filter(prop => !PlatformBaseViewConfig[propName][prop])
116
+ .reduce<{[string]: any}>((obj, prop) => {
117
+ // $FlowFixMe[invalid-computed-prop]
118
+ obj[prop] = viewConfig[propName][prop];
119
+ return obj;
120
+ }, {})
121
+ );
117
122
  }
118
123
 
119
124
  export function stringifyViewConfig(viewConfig: any): string {
@@ -2,15 +2,16 @@
2
2
  'use strict';
3
3
 
4
4
  const React = require('react');
5
- const ReactTestRenderer = require('react-test-renderer');
5
+ const renderer = require('react-native/jest/renderer');
6
6
 
7
7
  const {ButtonWin32} = require('@office-iss/react-native-win32');
8
8
 
9
9
  describe('ButtonWin32', () => {
10
- it('renders native component', () => {
11
- const component = ReactTestRenderer.create(
12
- <ButtonWin32/>
13
- );
14
- expect(component).toMatchSnapshot();
10
+ it('renders native component', async () => {
11
+ expect(
12
+ await renderer.create(
13
+ <ButtonWin32/>,
14
+ ),
15
+ ).toMatchSnapshot();
15
16
  });
16
17
  });
@@ -52,6 +52,7 @@ let rejectionTrackingOptions: $NonMaybeType<Parameters<enable>[0]> = {
52
52
  substitutions: [],
53
53
  },
54
54
  componentStack: [],
55
+ componentStackType: null,
55
56
  stack,
56
57
  category: 'possible_unhandled_promise_rejection',
57
58
  });
@@ -50,6 +50,13 @@ module.exports = (moduleName, instanceMethods, isESModule) => {
50
50
  }
51
51
  };
52
52
 
53
+ Object.defineProperty(Component, 'name', {
54
+ value: name,
55
+ writable: false,
56
+ enumerable: false,
57
+ configurable: true,
58
+ });
59
+
53
60
  Component.displayName = nameWithoutPrefix;
54
61
 
55
62
  Object.keys(RealComponent).forEach(classStatic => {
package/jest/renderer.js CHANGED
@@ -9,22 +9,33 @@
9
9
  * @oncall react_native
10
10
  */
11
11
 
12
+ import type {ReactTestRenderer} from 'react-test-renderer';
13
+
14
+ import nullthrows from 'nullthrows';
12
15
  import * as React from 'react';
13
- import ShallowRenderer from 'react-shallow-renderer';
14
16
  import TestRenderer from 'react-test-renderer';
15
17
 
16
- const renderer = new ShallowRenderer();
17
-
18
- export const shallow = (Component: React.Element<any>): any => {
19
- const Wrapper = (): React.Element<any> => Component;
20
-
21
- return renderer.render(<Wrapper />);
22
- };
18
+ export async function create(
19
+ Component: React.Element<any>,
20
+ ): Promise<ReactTestRenderer> {
21
+ let component;
22
+ await TestRenderer.act(async () => {
23
+ component = TestRenderer.create(Component);
24
+ });
25
+ return nullthrows(component);
26
+ }
23
27
 
24
- export const shallowRender = (Component: React.Element<any>): any => {
25
- return renderer.render(Component);
26
- };
28
+ export async function unmount(testRenderer: ReactTestRenderer) {
29
+ await TestRenderer.act(async () => {
30
+ testRenderer.unmount();
31
+ });
32
+ }
27
33
 
28
- export const create = (Component: React.Element<any>): any => {
29
- return TestRenderer.create(Component);
30
- };
34
+ export async function update(
35
+ testRenderer: ReactTestRenderer,
36
+ element: React.Element<any>,
37
+ ) {
38
+ await TestRenderer.act(async () => {
39
+ testRenderer.update(element);
40
+ });
41
+ }
package/jest/setup.js CHANGED
@@ -9,6 +9,11 @@
9
9
 
10
10
  'use strict';
11
11
 
12
+ global.IS_REACT_ACT_ENVIRONMENT = true;
13
+ // Suppress the `react-test-renderer` warnings until New Architecture and legacy
14
+ // mode are no longer supported by React Native.
15
+ global.IS_REACT_NATIVE_TEST_ENVIRONMENT = true;
16
+
12
17
  const MockNativeMethods = jest.requireActual('./MockNativeMethods');
13
18
  const mockComponent = jest.requireActual('./mockComponent');
14
19
 
@@ -112,17 +117,9 @@ jest
112
117
  Constants: {},
113
118
  },
114
119
  }))
115
- .mock('../Libraries/Image/Image', () => {
116
- const Image = mockComponent('../Libraries/Image/Image');
117
- Image.getSize = jest.fn();
118
- Image.getSizeWithHeaders = jest.fn();
119
- Image.prefetch = jest.fn();
120
- Image.prefetchWithMetadata = jest.fn();
121
- Image.queryCache = jest.fn();
122
- Image.resolveAssetSource = jest.fn();
123
-
124
- return Image;
125
- })
120
+ .mock('../Libraries/Image/Image', () =>
121
+ mockComponent('../Libraries/Image/Image'),
122
+ )
126
123
  .mock('../Libraries/Text/Text', () =>
127
124
  mockComponent('../Libraries/Text/Text', MockNativeMethods),
128
125
  )
@@ -145,7 +142,9 @@ jest
145
142
  .mock('../Libraries/Components/AccessibilityInfo/AccessibilityInfo', () => ({
146
143
  __esModule: true,
147
144
  default: {
148
- addEventListener: jest.fn(),
145
+ addEventListener: jest.fn(() => ({
146
+ remove: jest.fn(),
147
+ })),
149
148
  announceForAccessibility: jest.fn(),
150
149
  isAccessibilityServiceEnabled: jest.fn(),
151
150
  isBoldTextEnabled: jest.fn(),
@@ -208,7 +207,9 @@ jest
208
207
  openURL: jest.fn(),
209
208
  canOpenURL: jest.fn(() => Promise.resolve(true)),
210
209
  openSettings: jest.fn(),
211
- addEventListener: jest.fn(),
210
+ addEventListener: jest.fn(() => ({
211
+ remove: jest.fn(),
212
+ })),
212
213
  getInitialURL: jest.fn(() => Promise.resolve()),
213
214
  sendIntent: jest.fn(),
214
215
  }))
@@ -261,7 +262,12 @@ jest
261
262
  },
262
263
  ImageLoader: {
263
264
  getSize: jest.fn(url => Promise.resolve([320, 240])),
265
+ getSizeWithHeaders: jest.fn((url, headers) =>
266
+ Promise.resolve({height: 222, width: 333}),
267
+ ),
264
268
  prefetchImage: jest.fn(),
269
+ prefetchImageWithMetadata: jest.fn(),
270
+ queryCache: jest.fn(),
265
271
  },
266
272
  ImageViewManager: {
267
273
  getSize: jest.fn((uri, success) =>
package/jest.config.js CHANGED
@@ -1,4 +1,5 @@
1
- module.exports = require('@rnx-kit/jest-preset')("win32", {
1
+ module.exports = ("win32", {
2
+ preset: '@rnx-kit/jest-preset',
2
3
  verbose: true,
3
4
  snapshotResolver: './jest-snapshot-resolver.js',
4
5
  transform: {
package/overrides.json CHANGED
@@ -7,13 +7,13 @@
7
7
  "**/__snapshots__/**",
8
8
  "src-win/rntypes/**"
9
9
  ],
10
- "baseVersion": "0.74.3",
10
+ "baseVersion": "0.75.0-rc.3",
11
11
  "overrides": [
12
12
  {
13
13
  "type": "derived",
14
14
  "file": ".flowconfig",
15
15
  "baseFile": ".flowconfig",
16
- "baseHash": "088893394c0e76f20bdc2f745a6dacba2285e579"
16
+ "baseHash": "75582b181be0cd6790f7c021bfafb761dfc42381"
17
17
  },
18
18
  {
19
19
  "type": "derived",
@@ -35,7 +35,7 @@
35
35
  "type": "derived",
36
36
  "file": "src-win/Libraries/Animated/NativeAnimatedHelper.win32.js",
37
37
  "baseFile": "packages/react-native/Libraries/Animated/NativeAnimatedHelper.js",
38
- "baseHash": "96eb39e775435801b031cd1a41265ed73705cd72",
38
+ "baseHash": "2cefe6e59aa26f98158be3f35452f9a49d8395c4",
39
39
  "issue": 11041
40
40
  },
41
41
  {
@@ -67,7 +67,7 @@
67
67
  "type": "derived",
68
68
  "file": "src-win/Libraries/Components/Button.win32.js",
69
69
  "baseFile": "packages/react-native/Libraries/Components/Button.js",
70
- "baseHash": "8d5fb0563e76b6e9f2ce3532f319041248587b63"
70
+ "baseHash": "b59e0b119a7a930e835ff3eefa780e757a97b31f"
71
71
  },
72
72
  {
73
73
  "type": "platform",
@@ -92,7 +92,7 @@
92
92
  "type": "patch",
93
93
  "file": "src-win/Libraries/Components/Pressable/Pressable.win32.js",
94
94
  "baseFile": "packages/react-native/Libraries/Components/Pressable/Pressable.js",
95
- "baseHash": "63cc0b16c930ef07a0570d1b8e4abc51a77d06dc",
95
+ "baseHash": "77ec40a2f6a75280b170fe839813d8712c90fbfb",
96
96
  "issue": 6240
97
97
  },
98
98
  {
@@ -108,12 +108,6 @@
108
108
  "baseFile": "packages/react-native/Libraries/Components/SafeAreaView/SafeAreaView.js",
109
109
  "baseHash": "ae5845b576484b3600e395d3b1ee03223530b8f7"
110
110
  },
111
- {
112
- "type": "derived",
113
- "file": "src-win/Libraries/Components/ScrollView/ScrollView.win32.js",
114
- "baseFile": "packages/react-native/Libraries/Components/ScrollView/ScrollView.js",
115
- "baseHash": "a842009ee0d0d9ee5ee16e88ff25b9a45f38b667"
116
- },
117
111
  {
118
112
  "type": "platform",
119
113
  "file": "src-win/Libraries/Components/TextInput/Tests/TextInputTest.tsx"
@@ -122,7 +116,7 @@
122
116
  "type": "derived",
123
117
  "file": "src-win/Libraries/Components/TextInput/TextInput.win32.js",
124
118
  "baseFile": "packages/react-native/Libraries/Components/TextInput/TextInput.js",
125
- "baseHash": "3676702ffe4830f11e49c67067d7fe18d9c731cb"
119
+ "baseHash": "dad569fd3dd81f212afd7b35ffe75108e926eb5e"
126
120
  },
127
121
  {
128
122
  "type": "patch",
@@ -149,7 +143,7 @@
149
143
  "type": "patch",
150
144
  "file": "src-win/Libraries/Components/Touchable/Touchable.win32.js",
151
145
  "baseFile": "packages/react-native/Libraries/Components/Touchable/Touchable.js",
152
- "baseHash": "965bd1e103f7bd92340917acf231516659aba36c",
146
+ "baseHash": "27e19d3bf49ff28629fdad544aad04939c2ce030",
153
147
  "issue": 0
154
148
  },
155
149
  {
@@ -180,13 +174,13 @@
180
174
  "type": "patch",
181
175
  "file": "src-win/Libraries/Components/View/ReactNativeViewAttributes.win32.js",
182
176
  "baseFile": "packages/react-native/Libraries/Components/View/ReactNativeViewAttributes.js",
183
- "baseHash": "0aabb0825ab9d65cb39f526ad3ac10874d6cde7e"
177
+ "baseHash": "8fc645a55ff86ceeac9c45f09d232586589ee7dc"
184
178
  },
185
179
  {
186
180
  "type": "patch",
187
181
  "file": "src-win/Libraries/Components/View/View.win32.js",
188
182
  "baseFile": "packages/react-native/Libraries/Components/View/View.js",
189
- "baseHash": "d621a2fb669bbc2fc0657db1233c9a930a073fba"
183
+ "baseHash": "1905f72f4d202d466ea7d8ed4b36df0845f2c310"
190
184
  },
191
185
  {
192
186
  "type": "derived",
@@ -198,19 +192,19 @@
198
192
  "type": "derived",
199
193
  "file": "src-win/Libraries/Components/View/ViewAccessibility.win32.js",
200
194
  "baseFile": "packages/react-native/Libraries/Components/View/ViewAccessibility.js",
201
- "baseHash": "d12245b45ccdc5f473ba9484b5ec994cb45dae75"
195
+ "baseHash": "7ac427e8b7a78a8e938ce1b383ec6e911a6fa3b5"
202
196
  },
203
197
  {
204
198
  "type": "derived",
205
199
  "file": "src-win/Libraries/Components/View/ViewPropTypes.d.ts",
206
200
  "baseFile": "packages/react-native/Libraries/Components/View/ViewPropTypes.d.ts",
207
- "baseHash": "7ab8da32f3f0390cd415db0c2c4127d8b7b930f8"
201
+ "baseHash": "8e33800dfdd3b50e26c3331abb8b4682c091602f"
208
202
  },
209
203
  {
210
204
  "type": "patch",
211
205
  "file": "src-win/Libraries/Components/View/ViewPropTypes.win32.js",
212
206
  "baseFile": "packages/react-native/Libraries/Components/View/ViewPropTypes.js",
213
- "baseHash": "6eecfbf0d3028d1838463a66b3acbda6f9a2c651",
207
+ "baseHash": "50bd550ba0710173ca3533b7b103075ecdda6b56",
214
208
  "issue": 6240
215
209
  },
216
210
  {
@@ -223,6 +217,13 @@
223
217
  "type": "platform",
224
218
  "file": "src-win/Libraries/Components/View/ViewWin32.js"
225
219
  },
220
+ {
221
+ "type": "patch",
222
+ "file": "src-win/Libraries/Core/Devtools/loadBundleFromServer.win32.js",
223
+ "baseFile": "packages/react-native/Libraries/Core/Devtools/loadBundleFromServer.js",
224
+ "baseHash": "14662281c97222b45893308b744a7dc7c2000801",
225
+ "issue": 12704
226
+ },
226
227
  {
227
228
  "type": "patch",
228
229
  "file": "src-win/Libraries/Core/ReactNativeVersionCheck.win32.js",
@@ -244,7 +245,7 @@
244
245
  "type": "derived",
245
246
  "file": "src-win/Libraries/Image/Image.win32.js",
246
247
  "baseFile": "packages/react-native/Libraries/Image/Image.ios.js",
247
- "baseHash": "751390bc6d7b721b5101138b682973410216c720",
248
+ "baseHash": "f3298e1dac3f1cd3d277b15b916753535b677f04",
248
249
  "issue": 4320
249
250
  },
250
251
  {
@@ -316,14 +317,14 @@
316
317
  "type": "patch",
317
318
  "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js",
318
319
  "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorHeader.js",
319
- "baseHash": "1a12281b1cfab7352fcfeb5984f0ed3c83c04660",
320
+ "baseHash": "e85290422895e30d58e2d804f11e73407a743282",
320
321
  "issue": 7952
321
322
  },
322
323
  {
323
324
  "type": "derived",
324
325
  "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js",
325
326
  "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js",
326
- "baseHash": "04c1210d0198315af8358b22a81dc74dc76ef752"
327
+ "baseHash": "3a765d2180cca25ed35172ebce8294fc569486aa"
327
328
  },
328
329
  {
329
330
  "type": "derived",
@@ -343,7 +344,7 @@
343
344
  "type": "derived",
344
345
  "file": "src-win/Libraries/NativeComponent/BaseViewConfig.win32.js",
345
346
  "baseFile": "packages/react-native/Libraries/NativeComponent/BaseViewConfig.ios.js",
346
- "baseHash": "ae7bdcfff1117d4a349b7b9bcc108a22ae7099ae"
347
+ "baseHash": "d7b9540d5e637cb86b29d119838a4024bfc2b7d6"
347
348
  },
348
349
  {
349
350
  "type": "copy",
@@ -379,7 +380,7 @@
379
380
  "type": "patch",
380
381
  "file": "src-win/Libraries/Pressability/Pressability.win32.js",
381
382
  "baseFile": "packages/react-native/Libraries/Pressability/Pressability.js",
382
- "baseHash": "3b490704a0a3c7f159efe344778cd6217d22d088",
383
+ "baseHash": "8e70142f3acab570d188c617a1811da11b6e9da4",
383
384
  "issue": 6240
384
385
  },
385
386
  {
@@ -426,7 +427,7 @@
426
427
  "type": "patch",
427
428
  "file": "src-win/Libraries/StyleSheet/StyleSheet.win32.js",
428
429
  "baseFile": "packages/react-native/Libraries/StyleSheet/StyleSheet.js",
429
- "baseHash": "7c42da708bc5cf4e3135ae81a45dddae48e0bfec"
430
+ "baseHash": "5c01bd55040fb9d31534bd27b98fe9c3671994c0"
430
431
  },
431
432
  {
432
433
  "type": "derived",
@@ -438,20 +439,20 @@
438
439
  "type": "derived",
439
440
  "file": "src-win/Libraries/Text/Text.win32.js",
440
441
  "baseFile": "packages/react-native/Libraries/Text/Text.js",
441
- "baseHash": "057cf316c2f379cbc97cf1bad76c31e94888246d"
442
+ "baseHash": "71c24366f3f0baa9a48ba34c08b255483bf77553"
442
443
  },
443
444
  {
444
445
  "type": "derived",
445
446
  "file": "src-win/Libraries/Text/TextNativeComponent.win32.js",
446
447
  "baseFile": "packages/react-native/Libraries/Text/TextNativeComponent.js",
447
- "baseHash": "abcdb74e2fe1e491baaefdd0ba6369199b8032d0",
448
+ "baseHash": "9f7ea4e5225a06e1ec3bb46a2f4bc9f72bf46873",
448
449
  "issue": 7074
449
450
  },
450
451
  {
451
452
  "type": "derived",
452
453
  "file": "src-win/Libraries/Text/TextProps.win32.js",
453
454
  "baseFile": "packages/react-native/Libraries/Text/TextProps.js",
454
- "baseHash": "7ecbe61c439e5c6f79fe5ae262f063060fa6a24f"
455
+ "baseHash": "8e56a028dee989ebb8b06f4c01a1d038f074597d"
455
456
  },
456
457
  {
457
458
  "type": "patch",
@@ -477,7 +478,7 @@
477
478
  "type": "derived",
478
479
  "file": "src-win/Libraries/Utilities/Dimensions.win32.js",
479
480
  "baseFile": "packages/react-native/Libraries/Utilities/Dimensions.js",
480
- "baseHash": "e2c1d4379abf083b11f3e853d160068ad6b55ba0"
481
+ "baseHash": "bac146d616013f6da06bba9f6c0f52633e4a0737"
481
482
  },
482
483
  {
483
484
  "type": "platform",
@@ -503,7 +504,7 @@
503
504
  "type": "derived",
504
505
  "file": "src-win/Libraries/Utilities/Platform.win32.js",
505
506
  "baseFile": "packages/react-native/Libraries/Utilities/Platform.android.js",
506
- "baseHash": "3c959f078048e8a9cbd6d0463071c2208597ab8a"
507
+ "baseHash": "ddd8013d71adc13b3ef3016631012efd096a9518"
507
508
  },
508
509
  {
509
510
  "type": "copy",