react-native 0.83.8 → 0.83.10

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 (173) hide show
  1. package/Libraries/ActionSheetIOS/React-RCTActionSheet.podspec +1 -1
  2. package/Libraries/Animated/components/AnimatedScrollView.js +1 -1
  3. package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +1 -1
  4. package/Libraries/Blob/React-RCTBlob.podspec +1 -1
  5. package/Libraries/Components/Button.js +2 -2
  6. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +1 -1
  7. package/Libraries/Components/TextInput/TextInput.flow.js +1 -1
  8. package/Libraries/Components/Touchable/Touchable.d.ts +1 -1
  9. package/Libraries/Components/View/ViewAccessibility.d.ts +1 -1
  10. package/Libraries/Components/View/ViewAccessibility.js +1 -1
  11. package/Libraries/Core/ReactNativeVersion.js +1 -1
  12. package/Libraries/Core/Timers/JSTimers.js +1 -1
  13. package/Libraries/Core/setUpNavigator.js +1 -1
  14. package/Libraries/EventEmitter/RCTNativeAppEventEmitter.d.ts +1 -1
  15. package/Libraries/FBLazyVector/FBLazyVector.podspec +1 -1
  16. package/Libraries/Image/ImageSource.d.ts +1 -1
  17. package/Libraries/Image/RCTImageLoader.mm +1 -1
  18. package/Libraries/Image/React-RCTImage.podspec +1 -1
  19. package/Libraries/Interaction/PanResponder.js +1 -1
  20. package/Libraries/LinkingIOS/React-RCTLinking.podspec +1 -1
  21. package/Libraries/NativeAnimation/React-RCTAnimation.podspec +1 -1
  22. package/Libraries/Network/React-RCTNetwork.podspec +1 -1
  23. package/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +1 -1
  24. package/Libraries/Renderer/README.md +2 -2
  25. package/Libraries/Required/RCTRequired.podspec +1 -1
  26. package/Libraries/Settings/React-RCTSettings.podspec +1 -1
  27. package/Libraries/Text/React-RCTText.podspec +1 -1
  28. package/Libraries/TypeSafety/RCTTypeSafety.podspec +1 -1
  29. package/Libraries/Utilities/PolyfillFunctions.js +1 -1
  30. package/Libraries/Vibration/React-RCTVibration.podspec +1 -1
  31. package/README.md +6 -6
  32. package/React/Base/RCTVersion.m +1 -1
  33. package/React/CoreModules/React-CoreModules.podspec +1 -1
  34. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +8 -0
  35. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +1 -1
  36. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +1 -1
  37. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +34 -5
  38. package/React/React-RCTFBReactNativeSpec.podspec +1 -1
  39. package/React/React-RCTFabric.podspec +1 -1
  40. package/React/Runtime/React-RCTRuntime.podspec +1 -1
  41. package/React/Tests/Mounting/RCTViewComponentViewTests.mm +145 -0
  42. package/React/Views/ScrollView/RCTScrollView.m +1 -1
  43. package/React-Core.podspec +1 -1
  44. package/React.podspec +1 -1
  45. package/ReactAndroid/build.gradle.kts +1 -1
  46. package/ReactAndroid/gradle.properties +1 -1
  47. package/ReactAndroid/publish.gradle +5 -5
  48. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.kt +99 -9
  49. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/InspectorNetworkHelper.kt +1 -1
  50. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +2 -2
  51. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +7 -1
  52. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +11 -1
  53. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +3 -1
  54. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +3 -1
  55. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +12 -1
  56. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +3 -1
  57. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.kt +1 -1
  58. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.kt +1 -1
  59. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +3 -3
  60. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  61. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt +1 -1
  62. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +1 -1
  63. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.kt +1 -1
  64. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +1 -1
  65. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.kt +2 -2
  66. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +2 -2
  67. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextSelectionWatcher.kt +1 -1
  68. package/ReactAndroid/src/main/jni/CMakeLists.txt +7 -0
  69. package/ReactAndroid/src/main/jni/react/devsupport/JCxxInspectorPackagerConnectionWebSocket.cpp +29 -2
  70. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +15 -1
  71. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +4 -1
  72. package/ReactApple/Libraries/RCTFoundation/RCTDeprecation/RCTDeprecation.podspec +1 -1
  73. package/ReactApple/RCTSwiftUI/RCTSwiftUI.podspec +1 -1
  74. package/ReactApple/RCTSwiftUIWrapper/RCTSwiftUIWrapper.podspec +1 -1
  75. package/ReactCommon/React-Fabric.podspec +7 -1
  76. package/ReactCommon/React-FabricComponents.podspec +1 -1
  77. package/ReactCommon/React-FabricImage.podspec +1 -1
  78. package/ReactCommon/React-Mapbuffer.podspec +1 -1
  79. package/ReactCommon/ReactCommon.podspec +1 -1
  80. package/ReactCommon/callinvoker/React-callinvoker.podspec +1 -1
  81. package/ReactCommon/cxxreact/React-cxxreact.podspec +1 -1
  82. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  83. package/ReactCommon/hermes/React-hermes.podspec +1 -1
  84. package/ReactCommon/hermes/executor/React-jsitracing.podspec +1 -1
  85. package/ReactCommon/jserrorhandler/React-jserrorhandler.podspec +1 -1
  86. package/ReactCommon/jsi/React-jsi.podspec +1 -1
  87. package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +1 -1
  88. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +7 -3
  89. package/ReactCommon/jsinspector-modern/React-jsinspector.podspec +1 -1
  90. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +1 -5
  91. package/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec +1 -1
  92. package/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec +1 -1
  93. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -1
  94. package/ReactCommon/jsitooling/React-jsitooling.podspec +1 -1
  95. package/ReactCommon/logger/React-logger.podspec +1 -1
  96. package/ReactCommon/oscompat/React-oscompat.podspec +1 -1
  97. package/ReactCommon/react/debug/React-debug.podspec +1 -1
  98. package/ReactCommon/react/debug/redbox/JscSafeUrl.h +1 -1
  99. package/ReactCommon/react/featureflags/React-featureflags.podspec +1 -1
  100. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +5 -1
  101. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +6 -1
  102. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +72 -54
  103. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +4 -2
  104. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +5 -1
  105. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +10 -1
  106. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +2 -1
  107. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +1 -1
  108. package/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +1 -1
  109. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm +1 -1
  110. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +1 -1
  111. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  112. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  113. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +2 -1
  114. package/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec +1 -1
  115. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +6 -1
  116. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +3 -1
  117. package/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec +1 -1
  118. package/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec +1 -1
  119. package/ReactCommon/react/nativemodule/intersectionobserver/React-intersectionobservernativemodule.podspec +1 -1
  120. package/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec +1 -1
  121. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.h +4 -0
  122. package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +66 -0
  123. package/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec +1 -1
  124. package/ReactCommon/react/nativemodule/webperformance/React-webperformancenativemodule.podspec +1 -1
  125. package/ReactCommon/react/networking/React-networking.podspec +1 -1
  126. package/ReactCommon/react/performance/cdpmetrics/React-performancecdpmetrics.podspec +1 -1
  127. package/ReactCommon/react/performance/timeline/React-performancetimeline.podspec +1 -1
  128. package/ReactCommon/react/renderer/animated/internal/primitives.h +1 -1
  129. package/ReactCommon/react/renderer/consistency/React-rendererconsistency.podspec +1 -1
  130. package/ReactCommon/react/renderer/css/React-renderercss.podspec +1 -1
  131. package/ReactCommon/react/renderer/debug/React-rendererdebug.podspec +1 -1
  132. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +1 -1
  133. package/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec +1 -1
  134. package/ReactCommon/react/renderer/mounting/internal/CullingContext.cpp +1 -1
  135. package/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec +1 -1
  136. package/ReactCommon/react/runtime/React-RuntimeCore.podspec +1 -1
  137. package/ReactCommon/react/runtime/React-RuntimeHermes.podspec +1 -1
  138. package/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec +1 -1
  139. package/ReactCommon/react/timing/React-timing.podspec +1 -1
  140. package/ReactCommon/react/utils/React-utils.podspec +1 -1
  141. package/ReactCommon/reactperflogger/React-perflogger.podspec +1 -1
  142. package/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec +1 -1
  143. package/ReactCommon/yoga/Yoga.podspec +2 -2
  144. package/ReactCommon/yoga/yoga/algorithm/AbsoluteLayout.cpp +2 -0
  145. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +11 -7
  146. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.h +2 -0
  147. package/ReactCommon/yoga/yoga/node/Node.cpp +6 -1
  148. package/package.json +10 -10
  149. package/scripts/cocoapods/rncore.rb +26 -8
  150. package/scripts/cocoapods/rndependencies.rb +26 -5
  151. package/scripts/cocoapods/spm.rb +1 -1
  152. package/scripts/cocoapods/utils.rb +2 -2
  153. package/scripts/codegen/templates/ReactAppDependencyProvider.podspec.template +1 -1
  154. package/scripts/codegen/templates/ReactCodegen.podspec.template +1 -1
  155. package/scripts/ios-configure-glog.sh +1 -1
  156. package/scripts/react_native_pods.rb +1 -0
  157. package/sdks/hermes-engine/hermes-engine.podspec +6 -1
  158. package/sdks/hermes-engine/hermes-utils.rb +27 -5
  159. package/src/private/featureflags/ReactNativeFeatureFlags.js +6 -1
  160. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +2 -1
  161. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
  162. package/src/private/types/HostInstance.js +1 -1
  163. package/src/types/globals.d.ts +2 -2
  164. package/third-party-podspecs/RCT-Folly.podspec +1 -1
  165. package/third-party-podspecs/ReactNativeDependencies.podspec +1 -1
  166. package/third-party-podspecs/glog.podspec +1 -1
  167. package/types/public/ReactNativeTypes.d.ts +2 -2
  168. package/types_generated/Libraries/Animated/components/AnimatedScrollView.d.ts +2 -2
  169. package/types_generated/Libraries/Components/Button.d.ts +3 -3
  170. package/types_generated/Libraries/Components/TextInput/TextInput.flow.d.ts +2 -2
  171. package/types_generated/Libraries/Components/View/ViewAccessibility.d.ts +4 -4
  172. package/types_generated/Libraries/Interaction/PanResponder.d.ts +2 -2
  173. package/types_generated/src/private/types/HostInstance.d.ts +2 -2
@@ -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);
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -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")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -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<<1e23ab5dd844fae335eb7bfc2953794a>>
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();
@@ -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<<6d3c44622ffc5392e446a19ce48b1e61>>
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);
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we're presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -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/react/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
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -11,6 +11,6 @@
11
11
  namespace facebook::react::animated {
12
12
  // Indicates that the animated node identifier is not defined.
13
13
  // It is safe to use 0 because JavaScript starts assigning identifiers from 1.
14
- // https://github.com/facebook/react-native/blob/main/packages/react-native/src/private/animated/NativeAnimatedHelper.js#L35
14
+ // https://github.com/react/react-native/blob/main/packages/react-native/src/private/animated/NativeAnimatedHelper.js#L35
15
15
  constexpr static Tag undefinedAnimatedNodeIdentifier = 0;
16
16
  } // namespace facebook::react::animated
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -52,7 +52,7 @@ CullingContext CullingContext::adjustCullingContextIfNeeded(
52
52
  // In RTL, content offset is flipped horizontally.
53
53
  // We need to flip the culling context frame to match.
54
54
  // See:
55
- // https://github.com/facebook/react-native/blob/c2f39cfdd87c32b9a59efe8a788b8a03f02b0ea0/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm#L579
55
+ // https://github.com/react/react-native/blob/c2f39cfdd87c32b9a59efe8a788b8a03f02b0ea0/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm#L579
56
56
  auto stateData = scrollViewShadowNode->getStateData();
57
57
  cullingContext.frame.origin.x =
58
58
  stateData.contentBoundingRect.size.width -
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "../../..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "../../..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "../../../../..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -6,7 +6,7 @@
6
6
  package = JSON.parse(File.read(File.expand_path('../../package.json', __dir__)))
7
7
  version = package['version']
8
8
 
9
- source = { :git => ENV['INSTALL_YOGA_FROM_LOCATION'] || 'https://github.com/facebook/react-native.git' }
9
+ source = { :git => ENV['INSTALL_YOGA_FROM_LOCATION'] || 'https://github.com/react/react-native.git' }
10
10
  if version == '1000.0.0'
11
11
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
12
12
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -61,6 +61,6 @@ Pod::Spec.new do |spec|
61
61
  # Fabric must be able to access private headers (which should not be included in the umbrella header)
62
62
  all_header_files = 'yoga/**/*.h'
63
63
  all_header_files = File.join('ReactCommon/yoga', all_header_files) if ENV['INSTALL_YOGA_WITHOUT_PATH_OPTION']
64
- spec.private_header_files = Dir.glob(all_header_files) - Dir.glob(public_header_files)
64
+ spec.private_header_files = Dir.glob(all_header_files).sort - Dir.glob(public_header_files).sort
65
65
  spec.preserve_paths = [all_header_files]
66
66
  end
@@ -553,6 +553,8 @@ bool layoutAbsoluteDescendants(
553
553
  containingNodeAvailableInnerHeight) ||
554
554
  hasNewLayout;
555
555
 
556
+ cleanupContentsNodesRecursively(
557
+ child, /* didPerformLayout */ hasNewLayout);
556
558
  if (hasNewLayout) {
557
559
  child->setHasNewLayout(hasNewLayout);
558
560
  }
@@ -480,7 +480,9 @@ static void zeroOutLayoutRecursively(yoga::Node* const node) {
480
480
  }
481
481
  }
482
482
 
483
- static void cleanupContentsNodesRecursively(yoga::Node* const node) {
483
+ void cleanupContentsNodesRecursively(
484
+ yoga::Node* const node,
485
+ bool didPerformLayout) {
484
486
  if (node->hasContentsChildren()) [[unlikely]] {
485
487
  node->cloneContentsChildrenIfNeeded();
486
488
  for (auto child : node->getChildren()) {
@@ -488,11 +490,13 @@ static void cleanupContentsNodesRecursively(yoga::Node* const node) {
488
490
  child->getLayout() = {};
489
491
  child->setLayoutDimension(0, Dimension::Width);
490
492
  child->setLayoutDimension(0, Dimension::Height);
491
- child->setHasNewLayout(true);
493
+ if (didPerformLayout) {
494
+ child->setHasNewLayout(true);
495
+ }
492
496
  child->setDirty(false);
493
497
  child->cloneChildrenIfNeeded();
494
498
 
495
- cleanupContentsNodesRecursively(child);
499
+ cleanupContentsNodesRecursively(child, didPerformLayout);
496
500
  }
497
501
  }
498
502
  }
@@ -1317,7 +1321,7 @@ static void calculateLayoutImpl(
1317
1321
 
1318
1322
  // Clean and update all display: contents nodes with a direct path to the
1319
1323
  // current node as they will not be traversed
1320
- cleanupContentsNodesRecursively(node);
1324
+ cleanupContentsNodesRecursively(node, performLayout);
1321
1325
  return;
1322
1326
  }
1323
1327
 
@@ -1335,7 +1339,7 @@ static void calculateLayoutImpl(
1335
1339
 
1336
1340
  // Clean and update all display: contents nodes with a direct path to the
1337
1341
  // current node as they will not be traversed
1338
- cleanupContentsNodesRecursively(node);
1342
+ cleanupContentsNodesRecursively(node, performLayout);
1339
1343
  return;
1340
1344
  }
1341
1345
 
@@ -1353,7 +1357,7 @@ static void calculateLayoutImpl(
1353
1357
  ownerHeight)) {
1354
1358
  // Clean and update all display: contents nodes with a direct path to the
1355
1359
  // current node as they will not be traversed
1356
- cleanupContentsNodesRecursively(node);
1360
+ cleanupContentsNodesRecursively(node, /* didPerformLayout */ false);
1357
1361
  return;
1358
1362
  }
1359
1363
 
@@ -1365,7 +1369,7 @@ static void calculateLayoutImpl(
1365
1369
 
1366
1370
  // Clean and update all display: contents nodes with a direct path to the
1367
1371
  // current node as they will not be traversed
1368
- cleanupContentsNodesRecursively(node);
1372
+ cleanupContentsNodesRecursively(node, performLayout);
1369
1373
 
1370
1374
  // STEP 1: CALCULATE VALUES FOR REMAINDER OF ALGORITHM
1371
1375
  const FlexDirection mainAxis =
@@ -35,4 +35,6 @@ bool calculateLayoutInternal(
35
35
  uint32_t depth,
36
36
  uint32_t generationCount);
37
37
 
38
+ void cleanupContentsNodesRecursively(yoga::Node* node, bool didPerformLayout);
39
+
38
40
  } // namespace facebook::yoga
@@ -392,7 +392,12 @@ void Node::cloneChildrenIfNeeded() {
392
392
  child = resolveRef(config_->cloneNode(child, this, i));
393
393
  child->setOwner(this);
394
394
 
395
- if (child->hasContentsChildren()) [[unlikely]] {
395
+ if (child->style().display() == Display::Contents) [[unlikely]] {
396
+ // The contents node's children are treated as children of the
397
+ // contents node's parent for layout purposes, so they need
398
+ // to be cloned as well.
399
+ child->cloneChildrenIfNeeded();
400
+ } else if (child->hasContentsChildren()) [[unlikely]] {
396
401
  child->cloneContentsChildrenIfNeeded();
397
402
  }
398
403
  }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.83.8",
3
+ "version": "0.83.10",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "git+https://github.com/facebook/react-native.git",
8
+ "url": "git+https://github.com/react/react-native.git",
9
9
  "directory": "packages/react-native"
10
10
  },
11
11
  "homepage": "https://reactnative.dev/",
@@ -19,7 +19,7 @@
19
19
  "app-framework",
20
20
  "mobile-development"
21
21
  ],
22
- "bugs": "https://github.com/facebook/react-native/issues",
22
+ "bugs": "https://github.com/react/react-native/issues",
23
23
  "engines": {
24
24
  "node": ">= 20.19.4"
25
25
  },
@@ -160,13 +160,13 @@
160
160
  },
161
161
  "dependencies": {
162
162
  "@jest/create-cache-key-function": "^29.7.0",
163
- "@react-native/assets-registry": "0.83.8",
164
- "@react-native/codegen": "0.83.8",
165
- "@react-native/community-cli-plugin": "0.83.8",
166
- "@react-native/gradle-plugin": "0.83.8",
167
- "@react-native/js-polyfills": "0.83.8",
168
- "@react-native/normalize-colors": "0.83.8",
169
- "@react-native/virtualized-lists": "0.83.8",
163
+ "@react-native/assets-registry": "0.83.10",
164
+ "@react-native/codegen": "0.83.10",
165
+ "@react-native/community-cli-plugin": "0.83.10",
166
+ "@react-native/gradle-plugin": "0.83.10",
167
+ "@react-native/js-polyfills": "0.83.10",
168
+ "@react-native/normalize-colors": "0.83.10",
169
+ "@react-native/virtualized-lists": "0.83.10",
170
170
  "abort-controller": "^3.0.0",
171
171
  "anser": "^1.4.9",
172
172
  "ansi-regex": "^5.0.0",
@@ -386,18 +386,36 @@ class ReactNativeCoreUtils
386
386
  download_rncore_tarball(react_native_path, tarball_url, version, configuration, dsyms)
387
387
  end
388
388
 
389
+ def self.shared_cache_dir()
390
+ return File.join(Dir.home, "Library", "Caches", "ReactNative")
391
+ end
392
+
389
393
  def self.download_rncore_tarball(react_native_path, tarball_url, version, configuration, dsyms = false)
390
- destination_path = configuration == nil ?
391
- "#{artifacts_dir()}/reactnative-core-#{version}#{dsyms ? "-dSYM" : ""}.tar.gz" :
392
- "#{artifacts_dir()}/reactnative-core-#{version}#{dsyms ? "-dSYM" : ""}-#{configuration}.tar.gz"
394
+ filename = configuration == nil ?
395
+ "reactnative-core-#{version}#{dsyms ? "-dSYM" : ""}.tar.gz" :
396
+ "reactnative-core-#{version}#{dsyms ? "-dSYM" : ""}-#{configuration}.tar.gz"
397
+ destination_path = "#{artifacts_dir()}/#{filename}"
398
+
399
+ if File.exist?(destination_path)
400
+ rncore_log("Tarball #{filename} already exists in Pods. Skipping download.")
401
+ return destination_path
402
+ end
393
403
 
394
- unless File.exist?(destination_path)
404
+ `mkdir -p "#{artifacts_dir()}"`
405
+
406
+ cached_path = File.join(shared_cache_dir(), filename)
407
+ if File.exist?(cached_path)
408
+ rncore_log("Cache hit: copying #{filename} from shared cache (#{shared_cache_dir()})")
409
+ FileUtils.cp(cached_path, destination_path)
410
+ else
411
+ rncore_log("Cache miss: downloading #{filename} from #{tarball_url}")
395
412
  # Download to a temporary file first so we don't cache incomplete downloads.
396
- rncore_log("Downloading ReactNativeCore-prebuilt #{dsyms ? "dSYMs " : ""}#{configuration ? configuration.to_s : ""} tarball from #{tarball_url} to #{Pathname.new(destination_path).relative_path_from(Pathname.pwd).to_s}")
397
413
  tmp_file = "#{artifacts_dir()}/reactnative-core.download"
398
- `mkdir -p "#{artifacts_dir()}" && curl "#{tarball_url}" -Lo "#{tmp_file}" && mv "#{tmp_file}" "#{destination_path}"`
399
- else
400
- rncore_log("Using downloaded ReactNativeCore-prebuilt #{dsyms ? "dSYMs " : ""}#{configuration ? configuration.to_s : ""} tarball at #{Pathname.new(destination_path).relative_path_from(Pathname.pwd).to_s}")
414
+ `curl "#{tarball_url}" -Lo "#{tmp_file}" && mv "#{tmp_file}" "#{destination_path}"`
415
+ # Save to shared cache for future use
416
+ `mkdir -p "#{shared_cache_dir()}"`
417
+ FileUtils.cp(destination_path, cached_path)
418
+ rncore_log("Saved #{filename} to shared cache (#{shared_cache_dir()})")
401
419
  end
402
420
 
403
421
  return destination_path