react-native-windows 0.0.0-canary.992 → 0.0.0-canary.993

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 (195) hide show
  1. package/.flowconfig +3 -1
  2. package/Libraries/Animated/Animated.js +0 -1
  3. package/Libraries/Animated/Animated.js.flow +0 -1
  4. package/Libraries/Animated/AnimatedExports.js +0 -1
  5. package/Libraries/Animated/AnimatedExports.js.flow +1 -2
  6. package/Libraries/Animated/animations/Animation.js +5 -2
  7. package/Libraries/Animated/components/AnimatedScrollView.js +53 -52
  8. package/Libraries/Animated/createAnimatedComponent.js +37 -33
  9. package/Libraries/Animated/nodes/AnimatedObject.js +2 -3
  10. package/Libraries/Animated/nodes/AnimatedProps.js +1 -1
  11. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +6 -1
  12. package/Libraries/AppState/AppState.js +6 -1
  13. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +19 -18
  14. package/Libraries/Components/Button.js +2 -2
  15. package/Libraries/Components/Button.windows.js +2 -3
  16. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +2 -3
  17. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +2 -1
  18. package/Libraries/Components/LayoutConformance/LayoutConformance.js +0 -1
  19. package/Libraries/Components/Pressable/Pressable.js +9 -6
  20. package/Libraries/Components/Pressable/Pressable.windows.js +9 -6
  21. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +14 -13
  22. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +13 -1
  23. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +29 -20
  24. package/Libraries/Components/ScrollView/ScrollView.d.ts +9 -5
  25. package/Libraries/Components/ScrollView/ScrollView.js +18 -12
  26. package/Libraries/Components/ScrollView/ScrollView.windows.js +19 -12
  27. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -1
  28. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +1 -1
  29. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +19 -6
  30. package/Libraries/Components/Switch/Switch.js +8 -2
  31. package/Libraries/Components/Switch/Switch.windows.js +8 -2
  32. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +1 -5
  33. package/Libraries/Components/TextInput/TextInput.flow.js +1 -5
  34. package/Libraries/Components/TextInput/TextInput.flow.windows.js +1 -6
  35. package/Libraries/Components/TextInput/TextInput.js +26 -25
  36. package/Libraries/Components/TextInput/TextInput.windows.js +27 -25
  37. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +1 -5
  38. package/Libraries/Components/Touchable/TouchableBounce.js +9 -3
  39. package/Libraries/Components/Touchable/TouchableBounce.windows.js +9 -3
  40. package/Libraries/Components/Touchable/TouchableHighlight.js +9 -4
  41. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +9 -4
  42. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  43. package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +2 -1
  44. package/Libraries/Components/Touchable/TouchableOpacity.js +7 -3
  45. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +7 -3
  46. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
  47. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +2 -2
  48. package/Libraries/Components/View/View.js +111 -25
  49. package/Libraries/Components/View/View.windows.js +427 -227
  50. package/Libraries/Core/Devtools/loadBundleFromServer.js +49 -7
  51. package/Libraries/Core/Devtools/loadBundleFromServer.windows.js +49 -7
  52. package/Libraries/Core/InitializeCore.js +1 -22
  53. package/Libraries/Core/ReactNativeVersion.js +3 -2
  54. package/Libraries/Debugging/DebuggingOverlay.js +6 -8
  55. package/Libraries/Debugging/DebuggingOverlayRegistry.js +0 -1
  56. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +0 -1
  57. package/Libraries/EventEmitter/NativeEventEmitter.js +1 -1
  58. package/Libraries/Image/AssetRegistry.js +4 -10
  59. package/Libraries/Image/AssetSourceResolver.js +17 -4
  60. package/Libraries/Image/AssetSourceResolver.windows.js +17 -4
  61. package/Libraries/Image/Image.android.js +112 -106
  62. package/Libraries/Image/Image.ios.js +10 -2
  63. package/Libraries/Image/Image.windows.js +30 -20
  64. package/Libraries/Image/ImageAnalyticsTagContext.js +2 -2
  65. package/Libraries/Image/RelativeImageStub.js +1 -0
  66. package/Libraries/Lists/FlatList.d.ts +9 -5
  67. package/Libraries/Lists/FlatList.js +1 -1
  68. package/Libraries/Lists/SectionListModern.js +9 -3
  69. package/Libraries/LogBox/UI/LogBoxButton.js +2 -1
  70. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +2 -1
  71. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js +2 -1
  72. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +3 -2
  73. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +2 -1
  74. package/Libraries/ReactNative/AppContainer-dev.js +4 -4
  75. package/Libraries/ReactNative/AppContainer-prod.js +0 -1
  76. package/Libraries/ReactNative/RootTag.js +2 -2
  77. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -0
  78. package/Libraries/Renderer/shims/ReactNativeTypes.js +21 -25
  79. package/Libraries/Renderer/shims/ReactNativeTypes.windows.js +270 -0
  80. package/Libraries/StyleSheet/StyleSheetExports.js.flow +3 -1
  81. package/Libraries/StyleSheet/StyleSheetTypes.js +4 -3
  82. package/Libraries/StyleSheet/private/_TransformStyle.js +49 -21
  83. package/Libraries/StyleSheet/processBoxShadow.js +0 -1
  84. package/Libraries/StyleSheet/processFilter.js +0 -1
  85. package/Libraries/Text/Text.d.ts +1 -2
  86. package/Libraries/Text/Text.js +255 -244
  87. package/Libraries/Text/Text.windows.js +281 -300
  88. package/Libraries/Text/TextAncestor.js +3 -2
  89. package/Libraries/Text/TextProps.js +2 -34
  90. package/Libraries/Text/TextProps.windows.js +2 -34
  91. package/Libraries/Types/ReactDevToolsTypes.js +0 -1
  92. package/Libraries/Utilities/PerformanceLoggerContext.js +2 -2
  93. package/Libraries/Utilities/PlatformTypes.js +1 -1
  94. package/Libraries/vendor/core/ErrorUtils.js +28 -4
  95. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +1 -1
  96. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.h +1 -1
  97. package/Microsoft.ReactNative/Fabric/AbiShadowNode.h +1 -1
  98. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.h +1 -1
  99. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +2 -2
  100. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +10 -9
  101. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +21 -17
  102. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.h +4 -4
  103. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +19 -0
  104. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.h +76 -0
  105. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +6 -0
  106. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +19 -2
  107. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +49 -0
  108. package/Microsoft.ReactNative/Utils/ThemeUtils.h +31 -0
  109. package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +36 -8
  110. package/Microsoft.ReactNative/Views/ShadowNodeRegistry.cpp +6 -2
  111. package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +9 -1
  112. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Base.h +45 -34
  113. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +1 -1
  114. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bridging.h +1 -0
  115. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +36 -33
  116. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Number.h +10 -10
  117. package/PropertySheets/External/Microsoft.ReactNative.Cpp.Dependencies.props +10 -0
  118. package/PropertySheets/Generated/PackageVersion.g.props +2 -2
  119. package/PropertySheets/React.Cpp.props +1 -1
  120. package/ReactCommon/ReactCommon.vcxproj +10 -19
  121. package/ReactCommon/ReactCommon.vcxproj.filters +36 -13
  122. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +1 -1
  123. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +110 -0
  124. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Bridging.h +1 -0
  125. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.cpp +19 -3
  126. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.h +9 -0
  127. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +459 -0
  128. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/platform/android/react/renderer/components/text/ParagraphState.h +92 -0
  129. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +35 -0
  130. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityProps.cpp +28 -1
  131. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/css/CSSTokenizer.h +1 -2
  132. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +2 -1
  133. package/Scripts/creaternwapp.cmd +11 -8
  134. package/Shared/HermesRuntimeHolder.cpp +3 -1
  135. package/Shared/Shared.vcxitems +5 -1
  136. package/Shared/Shared.vcxitems.filters +4 -0
  137. package/codegen/NativeDOMSpec.g.h +6 -0
  138. package/codegen/NativeIntersectionObserverSpec.g.h +19 -5
  139. package/codegen/NativeMutationObserverSpec.g.h +11 -5
  140. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +104 -92
  141. package/codegen/react/components/rnwcore/States.h +8 -8
  142. package/codegen/rnwcoreJSI-generated.cpp +48 -3
  143. package/codegen/rnwcoreJSI.h +73 -10
  144. package/index.js +0 -1
  145. package/jest/mockNativeComponent.js +2 -1
  146. package/jest/renderer.js +0 -1
  147. package/jest/resolver.js +31 -0
  148. package/package.json +13 -13
  149. package/src/private/animated/NativeAnimatedHelper.js +6 -1
  150. package/src/private/animated/createAnimatedPropsHook.js +11 -4
  151. package/src/private/animated/createAnimatedPropsMemoHook.js +0 -1
  152. package/src/private/components/safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js +0 -1
  153. package/src/private/components/scrollview/HScrollViewNativeComponents.js +0 -1
  154. package/src/private/components/scrollview/VScrollViewNativeComponents.js +0 -1
  155. package/src/private/devsupport/rndevtools/FuseboxSessionObserver.js +0 -1
  156. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.android.js +8 -9
  157. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.ios.js +12 -15
  158. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.windows.js +8 -9
  159. package/src/private/devsupport/rndevtools/setUpFuseboxReactDevToolsDispatcher.js +0 -1
  160. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsRuntimeSettingsModule.js +0 -1
  161. package/src/private/featureflags/ReactNativeFeatureFlags.js +39 -4
  162. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +5 -2
  163. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +44 -0
  164. package/src/private/styles/composeStyles.js +12 -5
  165. package/src/private/webapis/dom/events/Event.js +3 -0
  166. package/src/private/webapis/dom/events/EventTarget.js +3 -0
  167. package/src/private/webapis/dom/nodes/ReactNativeElement.js +6 -23
  168. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +3 -1
  169. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +38 -0
  170. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +3 -0
  171. package/src/private/webapis/dom/oldstylecollections/NodeList.js +3 -0
  172. package/src/private/webapis/errors/DOMException.js +166 -0
  173. package/src/private/webapis/geometry/DOMRect.js +5 -0
  174. package/src/private/webapis/geometry/DOMRectList.js +3 -0
  175. package/src/private/webapis/geometry/DOMRectReadOnly.js +6 -0
  176. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +15 -7
  177. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +3 -0
  178. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +80 -18
  179. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +12 -0
  180. package/src/private/webapis/mutationobserver/MutationObserver.js +23 -33
  181. package/src/private/webapis/mutationobserver/MutationRecord.js +3 -0
  182. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +56 -24
  183. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +4 -1
  184. package/src/private/webapis/performance/MemoryInfo.js +4 -1
  185. package/src/private/webapis/performance/Performance.js +19 -8
  186. package/src/private/webapis/performance/PerformanceEntry.js +4 -0
  187. package/src/private/webapis/performance/ReactNativeStartupTiming.js +4 -1
  188. package/src/private/webapis/performance/internals/RawPerformanceEntry.js +2 -0
  189. package/src/private/webapis/structuredClone/structuredClone.js +233 -0
  190. package/src/private/webapis/webidl/PlatformObjects.js +59 -0
  191. package/src/types/globals.d.ts +42 -0
  192. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +0 -1
  193. package/types/index.d.ts +1 -1
  194. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +0 -78
  195. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.h +0 -196
@@ -6,7 +6,6 @@
6
6
  *
7
7
  * @flow strict-local
8
8
  * @format
9
- * @oncall react_native
10
9
  */
11
10
 
12
11
  import Networking from '../../Network/RCTNetworking';
@@ -20,6 +19,34 @@ let pendingRequests = 0;
20
19
 
21
20
  const cachedPromisesByUrl = new Map<string, Promise<void>>();
22
21
 
22
+ export class LoadBundleFromServerError extends Error {
23
+ url: string;
24
+ isTimeout: boolean;
25
+ constructor(
26
+ message: string,
27
+ url: string,
28
+ isTimeout: boolean,
29
+ options?: {cause: mixed, ...},
30
+ ): void {
31
+ super(message, options);
32
+ this.url = url;
33
+ this.isTimeout = isTimeout;
34
+ this.name = 'LoadBundleFromServerError';
35
+ }
36
+ }
37
+
38
+ export class LoadBundleFromServerRequestError extends LoadBundleFromServerError {
39
+ constructor(
40
+ message: string,
41
+ url: string,
42
+ isTimeout: boolean,
43
+ options?: {cause: mixed, ...},
44
+ ): void {
45
+ super(message, url, isTimeout, options);
46
+ this.name = 'LoadBundleFromServerRequestError';
47
+ }
48
+ }
49
+
23
50
  function asyncRequest(
24
51
  url: string,
25
52
  ): Promise<{body: string, headers: {[string]: string}}> {
@@ -62,10 +89,19 @@ function asyncRequest(
62
89
  );
63
90
  completeListener = Networking.addListener(
64
91
  'didCompleteNetworkResponse',
65
- ([requestId, error]) => {
92
+ ([requestId, errorMessage, isTimeout]) => {
66
93
  if (requestId === id) {
67
- if (error) {
68
- reject(error);
94
+ if (errorMessage) {
95
+ reject(
96
+ new LoadBundleFromServerRequestError(
97
+ 'Could not load bundle',
98
+ url,
99
+ isTimeout,
100
+ {
101
+ cause: errorMessage,
102
+ },
103
+ ),
104
+ );
69
105
  } else {
70
106
  //$FlowFixMe[incompatible-call]
71
107
  resolve({body: responseText, headers});
@@ -122,9 +158,15 @@ export default function loadBundleFromServer(
122
158
  headers['Content-Type'].indexOf('application/json') >= 0
123
159
  ) {
124
160
  // Errors are returned as JSON.
125
- throw new Error(
126
- JSON.parse(body).message ||
127
- `Unknown error fetching '${bundlePathAndQuery}'`,
161
+ throw new LoadBundleFromServerError(
162
+ 'Could not load bundle',
163
+ bundlePathAndQuery,
164
+ false, // isTimeout
165
+ {
166
+ cause:
167
+ JSON.parse(body).message ||
168
+ `Unknown error fetching '${bundlePathAndQuery}'`,
169
+ },
128
170
  );
129
171
  }
130
172
 
@@ -6,7 +6,6 @@
6
6
  *
7
7
  * @flow strict-local
8
8
  * @format
9
- * @oncall react_native
10
9
  */
11
10
 
12
11
  import Networking from '../../Network/RCTNetworking';
@@ -20,6 +19,34 @@ let pendingRequests = 0;
20
19
 
21
20
  const cachedPromisesByUrl = new Map<string, Promise<void>>();
22
21
 
22
+ export class LoadBundleFromServerError extends Error {
23
+ url: string;
24
+ isTimeout: boolean;
25
+ constructor(
26
+ message: string,
27
+ url: string,
28
+ isTimeout: boolean,
29
+ options?: {cause: mixed, ...},
30
+ ): void {
31
+ super(message, options);
32
+ this.url = url;
33
+ this.isTimeout = isTimeout;
34
+ this.name = 'LoadBundleFromServerError';
35
+ }
36
+ }
37
+
38
+ export class LoadBundleFromServerRequestError extends LoadBundleFromServerError {
39
+ constructor(
40
+ message: string,
41
+ url: string,
42
+ isTimeout: boolean,
43
+ options?: {cause: mixed, ...},
44
+ ): void {
45
+ super(message, url, isTimeout, options);
46
+ this.name = 'LoadBundleFromServerRequestError';
47
+ }
48
+ }
49
+
23
50
  function asyncRequest(
24
51
  url: string,
25
52
  ): Promise<{body: string, headers: {[string]: string}}> {
@@ -62,10 +89,19 @@ function asyncRequest(
62
89
  );
63
90
  completeListener = Networking.addListener(
64
91
  'didCompleteNetworkResponse',
65
- ([requestId, error]) => {
92
+ ([requestId, errorMessage, isTimeout]) => {
66
93
  if (requestId === id) {
67
- if (error) {
68
- reject(error);
94
+ if (errorMessage) {
95
+ reject(
96
+ new LoadBundleFromServerRequestError(
97
+ 'Could not load bundle',
98
+ url,
99
+ isTimeout,
100
+ {
101
+ cause: errorMessage,
102
+ },
103
+ ),
104
+ );
69
105
  } else {
70
106
  //$FlowFixMe[incompatible-call]
71
107
  resolve({body: responseText, headers});
@@ -122,9 +158,15 @@ export default function loadBundleFromServer(
122
158
  headers['Content-Type'].indexOf('application/json') >= 0
123
159
  ) {
124
160
  // Errors are returned as JSON.
125
- throw new Error(
126
- JSON.parse(body).message ||
127
- `Unknown error fetching '${bundlePathAndQuery}'`,
161
+ throw new LoadBundleFromServerError(
162
+ 'Could not load bundle',
163
+ bundlePathAndQuery,
164
+ false, // isTimeout
165
+ {
166
+ cause:
167
+ JSON.parse(body).message ||
168
+ `Unknown error fetching '${bundlePathAndQuery}'`,
169
+ },
128
170
  );
129
171
  }
130
172
 
@@ -28,28 +28,7 @@
28
28
 
29
29
  const start = Date.now();
30
30
 
31
- require('./setUpGlobals');
32
- require('../../src/private/setup/setUpDOM').default();
33
- require('./setUpPerformance');
34
- require('./polyfillPromise');
35
- require('./setUpTimers');
36
- if (__DEV__) {
37
- require('./setUpReactDevTools');
38
- }
39
- require('./setUpErrorHandling');
40
- require('./setUpRegeneratorRuntime');
41
- require('./setUpXHR');
42
- require('./setUpAlert');
43
- require('./setUpNavigator');
44
- require('./setUpBatchedBridge');
45
- require('./setUpSegmentFetcher');
46
- if (__DEV__) {
47
- require('./checkNativeVersion');
48
- require('./setUpDeveloperTools');
49
- require('../LogBox/LogBox').default.install();
50
- }
51
-
52
- require('../ReactNative/AppRegistry');
31
+ require('../../src/private/setup/setUpDefaultReactNativeEnvironment').default();
53
32
 
54
33
  const GlobalPerformanceLogger =
55
34
  require('../Utilities/GlobalPerformanceLogger').default;
@@ -5,6 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  * @flow strict
8
+ * @noformat
8
9
  * @generated by scripts/releases/set-version.js
9
10
  */
10
11
 
@@ -15,7 +16,7 @@ export const version: $ReadOnly<{
15
16
  prerelease: string | null,
16
17
  }> = {
17
18
  major: 0,
18
- minor: 80,
19
+ minor: 81,
19
20
  patch: 0,
20
- prerelease: 'nightly-20250506-3ac16dd6a',
21
+ prerelease: 'nightly-20250521-3cb70bb6a',
21
22
  };
@@ -31,10 +31,11 @@ type DebuggingOverlayHandle = {
31
31
  clearElementsHighlight(): void,
32
32
  };
33
33
 
34
- function DebuggingOverlay(
35
- _props: {},
34
+ function DebuggingOverlay({
35
+ ref,
36
+ }: {
36
37
  ref: React.RefSetter<DebuggingOverlayHandle>,
37
- ): React.Node {
38
+ }): React.Node {
38
39
  useImperativeHandle(
39
40
  ref,
40
41
  () => ({
@@ -102,9 +103,6 @@ const styles = StyleSheet.create({
102
103
  },
103
104
  });
104
105
 
105
- const DebuggingOverlayWithForwardedRef: component(
106
+ export default DebuggingOverlay as component(
106
107
  ref: React.RefSetter<DebuggingOverlayHandle>,
107
- ...props: {}
108
- ) = React.forwardRef(DebuggingOverlay);
109
-
110
- export default DebuggingOverlayWithForwardedRef;
108
+ );
@@ -6,7 +6,6 @@
6
6
  *
7
7
  * @flow strict-local
8
8
  * @format
9
- * @oncall react_native
10
9
  */
11
10
 
12
11
  import type {HostInstance} from '../../src/private/types/HostInstance';
@@ -6,7 +6,6 @@
6
6
  *
7
7
  * @flow strict-local
8
8
  * @format
9
- * @oncall react_native
10
9
  */
11
10
 
12
11
  import type {
@@ -52,7 +52,7 @@ export default class NativeEventEmitter<
52
52
  {
53
53
  _nativeModule: ?NativeModule;
54
54
 
55
- constructor(nativeModule: ?NativeModule) {
55
+ constructor(nativeModule?: ?NativeModule) {
56
56
  if (Platform.OS === 'ios') {
57
57
  invariant(
58
58
  nativeModule != null,
@@ -8,13 +8,7 @@
8
8
  * @format
9
9
  */
10
10
 
11
- 'use strict';
12
-
13
- import type {PackagerAsset} from '@react-native/assets-registry/registry';
14
-
15
- const AssetRegistry = require('@react-native/assets-registry/registry') as {
16
- registerAsset: (asset: PackagerAsset) => number,
17
- getAssetByID: (assetId: number) => PackagerAsset,
18
- };
19
-
20
- module.exports = AssetRegistry;
11
+ export {
12
+ registerAsset,
13
+ getAssetByID,
14
+ } from '@react-native/assets-registry/registry';
@@ -18,10 +18,23 @@ export type ResolvedAssetSource = {
18
18
  +scale: number,
19
19
  };
20
20
 
21
- import type {
22
- AssetDestPathResolver,
23
- PackagerAsset,
24
- } from '@react-native/assets-registry/registry';
21
+ // From @react-native/assets-registry
22
+ type AssetDestPathResolver = 'android' | 'generic';
23
+
24
+ // From @react-native/assets-registry
25
+ type PackagerAsset = $ReadOnly<{
26
+ __packager_asset: boolean,
27
+ fileSystemLocation: string,
28
+ httpServerLocation: string,
29
+ width: ?number,
30
+ height: ?number,
31
+ scales: Array<number>,
32
+ hash: string,
33
+ name: string,
34
+ type: string,
35
+ resolver?: AssetDestPathResolver,
36
+ ...
37
+ }>;
25
38
 
26
39
  const PixelRatio = require('../Utilities/PixelRatio').default;
27
40
  const Platform = require('../Utilities/Platform').default;
@@ -18,10 +18,23 @@ export type ResolvedAssetSource = {
18
18
  +scale: number,
19
19
  };
20
20
 
21
- import type {
22
- AssetDestPathResolver,
23
- PackagerAsset,
24
- } from '@react-native/assets-registry/registry';
21
+ // From @react-native/assets-registry
22
+ type AssetDestPathResolver = 'android' | 'generic';
23
+
24
+ // From @react-native/assets-registry
25
+ type PackagerAsset = $ReadOnly<{
26
+ __packager_asset: boolean,
27
+ fileSystemLocation: string,
28
+ httpServerLocation: string,
29
+ width: ?number,
30
+ height: ?number,
31
+ scales: Array<number>,
32
+ hash: string,
33
+ name: string,
34
+ type: string,
35
+ resolver?: AssetDestPathResolver,
36
+ ...
37
+ }>;
25
38
 
26
39
  const PixelRatio = require('../Utilities/PixelRatio').default;
27
40
  const Platform = require('../Utilities/Platform').default;
@@ -8,8 +8,10 @@
8
8
  * @format
9
9
  */
10
10
 
11
+ import type {HostInstance} from '../../src/private/types/HostInstance';
11
12
  import type {ImageStyleProp} from '../StyleSheet/StyleSheet';
12
13
  import type {RootTag} from '../Types/RootTagTypes';
14
+ import type {ImageProps} from './ImageProps';
13
15
  import type {AbstractImageAndroid, ImageAndroid} from './ImageTypes.flow';
14
16
 
15
17
  import flattenStyle from '../StyleSheet/flattenStyle';
@@ -126,125 +128,129 @@ async function queryCache(
126
128
  *
127
129
  * See https://reactnative.dev/docs/image
128
130
  */
129
- let BaseImage: AbstractImageAndroid = React.forwardRef(
130
- (props, forwardedRef) => {
131
- let source = getImageSourcesFromImageProps(props) || {
132
- uri: undefined,
133
- width: undefined,
134
- height: undefined,
135
- };
136
- const defaultSource = resolveAssetSource(props.defaultSource);
137
- const loadingIndicatorSource = resolveAssetSource(
138
- props.loadingIndicatorSource,
139
- );
131
+ let BaseImage: AbstractImageAndroid = ({
132
+ ref: forwardedRef,
133
+ ...props
134
+ }: {
135
+ ref?: React.RefSetter<HostInstance>,
136
+ ...ImageProps,
137
+ }) => {
138
+ let source = getImageSourcesFromImageProps(props) || {
139
+ uri: undefined,
140
+ width: undefined,
141
+ height: undefined,
142
+ };
143
+ const defaultSource = resolveAssetSource(props.defaultSource);
144
+ const loadingIndicatorSource = resolveAssetSource(
145
+ props.loadingIndicatorSource,
146
+ );
140
147
 
141
- if (props.children != null) {
142
- throw new Error(
143
- 'The <Image> component cannot contain children. If you want to render content on top of the image, consider using the <ImageBackground> component or absolute positioning.',
144
- );
145
- }
148
+ if (props.children != null) {
149
+ throw new Error(
150
+ 'The <Image> component cannot contain children. If you want to render content on top of the image, consider using the <ImageBackground> component or absolute positioning.',
151
+ );
152
+ }
146
153
 
147
- if (props.defaultSource != null && props.loadingIndicatorSource != null) {
148
- throw new Error(
149
- 'The <Image> component cannot have defaultSource and loadingIndicatorSource at the same time. Please use either defaultSource or loadingIndicatorSource.',
150
- );
151
- }
154
+ if (props.defaultSource != null && props.loadingIndicatorSource != null) {
155
+ throw new Error(
156
+ 'The <Image> component cannot have defaultSource and loadingIndicatorSource at the same time. Please use either defaultSource or loadingIndicatorSource.',
157
+ );
158
+ }
152
159
 
153
- let style: ImageStyleProp;
154
- let sources;
155
- if (Array.isArray(source)) {
156
- style = [styles.base, props.style];
157
- sources = source;
158
- } else {
159
- const {uri} = source;
160
- if (uri === '') {
161
- console.warn('source.uri should not be an empty string');
162
- }
163
- const width = source.width ?? props.width;
164
- const height = source.height ?? props.height;
165
- style = [{width, height}, styles.base, props.style];
166
- sources = [source];
160
+ let style: ImageStyleProp;
161
+ let sources;
162
+ if (Array.isArray(source)) {
163
+ style = [styles.base, props.style];
164
+ sources = source;
165
+ } else {
166
+ const {uri} = source;
167
+ if (uri === '') {
168
+ console.warn('source.uri should not be an empty string');
167
169
  }
170
+ const width = source.width ?? props.width;
171
+ const height = source.height ?? props.height;
172
+ style = [{width, height}, styles.base, props.style];
173
+ sources = [source];
174
+ }
168
175
 
169
- const {onLoadStart, onLoad, onLoadEnd, onError} = props;
170
- const nativeProps = {
171
- ...props,
172
- style,
173
- shouldNotifyLoadEvents: !!(onLoadStart || onLoad || onLoadEnd || onError),
174
- // Both iOS and C++ sides expect to have "source" prop, whereas on Android it's "src"
175
- // (for historical reasons). So in the latter case we populate both "src" and "source",
176
- // in order to have a better alignment between platforms in the future.
177
- src: sources,
178
- source: sources,
179
- /* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
180
- * when making Flow check .android.js files. */
181
- headers: (source?.[0]?.headers || source?.headers: ?{[string]: string}),
182
- defaultSource: defaultSource ? defaultSource.uri : null,
183
- loadingIndicatorSrc: loadingIndicatorSource
184
- ? loadingIndicatorSource.uri
185
- : null,
186
- accessibilityLabel:
187
- props['aria-label'] ?? props.accessibilityLabel ?? props.alt,
188
- accessibilityLabelledBy:
189
- props?.['aria-labelledby'] ?? props?.accessibilityLabelledBy,
190
- accessible: props.alt !== undefined ? true : props.accessible,
191
- accessibilityState: {
192
- busy: props['aria-busy'] ?? props.accessibilityState?.busy,
193
- checked: props['aria-checked'] ?? props.accessibilityState?.checked,
194
- disabled: props['aria-disabled'] ?? props.accessibilityState?.disabled,
195
- expanded: props['aria-expanded'] ?? props.accessibilityState?.expanded,
196
- selected: props['aria-selected'] ?? props.accessibilityState?.selected,
197
- },
198
- };
199
-
200
- const flattenedStyle = flattenStyle<ImageStyleProp>(style);
201
- const objectFit = convertObjectFitToResizeMode(flattenedStyle?.objectFit);
202
- const resizeMode =
203
- objectFit || props.resizeMode || flattenedStyle?.resizeMode || 'cover';
176
+ const {onLoadStart, onLoad, onLoadEnd, onError} = props;
177
+ const nativeProps = {
178
+ ...props,
179
+ style,
180
+ shouldNotifyLoadEvents: !!(onLoadStart || onLoad || onLoadEnd || onError),
181
+ // Both iOS and C++ sides expect to have "source" prop, whereas on Android it's "src"
182
+ // (for historical reasons). So in the latter case we populate both "src" and "source",
183
+ // in order to have a better alignment between platforms in the future.
184
+ src: sources,
185
+ source: sources,
186
+ /* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
187
+ * when making Flow check .android.js files. */
188
+ headers: (source?.[0]?.headers || source?.headers: ?{[string]: string}),
189
+ defaultSource: defaultSource ? defaultSource.uri : null,
190
+ loadingIndicatorSrc: loadingIndicatorSource
191
+ ? loadingIndicatorSource.uri
192
+ : null,
193
+ accessibilityLabel:
194
+ props['aria-label'] ?? props.accessibilityLabel ?? props.alt,
195
+ accessibilityLabelledBy:
196
+ props?.['aria-labelledby'] ?? props?.accessibilityLabelledBy,
197
+ accessible: props.alt !== undefined ? true : props.accessible,
198
+ accessibilityState: {
199
+ busy: props['aria-busy'] ?? props.accessibilityState?.busy,
200
+ checked: props['aria-checked'] ?? props.accessibilityState?.checked,
201
+ disabled: props['aria-disabled'] ?? props.accessibilityState?.disabled,
202
+ expanded: props['aria-expanded'] ?? props.accessibilityState?.expanded,
203
+ selected: props['aria-selected'] ?? props.accessibilityState?.selected,
204
+ },
205
+ };
204
206
 
205
- const actualRef = useWrapRefWithImageAttachedCallbacks(forwardedRef);
207
+ const flattenedStyle = flattenStyle<ImageStyleProp>(style);
208
+ const objectFit = convertObjectFitToResizeMode(flattenedStyle?.objectFit);
209
+ const resizeMode =
210
+ objectFit || props.resizeMode || flattenedStyle?.resizeMode || 'cover';
206
211
 
207
- return (
208
- <ImageAnalyticsTagContext.Consumer>
209
- {analyticTag => {
210
- const nativePropsWithAnalytics =
211
- analyticTag !== null
212
- ? {
213
- ...nativeProps,
214
- internal_analyticTag: analyticTag,
215
- }
216
- : nativeProps;
217
- return (
218
- <TextAncestor.Consumer>
219
- {hasTextAncestor => {
220
- if (hasTextAncestor) {
221
- return (
222
- <TextInlineImageNativeComponent
223
- // $FlowFixMe[incompatible-type]
224
- style={style}
225
- resizeMode={resizeMode}
226
- headers={nativeProps.headers}
227
- src={sources}
228
- ref={actualRef}
229
- />
230
- );
231
- }
212
+ const actualRef = useWrapRefWithImageAttachedCallbacks(forwardedRef);
232
213
 
214
+ return (
215
+ <ImageAnalyticsTagContext.Consumer>
216
+ {analyticTag => {
217
+ const nativePropsWithAnalytics =
218
+ analyticTag !== null
219
+ ? {
220
+ ...nativeProps,
221
+ internal_analyticTag: analyticTag,
222
+ }
223
+ : nativeProps;
224
+ return (
225
+ <TextAncestor.Consumer>
226
+ {hasTextAncestor => {
227
+ if (hasTextAncestor) {
233
228
  return (
234
- <ImageViewNativeComponent
235
- {...nativePropsWithAnalytics}
229
+ <TextInlineImageNativeComponent
230
+ // $FlowFixMe[incompatible-type]
231
+ style={style}
236
232
  resizeMode={resizeMode}
233
+ headers={nativeProps.headers}
234
+ src={sources}
237
235
  ref={actualRef}
238
236
  />
239
237
  );
240
- }}
241
- </TextAncestor.Consumer>
242
- );
243
- }}
244
- </ImageAnalyticsTagContext.Consumer>
245
- );
246
- },
247
- );
238
+ }
239
+
240
+ return (
241
+ <ImageViewNativeComponent
242
+ {...nativePropsWithAnalytics}
243
+ resizeMode={resizeMode}
244
+ ref={actualRef}
245
+ />
246
+ );
247
+ }}
248
+ </TextAncestor.Consumer>
249
+ );
250
+ }}
251
+ </ImageAnalyticsTagContext.Consumer>
252
+ );
253
+ };
248
254
 
249
255
  const imageComponentDecorator = unstable_getImageComponentDecorator();
250
256
  if (imageComponentDecorator != null) {
@@ -8,8 +8,10 @@
8
8
  * @format
9
9
  */
10
10
 
11
+ import type {HostInstance} from '../../src/private/types/HostInstance';
11
12
  import type {ImageStyleProp} from '../StyleSheet/StyleSheet';
12
13
  import type {RootTag} from '../Types/RootTagTypes';
14
+ import type {ImageProps} from './ImageProps';
13
15
  import type {AbstractImageIOS, ImageIOS} from './ImageTypes.flow';
14
16
  import type {ImageSize} from './NativeImageLoaderAndroid';
15
17
 
@@ -105,7 +107,13 @@ async function queryCache(
105
107
  *
106
108
  * See https://reactnative.dev/docs/image
107
109
  */
108
- let BaseImage: AbstractImageIOS = React.forwardRef((props, forwardedRef) => {
110
+ let BaseImage: AbstractImageIOS = ({
111
+ ref: forwardedRef,
112
+ ...props
113
+ }: {
114
+ ref?: React.RefSetter<HostInstance>,
115
+ ...ImageProps,
116
+ }) => {
109
117
  const source = getImageSourcesFromImageProps(props) || {
110
118
  uri: undefined,
111
119
  width: undefined,
@@ -180,7 +188,7 @@ let BaseImage: AbstractImageIOS = React.forwardRef((props, forwardedRef) => {
180
188
  }}
181
189
  </ImageAnalyticsTagContext.Consumer>
182
190
  );
183
- });
191
+ };
184
192
 
185
193
  const imageComponentDecorator = unstable_getImageComponentDecorator();
186
194
  if (imageComponentDecorator != null) {