react-native-tvos 0.83.4-2 → 0.83.9-0

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 (153) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +2 -2
  2. package/Libraries/Utilities/Appearance.js +6 -1
  3. package/Libraries/Utilities/HMRClient.js +28 -1
  4. package/React/Base/RCTVersion.m +2 -2
  5. package/React/CoreModules/RCTDevLoadingView.mm +17 -0
  6. package/React/CoreModules/RCTJscSafeUrl+Internal.h +23 -0
  7. package/React/CoreModules/RCTJscSafeUrl.mm +38 -0
  8. package/React/CoreModules/RCTRedBox+Internal.h +42 -0
  9. package/React/CoreModules/RCTRedBox.mm +30 -471
  10. package/React/CoreModules/RCTRedBox2AnsiParser+Internal.h +22 -0
  11. package/React/CoreModules/RCTRedBox2AnsiParser.mm +55 -0
  12. package/React/CoreModules/RCTRedBox2Controller+Internal.h +34 -0
  13. package/React/CoreModules/RCTRedBox2Controller.mm +764 -0
  14. package/React/CoreModules/RCTRedBox2ErrorParser+Internal.h +46 -0
  15. package/React/CoreModules/RCTRedBox2ErrorParser.mm +57 -0
  16. package/React/CoreModules/RCTRedBoxController+Internal.h +31 -0
  17. package/React/CoreModules/RCTRedBoxController.mm +447 -0
  18. package/React/CoreModules/RCTRedBoxHMRClient+Internal.h +26 -0
  19. package/React/CoreModules/RCTRedBoxHMRClient.mm +125 -0
  20. package/React/CoreModules/React-CoreModules.podspec +1 -0
  21. package/React/DevSupport/RCTFrameTimingsObserver.h +24 -0
  22. package/React/DevSupport/RCTFrameTimingsObserver.mm +298 -0
  23. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +40 -0
  24. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +1 -2
  25. package/ReactAndroid/api/ReactAndroid.api +0 -9
  26. package/ReactAndroid/gradle.properties +1 -1
  27. package/ReactAndroid/publish.gradle +20 -46
  28. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgelessDevSupportManager.kt +2 -2
  29. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +7 -7
  30. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +4 -0
  31. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +16 -0
  32. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +275 -0
  33. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/TracingState.kt +17 -0
  34. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/TracingStateListener.kt +15 -0
  35. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/{interfaces → inspector}/TracingStateProvider.kt +1 -1
  36. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorInspectorTargetBinding.kt +1 -1
  37. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +4 -4
  38. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +3 -3
  39. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorUpdateListener.kt +1 -1
  40. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +31 -1
  41. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +51 -1
  42. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +11 -1
  43. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +11 -1
  44. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +56 -1
  45. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +11 -1
  46. package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +39 -0
  47. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobModule.kt +1 -1
  48. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +20 -19
  49. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +6 -12
  50. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
  51. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +86 -4
  52. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImplDevHelper.kt +3 -3
  53. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt +10 -6
  54. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +7 -6
  55. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +21 -3
  56. package/ReactAndroid/src/main/jni/CMakeLists.txt +7 -0
  57. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +22 -0
  58. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +2 -0
  59. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +71 -1
  60. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +16 -1
  61. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +196 -17
  62. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +168 -18
  63. package/ReactAndroid/src/main/jni/third-party/folly/CMakeLists.txt +1 -0
  64. package/ReactCommon/React-Fabric.podspec +6 -0
  65. package/ReactCommon/cxxreact/ReactNativeVersion.h +3 -3
  66. package/ReactCommon/hermes/inspector-modern/chrome/Registration.cpp +44 -2
  67. package/ReactCommon/jsinspector-modern/HostAgent.cpp +45 -10
  68. package/ReactCommon/jsinspector-modern/HostAgent.h +2 -2
  69. package/ReactCommon/jsinspector-modern/HostTarget.cpp +14 -7
  70. package/ReactCommon/jsinspector-modern/HostTarget.h +101 -14
  71. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +39 -8
  72. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h +42 -5
  73. package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +54 -21
  74. package/ReactCommon/jsinspector-modern/HostTargetTracing.h +89 -0
  75. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +12 -0
  76. package/ReactCommon/jsinspector-modern/InspectorFlags.h +12 -0
  77. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +3 -7
  78. package/ReactCommon/jsinspector-modern/InstanceAgent.cpp +2 -11
  79. package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +1 -1
  80. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +19 -0
  81. package/ReactCommon/jsinspector-modern/RuntimeAgent.h +7 -0
  82. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +33 -0
  83. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +6 -0
  84. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +29 -13
  85. package/ReactCommon/jsinspector-modern/TracingAgent.h +5 -4
  86. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +65 -0
  87. package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +23 -2
  88. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +1 -0
  89. package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +1 -0
  90. package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +335 -0
  91. package/ReactCommon/jsinspector-modern/tests/TracingTest.h +95 -0
  92. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp +10 -0
  93. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.h +3 -1
  94. package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
  95. package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +61 -0
  96. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfile.h +43 -0
  97. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +165 -0
  98. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.h +50 -0
  99. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +16 -14
  100. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracerSection.h +113 -0
  101. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
  102. package/ReactCommon/jsinspector-modern/tracing/TimeWindowedBuffer.h +158 -0
  103. package/ReactCommon/jsinspector-modern/tracing/TraceEvent.h +2 -1
  104. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +100 -0
  105. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +60 -0
  106. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +44 -1
  107. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.h +7 -0
  108. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingState.h +18 -7
  109. package/ReactCommon/jsinspector-modern/tracing/TracingCategory.h +136 -0
  110. package/ReactCommon/jsinspector-modern/tracing/tests/TimeWindowedBufferTest.cpp +352 -0
  111. package/ReactCommon/react/debug/CMakeLists.txt +2 -1
  112. package/ReactCommon/react/debug/React-debug.podspec +7 -1
  113. package/ReactCommon/react/debug/redbox/AnsiParser.cpp +139 -0
  114. package/ReactCommon/react/debug/redbox/AnsiParser.h +35 -0
  115. package/ReactCommon/react/debug/redbox/JscSafeUrl.cpp +179 -0
  116. package/ReactCommon/react/debug/redbox/JscSafeUrl.h +27 -0
  117. package/ReactCommon/react/debug/redbox/RedBoxErrorParser.cpp +171 -0
  118. package/ReactCommon/react/debug/redbox/RedBoxErrorParser.h +40 -0
  119. package/ReactCommon/react/debug/redbox/tests/AnsiParserTest.cpp +97 -0
  120. package/ReactCommon/react/debug/redbox/tests/JscSafeUrlTest.cpp +173 -0
  121. package/ReactCommon/react/debug/redbox/tests/RedBoxErrorParserTest.cpp +107 -0
  122. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +21 -1
  123. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +26 -1
  124. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +140 -50
  125. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +12 -2
  126. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +21 -1
  127. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +46 -1
  128. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +6 -1
  129. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +3 -1
  130. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  131. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  132. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
  133. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +26 -1
  134. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +11 -1
  135. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.h +4 -0
  136. package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +66 -0
  137. package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +18 -6
  138. package/ReactCommon/react/performance/timeline/PerformanceObserver.h +2 -0
  139. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +115 -0
  140. package/ReactCommon/{jsinspector-modern → react/utils}/Base64.h +2 -2
  141. package/gradle/libs.versions.toml +1 -1
  142. package/package.json +10 -10
  143. package/scripts/cocoapods/utils.rb +1 -0
  144. package/scripts/react_native_pods.rb +1 -0
  145. package/src/private/featureflags/ReactNativeFeatureFlags.js +26 -1
  146. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +6 -1
  147. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
  148. package/third-party-podspecs/RCT-Folly.podspec +1 -1
  149. package/third-party-podspecs/fmt.podspec +2 -2
  150. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/TracingState.kt +0 -19
  151. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingStateSerializer.cpp +0 -68
  152. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingStateSerializer.h +0 -42
  153. package/ReactCommon/jsinspector-modern/tracing/TracingState.h +0 -24
@@ -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<<b4abe68bba3cca50754f060a278f9896>>
7
+ * @generated SignedSource<<bb24ce8764d7c7049e3fd211dcd70510>>
8
8
  */
9
9
 
10
10
  /**
@@ -369,6 +369,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
369
369
  return ReactNativeFeatureFlagsDefaults::enableModuleArgumentNSNullConversionIOS();
370
370
  }
371
371
 
372
+ bool enableMutationObserverByDefault() override {
373
+ auto value = values_["enableMutationObserverByDefault"];
374
+ if (!value.isNull()) {
375
+ return value.getBool();
376
+ }
377
+
378
+ return ReactNativeFeatureFlagsDefaults::enableMutationObserverByDefault();
379
+ }
380
+
372
381
  bool enableNativeCSSParsing() override {
373
382
  auto value = values_["enableNativeCSSParsing"];
374
383
  if (!value.isNull()) {
@@ -558,6 +567,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
558
567
  return ReactNativeFeatureFlagsDefaults::fuseboxEnabledRelease();
559
568
  }
560
569
 
570
+ bool fuseboxFrameRecordingEnabled() override {
571
+ auto value = values_["fuseboxFrameRecordingEnabled"];
572
+ if (!value.isNull()) {
573
+ return value.getBool();
574
+ }
575
+
576
+ return ReactNativeFeatureFlagsDefaults::fuseboxFrameRecordingEnabled();
577
+ }
578
+
561
579
  bool fuseboxNetworkInspectionEnabled() override {
562
580
  auto value = values_["fuseboxNetworkInspectionEnabled"];
563
581
  if (!value.isNull()) {
@@ -567,6 +585,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
567
585
  return ReactNativeFeatureFlagsDefaults::fuseboxNetworkInspectionEnabled();
568
586
  }
569
587
 
588
+ bool fuseboxScreenshotCaptureEnabled() override {
589
+ auto value = values_["fuseboxScreenshotCaptureEnabled"];
590
+ if (!value.isNull()) {
591
+ return value.getBool();
592
+ }
593
+
594
+ return ReactNativeFeatureFlagsDefaults::fuseboxScreenshotCaptureEnabled();
595
+ }
596
+
570
597
  bool hideOffscreenVirtualViewsOnIOS() override {
571
598
  auto value = values_["hideOffscreenVirtualViewsOnIOS"];
572
599
  if (!value.isNull()) {
@@ -621,6 +648,24 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
621
648
  return ReactNativeFeatureFlagsDefaults::preventShadowTreeCommitExhaustion();
622
649
  }
623
650
 
651
+ bool redBoxV2Android() override {
652
+ auto value = values_["redBoxV2Android"];
653
+ if (!value.isNull()) {
654
+ return value.getBool();
655
+ }
656
+
657
+ return ReactNativeFeatureFlagsDefaults::redBoxV2Android();
658
+ }
659
+
660
+ bool redBoxV2IOS() override {
661
+ auto value = values_["redBoxV2IOS"];
662
+ if (!value.isNull()) {
663
+ return value.getBool();
664
+ }
665
+
666
+ return ReactNativeFeatureFlagsDefaults::redBoxV2IOS();
667
+ }
668
+
624
669
  bool shouldPressibilityUseW3CPointerEventsForHover() override {
625
670
  auto value = values_["shouldPressibilityUseW3CPointerEventsForHover"];
626
671
  if (!value.isNull()) {
@@ -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<<06c6740fe7d613f235ae791da750bd52>>
7
+ * @generated SignedSource<<75595b7640dd5849fcd3c40a965582fe>>
8
8
  */
9
9
 
10
10
  /**
@@ -61,6 +61,7 @@ class ReactNativeFeatureFlagsProvider {
61
61
  virtual bool enableLayoutAnimationsOnIOS() = 0;
62
62
  virtual bool enableMainQueueCoordinatorOnIOS() = 0;
63
63
  virtual bool enableModuleArgumentNSNullConversionIOS() = 0;
64
+ virtual bool enableMutationObserverByDefault() = 0;
64
65
  virtual bool enableNativeCSSParsing() = 0;
65
66
  virtual bool enableNetworkEventReporting() = 0;
66
67
  virtual bool enablePreparedTextLayout() = 0;
@@ -82,13 +83,17 @@ class ReactNativeFeatureFlagsProvider {
82
83
  virtual bool fixMappingOfEventPrioritiesBetweenFabricAndReact() = 0;
83
84
  virtual bool fuseboxAssertSingleHostState() = 0;
84
85
  virtual bool fuseboxEnabledRelease() = 0;
86
+ virtual bool fuseboxFrameRecordingEnabled() = 0;
85
87
  virtual bool fuseboxNetworkInspectionEnabled() = 0;
88
+ virtual bool fuseboxScreenshotCaptureEnabled() = 0;
86
89
  virtual bool hideOffscreenVirtualViewsOnIOS() = 0;
87
90
  virtual bool overrideBySynchronousMountPropsAtMountingAndroid() = 0;
88
91
  virtual bool perfIssuesEnabled() = 0;
89
92
  virtual bool perfMonitorV2Enabled() = 0;
90
93
  virtual double preparedTextCacheSize() = 0;
91
94
  virtual bool preventShadowTreeCommitExhaustion() = 0;
95
+ virtual bool redBoxV2Android() = 0;
96
+ virtual bool redBoxV2IOS() = 0;
92
97
  virtual bool shouldPressibilityUseW3CPointerEventsForHover() = 0;
93
98
  virtual bool shouldTriggerResponderTransferOnScrollAndroid() = 0;
94
99
  virtual bool skipActivityIdentityAssertionOnHostPause() = 0;
@@ -470,7 +470,9 @@ void ObjCTurboModule::performVoidMethodInvocation(
470
470
  @try {
471
471
  [inv invokeWithTarget:strongModule];
472
472
  } @catch (NSException *exception) {
473
- throw convertNSExceptionToJSError(runtime, exception, std::string{moduleName}, methodNameStr);
473
+ // Void methods are always async, re-throw instead of converting to
474
+ // JSError, same as the async branch in performMethodInvocation.
475
+ @throw exception;
474
476
  } @finally {
475
477
  [retainedObjectsForInvocation removeAllObjects];
476
478
  }
@@ -22,6 +22,7 @@ target_link_libraries(react_nativemodule_defaults
22
22
  react_nativemodule_microtasks
23
23
  react_nativemodule_idlecallbacks
24
24
  react_nativemodule_intersectionobserver
25
+ react_nativemodule_mutationobserver
25
26
  react_nativemodule_webperformance
26
27
  )
27
28
  target_compile_reactnative_options(react_nativemodule_defaults PRIVATE)
@@ -12,6 +12,7 @@
12
12
  #include <react/nativemodule/idlecallbacks/NativeIdleCallbacks.h>
13
13
  #include <react/nativemodule/intersectionobserver/NativeIntersectionObserver.h>
14
14
  #include <react/nativemodule/microtasks/NativeMicrotasks.h>
15
+ #include <react/nativemodule/mutationobserver/NativeMutationObserver.h>
15
16
  #include <react/nativemodule/webperformance/NativePerformance.h>
16
17
 
17
18
  #ifdef REACT_NATIVE_DEBUGGER_ENABLED_DEVONLY
@@ -51,6 +52,12 @@ namespace facebook::react {
51
52
  }
52
53
  }
53
54
 
55
+ if (ReactNativeFeatureFlags::enableMutationObserverByDefault()) {
56
+ if (name == NativeMutationObserver::kModuleName) {
57
+ return std::make_shared<NativeMutationObserver>(jsInvoker);
58
+ }
59
+ }
60
+
54
61
  #ifdef REACT_NATIVE_DEBUGGER_ENABLED_DEVONLY
55
62
  if (name == DevToolsRuntimeSettingsModule::kModuleName) {
56
63
  return std::make_shared<DevToolsRuntimeSettingsModule>(jsInvoker);
@@ -53,6 +53,7 @@ Pod::Spec.new do |s|
53
53
  s.dependency "React-microtasksnativemodule"
54
54
  s.dependency "React-idlecallbacksnativemodule"
55
55
  s.dependency "React-intersectionobservernativemodule"
56
+ s.dependency "React-mutationobservernativemodule"
56
57
  s.dependency "React-webperformancenativemodule"
57
58
  add_dependency(s, "React-RCTFBReactNativeSpec")
58
59
  add_dependency(s, "React-featureflags")
@@ -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<<3f6cc9604905bb29a9524a97eaa294bd>>
7
+ * @generated SignedSource<<d4e9743710d91c1287986f2dab260e10>>
8
8
  */
9
9
 
10
10
  /**
@@ -224,6 +224,11 @@ bool NativeReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS(
224
224
  return ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS();
225
225
  }
226
226
 
227
+ bool NativeReactNativeFeatureFlags::enableMutationObserverByDefault(
228
+ jsi::Runtime& /*runtime*/) {
229
+ return ReactNativeFeatureFlags::enableMutationObserverByDefault();
230
+ }
231
+
227
232
  bool NativeReactNativeFeatureFlags::enableNativeCSSParsing(
228
233
  jsi::Runtime& /*runtime*/) {
229
234
  return ReactNativeFeatureFlags::enableNativeCSSParsing();
@@ -329,11 +334,21 @@ bool NativeReactNativeFeatureFlags::fuseboxEnabledRelease(
329
334
  return ReactNativeFeatureFlags::fuseboxEnabledRelease();
330
335
  }
331
336
 
337
+ bool NativeReactNativeFeatureFlags::fuseboxFrameRecordingEnabled(
338
+ jsi::Runtime& /*runtime*/) {
339
+ return ReactNativeFeatureFlags::fuseboxFrameRecordingEnabled();
340
+ }
341
+
332
342
  bool NativeReactNativeFeatureFlags::fuseboxNetworkInspectionEnabled(
333
343
  jsi::Runtime& /*runtime*/) {
334
344
  return ReactNativeFeatureFlags::fuseboxNetworkInspectionEnabled();
335
345
  }
336
346
 
347
+ bool NativeReactNativeFeatureFlags::fuseboxScreenshotCaptureEnabled(
348
+ jsi::Runtime& /*runtime*/) {
349
+ return ReactNativeFeatureFlags::fuseboxScreenshotCaptureEnabled();
350
+ }
351
+
337
352
  bool NativeReactNativeFeatureFlags::hideOffscreenVirtualViewsOnIOS(
338
353
  jsi::Runtime& /*runtime*/) {
339
354
  return ReactNativeFeatureFlags::hideOffscreenVirtualViewsOnIOS();
@@ -364,6 +379,16 @@ bool NativeReactNativeFeatureFlags::preventShadowTreeCommitExhaustion(
364
379
  return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion();
365
380
  }
366
381
 
382
+ bool NativeReactNativeFeatureFlags::redBoxV2Android(
383
+ jsi::Runtime& /*runtime*/) {
384
+ return ReactNativeFeatureFlags::redBoxV2Android();
385
+ }
386
+
387
+ bool NativeReactNativeFeatureFlags::redBoxV2IOS(
388
+ jsi::Runtime& /*runtime*/) {
389
+ return ReactNativeFeatureFlags::redBoxV2IOS();
390
+ }
391
+
367
392
  bool NativeReactNativeFeatureFlags::shouldPressibilityUseW3CPointerEventsForHover(
368
393
  jsi::Runtime& /*runtime*/) {
369
394
  return ReactNativeFeatureFlags::shouldPressibilityUseW3CPointerEventsForHover();
@@ -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<<dece70d27e5d2e4d052ca4e158c4b968>>
7
+ * @generated SignedSource<<1b5ca84f5d82d6861379191ed93d8b63>>
8
8
  */
9
9
 
10
10
  /**
@@ -108,6 +108,8 @@ class NativeReactNativeFeatureFlags
108
108
 
109
109
  bool enableModuleArgumentNSNullConversionIOS(jsi::Runtime& runtime);
110
110
 
111
+ bool enableMutationObserverByDefault(jsi::Runtime& runtime);
112
+
111
113
  bool enableNativeCSSParsing(jsi::Runtime& runtime);
112
114
 
113
115
  bool enableNetworkEventReporting(jsi::Runtime& runtime);
@@ -150,8 +152,12 @@ class NativeReactNativeFeatureFlags
150
152
 
151
153
  bool fuseboxEnabledRelease(jsi::Runtime& runtime);
152
154
 
155
+ bool fuseboxFrameRecordingEnabled(jsi::Runtime& runtime);
156
+
153
157
  bool fuseboxNetworkInspectionEnabled(jsi::Runtime& runtime);
154
158
 
159
+ bool fuseboxScreenshotCaptureEnabled(jsi::Runtime& runtime);
160
+
155
161
  bool hideOffscreenVirtualViewsOnIOS(jsi::Runtime& runtime);
156
162
 
157
163
  bool overrideBySynchronousMountPropsAtMountingAndroid(jsi::Runtime& runtime);
@@ -164,6 +170,10 @@ class NativeReactNativeFeatureFlags
164
170
 
165
171
  bool preventShadowTreeCommitExhaustion(jsi::Runtime& runtime);
166
172
 
173
+ bool redBoxV2Android(jsi::Runtime& runtime);
174
+
175
+ bool redBoxV2IOS(jsi::Runtime& runtime);
176
+
167
177
  bool shouldPressibilityUseW3CPointerEventsForHover(jsi::Runtime& runtime);
168
178
 
169
179
  bool shouldTriggerResponderTransferOnScrollAndroid(jsi::Runtime& runtime);
@@ -7,7 +7,11 @@
7
7
 
8
8
  #pragma once
9
9
 
10
+ #if __has_include("FBReactNativeSpecJSI.h") // CocoaPod headers on Apple
11
+ #include "FBReactNativeSpecJSI.h"
12
+ #else
10
13
  #include <FBReactNativeSpec/FBReactNativeSpecJSI.h>
14
+ #endif
11
15
  #include <react/renderer/bridging/bridging.h>
12
16
  #include <react/renderer/observers/mutation/MutationObserverManager.h>
13
17
  #include <react/renderer/uimanager/UIManager.h>
@@ -0,0 +1,66 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ #
3
+ # This source code is licensed under the MIT license found in the
4
+ # LICENSE file in the root directory of this source tree.
5
+
6
+ require "json"
7
+
8
+ package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
+ version = package['version']
10
+
11
+ source = { :git => 'https://github.com/facebook/react-native.git' }
12
+ if version == '1000.0.0'
13
+ # This is an unpublished version, use the latest commit hash of the react-native repo, which we're presumably in.
14
+ source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
15
+ else
16
+ source[:tag] = "v#{version}"
17
+ end
18
+
19
+ header_search_paths = [
20
+ "\"$(PODS_ROOT)/Headers/Private/Yoga\"",
21
+ ]
22
+
23
+ if ENV['USE_FRAMEWORKS']
24
+ header_search_paths << "\"$(PODS_TARGET_SRCROOT)/../../..\"" # this is needed to allow the module access its own files
25
+ end
26
+
27
+ Pod::Spec.new do |s|
28
+ s.name = "React-mutationobservernativemodule"
29
+ s.version = version
30
+ s.summary = "React Native mutation observer native module"
31
+ s.homepage = "https://reactnative.dev/"
32
+ s.license = package["license"]
33
+ s.author = "Meta Platforms, Inc. and its affiliates"
34
+ s.platforms = min_supported_versions
35
+ s.source = source
36
+ s.source_files = podspec_sources("*.{cpp,h}", "*.h")
37
+ s.header_dir = "react/nativemodule/mutationobserver"
38
+ s.pod_target_xcconfig = { "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(),
39
+ "HEADER_SEARCH_PATHS" => header_search_paths.join(' '),
40
+ "OTHER_CFLAGS" => "$(inherited)",
41
+ "DEFINES_MODULE" => "YES" }
42
+
43
+ if ENV['USE_FRAMEWORKS']
44
+ s.module_name = "mutationobservernativemodule"
45
+ s.header_mappings_dir = "../.."
46
+ end
47
+
48
+ s.dependency "Yoga"
49
+ s.dependency "React-jsi"
50
+ s.dependency "React-jsiexecutor"
51
+ s.dependency "React-cxxreact"
52
+
53
+ depend_on_js_engine(s)
54
+ add_rn_third_party_dependencies(s)
55
+ add_rncore_dependency(s)
56
+
57
+ s.dependency "ReactCommon/turbomodule/core"
58
+
59
+ s.dependency "React-Fabric"
60
+ s.dependency "React-Fabric/bridging"
61
+ s.dependency "React-Fabric/observers/mutation"
62
+ s.dependency "React-featureflags"
63
+ add_dependency(s, "React-RCTFBReactNativeSpec")
64
+ add_dependency(s, "React-runtimeexecutor", :additional_framework_paths => ["platform/ios"])
65
+
66
+ end
@@ -25,16 +25,21 @@ void PerformanceObserver::handleEntry(const PerformanceEntry& entry) {
25
25
  return;
26
26
  }
27
27
 
28
- buffer_.push_back(entry);
28
+ {
29
+ std::lock_guard lock(bufferMutex_);
30
+ buffer_.push_back(entry);
31
+ }
29
32
  scheduleFlushBuffer();
30
33
  }
31
34
  }
32
35
 
33
36
  std::vector<PerformanceEntry> PerformanceObserver::takeRecords() {
34
37
  std::vector<PerformanceEntry> result;
35
- buffer_.swap(result);
36
-
37
- didScheduleFlushBuffer_ = false;
38
+ {
39
+ std::lock_guard lock(bufferMutex_);
40
+ buffer_.swap(result);
41
+ didScheduleFlushBuffer_ = false;
42
+ }
38
43
 
39
44
  return result;
40
45
  }
@@ -87,9 +92,16 @@ void PerformanceObserver::disconnect() noexcept {
87
92
  }
88
93
 
89
94
  void PerformanceObserver::scheduleFlushBuffer() {
90
- if (!didScheduleFlushBuffer_) {
91
- didScheduleFlushBuffer_ = true;
95
+ bool shouldSchedule = false;
96
+ {
97
+ std::lock_guard lock(bufferMutex_);
98
+ if (!didScheduleFlushBuffer_) {
99
+ didScheduleFlushBuffer_ = true;
100
+ shouldSchedule = true;
101
+ }
102
+ }
92
103
 
104
+ if (shouldSchedule) {
93
105
  callback_();
94
106
  }
95
107
  }
@@ -14,6 +14,7 @@
14
14
 
15
15
  #include <functional>
16
16
  #include <memory>
17
+ #include <mutex>
17
18
  #include <unordered_set>
18
19
  #include <vector>
19
20
 
@@ -126,6 +127,7 @@ class PerformanceObserver : public std::enable_shared_from_this<PerformanceObser
126
127
 
127
128
  /// https://www.w3.org/TR/event-timing/#sec-modifications-perf-timeline
128
129
  HighResDuration durationThreshold_ = DEFAULT_DURATION_THRESHOLD;
130
+ std::mutex bufferMutex_;
129
131
  std::vector<PerformanceEntry> buffer_;
130
132
  bool didScheduleFlushBuffer_ = false;
131
133
  bool requiresDroppedEntries_ = false;
@@ -13,6 +13,7 @@
13
13
  #import <React/RCTConvert.h>
14
14
  #import <React/RCTDevMenu.h>
15
15
  #import <React/RCTFabricSurface.h>
16
+ #import <React/RCTFrameTimingsObserver.h>
16
17
  #import <React/RCTInspectorDevServerHelper.h>
17
18
  #import <React/RCTInspectorNetworkHelper.h>
18
19
  #import <React/RCTInspectorUtils.h>
@@ -37,12 +38,52 @@ using namespace facebook::react;
37
38
  @property (nonatomic, readonly) jsinspector_modern::HostTarget *inspectorTarget;
38
39
  @end
39
40
 
41
+ #if TARGET_OS_IPHONE && defined(REACT_NATIVE_DEBUGGER_ENABLED)
42
+ class RCTHostTracingDelegate : public jsinspector_modern::HostTargetTracingDelegate {
43
+ public:
44
+ explicit RCTHostTracingDelegate(RCTHost *host) : host_(host) {}
45
+
46
+ void onTracingStarted(jsinspector_modern::tracing::Mode /*tracingMode*/, bool screenshotsCategoryEnabled) override
47
+ {
48
+ RCTHost *host = host_;
49
+ if (host == nil || host.inspectorTarget == nullptr) {
50
+ return;
51
+ }
52
+ __weak RCTHost *weakHost = host;
53
+
54
+ observer_ = [[RCTFrameTimingsObserver alloc]
55
+ initWithScreenshotsEnabled:screenshotsCategoryEnabled
56
+ callback:^(jsinspector_modern::tracing::FrameTimingSequence sequence) {
57
+ RCTHost *strongHost = weakHost;
58
+ if (strongHost != nil && strongHost.inspectorTarget != nullptr) {
59
+ strongHost.inspectorTarget->recordFrameTimings(std::move(sequence));
60
+ }
61
+ }];
62
+ [observer_ start];
63
+ }
64
+
65
+ void onTracingStopped() override
66
+ {
67
+ [observer_ stop];
68
+ observer_ = nil;
69
+ }
70
+
71
+ private:
72
+ __weak RCTHost *host_;
73
+ RCTFrameTimingsObserver *observer_{nil};
74
+ };
75
+ #endif
76
+
40
77
  class RCTHostHostTargetDelegate : public facebook::react::jsinspector_modern::HostTargetDelegate {
41
78
  public:
42
79
  RCTHostHostTargetDelegate(RCTHost *host)
43
80
  : host_(host),
44
81
  pauseOverlayController_([[RCTPausedInDebuggerOverlayController alloc] init]),
45
82
  networkHelper_([[RCTInspectorNetworkHelper alloc] init])
83
+ #if TARGET_OS_IPHONE && defined(REACT_NATIVE_DEBUGGER_ENABLED)
84
+ ,
85
+ tracingDelegate_(host)
86
+ #endif
46
87
  {
47
88
  }
48
89
 
@@ -100,10 +141,84 @@ class RCTHostHostTargetDelegate : public facebook::react::jsinspector_modern::Ho
100
141
  [networkHelper_ loadNetworkResourceWithParams:params executor:executor];
101
142
  }
102
143
 
144
+ #if TARGET_OS_IPHONE && defined(REACT_NATIVE_DEBUGGER_ENABLED)
145
+ std::optional<std::string> captureScreenshot(const PageCaptureScreenshotRequest &request) override
146
+ {
147
+ UIWindow *keyWindow = nil;
148
+ for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
149
+ if (scene.activationState == UISceneActivationStateForegroundActive &&
150
+ [scene isKindOfClass:[UIWindowScene class]]) {
151
+ auto *windowScene = (UIWindowScene *)scene;
152
+ for (UIWindow *win in windowScene.windows) {
153
+ if (win.isKeyWindow) {
154
+ keyWindow = win;
155
+ break;
156
+ }
157
+ }
158
+ }
159
+ if (keyWindow != nil) {
160
+ break;
161
+ }
162
+ }
163
+
164
+ if (keyWindow == nil) {
165
+ return std::nullopt;
166
+ }
167
+
168
+ UIView *rootView = keyWindow.rootViewController.view != nil ? keyWindow.rootViewController.view : keyWindow;
169
+ CGSize viewSize = rootView.bounds.size;
170
+
171
+ UIGraphicsImageRendererFormat *format = [UIGraphicsImageRendererFormat defaultFormat];
172
+ format.scale = 1.0;
173
+ UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:viewSize format:format];
174
+
175
+ UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext *context) {
176
+ [rootView drawViewHierarchyInRect:CGRectMake(0, 0, viewSize.width, viewSize.height) afterScreenUpdates:NO];
177
+ }];
178
+
179
+ if (image == nil) {
180
+ return std::nullopt;
181
+ }
182
+
183
+ NSData *encodedData = nil;
184
+ std::string formatStr = request.format.value_or("png");
185
+
186
+ if (formatStr == "jpeg") {
187
+ CGFloat quality = request.quality.has_value() ? (*request.quality / 100.0) : 0.8;
188
+ encodedData = UIImageJPEGRepresentation(image, quality);
189
+ } else {
190
+ // Default to PNG for "png" and "webp" (WebP encoding not available via UIKit)
191
+ encodedData = UIImagePNGRepresentation(image);
192
+ }
193
+
194
+ if (encodedData == nil) {
195
+ return std::nullopt;
196
+ }
197
+
198
+ NSString *base64String = [encodedData base64EncodedStringWithOptions:0];
199
+ return std::string([base64String UTF8String]);
200
+ }
201
+ #endif
202
+
203
+ #if TARGET_OS_IPHONE && defined(REACT_NATIVE_DEBUGGER_ENABLED)
204
+ jsinspector_modern::HostTargetTracingDelegate *getTracingDelegate() override
205
+ {
206
+ auto &inspectorFlags = jsinspector_modern::InspectorFlags::getInstance();
207
+ if (!inspectorFlags.getFrameRecordingEnabled()) {
208
+ return nullptr;
209
+ }
210
+
211
+ return &tracingDelegate_;
212
+ }
213
+ #endif
214
+
103
215
  private:
104
216
  __weak RCTHost *host_;
105
217
  RCTPausedInDebuggerOverlayController *pauseOverlayController_;
106
218
  RCTInspectorNetworkHelper *networkHelper_;
219
+ #if TARGET_OS_IPHONE && defined(REACT_NATIVE_DEBUGGER_ENABLED)
220
+ RCTHostTracingDelegate tracingDelegate_;
221
+ #endif
107
222
  };
108
223
 
109
224
  @implementation RCTHost {
@@ -10,7 +10,7 @@
10
10
  #include <string>
11
11
  #include <string_view>
12
12
 
13
- namespace facebook::react::jsinspector_modern {
13
+ namespace facebook::react {
14
14
 
15
15
  namespace {
16
16
  // Vendored from Folly
@@ -96,4 +96,4 @@ inline std::string base64Encode(const std::string_view s)
96
96
  return res;
97
97
  }
98
98
 
99
- } // namespace facebook::react::jsinspector_modern
99
+ } // namespace facebook::react
@@ -44,7 +44,7 @@ yoga-proguard-annotations = "1.19.0"
44
44
  boost="1_83_0"
45
45
  doubleconversion="1.1.6"
46
46
  fastFloat="8.0.0"
47
- fmt="11.0.2"
47
+ fmt="12.1.0"
48
48
  folly="2024.11.18.00"
49
49
  glog="0.3.5"
50
50
  gflags="2.2.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-tvos",
3
- "version": "0.83.4-2",
3
+ "version": "0.83.9-0",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -165,12 +165,12 @@
165
165
  },
166
166
  "dependencies": {
167
167
  "@jest/create-cache-key-function": "^29.7.0",
168
- "@react-native/assets-registry": "0.83.4",
169
- "@react-native/codegen": "0.83.4",
170
- "@react-native/community-cli-plugin": "0.83.4",
171
- "@react-native/gradle-plugin": "0.83.4",
172
- "@react-native/js-polyfills": "0.83.4",
173
- "@react-native/normalize-colors": "0.83.4",
168
+ "@react-native/assets-registry": "0.83.9",
169
+ "@react-native/codegen": "0.83.9",
170
+ "@react-native/community-cli-plugin": "0.83.9",
171
+ "@react-native/gradle-plugin": "0.83.9",
172
+ "@react-native/js-polyfills": "0.83.9",
173
+ "@react-native/normalize-colors": "0.83.9",
174
174
  "abort-controller": "^3.0.0",
175
175
  "anser": "^1.4.9",
176
176
  "ansi-regex": "^5.0.0",
@@ -184,8 +184,8 @@
184
184
  "invariant": "^2.2.4",
185
185
  "jest-environment-node": "^29.7.0",
186
186
  "memoize-one": "^5.0.0",
187
- "metro-runtime": "^0.83.3",
188
- "metro-source-map": "^0.83.3",
187
+ "metro-runtime": "^0.83.6",
188
+ "metro-source-map": "^0.83.6",
189
189
  "nullthrows": "^1.1.1",
190
190
  "pretty-format": "^29.7.0",
191
191
  "promise": "^8.3.0",
@@ -198,7 +198,7 @@
198
198
  "whatwg-fetch": "^3.0.0",
199
199
  "ws": "^7.5.10",
200
200
  "yargs": "^17.6.2",
201
- "@react-native-tvos/virtualized-lists": "0.83.4-2"
201
+ "@react-native-tvos/virtualized-lists": "0.83.9-0"
202
202
  },
203
203
  "codegenConfig": {
204
204
  "libraries": [
@@ -61,6 +61,7 @@ class ReactNativePodsUtils
61
61
  self.add_build_settings_to_pod(installer, "GCC_PREPROCESSOR_DEFINITIONS", "REACT_NATIVE_DEBUGGER_ENABLED=1", "React-jsinspectornetwork", :debug)
62
62
  self.add_build_settings_to_pod(installer, "GCC_PREPROCESSOR_DEFINITIONS", "REACT_NATIVE_DEBUGGER_ENABLED=1", "React-RCTNetwork", :debug)
63
63
  self.add_build_settings_to_pod(installer, "GCC_PREPROCESSOR_DEFINITIONS", "REACT_NATIVE_DEBUGGER_ENABLED=1", "React-networking", :debug)
64
+ self.add_build_settings_to_pod(installer, "GCC_PREPROCESSOR_DEFINITIONS", "REACT_NATIVE_DEBUGGER_ENABLED=1", "React-RuntimeApple", :debug)
64
65
  self.add_build_settings_to_pod(installer, "GCC_PREPROCESSOR_DEFINITIONS", "REACT_NATIVE_DEBUGGER_ENABLED_DEVONLY=1", "React-jsinspector", :debug)
65
66
  self.add_build_settings_to_pod(installer, "GCC_PREPROCESSOR_DEFINITIONS", "REACT_NATIVE_DEBUGGER_ENABLED_DEVONLY=1", "React-jsinspectornetwork", :debug)
66
67
  self.add_build_settings_to_pod(installer, "GCC_PREPROCESSOR_DEFINITIONS", "REACT_NATIVE_DEBUGGER_ENABLED_DEVONLY=1", "React-RCTNetwork", :debug)
@@ -145,6 +145,7 @@ def use_react_native! (
145
145
  pod 'React-microtasksnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/microtasks"
146
146
  pod 'React-idlecallbacksnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/idlecallbacks"
147
147
  pod 'React-intersectionobservernativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/intersectionobserver"
148
+ pod 'React-mutationobservernativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/mutationobserver"
148
149
  pod 'React-webperformancenativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/webperformance"
149
150
  pod 'React-domnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/dom"
150
151
  pod 'React-defaultsnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/defaults"