react-native 0.85.2 → 0.85.3

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 (108) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/Libraries/Utilities/HMRClient.js +28 -1
  3. package/React/Base/RCTVersion.m +1 -1
  4. package/React/CoreModules/RCTJscSafeUrl+Internal.h +23 -0
  5. package/React/CoreModules/RCTJscSafeUrl.mm +38 -0
  6. package/React/CoreModules/RCTRedBox+Internal.h +42 -0
  7. package/React/CoreModules/RCTRedBox.mm +30 -454
  8. package/React/CoreModules/RCTRedBox2AnsiParser+Internal.h +22 -0
  9. package/React/CoreModules/RCTRedBox2AnsiParser.mm +55 -0
  10. package/React/CoreModules/RCTRedBox2Controller+Internal.h +34 -0
  11. package/React/CoreModules/RCTRedBox2Controller.mm +764 -0
  12. package/React/CoreModules/RCTRedBox2ErrorParser+Internal.h +46 -0
  13. package/React/CoreModules/RCTRedBox2ErrorParser.mm +57 -0
  14. package/React/CoreModules/RCTRedBoxController+Internal.h +31 -0
  15. package/React/CoreModules/RCTRedBoxController.mm +447 -0
  16. package/React/CoreModules/RCTRedBoxHMRClient+Internal.h +26 -0
  17. package/React/CoreModules/RCTRedBoxHMRClient.mm +125 -0
  18. package/React/CoreModules/React-CoreModules.podspec +1 -0
  19. package/React/DevSupport/RCTFrameTimingsObserver.h +24 -0
  20. package/React/DevSupport/RCTFrameTimingsObserver.mm +298 -0
  21. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +40 -0
  22. package/ReactAndroid/gradle.properties +1 -1
  23. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +4 -0
  24. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +1 -1
  25. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +127 -26
  26. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +31 -1
  27. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +51 -1
  28. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +11 -1
  29. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +11 -1
  30. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +56 -1
  31. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +11 -1
  32. package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +39 -0
  33. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  34. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +50 -10
  35. package/ReactAndroid/src/main/jni/CMakeLists.txt +7 -0
  36. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +22 -0
  37. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +2 -0
  38. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +71 -1
  39. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +16 -1
  40. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +14 -0
  41. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +18 -4
  42. package/ReactCommon/React-Fabric.podspec +6 -0
  43. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  44. package/ReactCommon/jsinspector-modern/HostAgent.cpp +36 -0
  45. package/ReactCommon/jsinspector-modern/HostTarget.cpp +7 -1
  46. package/ReactCommon/jsinspector-modern/HostTarget.h +25 -0
  47. package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +1 -1
  48. package/ReactCommon/jsinspector-modern/HostTargetTracing.h +4 -4
  49. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +12 -0
  50. package/ReactCommon/jsinspector-modern/InspectorFlags.h +12 -0
  51. package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +1 -1
  52. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +19 -0
  53. package/ReactCommon/jsinspector-modern/RuntimeAgent.h +7 -0
  54. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +33 -0
  55. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +6 -0
  56. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +12 -0
  57. package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +3 -2
  58. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +1 -0
  59. package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +1 -1
  60. package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +1 -1
  61. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp +10 -0
  62. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.h +3 -1
  63. package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
  64. package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +7 -3
  65. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +52 -29
  66. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.h +6 -6
  67. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracerSection.h +113 -0
  68. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
  69. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +12 -5
  70. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +3 -1
  71. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +42 -0
  72. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.h +7 -0
  73. package/ReactCommon/react/debug/CMakeLists.txt +2 -1
  74. package/ReactCommon/react/debug/React-debug.podspec +7 -1
  75. package/ReactCommon/react/debug/redbox/AnsiParser.cpp +139 -0
  76. package/ReactCommon/react/debug/redbox/AnsiParser.h +35 -0
  77. package/ReactCommon/react/debug/redbox/JscSafeUrl.cpp +179 -0
  78. package/ReactCommon/react/debug/redbox/JscSafeUrl.h +27 -0
  79. package/ReactCommon/react/debug/redbox/RedBoxErrorParser.cpp +171 -0
  80. package/ReactCommon/react/debug/redbox/RedBoxErrorParser.h +40 -0
  81. package/ReactCommon/react/debug/redbox/tests/AnsiParserTest.cpp +97 -0
  82. package/ReactCommon/react/debug/redbox/tests/JscSafeUrlTest.cpp +173 -0
  83. package/ReactCommon/react/debug/redbox/tests/RedBoxErrorParserTest.cpp +107 -0
  84. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +21 -1
  85. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +26 -1
  86. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +135 -45
  87. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +12 -2
  88. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +21 -1
  89. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +46 -1
  90. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +6 -1
  91. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  92. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  93. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
  94. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +26 -1
  95. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +11 -1
  96. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.h +4 -0
  97. package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +66 -0
  98. package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +18 -6
  99. package/ReactCommon/react/performance/timeline/PerformanceObserver.h +2 -0
  100. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +115 -0
  101. package/ReactCommon/{jsinspector-modern → react/utils}/Base64.h +2 -2
  102. package/package.json +11 -11
  103. package/scripts/cocoapods/utils.rb +1 -0
  104. package/scripts/react_native_pods.rb +1 -0
  105. package/scripts/replace-rncore-version.js +72 -15
  106. package/src/private/featureflags/ReactNativeFeatureFlags.js +26 -1
  107. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +6 -1
  108. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
@@ -12,6 +12,8 @@
12
12
 
13
13
  const {spawnSync} = require('child_process');
14
14
  const fs = require('fs');
15
+ const os = require('os');
16
+ const path = require('path');
15
17
  const yargs = require('yargs');
16
18
 
17
19
  const LAST_BUILD_FILENAME = 'React-Core-prebuilt/.last_build_configuration';
@@ -63,22 +65,77 @@ function replaceRNCoreConfiguration(
63
65
 
64
66
  const finalLocation = 'React-Core-prebuilt';
65
67
 
66
- // Delete all directories - not files, since we want to keep the React-VFS.yaml file
67
- const dirs = fs
68
- .readdirSync(finalLocation, {withFileTypes: true})
69
- .filter(dirent => dirent.isDirectory());
70
- for (const dirent of dirs) {
71
- const direntName =
72
- typeof dirent.name === 'string' ? dirent.name : dirent.name.toString();
73
- const dirPath = `${finalLocation}/${direntName}`;
74
- console.log('Removing directory', dirPath);
75
- fs.rmSync(dirPath, {force: true, recursive: true});
76
- }
68
+ // Extract to a temporary directory on a regular filesystem first, then move
69
+ // into the final location. This avoids issues with partial tar extraction on
70
+ // certain filesystems (e.g. EdenFS) where extracting directly can silently
71
+ // produce incomplete results.
72
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'rncore-'));
73
+ const tmpExtractDir = path.join(tmpDir, 'React-Core-prebuilt');
74
+ fs.mkdirSync(tmpExtractDir, {recursive: true});
75
+
76
+ try {
77
+ console.log('Extracting the tarball to temp dir', tarballURLPath);
78
+ const result = spawnSync(
79
+ 'tar',
80
+ ['-xf', tarballURLPath, '-C', tmpExtractDir],
81
+ {
82
+ stdio: 'inherit',
83
+ },
84
+ );
85
+
86
+ if (result.status !== 0) {
87
+ throw new Error(`tar extraction failed with exit code ${result.status}`);
88
+ }
77
89
 
78
- console.log('Extracting the tarball', tarballURLPath);
79
- spawnSync('tar', ['-xf', tarballURLPath, '-C', finalLocation], {
80
- stdio: 'inherit',
81
- });
90
+ // Verify extraction produced the expected xcframework structure
91
+ const xcfwPath = path.join(tmpExtractDir, 'React.xcframework');
92
+ const modulemapPath = path.join(xcfwPath, 'Modules', 'module.modulemap');
93
+ if (!fs.existsSync(modulemapPath)) {
94
+ throw new Error(
95
+ `Extraction verification failed: ${modulemapPath} not found`,
96
+ );
97
+ }
98
+
99
+ // Delete all directories in finalLocation - not files, since we want to
100
+ // keep the React-VFS.yaml file
101
+ const dirs = fs
102
+ .readdirSync(finalLocation, {withFileTypes: true})
103
+ .filter(dirent => dirent.isDirectory());
104
+ for (const dirent of dirs) {
105
+ const direntName =
106
+ typeof dirent.name === 'string' ? dirent.name : dirent.name.toString();
107
+ const dirPath = `${finalLocation}/${direntName}`;
108
+ console.log('Removing directory', dirPath);
109
+ fs.rmSync(dirPath, {force: true, recursive: true});
110
+ }
111
+
112
+ // Move extracted directories from temp to final location
113
+ const extractedEntries = fs
114
+ .readdirSync(tmpExtractDir, {withFileTypes: true})
115
+ .filter(dirent => dirent.isDirectory());
116
+ for (const dirent of extractedEntries) {
117
+ const direntName =
118
+ typeof dirent.name === 'string' ? dirent.name : dirent.name.toString();
119
+ const src = path.join(tmpExtractDir, direntName);
120
+ const dst = path.join(finalLocation, direntName);
121
+ const mvResult = spawnSync('mv', [src, dst], {stdio: 'inherit'});
122
+ if (mvResult.status !== 0) {
123
+ // Fallback: copy recursively then remove source
124
+ console.log(`mv failed for ${direntName}, falling back to cp -R`);
125
+ const cpResult = spawnSync('cp', ['-R', src, dst], {
126
+ stdio: 'inherit',
127
+ });
128
+ if (cpResult.status !== 0) {
129
+ throw new Error(
130
+ `cp fallback failed with exit code ${cpResult.status}`,
131
+ );
132
+ }
133
+ }
134
+ }
135
+ } finally {
136
+ // Clean up temp directory
137
+ fs.rmSync(tmpDir, {force: true, recursive: true});
138
+ }
82
139
  }
83
140
 
84
141
  function updateLastBuildConfiguration(configuration /*: string */) {
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<03688450419694f6d3f4fc709df4de9a>>
7
+ * @generated SignedSource<<93e1a6807e31f037c28f28b0cd24cf17>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -89,6 +89,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
89
89
  enableLayoutAnimationsOnIOS: Getter<boolean>,
90
90
  enableMainQueueCoordinatorOnIOS: Getter<boolean>,
91
91
  enableModuleArgumentNSNullConversionIOS: Getter<boolean>,
92
+ enableMutationObserverByDefault: Getter<boolean>,
92
93
  enableNativeCSSParsing: Getter<boolean>,
93
94
  enableNetworkEventReporting: Getter<boolean>,
94
95
  enablePreparedTextLayout: Getter<boolean>,
@@ -107,13 +108,17 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
107
108
  fixTextClippingAndroid15useBoundsForWidth: Getter<boolean>,
108
109
  fuseboxAssertSingleHostState: Getter<boolean>,
109
110
  fuseboxEnabledRelease: Getter<boolean>,
111
+ fuseboxFrameRecordingEnabled: Getter<boolean>,
110
112
  fuseboxNetworkInspectionEnabled: Getter<boolean>,
113
+ fuseboxScreenshotCaptureEnabled: Getter<boolean>,
111
114
  hideOffscreenVirtualViewsOnIOS: Getter<boolean>,
112
115
  overrideBySynchronousMountPropsAtMountingAndroid: Getter<boolean>,
113
116
  perfIssuesEnabled: Getter<boolean>,
114
117
  perfMonitorV2Enabled: Getter<boolean>,
115
118
  preparedTextCacheSize: Getter<number>,
116
119
  preventShadowTreeCommitExhaustion: Getter<boolean>,
120
+ redBoxV2Android: Getter<boolean>,
121
+ redBoxV2IOS: Getter<boolean>,
117
122
  shouldPressibilityUseW3CPointerEventsForHover: Getter<boolean>,
118
123
  shouldTriggerResponderTransferOnScrollAndroid: Getter<boolean>,
119
124
  skipActivityIdentityAssertionOnHostPause: Getter<boolean>,
@@ -368,6 +373,10 @@ export const enableMainQueueCoordinatorOnIOS: Getter<boolean> = createNativeFlag
368
373
  * Enable NSNull conversion when handling module arguments on iOS
369
374
  */
370
375
  export const enableModuleArgumentNSNullConversionIOS: Getter<boolean> = createNativeFlagGetter('enableModuleArgumentNSNullConversionIOS', false);
376
+ /**
377
+ * Enables the MutationObserver Web API in React Native.
378
+ */
379
+ export const enableMutationObserverByDefault: Getter<boolean> = createNativeFlagGetter('enableMutationObserverByDefault', false);
371
380
  /**
372
381
  * Parse CSS strings using the Fabric CSS parser instead of ViewConfig processing
373
382
  */
@@ -440,10 +449,18 @@ export const fuseboxAssertSingleHostState: Getter<boolean> = createNativeFlagGet
440
449
  * Flag determining if the React Native DevTools (Fusebox) CDP backend should be enabled in release builds. This flag is global and should not be changed across React Host lifetimes.
441
450
  */
442
451
  export const fuseboxEnabledRelease: Getter<boolean> = createNativeFlagGetter('fuseboxEnabledRelease', false);
452
+ /**
453
+ * Enable frame timings and screenshots support in the React Native DevTools CDP backend. This flag is global and should not be changed across React Host lifetimes.
454
+ */
455
+ export const fuseboxFrameRecordingEnabled: Getter<boolean> = createNativeFlagGetter('fuseboxFrameRecordingEnabled', false);
443
456
  /**
444
457
  * Enable network inspection support in the React Native DevTools CDP backend. Requires `enableBridgelessArchitecture`. This flag is global and should not be changed across React Host lifetimes.
445
458
  */
446
459
  export const fuseboxNetworkInspectionEnabled: Getter<boolean> = createNativeFlagGetter('fuseboxNetworkInspectionEnabled', true);
460
+ /**
461
+ * Enable Page.captureScreenshot CDP method support in the React Native DevTools CDP backend. This flag is global and should not be changed across React Host lifetimes.
462
+ */
463
+ export const fuseboxScreenshotCaptureEnabled: Getter<boolean> = createNativeFlagGetter('fuseboxScreenshotCaptureEnabled', false);
447
464
  /**
448
465
  * Hides offscreen VirtualViews on iOS by setting hidden = YES to avoid extra cost of views
449
466
  */
@@ -468,6 +485,14 @@ export const preparedTextCacheSize: Getter<number> = createNativeFlagGetter('pre
468
485
  * Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again.
469
486
  */
470
487
  export const preventShadowTreeCommitExhaustion: Getter<boolean> = createNativeFlagGetter('preventShadowTreeCommitExhaustion', false);
488
+ /**
489
+ * Use the redesigned RedBox error overlay on Android, styled to match the LogBox visual language.
490
+ */
491
+ export const redBoxV2Android: Getter<boolean> = createNativeFlagGetter('redBoxV2Android', false);
492
+ /**
493
+ * Use the redesigned RedBox error overlay on iOS, styled to match the LogBox visual language.
494
+ */
495
+ export const redBoxV2IOS: Getter<boolean> = createNativeFlagGetter('redBoxV2IOS', false);
471
496
  /**
472
497
  * Function used to enable / disable Pressibility from using W3C Pointer Events for its hover callbacks
473
498
  */
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<2955ab3f744af8b5cdf587312ba423d7>>
7
+ * @generated SignedSource<<ae363bbd49937178318598ddd93fa421>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -66,6 +66,7 @@ export interface Spec extends TurboModule {
66
66
  +enableLayoutAnimationsOnIOS?: () => boolean;
67
67
  +enableMainQueueCoordinatorOnIOS?: () => boolean;
68
68
  +enableModuleArgumentNSNullConversionIOS?: () => boolean;
69
+ +enableMutationObserverByDefault?: () => boolean;
69
70
  +enableNativeCSSParsing?: () => boolean;
70
71
  +enableNetworkEventReporting?: () => boolean;
71
72
  +enablePreparedTextLayout?: () => boolean;
@@ -84,13 +85,17 @@ export interface Spec extends TurboModule {
84
85
  +fixTextClippingAndroid15useBoundsForWidth?: () => boolean;
85
86
  +fuseboxAssertSingleHostState?: () => boolean;
86
87
  +fuseboxEnabledRelease?: () => boolean;
88
+ +fuseboxFrameRecordingEnabled?: () => boolean;
87
89
  +fuseboxNetworkInspectionEnabled?: () => boolean;
90
+ +fuseboxScreenshotCaptureEnabled?: () => boolean;
88
91
  +hideOffscreenVirtualViewsOnIOS?: () => boolean;
89
92
  +overrideBySynchronousMountPropsAtMountingAndroid?: () => boolean;
90
93
  +perfIssuesEnabled?: () => boolean;
91
94
  +perfMonitorV2Enabled?: () => boolean;
92
95
  +preparedTextCacheSize?: () => number;
93
96
  +preventShadowTreeCommitExhaustion?: () => boolean;
97
+ +redBoxV2Android?: () => boolean;
98
+ +redBoxV2IOS?: () => boolean;
94
99
  +shouldPressibilityUseW3CPointerEventsForHover?: () => boolean;
95
100
  +shouldTriggerResponderTransferOnScrollAndroid?: () => boolean;
96
101
  +skipActivityIdentityAssertionOnHostPause?: () => boolean;
@@ -47,4 +47,10 @@ export default function setUpDefaltReactNativeEnvironment(
47
47
  ) {
48
48
  require('./setUpIntersectionObserver').default();
49
49
  }
50
+
51
+ if (
52
+ require('../../../src/private/featureflags/ReactNativeFeatureFlags').enableMutationObserverByDefault()
53
+ ) {
54
+ require('./setUpMutationObserver').default();
55
+ }
50
56
  }