react-native 0.83.0-nightly-20251008-31bff4e09 → 0.83.0-nightly-20251011-6f482708b

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 (129) hide show
  1. package/Libraries/AppDelegate/RCTAppSetupUtils.mm +12 -0
  2. package/Libraries/AppDelegate/RCTReactNativeFactory.mm +33 -0
  3. package/Libraries/Components/TextInput/TextInput.js +6 -0
  4. package/Libraries/Components/View/ViewNativeComponent.js +2 -2
  5. package/Libraries/Core/ReactNativeVersion.js +1 -1
  6. package/Libraries/Network/RCTInspectorNetworkReporter.h +8 -8
  7. package/Libraries/Network/RCTInspectorNetworkReporter.mm +18 -20
  8. package/Libraries/Network/RCTNetworkTask.h +5 -1
  9. package/Libraries/Network/RCTNetworkTask.mm +13 -0
  10. package/Libraries/Network/RCTNetworking+Internal.h +21 -0
  11. package/Libraries/Network/RCTNetworking.android.js +3 -1
  12. package/Libraries/Network/RCTNetworking.h +3 -0
  13. package/Libraries/Network/RCTNetworking.ios.js +3 -0
  14. package/Libraries/Network/RCTNetworking.mm +81 -34
  15. package/Libraries/Renderer/implementations/ReactFabric-dev.js +6759 -4478
  16. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3169 -3119
  17. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4732 -3535
  18. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +6641 -4058
  19. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3136 -2818
  20. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4753 -3297
  21. package/Libraries/Renderer/shims/ReactFabric.js +3 -1
  22. package/Libraries/Renderer/shims/ReactFeatureFlags.js +3 -1
  23. package/Libraries/Renderer/shims/ReactNative.js +3 -1
  24. package/Libraries/Renderer/shims/ReactNativeTypes.js +3 -1
  25. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -1
  26. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +3 -1
  27. package/React/Base/RCTVersion.m +1 -1
  28. package/React/CxxBridge/RCTCxxBridge.mm +0 -15
  29. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h +6 -0
  30. package/React/FBReactNativeSpec/FBReactNativeSpecJSI-generated.cpp +12 -0
  31. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +18 -0
  32. package/ReactAndroid/api/ReactAndroid.api +2 -0
  33. package/ReactAndroid/gradle.properties +1 -1
  34. package/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.kt +2 -2
  35. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.kt +47 -32
  36. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +13 -1
  37. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +21 -1
  38. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +5 -1
  39. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +5 -1
  40. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +23 -1
  41. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +5 -1
  42. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.kt +12 -0
  43. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/InspectorNetworkReporter.kt +11 -11
  44. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +18 -10
  45. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +126 -11
  46. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoHelpers.kt +3 -3
  47. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  48. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +0 -2
  49. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +13 -4
  50. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.kt +4 -1
  51. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +8 -3
  52. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.kt +4 -1
  53. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.kt +5 -1
  54. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorNetworkReporter.cpp +23 -21
  55. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorNetworkReporter.h +8 -8
  56. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +29 -1
  57. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +7 -1
  58. package/ReactApple/RCTAnimatedModuleProvider/RCTAnimatedModuleProvider.h +26 -0
  59. package/ReactApple/RCTAnimatedModuleProvider/RCTAnimatedModuleProvider.mm +66 -0
  60. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  61. package/ReactCommon/hermes/executor/HermesExecutorFactory.cpp +68 -1
  62. package/ReactCommon/hermes/inspector-modern/chrome/ConnectionDemux.cpp +142 -0
  63. package/ReactCommon/hermes/inspector-modern/chrome/ConnectionDemux.h +62 -0
  64. package/ReactCommon/hermes/inspector-modern/chrome/HermesRuntimeTargetDelegate.cpp +54 -0
  65. package/ReactCommon/hermes/inspector-modern/chrome/HermesRuntimeTargetDelegate.h +3 -0
  66. package/ReactCommon/hermes/inspector-modern/chrome/Registration.cpp +37 -0
  67. package/ReactCommon/hermes/inspector-modern/chrome/Registration.h +41 -0
  68. package/ReactCommon/jsinspector-modern/CMakeLists.txt +1 -0
  69. package/ReactCommon/jsinspector-modern/EnumArray.h +45 -0
  70. package/ReactCommon/jsinspector-modern/FallbackRuntimeTargetDelegate.cpp +6 -0
  71. package/ReactCommon/jsinspector-modern/FallbackRuntimeTargetDelegate.h +3 -0
  72. package/ReactCommon/jsinspector-modern/React-jsinspector.podspec +1 -1
  73. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +46 -17
  74. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +64 -18
  75. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +67 -9
  76. package/ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp +10 -28
  77. package/ReactCommon/jsinspector-modern/RuntimeTargetNetwork.cpp +98 -0
  78. package/ReactCommon/jsinspector-modern/ScopedExecutor.h +29 -0
  79. package/ReactCommon/jsinspector-modern/network/NetworkHandler.cpp +33 -3
  80. package/ReactCommon/jsinspector-modern/network/NetworkHandler.h +12 -1
  81. package/ReactCommon/jsinspector-modern/tests/DebuggerSessionObserverTest.cpp +44 -0
  82. package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +5 -0
  83. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +82 -0
  84. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.h +54 -0
  85. package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +126 -0
  86. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +9 -1
  87. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +11 -1
  88. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +111 -75
  89. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +6 -2
  90. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +9 -1
  91. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +19 -1
  92. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +3 -1
  93. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +11 -1
  94. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +5 -1
  95. package/ReactCommon/react/renderer/animated/CMakeLists.txt +1 -0
  96. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +18 -5
  97. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +7 -2
  98. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +4 -0
  99. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.h +1 -1
  100. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +4 -3
  101. package/ReactCommon/react/renderer/graphics/Transform.h +2 -3
  102. package/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h +59 -23
  103. package/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/configurePlatformColorCacheInvalidationHook.cpp +27 -0
  104. package/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/configurePlatformColorCacheInvalidationHook.h +12 -0
  105. package/ReactCommon/react/renderer/mounting/internal/sliceChildShadowNodeViewPairs.cpp +5 -3
  106. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +3 -2
  107. package/ReactCommon/react/renderer/uimanager/UIManager.h +8 -4
  108. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h +24 -0
  109. package/ReactCommon/react/runtime/hermes/HermesInstance.cpp +89 -0
  110. package/ReactCommon/react/utils/CMakeLists.txt +1 -1
  111. package/ReactCommon/react/utils/Uuid.cpp +69 -0
  112. package/ReactCommon/react/utils/Uuid.h +20 -0
  113. package/ReactCommon/react/utils/tests/UuidTest.cpp +28 -0
  114. package/ReactCommon/yoga/cmake/yoga-config.cmake.in +1 -1
  115. package/jest/setup.js +15 -10
  116. package/package.json +10 -10
  117. package/scripts/cocoapods/utils.rb +1 -0
  118. package/scripts/react_native_pods.rb +6 -0
  119. package/sdks/hermes-engine/hermes-engine.podspec +14 -0
  120. package/sdks/hermes-engine/utils/build-apple-framework.sh +12 -0
  121. package/sdks/hermesc/osx-bin/hermes +0 -0
  122. package/sdks/hermesc/osx-bin/hermesc +0 -0
  123. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  124. package/src/private/featureflags/ReactNativeFeatureFlags.js +11 -1
  125. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -1
  126. package/src/private/specs_DEPRECATED/modules/NativeNetworkingIOS.js +1 -0
  127. package/src/private/webapis/dom/nodes/ReactNativeElement.js +12 -2
  128. package/types_generated/Libraries/Components/View/ViewNativeComponent.d.ts +3 -3
  129. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt +0 -36
@@ -120,6 +120,7 @@ std::unique_ptr<facebook::react::JSExecutorFactory> RCTAppSetupDefaultJsExecutor
120
120
  RCTTurboModuleManager *turboModuleManager,
121
121
  const std::shared_ptr<facebook::react::RuntimeScheduler> &runtimeScheduler)
122
122
  {
123
+ #ifndef RCT_REMOVE_LEGACY_ARCH
123
124
  // Necessary to allow NativeModules to lookup TurboModules
124
125
  [bridge setRCTTurboModuleRegistry:turboModuleManager];
125
126
 
@@ -146,12 +147,18 @@ std::unique_ptr<facebook::react::JSExecutorFactory> RCTAppSetupDefaultJsExecutor
146
147
  return std::make_unique<facebook::react::HermesExecutorFactory>(
147
148
  facebook::react::RCTJSIExecutorRuntimeInstaller(runtimeInstallerLambda));
148
149
  #endif
150
+ #else
151
+ // This method should not be invoked in the New Arch. So when Legacy Arch is removed, we can
152
+ // safly return a nullptr.
153
+ return nullptr;
154
+ #endif
149
155
  }
150
156
 
151
157
  std::unique_ptr<facebook::react::JSExecutorFactory> RCTAppSetupJsExecutorFactoryForOldArch(
152
158
  RCTBridge *bridge,
153
159
  const std::shared_ptr<facebook::react::RuntimeScheduler> &runtimeScheduler)
154
160
  {
161
+ #ifndef RCT_REMOVE_LEGACY_ARCH
155
162
  auto runtimeInstallerLambda = [bridge, runtimeScheduler](facebook::jsi::Runtime &runtime) {
156
163
  if (!bridge) {
157
164
  return;
@@ -164,4 +171,9 @@ std::unique_ptr<facebook::react::JSExecutorFactory> RCTAppSetupJsExecutorFactory
164
171
  return std::make_unique<facebook::react::HermesExecutorFactory>(
165
172
  facebook::react::RCTJSIExecutorRuntimeInstaller(runtimeInstallerLambda));
166
173
  #endif
174
+ #else
175
+ // This method should not be invoked in the New Arch. So when Legacy Arch is removed, we can
176
+ // safly return a nullptr.
177
+ return nullptr;
178
+ #endif
167
179
  }
@@ -261,7 +261,12 @@ using namespace facebook::react;
261
261
 
262
262
  configuration.sourceURLForBridge = ^NSURL *_Nullable(RCTBridge *_Nonnull bridge)
263
263
  {
264
+ #ifndef RCT_REMOVE_LEGACY_ARCH
264
265
  return [weakSelf.delegate sourceURLForBridge:bridge];
266
+ #else
267
+ // When the Legacy Arch is removed, the Delegate does not have a sourceURLForBridge method
268
+ return [weakSelf.delegate bundleURL];
269
+ #endif
265
270
  };
266
271
 
267
272
  if ([self.delegate respondsToSelector:@selector(extraModulesForBridge:)]) {
@@ -275,13 +280,24 @@ using namespace facebook::react;
275
280
  configuration.extraLazyModuleClassesForBridge =
276
281
  ^NSDictionary<NSString *, Class> *_Nonnull(RCTBridge *_Nonnull bridge)
277
282
  {
283
+ #ifndef RCT_REMOVE_LEGACY_ARCH
278
284
  return [weakSelf.delegate extraLazyModuleClassesForBridge:bridge];
285
+ #else
286
+ // When the Legacy Arch is removed, the Delegate does not have a extraLazyModuleClassesForBridge method
287
+ return @{};
288
+ #endif
279
289
  };
280
290
  }
281
291
 
282
292
  if ([self.delegate respondsToSelector:@selector(bridge:didNotFindModule:)]) {
283
293
  configuration.bridgeDidNotFindModule = ^BOOL(RCTBridge *_Nonnull bridge, NSString *_Nonnull moduleName) {
294
+ #ifndef RCT_REMOVE_LEGACY_ARCH
284
295
  return [weakSelf.delegate bridge:bridge didNotFindModule:moduleName];
296
+ #else
297
+ // When the Legacy Arch is removed, the Delegate does not have a bridge:didNotFindModule method
298
+ // We return NO, because if we have invoked this method is unlikely that the module will be actually registered
299
+ return NO;
300
+ #endif
285
301
  };
286
302
  }
287
303
 
@@ -290,13 +306,30 @@ using namespace facebook::react;
290
306
  ^(RCTBridge *_Nonnull bridge,
291
307
  RCTSourceLoadProgressBlock _Nonnull onProgress,
292
308
  RCTSourceLoadBlock _Nonnull loadCallback) {
309
+ #ifndef RCT_REMOVE_LEGACY_ARCH
293
310
  [weakSelf.delegate loadSourceForBridge:bridge onProgress:onProgress onComplete:loadCallback];
311
+ #else
312
+ // When the Legacy Arch is removed, the Delegate does not have a
313
+ // loadSourceForBridge:onProgress:onComplete: method
314
+ // We then call the loadBundleAtURL:onProgress:onComplete: instead
315
+ [weakSelf.delegate loadBundleAtURL:self.bundleURL onProgress:onProgress onComplete:loadCallback];
316
+ #endif
294
317
  };
295
318
  }
296
319
 
297
320
  if ([self.delegate respondsToSelector:@selector(loadSourceForBridge:withBlock:)]) {
298
321
  configuration.loadSourceForBridge = ^(RCTBridge *_Nonnull bridge, RCTSourceLoadBlock _Nonnull loadCallback) {
322
+ #ifndef RCT_REMOVE_LEGACY_ARCH
299
323
  [weakSelf.delegate loadSourceForBridge:bridge withBlock:loadCallback];
324
+ #else
325
+ // When the Legacy Arch is removed, the Delegate does not have a
326
+ // loadSourceForBridge:withBlock: method
327
+ // We then call the loadBundleAtURL:onProgress:onComplete: instead
328
+ [weakSelf.delegate loadBundleAtURL:self.bundleURL
329
+ onProgress:^(RCTLoadingProgress *progressData) {
330
+ }
331
+ onComplete:loadCallback];
332
+ #endif
300
333
  };
301
334
  }
302
335
 
@@ -449,6 +449,12 @@ function InternalTextInput(props: TextInputProps): React.Node {
449
449
  before we can get to the long term breaking change.
450
450
  */
451
451
  if (instance != null) {
452
+ // Register the input immediately when the ref is set so that focus()
453
+ // can be called from ref callbacks
454
+ // Double registering during useLayoutEffect is fine, because the underlying
455
+ // state is a Set.
456
+ TextInputState.registerInput(instance);
457
+
452
458
  // $FlowFixMe[prop-missing] - See the explanation above.
453
459
  // $FlowFixMe[unsafe-object-assign]
454
460
  Object.assign(instance, {
@@ -21,8 +21,8 @@ const ViewNativeComponent: HostComponent<Props> =
21
21
  }));
22
22
 
23
23
  interface NativeCommands {
24
- +focus: () => void;
25
- +blur: () => void;
24
+ +focus: (viewRef: HostInstance) => void;
25
+ +blur: (viewRef: HostInstance) => void;
26
26
  +hotspotUpdate: (viewRef: HostInstance, x: number, y: number) => void;
27
27
  +setPressed: (viewRef: HostInstance, pressed: boolean) => void;
28
28
  }
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
29
29
  static major: number = 0;
30
30
  static minor: number = 83;
31
31
  static patch: number = 0;
32
- static prerelease: string | null = 'nightly-20251008-31bff4e09';
32
+ static prerelease: string | null = 'nightly-20251011-6f482708b';
33
33
 
34
34
  static getVersionString(): string {
35
35
  return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
@@ -27,7 +27,7 @@
27
27
  * - Corresponds to `PerformanceResourceTiming.requestStart` (specifically,
28
28
  * marking when the native request was initiated).
29
29
  */
30
- + (void)reportRequestStart:(NSNumber *)requestId
30
+ + (void)reportRequestStart:(NSString *)requestId
31
31
  request:(NSURLRequest *)request
32
32
  encodedDataLength:(int)encodedDataLength;
33
33
 
@@ -40,7 +40,7 @@
40
40
  * `PerformanceResourceTiming.connectStart`. Defined as "immediately before
41
41
  * the browser starts to establish the connection to the server".
42
42
  */
43
- + (void)reportConnectionTiming:(NSNumber *)requestId request:(NSURLRequest *)request;
43
+ + (void)reportConnectionTiming:(NSString *)requestId request:(NSURLRequest *)request;
44
44
 
45
45
  /**
46
46
  * Report when HTTP response headers have been received, corresponding to
@@ -49,7 +49,7 @@
49
49
  * - Corresponds to `Network.responseReceived` in CDP.
50
50
  * - Corresponds to `PerformanceResourceTiming.responseStart`.
51
51
  */
52
- + (void)reportResponseStart:(NSNumber *)requestId
52
+ + (void)reportResponseStart:(NSString *)requestId
53
53
  response:(NSURLResponse *)response
54
54
  statusCode:(int)statusCode
55
55
  headers:(NSDictionary<NSString *, NSString *> *)headers;
@@ -59,7 +59,7 @@
59
59
  *
60
60
  * Corresponds to `Network.dataReceived` in CDP.
61
61
  */
62
- + (void)reportDataReceived:(NSNumber *)requestId data:(NSData *)data;
62
+ + (void)reportDataReceived:(NSString *)requestId data:(NSData *)data;
63
63
 
64
64
  /**
65
65
  * Report when a network request is complete and we are no longer receiving
@@ -68,20 +68,20 @@
68
68
  * - Corresponds to `Network.loadingFinished` in CDP.
69
69
  * - Corresponds to `PerformanceResourceTiming.responseEnd`.
70
70
  */
71
- + (void)reportResponseEnd:(NSNumber *)requestId encodedDataLength:(int)encodedDataLength;
71
+ + (void)reportResponseEnd:(NSString *)requestId encodedDataLength:(int)encodedDataLength;
72
72
 
73
73
  /**
74
74
  * Report when a network request has failed.
75
75
  *
76
76
  * - Corresponds to `Network.loadingFailed` in CDP.
77
77
  */
78
- + (void)reportRequestFailed:(NSNumber *)requestId cancelled:(BOOL)cancelled;
78
+ + (void)reportRequestFailed:(NSString *)requestId cancelled:(BOOL)cancelled;
79
79
 
80
80
  /**
81
81
  * Store response body preview. This is an optional reporting method, and is a
82
82
  * no-op if CDP debugging is disabled.
83
83
  */
84
- + (void)maybeStoreResponseBody:(NSNumber *)requestId data:(NSData *)data base64Encoded:(bool)base64Encoded;
84
+ + (void)maybeStoreResponseBody:(NSString *)requestId data:(NSData *)data base64Encoded:(bool)base64Encoded;
85
85
 
86
86
  /**
87
87
  * Incrementally store a response body preview, when a string response is
@@ -91,6 +91,6 @@
91
91
  * As with `maybeStoreResponseBody`, calling this method is optional and a
92
92
  * no-op if CDP debugging is disabled.
93
93
  */
94
- + (void)maybeStoreResponseBodyIncremental:(NSNumber *)requestId data:(NSString *)data;
94
+ + (void)maybeStoreResponseBodyIncremental:(NSString *)requestId data:(NSString *)data;
95
95
 
96
96
  @end
@@ -48,14 +48,14 @@ std::string convertRequestBodyToStringTruncated(NSURLRequest *request)
48
48
  #ifdef REACT_NATIVE_DEBUGGER_ENABLED
49
49
 
50
50
  // Dictionary to buffer incremental response bodies (CDP debugging active only)
51
- static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers = nil;
51
+ static const NSMutableDictionary<NSString *, NSMutableString *> *responseBuffers = nil;
52
52
 
53
53
  #endif
54
54
 
55
55
  @implementation RCTInspectorNetworkReporter {
56
56
  }
57
57
 
58
- + (void)reportRequestStart:(NSNumber *)requestId
58
+ + (void)reportRequestStart:(NSString *)requestId
59
59
  request:(NSURLRequest *)request
60
60
  encodedDataLength:(int)encodedDataLength
61
61
  {
@@ -68,11 +68,10 @@ static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers
68
68
  requestInfo.httpBody = convertRequestBodyToStringTruncated(request);
69
69
  #endif
70
70
 
71
- NetworkReporter::getInstance().reportRequestStart(
72
- requestId.stringValue.UTF8String, requestInfo, encodedDataLength, std::nullopt);
71
+ NetworkReporter::getInstance().reportRequestStart(requestId.UTF8String, requestInfo, encodedDataLength, std::nullopt);
73
72
  }
74
73
 
75
- + (void)reportConnectionTiming:(NSNumber *)requestId request:(NSURLRequest *)request
74
+ + (void)reportConnectionTiming:(NSString *)requestId request:(NSURLRequest *)request
76
75
  {
77
76
  Headers headersMap;
78
77
 
@@ -81,10 +80,10 @@ static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers
81
80
  headersMap = convertNSDictionaryToHeaders(request.allHTTPHeaderFields);
82
81
  #endif
83
82
 
84
- NetworkReporter::getInstance().reportConnectionTiming(requestId.stringValue.UTF8String, headersMap);
83
+ NetworkReporter::getInstance().reportConnectionTiming(requestId.UTF8String, headersMap);
85
84
  }
86
85
 
87
- + (void)reportResponseStart:(NSNumber *)requestId
86
+ + (void)reportResponseStart:(NSString *)requestId
88
87
  response:(NSURLResponse *)response
89
88
  statusCode:(int)statusCode
90
89
  headers:(NSDictionary<NSString *, NSString *> *)headers
@@ -99,17 +98,17 @@ static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers
99
98
  #endif
100
99
 
101
100
  NetworkReporter::getInstance().reportResponseStart(
102
- requestId.stringValue.UTF8String, responseInfo, response.expectedContentLength);
101
+ requestId.UTF8String, responseInfo, response.expectedContentLength);
103
102
  }
104
103
 
105
- + (void)reportDataReceived:(NSNumber *)requestId data:(NSData *)data
104
+ + (void)reportDataReceived:(NSString *)requestId data:(NSData *)data
106
105
  {
107
- NetworkReporter::getInstance().reportDataReceived(requestId.stringValue.UTF8String, (int)data.length, std::nullopt);
106
+ NetworkReporter::getInstance().reportDataReceived(requestId.UTF8String, (int)data.length, std::nullopt);
108
107
  }
109
108
 
110
- + (void)reportResponseEnd:(NSNumber *)requestId encodedDataLength:(int)encodedDataLength
109
+ + (void)reportResponseEnd:(NSString *)requestId encodedDataLength:(int)encodedDataLength
111
110
  {
112
- NetworkReporter::getInstance().reportResponseEnd(requestId.stringValue.UTF8String, encodedDataLength);
111
+ NetworkReporter::getInstance().reportResponseEnd(requestId.UTF8String, encodedDataLength);
113
112
 
114
113
  #ifdef REACT_NATIVE_DEBUGGER_ENABLED
115
114
  // Debug build: Check for buffered response body and flush to NetworkReporter
@@ -118,7 +117,7 @@ static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers
118
117
  if (buffer != nullptr) {
119
118
  if (buffer.length > 0) {
120
119
  NetworkReporter::getInstance().storeResponseBody(
121
- requestId.stringValue.UTF8String, RCTStringViewFromNSString(buffer), false);
120
+ requestId.UTF8String, RCTStringViewFromNSString(buffer), false);
122
121
  }
123
122
  [responseBuffers removeObjectForKey:requestId];
124
123
  }
@@ -126,9 +125,9 @@ static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers
126
125
  #endif
127
126
  }
128
127
 
129
- + (void)reportRequestFailed:(NSNumber *)requestId cancelled:(bool)cancelled
128
+ + (void)reportRequestFailed:(NSString *)requestId cancelled:(bool)cancelled
130
129
  {
131
- NetworkReporter::getInstance().reportRequestFailed(requestId.stringValue.UTF8String, cancelled);
130
+ NetworkReporter::getInstance().reportRequestFailed(requestId.UTF8String, cancelled);
132
131
 
133
132
  #ifdef REACT_NATIVE_DEBUGGER_ENABLED
134
133
  // Debug build: Clear buffer for request
@@ -138,7 +137,7 @@ static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers
138
137
  #endif
139
138
  }
140
139
 
141
- + (void)maybeStoreResponseBody:(NSNumber *)requestId data:(id)data base64Encoded:(bool)base64Encoded
140
+ + (void)maybeStoreResponseBody:(NSString *)requestId data:(id)data base64Encoded:(bool)base64Encoded
142
141
  {
143
142
  #ifdef REACT_NATIVE_DEBUGGER_ENABLED
144
143
  // Debug build: Process response body and report to NetworkReporter
@@ -152,7 +151,7 @@ static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers
152
151
  NSString *encodedString = [(NSData *)data base64EncodedStringWithOptions:0];
153
152
  if (encodedString != nullptr) {
154
153
  networkReporter.storeResponseBody(
155
- requestId.stringValue.UTF8String, RCTStringViewFromNSString(encodedString), base64Encoded);
154
+ requestId.UTF8String, RCTStringViewFromNSString(encodedString), base64Encoded);
156
155
  } else {
157
156
  RCTLogWarn(@"Failed to encode response data for request %@", requestId);
158
157
  }
@@ -160,13 +159,12 @@ static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers
160
159
  RCTLogWarn(@"Exception while encoding response data: %@", exception.reason);
161
160
  }
162
161
  } else if ([data isKindOfClass:[NSString class]] && [(NSString *)data length] > 0) {
163
- networkReporter.storeResponseBody(
164
- requestId.stringValue.UTF8String, RCTStringViewFromNSString((NSString *)data), base64Encoded);
162
+ networkReporter.storeResponseBody(requestId.UTF8String, RCTStringViewFromNSString((NSString *)data), base64Encoded);
165
163
  }
166
164
  #endif
167
165
  }
168
166
 
169
- + (void)maybeStoreResponseBodyIncremental:(NSNumber *)requestId data:(NSString *)data
167
+ + (void)maybeStoreResponseBodyIncremental:(NSString *)requestId data:(NSString *)data
170
168
  {
171
169
  #ifdef REACT_NATIVE_DEBUGGER_ENABLED
172
170
  // Debug build: Buffer incremental response body contents
@@ -28,6 +28,7 @@ typedef NS_ENUM(NSInteger, RCTNetworkTaskStatus) {
28
28
  @property (nonatomic, readonly) NSNumber *requestID;
29
29
  @property (nonatomic, readonly, weak) id requestToken;
30
30
  @property (nonatomic, readonly) NSURLResponse *response;
31
+ @property (nonatomic, readonly) NSString *devToolsRequestId;
31
32
 
32
33
  @property (nonatomic, copy) RCTURLRequestCompletionBlock completionBlock;
33
34
  @property (nonatomic, copy) RCTURLRequestProgressBlock downloadProgressBlock;
@@ -40,7 +41,10 @@ typedef NS_ENUM(NSInteger, RCTNetworkTaskStatus) {
40
41
  - (instancetype)initWithRequest:(NSURLRequest *)request
41
42
  handler:(id<RCTURLRequestHandler>)handler
42
43
  callbackQueue:(dispatch_queue_t)callbackQueue NS_DESIGNATED_INITIALIZER;
43
-
44
+ - (instancetype)initWithDevToolsRequestId:(NSString *)devToolsRequestId
45
+ request:(NSURLRequest *)request
46
+ handler:(id<RCTURLRequestHandler>)handler
47
+ callbackQueue:(dispatch_queue_t)callbackQueue;
44
48
  - (void)start;
45
49
  - (void)cancel;
46
50
 
@@ -26,6 +26,15 @@ static auto currentRequestId = std::atomic<NSUInteger>(0);
26
26
  - (instancetype)initWithRequest:(NSURLRequest *)request
27
27
  handler:(id<RCTURLRequestHandler>)handler
28
28
  callbackQueue:(dispatch_queue_t)callbackQueue
29
+ {
30
+ self = [self initWithDevToolsRequestId:nil request:request handler:handler callbackQueue:callbackQueue];
31
+ return self;
32
+ }
33
+
34
+ - (instancetype)initWithDevToolsRequestId:(NSString *)devToolsRequestId
35
+ request:(NSURLRequest *)request
36
+ handler:(id<RCTURLRequestHandler>)handler
37
+ callbackQueue:(dispatch_queue_t)callbackQueue
29
38
  {
30
39
  RCTAssertParam(request);
31
40
  RCTAssertParam(handler);
@@ -33,6 +42,10 @@ static auto currentRequestId = std::atomic<NSUInteger>(0);
33
42
 
34
43
  if ((self = [super init])) {
35
44
  _requestID = @(currentRequestId++);
45
+ _devToolsRequestId = devToolsRequestId;
46
+ if (_devToolsRequestId == nil) {
47
+ _devToolsRequestId = [[NSUUID UUID] UUIDString];
48
+ }
36
49
  _request = request;
37
50
  _handler = handler;
38
51
  _callbackQueue = callbackQueue;
@@ -0,0 +1,21 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #import "RCTNetworking.h"
9
+
10
+ @protocol RCTNetworkingTextResponseHandler <NSObject>
11
+
12
+ - (BOOL)canHandleNetworkingTextResponseForRequest:(NSURLRequest *)request;
13
+ - (void)handleNetworkingResponseText:(NSString *)responseText request:(NSURLRequest *)request;
14
+
15
+ @end
16
+
17
+ @interface RCTNetworking (Internal)
18
+
19
+ - (void)addTextResponseHandler:(id<RCTNetworkingTextResponseHandler>)handler;
20
+
21
+ @end
@@ -77,12 +77,14 @@ const RCTNetworking = {
77
77
  }));
78
78
  }
79
79
  const requestId = generateRequestId();
80
+ const devToolsRequestId =
81
+ global.__NETWORK_REPORTER__?.createDevToolsRequestId();
80
82
  NativeNetworkingAndroid.sendRequest(
81
83
  method,
82
84
  url,
83
85
  requestId,
84
86
  convertHeadersMapToArray(headers),
85
- {...body, trackingName},
87
+ {...body, trackingName, devToolsRequestId},
86
88
  responseType,
87
89
  incrementalUpdates,
88
90
  timeout,
@@ -47,6 +47,9 @@
47
47
  */
48
48
  - (RCTNetworkTask *)networkTaskWithRequest:(NSURLRequest *)request
49
49
  completionBlock:(RCTURLRequestCompletionBlock)completionBlock;
50
+ - (RCTNetworkTask *)networkTaskWithDevToolsRequestId:(NSString *)devToolsRequestId
51
+ request:(NSURLRequest *)request
52
+ completionBlock:(RCTURLRequestCompletionBlock)completionBlock;
50
53
 
51
54
  - (void)addRequestHandler:(id<RCTNetworkingRequestHandler>)handler;
52
55
 
@@ -40,6 +40,8 @@ const RCTNetworking = {
40
40
  withCredentials: boolean,
41
41
  ) {
42
42
  const body = convertRequestBody(data);
43
+ const devToolsRequestId =
44
+ global.__NETWORK_REPORTER__?.createDevToolsRequestId();
43
45
  NativeNetworkingIOS.sendRequest(
44
46
  {
45
47
  method,
@@ -50,6 +52,7 @@ const RCTNetworking = {
50
52
  incrementalUpdates,
51
53
  timeout,
52
54
  withCredentials,
55
+ unstable_devToolsRequestId: devToolsRequestId,
53
56
  },
54
57
  callback,
55
58
  );