@depup/react-native 0.86.0-depup.49 → 0.87.0-depup.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 (1212) hide show
  1. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +19 -24
  2. package/Libraries/Alert/Alert.js +38 -1
  3. package/Libraries/Animated/AnimatedExports.js +22 -0
  4. package/Libraries/Animated/AnimatedExports.js.flow +1 -1
  5. package/Libraries/Animated/AnimatedImplementation.js +120 -3
  6. package/Libraries/Animated/Easing.js +4 -3
  7. package/Libraries/Animated/NativeAnimatedAllowlist.js +37 -0
  8. package/Libraries/Animated/animations/Animation.js +14 -5
  9. package/Libraries/Animated/animations/DecayAnimation.js +1 -0
  10. package/Libraries/Animated/animations/SpringAnimation.js +1 -0
  11. package/Libraries/Animated/animations/TimingAnimation.js +9 -0
  12. package/Libraries/Animated/createAnimatedComponent.js +3 -3
  13. package/Libraries/Animated/nodes/AnimatedColor.js +8 -8
  14. package/Libraries/Animated/nodes/AnimatedInterpolation.js +106 -0
  15. package/Libraries/Animated/nodes/AnimatedProps.js +27 -3
  16. package/Libraries/Animated/nodes/AnimatedValue.js +8 -0
  17. package/Libraries/Animated/nodes/AnimatedValueXY.js +2 -2
  18. package/Libraries/AppDelegate/RCTAppDelegate.h +5 -9
  19. package/Libraries/AppDelegate/RCTAppDelegate.mm +0 -20
  20. package/Libraries/AppDelegate/RCTAppSetupUtils.h +0 -18
  21. package/Libraries/AppDelegate/RCTAppSetupUtils.mm +0 -78
  22. package/Libraries/AppDelegate/RCTDefaultReactNativeFactoryDelegate.mm +18 -21
  23. package/Libraries/AppDelegate/RCTReactNativeFactory.h +5 -41
  24. package/Libraries/AppDelegate/RCTReactNativeFactory.mm +0 -82
  25. package/Libraries/AppDelegate/RCTRootViewFactory.h +4 -1
  26. package/Libraries/AppDelegate/RCTRootViewFactory.mm +3 -101
  27. package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +1 -0
  28. package/Libraries/AppState/AppState.d.ts +4 -1
  29. package/Libraries/AppState/AppState.js +32 -17
  30. package/Libraries/BatchedBridge/MessageQueue.js +42 -51
  31. package/Libraries/BatchedBridge/NativeModules.js +7 -0
  32. package/Libraries/Blob/Blob.js +7 -1
  33. package/Libraries/Blob/FileReader.js +6 -0
  34. package/Libraries/Blob/URLSearchParams.js.flow +1 -1
  35. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +20 -9
  36. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +30 -43
  37. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +59 -49
  38. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +2 -2
  39. package/Libraries/Components/Button.js +98 -183
  40. package/Libraries/Components/Clipboard/Clipboard.js +5 -0
  41. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +2 -2
  42. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +8 -69
  43. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.d.ts +10 -1
  44. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js +2 -0
  45. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidTypes.js +26 -31
  46. package/Libraries/Components/Keyboard/Keyboard.js +23 -60
  47. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +15 -7
  48. package/Libraries/Components/Pressable/Pressable.js +39 -17
  49. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +5 -6
  50. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +4 -4
  51. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +2 -2
  52. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +17 -0
  53. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
  54. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +2 -2
  55. package/Libraries/Components/RefreshControl/RefreshControl.js +40 -50
  56. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +2 -2
  57. package/Libraries/Components/SafeAreaView/SafeAreaView.js +8 -8
  58. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +2 -2
  59. package/Libraries/Components/ScrollView/ScrollView.d.ts +55 -43
  60. package/Libraries/Components/ScrollView/ScrollView.js +205 -118
  61. package/Libraries/Components/ScrollView/ScrollViewCommands.js +4 -4
  62. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
  63. package/Libraries/Components/StatusBar/StatusBar.d.ts +7 -54
  64. package/Libraries/Components/StatusBar/StatusBar.js +84 -160
  65. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +2 -2
  66. package/Libraries/Components/Switch/Switch.js +76 -75
  67. package/Libraries/Components/Switch/SwitchNativeComponent.js +2 -2
  68. package/Libraries/Components/TextInput/InputAccessoryView.js +13 -61
  69. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +2 -2
  70. package/Libraries/Components/TextInput/TextInput.d.ts +9 -2
  71. package/Libraries/Components/TextInput/TextInput.flow.js +19 -2
  72. package/Libraries/Components/TextInput/TextInput.js +116 -111
  73. package/Libraries/Components/TextInput/TextInputNativeCommands.js +3 -3
  74. package/Libraries/Components/ToastAndroid/ToastAndroid.android.js +25 -19
  75. package/Libraries/Components/Touchable/Touchable.js +94 -95
  76. package/Libraries/Components/Touchable/TouchableHighlight.js +45 -112
  77. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +13 -25
  78. package/Libraries/Components/Touchable/TouchableOpacity.js +14 -84
  79. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +4 -3
  80. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +2 -2
  81. package/Libraries/Components/View/ReactNativeStyleAttributes.js +1 -0
  82. package/Libraries/Components/View/View.js +83 -86
  83. package/Libraries/Components/View/ViewAccessibility.d.ts +11 -1
  84. package/Libraries/Components/View/ViewAccessibility.js +16 -5
  85. package/Libraries/Components/View/ViewNativeComponent.js +4 -6
  86. package/Libraries/Components/View/ViewPropTypes.js +65 -13
  87. package/Libraries/Core/InitializeCore.js +9 -1
  88. package/Libraries/Core/ReactFiberErrorDialog.js +3 -3
  89. package/Libraries/Core/ReactNativeVersion.js +1 -1
  90. package/Libraries/Core/Timers/JSTimers.js +53 -52
  91. package/Libraries/Core/setUpGlobals.js +9 -4
  92. package/Libraries/Core/setUpNavigator.js +6 -1
  93. package/Libraries/Core/setUpReactDevTools.js +0 -118
  94. package/Libraries/Core/setUpXHR.js +6 -2
  95. package/Libraries/Debugging/DebuggingOverlay.js +2 -2
  96. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +2 -2
  97. package/Libraries/EventEmitter/NativeEventEmitter.js +29 -0
  98. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +7 -7
  99. package/Libraries/EventEmitter/RCTNativeAppEventEmitter.js +3 -0
  100. package/Libraries/Image/AssetSourceResolver.js +18 -27
  101. package/Libraries/Image/Image.android.js +13 -2
  102. package/Libraries/Image/Image.ios.js +3 -1
  103. package/Libraries/Image/ImageBackground.js +30 -18
  104. package/Libraries/Image/ImageProps.js +116 -117
  105. package/Libraries/Image/ImageSource.d.ts +1 -1
  106. package/Libraries/Image/ImageSource.js +9 -9
  107. package/Libraries/Image/ImageSourceUtils.js +10 -7
  108. package/Libraries/Image/ImageTypes.flow.js +2 -0
  109. package/Libraries/Image/ImageViewNativeComponent.js +1 -1
  110. package/Libraries/Image/RCTImageLoader.mm +60 -63
  111. package/Libraries/Image/RCTImageStoreManager.h +0 -2
  112. package/Libraries/Image/RelativeImageStub.js +1 -1
  113. package/Libraries/Image/resolveAssetSource.js +1 -1
  114. package/Libraries/Interaction/PanResponder.js +102 -97
  115. package/Libraries/LayoutAnimation/LayoutAnimation.js +22 -6
  116. package/Libraries/Linking/Linking.js +24 -23
  117. package/Libraries/Lists/FlatList.d.ts +6 -17
  118. package/Libraries/Lists/FlatList.js +7 -8
  119. package/Libraries/Lists/SectionList.js +7 -0
  120. package/Libraries/Lists/VirtualizedList.js +3 -0
  121. package/Libraries/Lists/VirtualizedSectionList.js +4 -0
  122. package/Libraries/LogBox/LogBox.js +3 -3
  123. package/Libraries/LogBox/UI/AnsiHighlight.js +2 -1
  124. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +2 -2
  125. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +4 -1
  126. package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +3 -1
  127. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +8 -2
  128. package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +9 -2
  129. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +17 -4
  130. package/Libraries/LogBox/UI/LogBoxInspectorSection.js +3 -1
  131. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +3 -1
  132. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +2 -0
  133. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +4 -2
  134. package/Libraries/LogBox/UI/LogBoxMessage.js +18 -5
  135. package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +4 -1
  136. package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +1 -0
  137. package/Libraries/LogBox/UI/LogBoxStyle.js +0 -4
  138. package/Libraries/Modal/Modal.d.ts +5 -4
  139. package/Libraries/Modal/Modal.js +71 -37
  140. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +2 -2
  141. package/Libraries/NativeComponent/BaseViewConfig.android.js +17 -0
  142. package/Libraries/NativeComponent/ViewConfig.js +3 -3
  143. package/Libraries/NativeComponent/ViewConfigIgnore.js +1 -1
  144. package/Libraries/Network/RCTHTTPRequestHandler.h +1 -1
  145. package/Libraries/Performance/Systrace.js +36 -0
  146. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +4 -2
  147. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +29 -17
  148. package/Libraries/Pressability/Pressability.js +1 -1
  149. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +4 -0
  150. package/Libraries/ReactNative/AppContainer-dev.js +3 -1
  151. package/Libraries/ReactNative/AppRegistry.flow.js +1 -0
  152. package/Libraries/ReactNative/AppRegistry.js +15 -11
  153. package/Libraries/ReactNative/AppRegistryImpl.js +57 -11
  154. package/Libraries/ReactNative/DisplayMode.js +1 -1
  155. package/Libraries/ReactNative/FabricUIManager.js +29 -26
  156. package/Libraries/ReactNative/I18nManager.js +20 -0
  157. package/Libraries/ReactNative/UIManager.js +53 -0
  158. package/Libraries/ReactNative/renderApplication.js +1 -1
  159. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +5 -126
  160. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js.flow +5 -41
  161. package/Libraries/Renderer/shims/ReactNativeTypes.js +36 -36
  162. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +4 -4
  163. package/Libraries/Settings/Settings.ios.js +22 -0
  164. package/Libraries/Share/Share.js +25 -28
  165. package/Libraries/StyleSheet/PlatformColorValueTypes.js.flow +6 -0
  166. package/Libraries/StyleSheet/StyleSheet.js +42 -2
  167. package/Libraries/StyleSheet/StyleSheet.js.flow +1 -1
  168. package/Libraries/StyleSheet/StyleSheetExports.js +7 -5
  169. package/Libraries/StyleSheet/StyleSheetExports.js.flow +1 -1
  170. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +24 -3
  171. package/Libraries/StyleSheet/StyleSheetTypes.js +34 -6
  172. package/Libraries/StyleSheet/flattenStyle.js +28 -13
  173. package/Libraries/StyleSheet/private/_TransformStyle.js +16 -14
  174. package/Libraries/Text/Text.js +12 -9
  175. package/Libraries/Text/TextEffectNativeComponent.js +31 -0
  176. package/Libraries/Text/TextInput/Multiline/RCTUITextView.mm +0 -1
  177. package/Libraries/Text/TextInput/RCTBackedTextInputViewProtocol.h +0 -1
  178. package/Libraries/Text/TextInput/Singleline/RCTUITextField.mm +0 -1
  179. package/Libraries/Text/TextProps.js +59 -93
  180. package/Libraries/Text/requireNativeTextEffect.js +28 -0
  181. package/Libraries/TurboModule/RCTExport.js +1 -1
  182. package/Libraries/Types/CoreEventTypes.d.ts +8 -0
  183. package/Libraries/Types/CoreEventTypes.js +32 -29
  184. package/Libraries/Types/UIManagerJSInterface.js +2 -2
  185. package/Libraries/Utilities/Appearance.d.ts +32 -17
  186. package/Libraries/Utilities/Appearance.js +35 -18
  187. package/Libraries/Utilities/BackHandler.android.js +13 -28
  188. package/Libraries/Utilities/BackHandler.js.flow +18 -2
  189. package/Libraries/Utilities/DevSettings.js +8 -1
  190. package/Libraries/Utilities/Dimensions.js +18 -12
  191. package/Libraries/Utilities/PixelRatio.js +5 -2
  192. package/Libraries/Utilities/Platform.js.flow +4 -0
  193. package/Libraries/Utilities/PlatformTypes.js +77 -0
  194. package/Libraries/Utilities/differ/deepDiffer.js +5 -2
  195. package/Libraries/Utilities/useColorScheme.js +11 -1
  196. package/Libraries/Utilities/useWindowDimensions.js +6 -0
  197. package/Libraries/Vibration/Vibration.js +14 -11
  198. package/Libraries/vendor/emitter/EventEmitter.js +3 -3
  199. package/README.md +7 -9
  200. package/React/Base/RCTBridge+Private.h +0 -22
  201. package/React/Base/RCTBridge.h +10 -8
  202. package/React/Base/RCTBridge.mm +5 -447
  203. package/React/Base/RCTBridgeDelegate.h +1 -56
  204. package/React/Base/RCTBridgeModule.h +0 -9
  205. package/React/Base/RCTBridgeProxy.h +8 -0
  206. package/React/Base/RCTBridgeProxy.mm +3 -20
  207. package/React/Base/RCTBundleManager.h +0 -3
  208. package/React/Base/RCTBundleManager.m +0 -31
  209. package/React/Base/RCTBundleURLProvider.mm +4 -4
  210. package/React/Base/RCTCallableJSModules.m +0 -18
  211. package/React/Base/RCTConstants.h +1 -0
  212. package/React/Base/RCTConstants.m +1 -0
  213. package/React/Base/RCTConvert.mm +3 -0
  214. package/React/Base/RCTDisplayLink.h +3 -1
  215. package/React/Base/RCTJavaScriptExecutor.h +0 -69
  216. package/React/Base/RCTModuleData.mm +2 -483
  217. package/React/Base/RCTModuleRegistry.m +0 -25
  218. package/React/Base/RCTRootView.m +3 -374
  219. package/React/Base/RCTUtils.h +0 -3
  220. package/React/Base/RCTUtils.mm +17 -27
  221. package/React/Base/RCTVersion.m +1 -1
  222. package/React/Base/RCTViewRegistry.m +1 -29
  223. package/React/Base/Surface/RCTSurface.mm +1 -582
  224. package/React/Base/Surface/RCTSurfaceRootShadowView.m +0 -89
  225. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +0 -1
  226. package/React/CoreModules/PlatformStubs/RCTStatusBarManager.mm +0 -2
  227. package/React/CoreModules/RCTAlertController.mm +1 -0
  228. package/React/CoreModules/RCTAlertManager.mm +0 -5
  229. package/React/CoreModules/RCTLogBox.mm +0 -11
  230. package/React/CoreModules/RCTLogBoxView.h +0 -3
  231. package/React/CoreModules/RCTLogBoxView.mm +0 -31
  232. package/React/CoreModules/RCTPerfMonitor.mm +0 -2
  233. package/React/CoreModules/RCTStatusBarManager.mm +0 -11
  234. package/React/CxxModule/RCTCxxUtils.h +0 -8
  235. package/React/CxxModule/RCTCxxUtils.mm +0 -17
  236. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm +179 -7
  237. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h +100 -2
  238. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +373 -119
  239. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ComponentDescriptors.cpp +1 -1
  240. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ComponentDescriptors.h +1 -1
  241. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/EventEmitters.cpp +71 -71
  242. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/EventEmitters.h +96 -96
  243. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/Props.cpp +357 -363
  244. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/Props.h +211 -212
  245. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/RCTComponentViewHelpers.h +107 -107
  246. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ShadowNodes.cpp +1 -1
  247. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ShadowNodes.h +11 -11
  248. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/States.h +2 -2
  249. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropComponentView.h +4 -0
  250. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropComponentView.mm +4 -0
  251. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropCoordinatorAdapter.h +4 -0
  252. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropCoordinatorAdapter.mm +5 -0
  253. package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm +0 -1
  254. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +14 -0
  255. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +12 -3
  256. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTVirtualViewContainerState.mm +12 -26
  257. package/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm +39 -4
  258. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +5 -5
  259. package/React/Fabric/Mounting/ComponentViews/VirtualView/RCTVirtualViewComponentView.mm +0 -18
  260. package/React/Fabric/Mounting/RCTComponentViewFactory.mm +9 -5
  261. package/React/Fabric/RCTSurfacePresenter.mm +86 -5
  262. package/React/Fabric/RCTSurfacePresenterBridgeAdapter.h +2 -0
  263. package/React/I18n/RCTLocalizedString.mm +38 -2
  264. package/React/Modules/RCTEventEmitter.m +30 -10
  265. package/React/Modules/RCTI18nUtil.m +3 -1
  266. package/React/Modules/RCTUIManager.mm +0 -1501
  267. package/React/React-RCTFBReactNativeSpec.podspec +1 -1
  268. package/React/Tests/Text/RCTAttributedTextUtilsTest.mm +27 -0
  269. package/React/Views/RCTModalHostViewController.h +0 -15
  270. package/React/Views/RCTModalHostViewManager.h +0 -24
  271. package/React/Views/RCTShadowView.h +0 -2
  272. package/React/Views/RCTShadowView.m +0 -723
  273. package/React/Views/ScrollView/RCTScrollView.h +0 -81
  274. package/React/Views/ScrollView/RCTScrollableProtocol.h +0 -4
  275. package/React-Core-prebuilt.podspec +45 -17
  276. package/React-Core.podspec +9 -2
  277. package/ReactAndroid/api/ReactAndroid.api +128 -142
  278. package/ReactAndroid/build.gradle.kts +26 -21
  279. package/ReactAndroid/external-artifacts/build.gradle.kts +49 -0
  280. package/ReactAndroid/gradle.properties +1 -1
  281. package/ReactAndroid/hermes-engine/build.gradle.kts +14 -14
  282. package/ReactAndroid/src/debug/AndroidManifest.xml +6 -0
  283. package/ReactAndroid/src/debugOptimized/AndroidManifest.xml +22 -0
  284. package/ReactAndroid/src/main/java/com/facebook/react/BaseReactPackage.kt +3 -7
  285. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +4 -2
  286. package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt +4 -6
  287. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +5 -7
  288. package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.kt +212 -0
  289. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +0 -16
  290. package/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt +6 -1
  291. package/ReactAndroid/src/main/java/com/facebook/react/bridge/Arguments.kt +1 -0
  292. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.kt +287 -0
  293. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ColorPropConverter.kt +16 -0
  294. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +15 -2
  295. package/ReactAndroid/src/main/java/com/facebook/react/bridge/interop/InteropModuleRegistry.kt +1 -3
  296. package/ReactAndroid/src/main/java/com/facebook/react/common/build/ReactBuildConfig.kt +4 -0
  297. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/MapBuffer.kt +50 -2
  298. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBuffer.kt +63 -22
  299. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/WritableMapBuffer.kt +33 -0
  300. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +4 -12
  301. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactActivityDelegate.kt +14 -10
  302. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt +6 -6
  303. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BundleDownloader.kt +50 -47
  304. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.kt +0 -4
  305. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerFactory.kt +10 -10
  306. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LocalNetworkPermissionUtil.kt +49 -0
  307. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/MultipartStreamReader.kt +101 -26
  308. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +40 -38
  309. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerBinding.kt +1 -10
  310. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerProviderImpl.kt +0 -3
  311. package/ReactAndroid/src/main/java/com/facebook/react/fabric/ViewTransitionSnapshotManager.kt +15 -11
  312. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.kt +4 -4
  313. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt +7 -13
  314. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.kt +195 -194
  315. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/SynchronousMountItem.kt +12 -8
  316. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +30 -66
  317. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +51 -111
  318. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +11 -23
  319. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +12 -24
  320. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +57 -123
  321. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android.kt +7 -5
  322. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +3 -5
  323. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +11 -23
  324. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlags.kt +0 -24
  325. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt +0 -4
  326. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.kt +1 -0
  327. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.kt +3 -0
  328. package/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.kt +50 -0
  329. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +53 -3
  330. package/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.kt +2 -77
  331. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  332. package/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt +2 -2
  333. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +1 -1
  334. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.kt +9 -4
  335. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +4 -19
  336. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt +1 -5
  337. package/ReactAndroid/src/main/java/com/facebook/react/touch/ReactInterceptingViewGroup.kt +4 -4
  338. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +46 -9
  339. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt +1 -49
  340. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/HasChildPressedStateDelay.kt +29 -0
  341. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.kt +796 -0
  342. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt +2 -4
  343. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.kt +27 -27
  344. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.kt +184 -0
  345. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.kt +486 -0
  346. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +8 -8
  347. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.kt +2 -2
  348. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/SkewMatrixHelper.kt +200 -0
  349. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt +3 -0
  350. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.kt +6 -1
  351. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.kt +2 -2
  352. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIBlock.kt +7 -1
  353. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.kt +645 -0
  354. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.kt +2 -3
  355. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.kt +142 -0
  356. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt +0 -10
  357. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java +3 -3
  358. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.kt +527 -0
  359. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.kt +3 -1
  360. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderRadiusStyle.kt +6 -6
  361. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/ColorStop.kt +6 -0
  362. package/ReactAndroid/src/main/java/com/facebook/react/util/AndroidVersion.kt +7 -0
  363. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayout.kt +8 -1
  364. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.kt +0 -3
  365. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt +2 -0
  366. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.kt +4 -4
  367. package/ReactAndroid/src/main/java/com/facebook/react/views/safeareaview/ReactSafeAreaView.kt +2 -0
  368. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.kt +1640 -0
  369. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.kt +6 -6
  370. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollView.kt +1317 -0
  371. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollViewManager.kt +7 -7
  372. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.kt +1309 -0
  373. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.kt +6 -6
  374. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainer.kt +19 -33
  375. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainerStateClassic.kt +8 -6
  376. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainerStateExperimental.kt +4 -4
  377. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/generate-nested-scroll-view.js +13 -20
  378. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/ReactSwipeRefreshLayout.kt +7 -1
  379. package/ReactAndroid/src/main/java/com/facebook/react/views/text/MutableSpannableLayout.kt +107 -0
  380. package/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextView.kt +122 -10
  381. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +91 -1
  382. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.kt +3 -0
  383. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt +41 -0
  384. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.kt +48 -2
  385. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextDecorationStyle.kt +200 -0
  386. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextEffectRegistry.kt +45 -0
  387. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextEffectSpanFactory.kt +17 -0
  388. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +361 -15
  389. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/AnimatedEffectSpan.kt +37 -0
  390. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/{DrawCommandSpan.kt → CanvasEffectSpan.kt} +3 -4
  391. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomStyleSpan.kt +23 -3
  392. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/ReactStrikethroughSpan.kt +30 -3
  393. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/ReactUnderlineSpan.kt +25 -3
  394. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/SetSpanOperation.kt +1 -1
  395. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/StatefulSpan.kt +21 -0
  396. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/TextEffectSpan.kt +19 -0
  397. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/TouchableSpan.kt +29 -0
  398. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.kt +81 -9
  399. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +4 -0
  400. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +3 -17
  401. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +8 -0
  402. package/ReactAndroid/src/main/java/com/facebook/react/views/view/WindowUtil.kt +2 -0
  403. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/VirtualViewRenderState.kt +1 -1
  404. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/view/ReactVirtualView.kt +7 -8
  405. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.kt +45 -0
  406. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaBoxSizing.kt +27 -0
  407. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.kt +15 -0
  408. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.kt +6 -0
  409. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDimension.kt +27 -0
  410. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDisplay.kt +31 -0
  411. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaEdge.kt +41 -0
  412. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaErrata.kt +37 -0
  413. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaExperimentalFeature.kt +27 -0
  414. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaFlexDirection.kt +31 -0
  415. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGridTrackType.kt +33 -0
  416. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGutter.kt +29 -0
  417. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaJustify.kt +43 -0
  418. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaLogLevel.kt +39 -0
  419. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaMeasureMode.kt +29 -0
  420. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.kt +16 -0
  421. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.kt +12 -2
  422. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.kt +762 -0
  423. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIFinalizer.kt +4 -4
  424. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeType.kt +27 -0
  425. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaOverflow.kt +29 -0
  426. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaPositionType.kt +29 -0
  427. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaProps.kt +24 -2
  428. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaUnit.kt +37 -0
  429. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaWrap.kt +29 -0
  430. package/ReactAndroid/src/main/jni/CMakeLists.txt +1 -2
  431. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp +94 -0
  432. package/ReactAndroid/src/main/jni/react/devsupport/JCxxInspectorPackagerConnectionDelegateImpl.cpp +3 -0
  433. package/ReactAndroid/src/main/jni/react/fabric/AndroidAnimationChoreographer.h +10 -10
  434. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +3 -0
  435. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +12 -15
  436. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h +1 -3
  437. package/ReactAndroid/src/main/jni/react/fabric/test/FabricMountingManagerTest.cpp +159 -0
  438. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +69 -153
  439. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +15 -33
  440. package/ReactAndroid/src/main/jni/react/jni/JReactMarker.cpp +10 -24
  441. package/ReactAndroid/src/main/jni/react/jni/JReactMarker.h +0 -2
  442. package/ReactAndroid/src/main/jni/react/mapbuffer/react/common/mapbuffer/JWritableMapBuffer.cpp +13 -0
  443. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactInstance.cpp +4 -1
  444. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +8 -0
  445. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.h +4 -0
  446. package/ReactAndroid/src/main/res/views/uimanager/values/ids.xml +5 -0
  447. package/ReactAndroid/src/main/res/views/uimanager/values-zu/strings.xml +3 -0
  448. package/ReactApple/RCTAnimatedModuleProvider/React-RCTAnimatedModuleProvider.podspec +63 -0
  449. package/ReactCommon/React-Fabric.podspec +2 -0
  450. package/ReactCommon/ReactCommon.podspec +2 -12
  451. package/ReactCommon/cmake-utils/react-native-flags.cmake +1 -3
  452. package/ReactCommon/cxxreact/CMakeLists.txt +1 -0
  453. package/ReactCommon/cxxreact/ErrorUtils.h +2 -32
  454. package/ReactCommon/cxxreact/Instance.cpp +1 -26
  455. package/ReactCommon/cxxreact/Instance.h +0 -2
  456. package/ReactCommon/cxxreact/NativeToJsBridge.cpp +3 -2
  457. package/ReactCommon/cxxreact/RAMBundleRegistry.cpp +0 -12
  458. package/ReactCommon/cxxreact/RAMBundleRegistry.h +0 -5
  459. package/ReactCommon/cxxreact/React-cxxreact.podspec +2 -1
  460. package/ReactCommon/cxxreact/ReactMarker.cpp +4 -30
  461. package/ReactCommon/cxxreact/ReactMarker.h +38 -21
  462. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  463. package/ReactCommon/cxxreact/TraceSection.h +1 -1
  464. package/ReactCommon/cxxreact/tests/methodcall.cpp +4 -0
  465. package/ReactCommon/hermes/executor/HermesExecutorFactory.cpp +6 -79
  466. package/ReactCommon/jserrorhandler/ErrorUtils.cpp +42 -0
  467. package/{React/CxxLogUtils/RCTDefaultCxxLogFunction.h → ReactCommon/jserrorhandler/ErrorUtils.h} +2 -2
  468. package/ReactCommon/jserrorhandler/JsErrorHandler.cpp +1 -1
  469. package/ReactCommon/jserrorhandler/React-jserrorhandler.podspec +2 -3
  470. package/ReactCommon/jsi/jsi/hermes-interfaces.h +53 -0
  471. package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +2 -1
  472. package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.cpp +3 -14
  473. package/ReactCommon/jsiexecutor/jsireact/JSINativeModules.cpp +4 -13
  474. package/ReactCommon/jsinspector-modern/HostAgent.cpp +54 -0
  475. package/ReactCommon/jsinspector-modern/HostTarget.h +0 -7
  476. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +10 -7
  477. package/ReactCommon/jsinspector-modern/InspectorPackagerConnection.cpp +4 -1
  478. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +7 -0
  479. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +20 -0
  480. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +16 -0
  481. package/ReactCommon/jsinspector-modern/SessionState.h +31 -0
  482. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +53 -0
  483. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfile.h +14 -1
  484. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingState.h +11 -0
  485. package/ReactCommon/react/bridging/ArrayBuffer.h +180 -0
  486. package/ReactCommon/react/bridging/Bridging.h +1 -0
  487. package/ReactCommon/react/bridging/Convert.h +12 -0
  488. package/ReactCommon/react/bridging/React-bridging.podspec +44 -0
  489. package/ReactCommon/react/bridging/tests/BridgingTest.cpp +185 -11
  490. package/ReactCommon/react/bridging/tests/ClassTest.cpp +22 -0
  491. package/ReactCommon/react/cxxstableapi/CMakeLists.txt +18 -0
  492. package/ReactCommon/react/cxxstableapi/FrameworksGuard.h +35 -0
  493. package/ReactCommon/react/cxxstableapi/PrivateGuard.h +34 -0
  494. package/ReactCommon/react/cxxstableapi/React-cxxstableapi.podspec +34 -0
  495. package/ReactCommon/react/cxxstableapi/UmbrellaGuard.h +53 -0
  496. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +21 -45
  497. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +26 -56
  498. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +134 -242
  499. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +14 -26
  500. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +20 -44
  501. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +43 -97
  502. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSCanary.h +10 -6
  503. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +3 -7
  504. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSStable.h +0 -8
  505. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +7 -13
  506. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.h +1 -0
  507. package/ReactCommon/react/nativemodule/core/iostests/RCTTurboModuleTests.mm +49 -0
  508. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaInteropTurboModule.cpp +4 -0
  509. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaInteropTurboModule.h +4 -0
  510. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +1 -1
  511. package/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +1 -1
  512. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.h +4 -0
  513. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm +4 -0
  514. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +60 -3
  515. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h +0 -9
  516. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +37 -139
  517. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleWithJSIBindings.h +0 -3
  518. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +6 -0
  519. package/ReactCommon/react/nativemodule/dom/NativeDOM.cpp +10 -4
  520. package/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec +1 -0
  521. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +25 -55
  522. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +11 -23
  523. package/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec +1 -0
  524. package/ReactCommon/react/nativemodule/intersectionobserver/React-intersectionobservernativemodule.podspec +1 -0
  525. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp +4 -0
  526. package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +1 -0
  527. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTSampleTurboModule.h +1 -1
  528. package/ReactCommon/react/nativemodule/webperformance/React-webperformancenativemodule.podspec +1 -0
  529. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +95 -63
  530. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +20 -1
  531. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +7 -10
  532. package/ReactCommon/react/renderer/animated/drivers/FrameAnimationDriver.cpp +20 -1
  533. package/ReactCommon/react/renderer/animated/drivers/FrameAnimationDriver.h +1 -0
  534. package/ReactCommon/react/renderer/animated/nodes/InterpolationAnimatedNode.cpp +67 -6
  535. package/ReactCommon/react/renderer/animated/nodes/InterpolationAnimatedNode.h +12 -0
  536. package/ReactCommon/react/renderer/animated/nodes/PropsAnimatedNode.cpp +25 -13
  537. package/ReactCommon/react/renderer/animated/nodes/PropsAnimatedNode.h +7 -0
  538. package/ReactCommon/react/renderer/animated/tests/AnimationDriverTests.cpp +48 -0
  539. package/ReactCommon/react/renderer/animated/tests/DecayAnimationDriverTest.cpp +245 -0
  540. package/ReactCommon/react/renderer/animated/tests/ManagedPropsMountingOverrideTests.cpp +204 -0
  541. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.cpp +10 -1
  542. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +1 -0
  543. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +17 -0
  544. package/ReactCommon/react/renderer/animations/tests/LayoutAnimationTest.cpp +0 -2
  545. package/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +6 -2
  546. package/ReactCommon/react/renderer/attributedstring/TextAttributes.h +25 -1
  547. package/ReactCommon/react/renderer/attributedstring/conversions.h +29 -1
  548. package/ReactCommon/react/renderer/attributedstring/primitives.h +4 -2
  549. package/ReactCommon/react/renderer/attributedstring/tests/ParagraphAttributesTest.cpp +73 -0
  550. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +6 -0
  551. package/ReactCommon/react/renderer/components/image/ImageProps.cpp +79 -126
  552. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropShadowNode.cpp +4 -0
  553. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropShadowNode.h +4 -0
  554. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropState.h +4 -0
  555. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.cpp +5 -0
  556. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.h +4 -0
  557. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp +5 -0
  558. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticComponentDescriptor.h +4 -0
  559. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticShadowNode.cpp +4 -0
  560. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticShadowNode.h +4 -0
  561. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerInteropComponentDescriptor.h +4 -0
  562. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.h +4 -0
  563. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm +5 -0
  564. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h +4 -0
  565. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm +5 -0
  566. package/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp +235 -352
  567. package/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.cpp +30 -46
  568. package/ReactCommon/react/renderer/components/text/BaseParagraphProps.cpp +17 -27
  569. package/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +8 -10
  570. package/ReactCommon/react/renderer/components/text/BaseTextShadowNode.cpp +19 -0
  571. package/ReactCommon/react/renderer/components/text/TextEffectComponentDescriptor.h +17 -0
  572. package/ReactCommon/react/renderer/components/text/TextEffectProps.cpp +59 -0
  573. package/ReactCommon/react/renderer/components/text/TextEffectProps.h +30 -0
  574. package/{Libraries/Text/VirtualText/RCTVirtualTextView.mm → ReactCommon/react/renderer/components/text/TextEffectShadowNode.cpp} +4 -6
  575. package/ReactCommon/react/renderer/components/text/TextEffectShadowNode.h +26 -0
  576. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/HostPlatformParagraphProps.cpp +18 -28
  577. package/ReactCommon/react/renderer/components/text/tests/BaseTextShadowNodeTest.cpp +15 -0
  578. package/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputProps.cpp +42 -50
  579. package/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +168 -754
  580. package/ReactCommon/react/renderer/components/view/AccessibilityProps.h +0 -9
  581. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +248 -312
  582. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +0 -6
  583. package/ReactCommon/react/renderer/components/view/ViewShadowNode.h +2 -12
  584. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +73 -27
  585. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.h +7 -9
  586. package/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +3 -11
  587. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +82 -162
  588. package/ReactCommon/react/renderer/components/view/primitives.h +5 -0
  589. package/ReactCommon/react/renderer/components/view/propsConversions.h +74 -42
  590. package/ReactCommon/react/renderer/components/view/tests/LayoutTest.cpp +5 -5
  591. package/ReactCommon/react/renderer/components/view/tests/ViewTest.cpp +353 -6
  592. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +41 -16
  593. package/ReactCommon/react/renderer/core/ConcreteShadowNode.h +19 -0
  594. package/ReactCommon/react/renderer/core/EventEmitter.cpp +20 -4
  595. package/ReactCommon/react/renderer/core/LayoutMetrics.h +3 -0
  596. package/ReactCommon/react/renderer/core/Props.cpp +8 -39
  597. package/ReactCommon/react/renderer/core/Props.h +63 -13
  598. package/ReactCommon/react/renderer/core/RawProps.cpp +20 -3
  599. package/ReactCommon/react/renderer/core/RawProps.h +44 -0
  600. package/ReactCommon/react/renderer/core/RawPropsKeyMap.cpp +11 -27
  601. package/ReactCommon/react/renderer/core/RawPropsKeyMap.h +3 -3
  602. package/ReactCommon/react/renderer/core/RawPropsParser.cpp +4 -6
  603. package/ReactCommon/react/renderer/core/RawPropsParser.h +3 -3
  604. package/ReactCommon/react/renderer/core/ShadowNode.cpp +27 -19
  605. package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +2 -0
  606. package/ReactCommon/react/renderer/core/StateData.h +4 -4
  607. package/ReactCommon/react/renderer/core/propsConversions.h +3 -7
  608. package/ReactCommon/react/renderer/core/tests/ComponentDescriptorTest.cpp +8 -0
  609. package/ReactCommon/react/renderer/core/tests/FindNodeAtPointTest.cpp +7 -7
  610. package/ReactCommon/react/renderer/core/tests/LayoutableShadowNodeTest.cpp +19 -19
  611. package/ReactCommon/react/renderer/core/tests/PropsConceptsTest.cpp +135 -0
  612. package/ReactCommon/react/renderer/core/tests/RawPropsTest.cpp +43 -53
  613. package/ReactCommon/react/renderer/element/tests/ElementTest.cpp +3 -3
  614. package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/conversions.h +17 -0
  615. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm +1 -1
  616. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.cpp +123 -33
  617. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.h +26 -14
  618. package/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.cpp +96 -53
  619. package/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h +4 -0
  620. package/ReactCommon/react/renderer/mapbuffer/tests/MapBufferTest.cpp +96 -1
  621. package/ReactCommon/react/renderer/mounting/Differentiator.cpp +29 -318
  622. package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +105 -33
  623. package/ReactCommon/react/renderer/mounting/ShadowTree.h +2 -0
  624. package/ReactCommon/react/renderer/mounting/tests/DifferentiatorUnflattenTest.cpp +11 -3
  625. package/ReactCommon/react/renderer/mounting/tests/OrderIndexTest.cpp +1 -1
  626. package/ReactCommon/react/renderer/mounting/tests/ShadowTreeLifeCycleTest.cpp +15 -250
  627. package/ReactCommon/react/renderer/mounting/tests/ShadowTreeReactBranchingTest.cpp +141 -0
  628. package/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp +1 -1
  629. package/ReactCommon/react/renderer/runtimescheduler/CMakeLists.txt +1 -0
  630. package/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec +1 -0
  631. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +22 -2
  632. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.h +13 -2
  633. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp +13 -0
  634. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.h +9 -0
  635. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp +43 -5
  636. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.h +17 -1
  637. package/ReactCommon/react/renderer/runtimescheduler/Task.h +4 -0
  638. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +113 -8
  639. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +14 -6
  640. package/ReactCommon/react/renderer/scheduler/Scheduler.h +3 -2
  641. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp +1 -85
  642. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.h +0 -6
  643. package/ReactCommon/react/renderer/scheduler/tests/SchedulerDelegateInvalidationTest.cpp +671 -0
  644. package/ReactCommon/react/renderer/textlayoutmanager/TextMeasureCache.h +22 -5
  645. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp +4 -2
  646. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.h +11 -0
  647. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.mm +65 -26
  648. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm +193 -1
  649. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextPrimitivesConversions.h +14 -2
  650. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/TextLayoutManager.mm +2 -1
  651. package/ReactCommon/react/renderer/textlayoutmanager/tests/TextLayoutManagerTest.cpp +86 -5
  652. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +89 -94
  653. package/ReactCommon/react/renderer/uimanager/UIManager.h +2 -2
  654. package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +1 -1
  655. package/ReactCommon/react/renderer/uimanager/tests/FabricUIManagerTest.cpp +144 -3
  656. package/ReactCommon/react/renderer/uimanager/tests/FindShadowNodeByTagTest.cpp +1 -52
  657. package/ReactCommon/react/renderer/uimanager/tests/PointerEventsProcessorTest.cpp +4 -4
  658. package/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.cpp +88 -39
  659. package/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.h +12 -2
  660. package/ReactCommon/react/runtime/PlatformTimerRegistry.h +10 -0
  661. package/ReactCommon/react/runtime/ReactInstance.cpp +79 -64
  662. package/ReactCommon/react/runtime/hermes/HermesInstance.cpp +0 -89
  663. package/ReactCommon/react/runtime/iostests/MainQueueCoordinatorTests.mm +99 -0
  664. package/ReactCommon/react/runtime/iostests/RCTInstanceTests.mm +244 -0
  665. package/ReactCommon/react/runtime/platform/ios/ReactCommon/ObjCTimerRegistry.h +1 -1
  666. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +47 -30
  667. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTJscInstance.mm +3 -2
  668. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTPerformanceLoggerUtils.mm +3 -2
  669. package/ReactCommon/react/runtime/tests/cxx/ReactInstanceTest.cpp +27 -3
  670. package/ReactCommon/react/runtime/tests/cxx/RuntimeExecutorShutdownTest.cpp +155 -0
  671. package/ReactCommon/react/utils/Telemetry.h +0 -13
  672. package/ReactCommon/react/utils/tests/Base64Tests.cpp +36 -0
  673. package/ReactCommon/reactperflogger/reactperflogger/ReactPerfettoLogger.cpp +0 -1
  674. package/ReactCommon/runtimeexecutor/platform/ios/ReactCommon/RuntimeExecutorSyncUIThreadUtils.mm +21 -38
  675. package/ReactCommon/yoga/Yoga.podspec +1 -1
  676. package/ReactCommon/yoga/yoga/YGEnums.cpp +2 -0
  677. package/ReactCommon/yoga/yoga/YGEnums.h +1 -0
  678. package/ReactCommon/yoga/yoga/YGNode.cpp +27 -0
  679. package/ReactCommon/yoga/yoga/YGNode.h +69 -0
  680. package/ReactCommon/yoga/yoga/YGNodeLayout.h +0 -2
  681. package/ReactCommon/yoga/yoga/algorithm/AbsoluteLayout.cpp +2 -1
  682. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +294 -17
  683. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.h +1 -1
  684. package/ReactCommon/yoga/yoga/config/Config.h +1 -1
  685. package/ReactCommon/yoga/yoga/enums/Errata.h +1 -0
  686. package/ReactCommon/yoga/yoga/node/LayoutResults.h +8 -0
  687. package/ReactCommon/yoga/yoga/node/Node.cpp +32 -0
  688. package/ReactCommon/yoga/yoga/node/Node.h +33 -0
  689. package/changes.json +6 -14
  690. package/cli.js +3 -182
  691. package/flow/bom.js.flow +42 -42
  692. package/flow/cssom.js.flow +21 -21
  693. package/flow/dom.js.flow +128 -128
  694. package/flow/global.js +6 -0
  695. package/gradle/libs.versions.toml +7 -5
  696. package/index.js +53 -86
  697. package/index.js.flow +53 -23
  698. package/package.json +49 -68
  699. package/react-native.config.js +82 -1
  700. package/scripts/cocoapods/fabric.rb +1 -1
  701. package/scripts/cocoapods/jsengine.rb +1 -1
  702. package/scripts/cocoapods/new_architecture.rb +1 -1
  703. package/scripts/cocoapods/rncore.rb +36 -78
  704. package/scripts/cocoapods/rncore_facades.rb +232 -0
  705. package/scripts/cocoapods/rndependencies.rb +64 -3
  706. package/scripts/cocoapods/rndeps_facades.rb +193 -0
  707. package/scripts/cocoapods/spm.rb +78 -11
  708. package/scripts/cocoapods/utils.rb +5 -7
  709. package/scripts/codegen/generate-artifacts-executor/generateSchemaInfos.js +0 -1
  710. package/scripts/codegen/templates/Package.swift.spm-template +97 -0
  711. package/scripts/codegen/templates/ReactCodegen.podspec.template +1 -1
  712. package/scripts/hermes/hermes-utils.js +27 -58
  713. package/scripts/react-native-xcode.sh +20 -0
  714. package/scripts/react_native_pods.rb +71 -21
  715. package/scripts/react_native_pods_utils/script_phases.sh +4 -3
  716. package/scripts/replace-rncore-version.js +57 -86
  717. package/scripts/setup-apple-spm.js +1267 -0
  718. package/scripts/spm/__doc__/rfc-spm-xcframework.md +707 -0
  719. package/scripts/spm/__doc__/spm-autolinking-plugins.md +244 -0
  720. package/scripts/spm/__doc__/spm-header-paths-contract.md +97 -0
  721. package/scripts/spm/__doc__/spm-plugins-assessment.md +128 -0
  722. package/scripts/spm/__doc__/spm-scripts.md +486 -0
  723. package/scripts/spm/autolinking-plugins.js +331 -0
  724. package/scripts/spm/download-spm-artifacts.js +1409 -0
  725. package/scripts/spm/expand-spm-dependencies.js +216 -0
  726. package/scripts/spm/flavored-frameworks.js +1008 -0
  727. package/scripts/spm/generate-spm-autolinking-config.js +221 -0
  728. package/scripts/spm/generate-spm-autolinking.js +1888 -0
  729. package/scripts/spm/generate-spm-package.js +302 -0
  730. package/scripts/spm/generate-spm-xcodeproj.js +2266 -0
  731. package/scripts/spm/read-podspec.js +695 -0
  732. package/scripts/spm/scaffold-package-swift.js +1206 -0
  733. package/scripts/spm/spm-pbxproj.js +654 -0
  734. package/scripts/spm/spm-types.js +520 -0
  735. package/scripts/spm/spm-utils.js +645 -0
  736. package/scripts/spm/sync-spm-autolinking.js +160 -0
  737. package/sdks/.hermesv1version +1 -1
  738. package/sdks/hermes-engine/hermes-engine.podspec +9 -39
  739. package/sdks/hermes-engine/hermes-utils.rb +19 -73
  740. package/sdks/hermes-engine/utils/replace_hermes_version.js +18 -4
  741. package/sdks/hermes-engine/version.properties +1 -2
  742. package/settings.gradle.kts +0 -43
  743. package/src/asset-registry.js +29 -0
  744. package/src/private/animated/NativeAnimatedHelper.js +45 -21
  745. package/src/private/assets/AssetRegistry.js +52 -0
  746. package/src/private/{specs_DEPRECATED/components → components/activityindicator/specs}/ActivityIndicatorViewNativeComponent.js +5 -5
  747. package/src/private/{specs_DEPRECATED/components → components/debuggingoverlay/specs}/DebuggingOverlayNativeComponent.js +8 -8
  748. package/src/private/{specs_DEPRECATED/components → components/drawerlayoutandroid/specs}/AndroidDrawerLayoutNativeComponent.js +8 -8
  749. package/src/private/{specs_DEPRECATED/components → components/inputaccessoryview/specs}/RCTInputAccessoryViewNativeComponent.js +4 -4
  750. package/src/private/{specs_DEPRECATED/components → components/modal/specs}/RCTModalHostViewNativeComponent.js +4 -9
  751. package/src/private/{specs_DEPRECATED/components → components/progressbarandroid/specs}/ProgressBarAndroidNativeComponent.js +5 -5
  752. package/src/private/{specs_DEPRECATED/components → components/refreshcontrol/specs}/AndroidSwipeRefreshLayoutNativeComponent.js +7 -7
  753. package/src/private/{specs_DEPRECATED/components → components/refreshcontrol/specs}/PullToRefreshViewNativeComponent.js +7 -7
  754. package/src/private/components/safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js +2 -2
  755. package/src/private/{specs_DEPRECATED/components → components/safeareaview/specs}/RCTSafeAreaViewNativeComponent.js +3 -3
  756. package/src/private/components/scrollview/HScrollViewNativeComponents.js +1 -1
  757. package/src/private/{specs_DEPRECATED/components → components/scrollview/specs}/AndroidHorizontalScrollContentViewNativeComponent.js +3 -3
  758. package/src/private/{specs_DEPRECATED/components → components/switch/specs}/AndroidSwitchNativeComponent.js +7 -7
  759. package/src/private/{specs_DEPRECATED/components → components/switch/specs}/SwitchNativeComponent.js +10 -7
  760. package/src/private/{specs_DEPRECATED/components → components/unimplementedview/specs}/UnimplementedNativeViewNativeComponent.js +4 -4
  761. package/src/private/components/virtualcollection/Virtual.js +5 -5
  762. package/src/private/components/virtualcollection/VirtualCollectionView.js +2 -6
  763. package/src/private/components/virtualcollection/column/VirtualColumn.js +1 -1
  764. package/src/private/components/virtualcollection/row/VirtualRow.js +1 -1
  765. package/src/private/devsupport/devmenu/elementinspector/Inspector.js +3 -1
  766. package/src/private/devsupport/devmenu/specs/NativeDevMenu.js +4 -4
  767. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsRuntimeSettingsModule.js +4 -2
  768. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsSettingsManager.js +2 -2
  769. package/src/private/featureflags/ReactNativeFeatureFlags.js +46 -70
  770. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +88 -94
  771. package/src/private/renderer/errorhandling/ErrorHandlers.js +2 -2
  772. package/src/private/renderer/events/ReactNativeResponder.js +49 -4
  773. package/src/private/renderer/events/ResponderTouchHistoryStore.js +11 -2
  774. package/src/private/renderer/events/dispatchNativeEvent.js +71 -36
  775. package/src/private/setup/setUpDOM.js +19 -9
  776. package/src/private/setup/setUpIntersectionObserver.js +7 -0
  777. package/src/private/setup/setUpMutationObserver.js +3 -1
  778. package/src/private/specs_DEPRECATED/modules/NativeAccessibilityInfo.js +9 -9
  779. package/src/private/specs_DEPRECATED/modules/NativeAccessibilityManager.js +24 -24
  780. package/src/private/specs_DEPRECATED/modules/NativeActionSheetManager.js +28 -28
  781. package/src/private/specs_DEPRECATED/modules/NativeAlertManager.js +1 -1
  782. package/src/private/specs_DEPRECATED/modules/NativeAnimatedModule.js +45 -25
  783. package/src/private/specs_DEPRECATED/modules/NativeAnimatedTurboModule.js +44 -24
  784. package/src/private/specs_DEPRECATED/modules/NativeAppState.js +4 -4
  785. package/src/private/specs_DEPRECATED/modules/NativeAppearance.js +8 -6
  786. package/src/private/specs_DEPRECATED/modules/NativeBlobModule.js +7 -7
  787. package/src/private/specs_DEPRECATED/modules/NativeClipboard.js +3 -3
  788. package/src/private/specs_DEPRECATED/modules/NativeDevLoadingView.js +2 -2
  789. package/src/private/specs_DEPRECATED/modules/NativeDevSettings.js +11 -11
  790. package/src/private/specs_DEPRECATED/modules/NativeDeviceEventManager.js +1 -1
  791. package/src/private/specs_DEPRECATED/modules/NativeDeviceInfo.js +4 -4
  792. package/src/private/specs_DEPRECATED/modules/NativeDialogManagerAndroid.js +7 -7
  793. package/src/private/specs_DEPRECATED/modules/NativeExceptionsManager.js +4 -4
  794. package/src/private/specs_DEPRECATED/modules/NativeFileReaderModule.js +2 -2
  795. package/src/private/specs_DEPRECATED/modules/NativeFrameRateLogger.js +4 -4
  796. package/src/private/specs_DEPRECATED/modules/NativeHeadlessJsTaskSupport.js +2 -2
  797. package/src/private/specs_DEPRECATED/modules/NativeI18nManager.js +1 -1
  798. package/src/private/specs_DEPRECATED/modules/NativeImageEditor.js +13 -13
  799. package/src/private/specs_DEPRECATED/modules/NativeImageLoaderAndroid.js +9 -6
  800. package/src/private/specs_DEPRECATED/modules/NativeImageLoaderIOS.js +6 -6
  801. package/src/private/specs_DEPRECATED/modules/NativeImageStoreAndroid.js +2 -2
  802. package/src/private/specs_DEPRECATED/modules/NativeImageStoreIOS.js +8 -5
  803. package/src/private/specs_DEPRECATED/modules/NativeIntentAndroid.js +5 -5
  804. package/src/private/specs_DEPRECATED/modules/NativeJSCHeapCapture.js +1 -1
  805. package/src/private/specs_DEPRECATED/modules/NativeKeyboardObserver.js +2 -2
  806. package/src/private/specs_DEPRECATED/modules/NativeLinkingManager.js +6 -6
  807. package/src/private/specs_DEPRECATED/modules/NativeLogBox.js +2 -2
  808. package/src/private/specs_DEPRECATED/modules/NativeModalManager.js +2 -2
  809. package/src/private/specs_DEPRECATED/modules/NativeNetworkingAndroid.js +5 -5
  810. package/src/private/specs_DEPRECATED/modules/NativeNetworkingIOS.js +6 -6
  811. package/src/private/specs_DEPRECATED/modules/NativePermissionsAndroid.js +6 -4
  812. package/src/private/specs_DEPRECATED/modules/NativePlatformConstantsAndroid.js +2 -2
  813. package/src/private/specs_DEPRECATED/modules/NativePlatformConstantsIOS.js +1 -1
  814. package/src/private/specs_DEPRECATED/modules/NativePushNotificationManagerIOS.js +35 -31
  815. package/src/private/specs_DEPRECATED/modules/NativeRedBox.js +2 -2
  816. package/src/private/specs_DEPRECATED/modules/NativeSampleTurboModule.js +24 -24
  817. package/src/private/specs_DEPRECATED/modules/NativeSegmentFetcher.js +2 -2
  818. package/src/private/specs_DEPRECATED/modules/NativeSettingsManager.js +3 -3
  819. package/src/private/specs_DEPRECATED/modules/NativeShareModule.js +2 -2
  820. package/src/private/specs_DEPRECATED/modules/NativeSoundManager.js +1 -1
  821. package/src/private/specs_DEPRECATED/modules/NativeSourceCode.js +1 -1
  822. package/src/private/specs_DEPRECATED/modules/NativeStatusBarManagerAndroid.js +5 -17
  823. package/src/private/specs_DEPRECATED/modules/NativeStatusBarManagerIOS.js +10 -15
  824. package/src/private/specs_DEPRECATED/modules/NativeTiming.js +3 -3
  825. package/src/private/specs_DEPRECATED/modules/NativeToastAndroid.js +4 -4
  826. package/src/private/specs_DEPRECATED/modules/NativeUIManager.js +35 -22
  827. package/src/private/specs_DEPRECATED/modules/NativeVibration.js +4 -4
  828. package/src/private/specs_DEPRECATED/modules/NativeWebSocketModule.js +7 -7
  829. package/src/private/types/HostInstance.js +38 -80
  830. package/src/private/viewtransition/specs/NativeViewTransition.js +6 -4
  831. package/src/private/webapis/dom/abort-api/AbortController.js +92 -0
  832. package/src/private/webapis/dom/abort-api/AbortSignal.js +243 -0
  833. package/src/private/webapis/dom/events/CustomEvent.js +1 -1
  834. package/src/private/webapis/dom/events/Event.js +12 -12
  835. package/src/private/webapis/dom/events/EventTarget.js +146 -37
  836. package/src/private/webapis/dom/events/internals/EventInternals.js +36 -0
  837. package/src/private/webapis/dom/events/internals/EventTargetInternals.js +38 -3
  838. package/src/private/webapis/dom/nodes/ReactNativeDocument.js +11 -0
  839. package/src/private/webapis/dom/nodes/ReactNativeElement.js +105 -4
  840. package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +11 -0
  841. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +9 -0
  842. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +34 -7
  843. package/src/private/webapis/dom/nodes/ReadOnlyText.js +33 -0
  844. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +46 -42
  845. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +12 -0
  846. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js.flow +4 -2
  847. package/src/private/webapis/dom/oldstylecollections/NodeList.js +10 -0
  848. package/src/private/webapis/dom/oldstylecollections/NodeList.js.flow +4 -3
  849. package/src/private/webapis/errors/DOMException.js +50 -50
  850. package/src/private/webapis/geometry/DOMRectList.js +12 -0
  851. package/src/private/webapis/geometry/DOMRectList.js.flow +3 -1
  852. package/src/private/webapis/html/events/MessageEvent.js +3 -3
  853. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +2 -2
  854. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +13 -0
  855. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +3 -7
  856. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +5 -5
  857. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +1 -1
  858. package/src/private/webapis/mutationobserver/MutationObserver.js +7 -7
  859. package/src/private/webapis/mutationobserver/MutationRecord.js +12 -0
  860. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +5 -7
  861. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +5 -5
  862. package/src/private/webapis/performance/EventTiming.js +3 -3
  863. package/src/private/webapis/performance/PerformanceEntry.js +3 -3
  864. package/src/private/webapis/performance/PerformanceObserver.js +4 -4
  865. package/src/private/webapis/performance/ResourceTiming.js +13 -13
  866. package/src/private/webapis/performance/UserTiming.js +3 -3
  867. package/src/private/webapis/performance/internals/Utilities.js +1 -1
  868. package/src/private/webapis/performance/specs/NativePerformance.js +26 -20
  869. package/src/private/webapis/utils/ArrayLikeUtils.js +1 -1
  870. package/src/private/webapis/websockets/events/CloseEvent.js +3 -3
  871. package/src/private/webapis/xhr/events/ProgressEvent.js +3 -3
  872. package/src/react-private-interface.js +145 -0
  873. package/src/react-private-interface.js.flow +48 -0
  874. package/src/setup-env.js +22 -0
  875. package/src/types/globals.d.ts +33 -1
  876. package/src/unstable-internals-do-not-use.d.ts +214 -0
  877. package/src/unstable-internals-do-not-use.js +76 -0
  878. package/third-party-podspecs/ReactNativeDependencies.podspec +2 -2
  879. package/types/index.d.ts +0 -1
  880. package/types/public/DeprecatedPropertiesAlias.d.ts +0 -4
  881. package/types/public/ReactNativeTypes.d.ts +4 -2
  882. package/types_generated/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +26 -31
  883. package/types_generated/Libraries/Alert/Alert.d.ts +44 -7
  884. package/types_generated/Libraries/Animated/AnimatedEvent.d.ts +2 -2
  885. package/types_generated/Libraries/Animated/AnimatedExports.d.ts +2 -2
  886. package/types_generated/Libraries/Animated/AnimatedImplementation.d.ts +107 -3
  887. package/types_generated/Libraries/Animated/Easing.d.ts +5 -4
  888. package/types_generated/Libraries/Animated/animations/Animation.d.ts +7 -7
  889. package/types_generated/Libraries/Animated/animations/DecayAnimation.d.ts +5 -5
  890. package/types_generated/Libraries/Animated/animations/SpringAnimation.d.ts +49 -49
  891. package/types_generated/Libraries/Animated/animations/TimingAnimation.d.ts +13 -13
  892. package/types_generated/Libraries/Animated/components/AnimatedFlatList.d.ts +3 -3
  893. package/types_generated/Libraries/Animated/components/AnimatedSectionList.d.ts +3 -3
  894. package/types_generated/Libraries/Animated/createAnimatedComponent.d.ts +4 -4
  895. package/types_generated/Libraries/Animated/nodes/AnimatedColor.d.ts +2 -2
  896. package/types_generated/Libraries/Animated/nodes/AnimatedInterpolation.d.ts +9 -9
  897. package/types_generated/Libraries/Animated/nodes/AnimatedNode.d.ts +3 -3
  898. package/types_generated/Libraries/AppState/AppState.d.ts +41 -22
  899. package/types_generated/Libraries/BatchedBridge/NativeModules.d.ts +8 -1
  900. package/types_generated/Libraries/Blob/BlobTypes.d.ts +4 -4
  901. package/types_generated/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +37 -46
  902. package/types_generated/Libraries/Components/ActivityIndicator/ActivityIndicator.d.ts +92 -43
  903. package/types_generated/Libraries/Components/Button.d.ts +118 -197
  904. package/types_generated/Libraries/Components/Clipboard/Clipboard.d.ts +6 -1
  905. package/types_generated/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidTypes.d.ts +44 -63
  906. package/types_generated/Libraries/Components/Keyboard/Keyboard.d.ts +30 -61
  907. package/types_generated/Libraries/Components/Keyboard/KeyboardAvoidingView.d.ts +30 -21
  908. package/types_generated/Libraries/Components/Pressable/Pressable.d.ts +41 -17
  909. package/types_generated/Libraries/Components/Pressable/useAndroidRippleForView.d.ts +6 -6
  910. package/types_generated/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.d.ts +5 -5
  911. package/types_generated/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.d.ts +18 -1
  912. package/types_generated/Libraries/Components/RefreshControl/RefreshControl.d.ts +35 -52
  913. package/types_generated/Libraries/Components/SafeAreaView/SafeAreaView.d.ts +9 -11
  914. package/types_generated/Libraries/Components/ScrollView/ScrollView.d.ts +212 -88
  915. package/types_generated/Libraries/Components/ScrollView/ScrollViewStickyHeader.d.ts +4 -4
  916. package/types_generated/Libraries/Components/StatusBar/StatusBar.d.ts +29 -62
  917. package/types_generated/Libraries/Components/Switch/Switch.d.ts +75 -70
  918. package/types_generated/Libraries/Components/TextInput/InputAccessoryView.d.ts +16 -65
  919. package/types_generated/Libraries/Components/TextInput/TextInput.d.ts +118 -3
  920. package/types_generated/Libraries/Components/TextInput/TextInput.flow.d.ts +23 -8
  921. package/types_generated/Libraries/Components/ToastAndroid/ToastAndroid.d.ts +18 -18
  922. package/types_generated/Libraries/Components/Touchable/TouchableHighlight.d.ts +24 -13
  923. package/types_generated/Libraries/Components/Touchable/TouchableNativeFeedback.d.ts +27 -64
  924. package/types_generated/Libraries/Components/Touchable/TouchableOpacity.d.ts +18 -6
  925. package/types_generated/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +28 -28
  926. package/types_generated/Libraries/Components/View/View.d.ts +13 -9
  927. package/types_generated/Libraries/Components/View/ViewAccessibility.d.ts +28 -17
  928. package/types_generated/Libraries/Components/View/ViewNativeComponent.d.ts +1 -2
  929. package/types_generated/Libraries/Components/View/ViewPropTypes.d.ts +75 -24
  930. package/types_generated/Libraries/Core/ExtendedError.d.ts +10 -10
  931. package/types_generated/Libraries/EventEmitter/NativeEventEmitter.d.ts +34 -1
  932. package/types_generated/Libraries/EventEmitter/RCTNativeAppEventEmitter.d.ts +4 -1
  933. package/types_generated/Libraries/Image/AssetSourceResolver.d.ts +2 -13
  934. package/types_generated/Libraries/Image/ImageBackground.d.ts +33 -22
  935. package/types_generated/Libraries/Image/ImageProps.d.ts +201 -251
  936. package/types_generated/Libraries/Image/ImageTypes.flow.d.ts +6 -5
  937. package/types_generated/Libraries/Interaction/PanResponder.d.ts +103 -97
  938. package/types_generated/Libraries/LayoutAnimation/LayoutAnimation.d.ts +18 -7
  939. package/types_generated/Libraries/Linking/Linking.d.ts +28 -20
  940. package/types_generated/Libraries/Lists/FlatList.d.ts +17 -18
  941. package/types_generated/Libraries/Lists/SectionList.d.ts +10 -5
  942. package/types_generated/Libraries/Lists/VirtualizedList.d.ts +3 -1
  943. package/types_generated/Libraries/Lists/VirtualizedSectionList.d.ts +3 -1
  944. package/types_generated/Libraries/LogBox/Data/LogBoxData.d.ts +2 -2
  945. package/types_generated/Libraries/LogBox/Data/LogBoxLog.d.ts +2 -2
  946. package/types_generated/Libraries/LogBox/Data/parseLogBoxLog.d.ts +2 -2
  947. package/types_generated/Libraries/LogBox/LogBox.d.ts +4 -1
  948. package/types_generated/Libraries/Modal/Modal.d.ts +70 -35
  949. package/types_generated/Libraries/Network/FormData.d.ts +5 -5
  950. package/types_generated/Libraries/Performance/Systrace.d.ts +11 -1
  951. package/types_generated/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +31 -21
  952. package/types_generated/Libraries/Pressability/Pressability.d.ts +5 -5
  953. package/types_generated/Libraries/PushNotificationIOS/PushNotificationIOS.d.ts +15 -11
  954. package/types_generated/Libraries/ReactNative/AppRegistry.flow.d.ts +5 -5
  955. package/types_generated/Libraries/ReactNative/AppRegistryImpl.d.ts +56 -9
  956. package/types_generated/Libraries/ReactNative/I18nManager.d.ts +20 -1
  957. package/types_generated/Libraries/ReactNative/IPerformanceLogger.flow.d.ts +5 -5
  958. package/types_generated/Libraries/ReactPrivate/ReactNativePrivateInterface.d.ts +6 -22
  959. package/types_generated/Libraries/Renderer/shims/ReactNativeTypes.d.ts +34 -34
  960. package/types_generated/Libraries/Share/Share.d.ts +36 -39
  961. package/types_generated/Libraries/StyleSheet/PlatformColorValueTypes.d.ts +7 -1
  962. package/types_generated/Libraries/StyleSheet/PlatformColorValueTypesIOS.d.ts +3 -3
  963. package/types_generated/Libraries/StyleSheet/StyleSheetTypes.d.ts +202 -181
  964. package/types_generated/Libraries/StyleSheet/private/_TransformStyle.d.ts +3 -3
  965. package/types_generated/Libraries/Text/Text.d.ts +10 -6
  966. package/types_generated/Libraries/Text/TextProps.d.ts +57 -102
  967. package/types_generated/Libraries/TurboModule/RCTExport.d.ts +2 -2
  968. package/types_generated/Libraries/Types/CoreEventTypes.d.ts +14 -8
  969. package/types_generated/Libraries/Utilities/Appearance.d.ts +25 -13
  970. package/types_generated/Libraries/Utilities/BackHandler.d.ts +17 -1
  971. package/types_generated/Libraries/Utilities/DevSettings.d.ts +9 -2
  972. package/types_generated/Libraries/Utilities/Dimensions.d.ts +19 -13
  973. package/types_generated/Libraries/Utilities/PixelRatio.d.ts +6 -3
  974. package/types_generated/Libraries/Utilities/Platform.d.ts +5 -1
  975. package/types_generated/Libraries/Utilities/PlatformTypes.d.ts +65 -6
  976. package/types_generated/Libraries/Utilities/codegenNativeComponent.d.ts +5 -5
  977. package/types_generated/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.d.ts +2 -2
  978. package/types_generated/Libraries/Utilities/differ/deepDiffer.d.ts +2 -2
  979. package/types_generated/Libraries/Utilities/useColorScheme.d.ts +12 -2
  980. package/types_generated/Libraries/Utilities/useWindowDimensions.d.ts +7 -1
  981. package/types_generated/Libraries/Vibration/Vibration.d.ts +14 -6
  982. package/types_generated/index.d.ts +31 -25
  983. package/types_generated/src/private/assets/AssetRegistry.d.ts +42 -0
  984. package/types_generated/src/private/components/virtualcollection/VirtualCollectionView.d.ts +5 -5
  985. package/types_generated/src/private/components/virtualcollection/column/VirtualColumn.d.ts +3 -3
  986. package/types_generated/src/private/components/virtualcollection/row/VirtualRow.d.ts +3 -3
  987. package/types_generated/src/private/components/virtualview/VirtualView.d.ts +7 -7
  988. package/types_generated/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.d.ts +5 -5
  989. package/types_generated/src/private/components/virtualview/VirtualViewNativeComponent.d.ts +5 -5
  990. package/types_generated/src/private/renderer/events/dispatchNativeEvent.d.ts +26 -0
  991. package/types_generated/src/private/specs_DEPRECATED/modules/NativeAppearance.d.ts +6 -5
  992. package/types_generated/src/private/specs_DEPRECATED/modules/NativeDeviceInfo.d.ts +7 -7
  993. package/types_generated/src/private/specs_DEPRECATED/modules/NativeExceptionsManager.d.ts +5 -5
  994. package/types_generated/src/private/specs_DEPRECATED/modules/NativeUIManager.d.ts +8 -8
  995. package/types_generated/src/private/types/HostComponent.d.ts +3 -3
  996. package/types_generated/src/private/types/HostInstance.d.ts +39 -74
  997. package/types_generated/src/private/webapis/dom/events/CustomEvent.d.ts +2 -2
  998. package/types_generated/src/private/webapis/dom/events/Event.d.ts +4 -4
  999. package/types_generated/src/private/webapis/dom/events/EventTarget.d.ts +8 -8
  1000. package/types_generated/src/private/webapis/dom/nodes/ReactNativeDocument.d.ts +3 -1
  1001. package/types_generated/src/private/webapis/dom/nodes/ReactNativeElement.d.ts +57 -4
  1002. package/types_generated/src/private/webapis/dom/nodes/ReadOnlyCharacterData.d.ts +3 -1
  1003. package/types_generated/src/private/webapis/dom/nodes/ReadOnlyElement.d.ts +3 -1
  1004. package/types_generated/src/private/webapis/dom/nodes/ReadOnlyNode.d.ts +4 -2
  1005. package/types_generated/src/private/webapis/dom/nodes/ReadOnlyText.d.ts +3 -1
  1006. package/types_generated/src/private/webapis/dom/nodes/specs/NativeDOM.d.ts +3 -3
  1007. package/types_generated/src/private/webapis/dom/oldstylecollections/HTMLCollection.d.ts +3 -1
  1008. package/types_generated/src/private/webapis/dom/oldstylecollections/NodeList.d.ts +3 -1
  1009. package/types_generated/src/react-private-interface.d.ts +33 -0
  1010. package/Libraries/AppDelegate/RCTArchConfiguratorProtocol.h +0 -38
  1011. package/Libraries/Image/AssetRegistry.js +0 -14
  1012. package/Libraries/Image/RCTImageShadowView.h +0 -17
  1013. package/Libraries/Image/RCTImageShadowView.mm +0 -28
  1014. package/Libraries/Image/RCTImageView.h +0 -32
  1015. package/Libraries/Image/RCTImageView.mm +0 -508
  1016. package/Libraries/Image/RCTImageViewManager.h +0 -17
  1017. package/Libraries/Image/RCTImageViewManager.mm +0 -115
  1018. package/Libraries/Interaction/InteractionManager.d.ts +0 -87
  1019. package/Libraries/Interaction/InteractionManager.js +0 -189
  1020. package/Libraries/Text/BaseText/RCTBaseTextShadowView.h +0 -35
  1021. package/Libraries/Text/BaseText/RCTBaseTextShadowView.mm +0 -162
  1022. package/Libraries/Text/BaseText/RCTBaseTextViewManager.h +0 -21
  1023. package/Libraries/Text/BaseText/RCTBaseTextViewManager.mm +0 -64
  1024. package/Libraries/Text/RCTTextAttributes.h +0 -107
  1025. package/Libraries/Text/RCTTextAttributes.mm +0 -358
  1026. package/Libraries/Text/RawText/RCTRawTextShadowView.h +0 -23
  1027. package/Libraries/Text/RawText/RCTRawTextShadowView.mm +0 -38
  1028. package/Libraries/Text/RawText/RCTRawTextViewManager.h +0 -21
  1029. package/Libraries/Text/RawText/RCTRawTextViewManager.mm +0 -32
  1030. package/Libraries/Text/Text/RCTTextShadowView.h +0 -33
  1031. package/Libraries/Text/Text/RCTTextShadowView.mm +0 -469
  1032. package/Libraries/Text/Text/RCTTextView.h +0 -34
  1033. package/Libraries/Text/Text/RCTTextView.mm +0 -298
  1034. package/Libraries/Text/Text/RCTTextViewManager.h +0 -19
  1035. package/Libraries/Text/Text/RCTTextViewManager.mm +0 -97
  1036. package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputView.h +0 -21
  1037. package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputView.mm +0 -67
  1038. package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputViewManager.h +0 -21
  1039. package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputViewManager.mm +0 -28
  1040. package/Libraries/Text/TextInput/RCTBaseTextInputShadowView.h +0 -30
  1041. package/Libraries/Text/TextInput/RCTBaseTextInputShadowView.mm +0 -367
  1042. package/Libraries/Text/TextInput/RCTBaseTextInputView.h +0 -68
  1043. package/Libraries/Text/TextInput/RCTBaseTextInputView.mm +0 -849
  1044. package/Libraries/Text/TextInput/RCTBaseTextInputViewManager.h +0 -17
  1045. package/Libraries/Text/TextInput/RCTBaseTextInputViewManager.mm +0 -181
  1046. package/Libraries/Text/TextInput/RCTInputAccessoryShadowView.h +0 -17
  1047. package/Libraries/Text/TextInput/RCTInputAccessoryShadowView.mm +0 -24
  1048. package/Libraries/Text/TextInput/RCTInputAccessoryView.h +0 -22
  1049. package/Libraries/Text/TextInput/RCTInputAccessoryView.mm +0 -82
  1050. package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.h +0 -17
  1051. package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.mm +0 -78
  1052. package/Libraries/Text/TextInput/RCTInputAccessoryViewManager.h +0 -17
  1053. package/Libraries/Text/TextInput/RCTInputAccessoryViewManager.mm +0 -33
  1054. package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputView.h +0 -21
  1055. package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputView.mm +0 -43
  1056. package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputViewManager.h +0 -21
  1057. package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputViewManager.mm +0 -35
  1058. package/Libraries/Text/VirtualText/RCTVirtualTextShadowView.h +0 -17
  1059. package/Libraries/Text/VirtualText/RCTVirtualTextShadowView.mm +0 -42
  1060. package/Libraries/Text/VirtualText/RCTVirtualTextView.h +0 -28
  1061. package/Libraries/Text/VirtualText/RCTVirtualTextViewManager.h +0 -17
  1062. package/Libraries/Text/VirtualText/RCTVirtualTextViewManager.mm +0 -30
  1063. package/Libraries/Utilities/SceneTracker.js +0 -42
  1064. package/Libraries/Wrapper/Example/RCTWrapperExampleView.h +0 -21
  1065. package/Libraries/Wrapper/Example/RCTWrapperExampleView.m +0 -57
  1066. package/Libraries/Wrapper/Example/RCTWrapperExampleViewController.h +0 -21
  1067. package/Libraries/Wrapper/Example/RCTWrapperExampleViewController.m +0 -27
  1068. package/Libraries/Wrapper/Example/RCTWrapperReactRootViewController.h +0 -25
  1069. package/Libraries/Wrapper/Example/RCTWrapperReactRootViewController.m +0 -50
  1070. package/Libraries/Wrapper/Example/RCTWrapperReactRootViewManager.h +0 -23
  1071. package/Libraries/Wrapper/Example/RCTWrapperReactRootViewManager.m +0 -35
  1072. package/Libraries/Wrapper/RCTWrapper.h +0 -73
  1073. package/Libraries/Wrapper/RCTWrapperShadowView.h +0 -27
  1074. package/Libraries/Wrapper/RCTWrapperShadowView.m +0 -138
  1075. package/Libraries/Wrapper/RCTWrapperView.h +0 -42
  1076. package/Libraries/Wrapper/RCTWrapperView.m +0 -99
  1077. package/Libraries/Wrapper/RCTWrapperViewControllerHostingView.h +0 -30
  1078. package/Libraries/Wrapper/RCTWrapperViewControllerHostingView.m +0 -137
  1079. package/Libraries/Wrapper/RCTWrapperViewManager.h +0 -25
  1080. package/Libraries/Wrapper/RCTWrapperViewManager.m +0 -31
  1081. package/React/Base/RCTRootContentView.h +0 -43
  1082. package/React/Base/RCTRootContentView.m +0 -111
  1083. package/React/Base/RCTRootViewInternal.h +0 -28
  1084. package/React/CxxBridge/RCTCxxBridge.mm +0 -1572
  1085. package/React/CxxBridge/RCTJSIExecutorRuntimeInstaller.h +0 -25
  1086. package/React/CxxBridge/RCTJSIExecutorRuntimeInstaller.mm +0 -34
  1087. package/React/CxxBridge/RCTObjcExecutor.h +0 -34
  1088. package/React/CxxBridge/RCTObjcExecutor.mm +0 -150
  1089. package/React/CxxLogUtils/RCTDefaultCxxLogFunction.mm +0 -34
  1090. package/React/CxxModule/DispatchMessageQueueThread.h +0 -50
  1091. package/React/CxxModule/RCTCxxMethod.h +0 -17
  1092. package/React/CxxModule/RCTCxxMethod.mm +0 -147
  1093. package/React/CxxModule/RCTNativeModule.h +0 -34
  1094. package/React/CxxModule/RCTNativeModule.mm +0 -241
  1095. package/React/Fabric/RCTSurfacePresenterBridgeAdapter.mm +0 -205
  1096. package/React/Tests/Text/RCTTextAttributesTest.mm +0 -49
  1097. package/React/Views/RCTActivityIndicatorView.h +0 -16
  1098. package/React/Views/RCTActivityIndicatorView.m +0 -26
  1099. package/React/Views/RCTActivityIndicatorViewManager.h +0 -23
  1100. package/React/Views/RCTActivityIndicatorViewManager.m +0 -65
  1101. package/React/Views/RCTDebuggingOverlayManager.h +0 -17
  1102. package/React/Views/RCTDebuggingOverlayManager.m +0 -68
  1103. package/React/Views/RCTModalHostView.h +0 -64
  1104. package/React/Views/RCTModalHostView.m +0 -264
  1105. package/React/Views/RCTModalHostViewController.m +0 -74
  1106. package/React/Views/RCTModalHostViewManager.m +0 -131
  1107. package/React/Views/RCTModalManager.h +0 -22
  1108. package/React/Views/RCTModalManager.m +0 -46
  1109. package/React/Views/RCTRootShadowView.h +0 -35
  1110. package/React/Views/RCTRootShadowView.m +0 -53
  1111. package/React/Views/RCTShadowView+Internal.h +0 -18
  1112. package/React/Views/RCTShadowView+Internal.m +0 -23
  1113. package/React/Views/RCTSwitch.h +0 -22
  1114. package/React/Views/RCTSwitch.m +0 -24
  1115. package/React/Views/RCTSwitchManager.h +0 -17
  1116. package/React/Views/RCTSwitchManager.m +0 -70
  1117. package/React/Views/RefreshControl/RCTRefreshControl.h +0 -24
  1118. package/React/Views/RefreshControl/RCTRefreshControl.m +0 -230
  1119. package/React/Views/RefreshControl/RCTRefreshControlManager.h +0 -17
  1120. package/React/Views/RefreshControl/RCTRefreshControlManager.m +0 -47
  1121. package/React/Views/SafeAreaView/RCTSafeAreaShadowView.h +0 -21
  1122. package/React/Views/SafeAreaView/RCTSafeAreaShadowView.m +0 -57
  1123. package/React/Views/SafeAreaView/RCTSafeAreaView.h +0 -27
  1124. package/React/Views/SafeAreaView/RCTSafeAreaView.m +0 -79
  1125. package/React/Views/SafeAreaView/RCTSafeAreaViewLocalData.h +0 -25
  1126. package/React/Views/SafeAreaView/RCTSafeAreaViewLocalData.m +0 -25
  1127. package/React/Views/SafeAreaView/RCTSafeAreaViewManager.h +0 -21
  1128. package/React/Views/SafeAreaView/RCTSafeAreaViewManager.m +0 -32
  1129. package/React/Views/ScrollView/RCTScrollContentShadowView.h +0 -19
  1130. package/React/Views/ScrollView/RCTScrollContentShadowView.m +0 -35
  1131. package/React/Views/ScrollView/RCTScrollContentView.h +0 -19
  1132. package/React/Views/ScrollView/RCTScrollContentView.m +0 -36
  1133. package/React/Views/ScrollView/RCTScrollContentViewManager.h +0 -17
  1134. package/React/Views/ScrollView/RCTScrollContentViewManager.m +0 -31
  1135. package/React/Views/ScrollView/RCTScrollView.m +0 -1168
  1136. package/React/Views/ScrollView/RCTScrollViewManager.h +0 -25
  1137. package/React/Views/ScrollView/RCTScrollViewManager.m +0 -202
  1138. package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +0 -251
  1139. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java +0 -315
  1140. package/ReactAndroid/src/main/java/com/facebook/react/common/ClearableSynchronizedPool.kt +0 -51
  1141. package/ReactAndroid/src/main/java/com/facebook/react/fabric/AnimationBackendChoreographer.kt +0 -89
  1142. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java +0 -736
  1143. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +0 -221
  1144. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java +0 -399
  1145. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactZIndexedViewGroup.kt +0 -35
  1146. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +0 -346
  1147. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +0 -666
  1148. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +0 -147
  1149. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupDrawingOrderHelper.kt +0 -113
  1150. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +0 -614
  1151. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +0 -1838
  1152. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollView.java +0 -1646
  1153. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +0 -1638
  1154. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.java +0 -51
  1155. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaBoxSizing.java +0 -33
  1156. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDimension.java +0 -33
  1157. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDisplay.java +0 -37
  1158. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaEdge.java +0 -47
  1159. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaErrata.java +0 -41
  1160. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaExperimentalFeature.java +0 -33
  1161. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaFlexDirection.java +0 -37
  1162. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGridTrackType.java +0 -39
  1163. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGutter.java +0 -35
  1164. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaJustify.java +0 -49
  1165. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaLogLevel.java +0 -45
  1166. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaMeasureMode.java +0 -35
  1167. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +0 -928
  1168. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeType.java +0 -33
  1169. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaOverflow.java +0 -35
  1170. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaPositionType.java +0 -35
  1171. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaUnit.java +0 -43
  1172. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaWrap.java +0 -35
  1173. package/ReactAndroid/src/main/jni/react/fabric/JAnimationBackendChoreographer.cpp +0 -23
  1174. package/ReactAndroid/src/main/jni/react/fabric/JAnimationBackendChoreographer.h +0 -37
  1175. package/ReactCommon/cxxreact/JSIndexedRAMBundle.cpp +0 -135
  1176. package/ReactCommon/cxxreact/JSIndexedRAMBundle.h +0 -72
  1177. package/ReactCommon/hermes/inspector-modern/chrome/ConnectionDemux.cpp +0 -143
  1178. package/ReactCommon/hermes/inspector-modern/chrome/ConnectionDemux.h +0 -55
  1179. package/ReactCommon/hermes/inspector-modern/chrome/Registration.cpp +0 -78
  1180. package/ReactCommon/hermes/inspector-modern/chrome/Registration.h +0 -39
  1181. package/ReactCommon/hermes/inspector-modern/chrome/tests/ConnectionDemuxTests.cpp +0 -148
  1182. package/ReactCommon/react/nativemodule/samples/platform/android/NativeSampleTurboModuleSpec.java +0 -168
  1183. package/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp +0 -416
  1184. package/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.h +0 -31
  1185. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTNativeSampleTurboModuleSpec.h +0 -134
  1186. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTNativeSampleTurboModuleSpec.mm +0 -290
  1187. package/ReactCommon/react/renderer/core/RawPropsKey.cpp +0 -62
  1188. package/ReactCommon/react/renderer/core/RawPropsKey.h +0 -39
  1189. package/ReactCommon/react/renderer/mounting/internal/DiffMap.h +0 -170
  1190. package/ReactCommon/react/renderer/mounting/internal/LongestIncreasingSubsequence.h +0 -95
  1191. package/ReactCommon/react/renderer/mounting/internal/TinyMap.h +0 -147
  1192. package/ReactCommon/react/renderer/mounting/tests/LongestIncreasingSubsequenceTest.cpp +0 -154
  1193. package/interface.js +0 -21
  1194. package/jest-preset.js +0 -26
  1195. package/rn-get-polyfills.js +0 -13
  1196. package/sdks/.hermesversion +0 -1
  1197. package/src/private/components/virtualcollection/debug/FlingItemOverlay.js +0 -13
  1198. package/types/tsconfig.json +0 -15
  1199. package/types_generated/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.d.ts +0 -14
  1200. package/types_generated/Libraries/Components/ScrollView/ScrollViewNativeComponent.d.ts +0 -21
  1201. package/types_generated/Libraries/Components/ScrollView/ScrollViewNativeComponentType.d.ts +0 -134
  1202. package/types_generated/Libraries/Components/Switch/AndroidSwitchNativeComponent.d.ts +0 -14
  1203. package/types_generated/Libraries/Components/Switch/SwitchNativeComponent.d.ts +0 -14
  1204. package/types_generated/Libraries/Components/Touchable/Touchable.d.ts +0 -262
  1205. package/types_generated/Libraries/Interaction/InteractionManager.d.ts +0 -117
  1206. package/types_generated/Libraries/NativeModules/specs/NativeDialogManagerAndroid.d.ts +0 -17
  1207. package/types_generated/src/private/specs_DEPRECATED/components/AndroidSwitchNativeComponent.d.ts +0 -53
  1208. package/types_generated/src/private/specs_DEPRECATED/components/ProgressBarAndroidNativeComponent.d.ts +0 -36
  1209. package/types_generated/src/private/specs_DEPRECATED/components/SwitchNativeComponent.d.ts +0 -51
  1210. package/types_generated/src/private/specs_DEPRECATED/modules/NativeDialogManagerAndroid.d.ts +0 -37
  1211. package/types_generated/tsconfig.test.json +0 -16
  1212. /package/ReactCommon/{cxxreact → react/utils}/MoveWrapper.h +0 -0
@@ -0,0 +1,1888 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict-local
8
+ * @format
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ /*:: import type {
14
+ AggregatorInput,
15
+ AutolinkedDep,
16
+ AutolinkingArgs,
17
+ DiscoveredPlugin,
18
+ NpmDepRef,
19
+ PluginFlavoredFramework,
20
+ PluginPackageDep,
21
+ PluginProductDep,
22
+ ReactDescriptor,
23
+ RawAutolinkingJson,
24
+ SpmModuleConfig,
25
+ SpmTarget,
26
+ SynthPackageSpec,
27
+ TargetEntry,
28
+ } from './spm-types'; */
29
+
30
+ /**
31
+ * generate-spm-autolinking.js – Generates autolinked/Package.swift, the SPM
32
+ * equivalent of CocoaPods' `use_native_modules!`.
33
+ *
34
+ * Usage:
35
+ * node generate-spm-autolinking.js [options]
36
+ *
37
+ * Options:
38
+ * --app-root <path> Path to the app directory (default: cwd)
39
+ * --react-native-root <path> Path to react-native package root
40
+ * --autolinking-json <path> Path to autolinking.json (default: build/generated/autolinking/autolinking.json)
41
+ * --output <path> Output dir (default: autolinked/)
42
+ *
43
+ * Reads:
44
+ * - build/generated/autolinking/autolinking.json (produced by react-native codegen)
45
+ * - react-native.config.js (for spm.modules extra modules, optional)
46
+ *
47
+ * Generates:
48
+ * - autolinked/Package.swift
49
+ *
50
+ * V1 behavior:
51
+ * - Processes npm-package native modules with platforms.ios != null from autolinking.json
52
+ * - Also processes any `spm.modules` entries from react-native.config.js for local modules
53
+ * - Targets resolve React headers via SPM product dependencies (no flags)
54
+ *
55
+ * V2 behavior (future):
56
+ * - npm packages with their own Package.swift use .package(url: ...) instead of inline targets
57
+ */
58
+
59
+ const {discoverPlugins, invokePlugins} = require('./autolinking-plugins');
60
+ const {
61
+ defaultReadConfig,
62
+ defaultResolveDep,
63
+ expandSpmDependencies,
64
+ } = require('./expand-spm-dependencies');
65
+ const {readPodspec} = require('./read-podspec');
66
+ const {
67
+ RemoteVersionError,
68
+ findProjectRoot,
69
+ makeLogger,
70
+ remotePackageConfig,
71
+ toSwiftName,
72
+ } = require('./spm-utils');
73
+ const fs = require('fs');
74
+ const path = require('path');
75
+ const yargs = require('yargs');
76
+
77
+ const {log, warn} = makeLogger('generate-spm-autolinking');
78
+
79
+ // Targets compiling against React get all headers via SPM product
80
+ // dependencies — no search-path flags: the React module from the invariant
81
+ // ReactHeaders Clang target, every other RN namespace from ReactNativeHeaders
82
+ // binaryTarget (pure-RN), the third-party deps namespaces (folly/glog/
83
+ // boost/...) from the ReactNativeDependenciesHeaders sidecar, and the app's
84
+ // generated headers from the ReactAppHeaders target in the codegen package.
85
+ //
86
+ // Remote mode (remotePackageConfig): the ReactNative-family products come
87
+ // from the single remote package identity instead of the local path-based
88
+ // package, so app + every library unify on one SPM-resolved version.
89
+ let remoteCfg /*: ?{url: string, version: string, identity: string} */ = null;
90
+
91
+ function reactNativePackageLabel() /*: string */ {
92
+ return remoteCfg != null ? remoteCfg.identity : 'ReactNative';
93
+ }
94
+ function reactNativePackageDecl(localDecl /*: string */) /*: string */ {
95
+ return remoteCfg != null
96
+ ? `.package(url: "${remoteCfg.url}", exact: "${remoteCfg.version}")`
97
+ : localDecl;
98
+ }
99
+ // The React product set — single source of truth shared by reactProductDeps()
100
+ // (the emitted string) and the plugin ReactDescriptor. The invariant ReactNative
101
+ // products come from the RN package (identity varies local vs remote);
102
+ // ReactAppHeaders is in the separate, per-app React-GeneratedCode package
103
+ // (easy to miss when hand-rolling — hence exposing it to plugins).
104
+ function reactProducts() /*: Array<{name: string, package: string}> */ {
105
+ const rn = reactNativePackageLabel();
106
+ return [
107
+ {name: 'ReactHeaders', package: rn},
108
+ {name: 'ReactNativeHeaders', package: rn},
109
+ {name: 'ReactNativeDependenciesHeaders', package: rn},
110
+ {name: 'ReactAppHeaders', package: 'React-GeneratedCode'},
111
+ ];
112
+ }
113
+ function reactProductDeps() /*: string */ {
114
+ return reactProducts()
115
+ .map(p => `.product(name: "${p.name}", package: "${p.package}")`)
116
+ .join(', ');
117
+ }
118
+
119
+ // Structured React descriptor handed to autolinking plugins: how to depend on
120
+ // React through one source of truth, so a plugin's own Package.swift doesn't
121
+ // re-derive RN's package path / identity / product names.
122
+ //
123
+ // `packageRef` is local or remote (distinguished by which keys are present):
124
+ // - local: {name, path (ABSOLUTE), relPath (relative to outputDir)}
125
+ // - remote: {name, url, version}
126
+ // The canonical `path` is ABSOLUTE because a plugin may write its manifests in
127
+ // arbitrary subdirs of outputDir, for which an outputDir-relative path would be
128
+ // wrong; the generated manifests are gitignored + regenerated every sync, so an
129
+ // absolute path carries no portability cost. `relPath` is a convenience for the
130
+ // common case. `products` derives from the SAME reactProducts() RN wires into
131
+ // its own autolinked targets (parity: a plugin's target gets exactly RN's React
132
+ // surface), filtered to only products whose package is resolvable this run —
133
+ // the invariant is that any listed product can be depended on without guarding.
134
+ // Returns null when there is no resolvable React dependency.
135
+ function reactDescriptor(
136
+ absXcframeworks /*: ?string */,
137
+ xcframeworksRelPath /*: ?string */,
138
+ codegenPackageExists /*: boolean */,
139
+ ) /*: ?ReactDescriptor */ {
140
+ let packageRef;
141
+ if (remoteCfg != null) {
142
+ packageRef = {
143
+ name: remoteCfg.identity,
144
+ url: remoteCfg.url,
145
+ version: remoteCfg.version,
146
+ };
147
+ } else if (absXcframeworks != null) {
148
+ packageRef = {
149
+ name: 'ReactNative',
150
+ path: toPosix(absXcframeworks),
151
+ relPath:
152
+ xcframeworksRelPath != null ? toPosix(xcframeworksRelPath) : undefined,
153
+ };
154
+ } else {
155
+ return null;
156
+ }
157
+ const products = reactProducts().filter(
158
+ p => p.package !== 'React-GeneratedCode' || codegenPackageExists,
159
+ );
160
+ return {packageRef, products};
161
+ }
162
+
163
+ // Normalize a (possibly Windows) path to posix separators for embedding in
164
+ // a Package.swift `.package(path:)` literal — SPM expects forward slashes.
165
+ function toPosix(p /*: string */) /*: string */ {
166
+ return p.split(path.sep).join('/');
167
+ }
168
+
169
+ function parseArgs(argv /*: Array<string> */) /*: AutolinkingArgs */ {
170
+ const parsed = yargs(argv)
171
+ .option('app-root', {
172
+ type: 'string',
173
+ default: process.cwd(),
174
+ describe: 'Path to the app directory',
175
+ })
176
+ .option('react-native-root', {
177
+ type: 'string',
178
+ describe: 'Path to react-native package root',
179
+ })
180
+ .option('autolinking-json', {
181
+ type: 'string',
182
+ describe:
183
+ 'Path to autolinking.json (default: build/generated/autolinking/autolinking.json)',
184
+ })
185
+ .option('output', {
186
+ type: 'string',
187
+ describe: 'Output dir (default: autolinked/)',
188
+ })
189
+ .option('xcframeworks-path', {
190
+ type: 'string',
191
+ describe:
192
+ 'Path to the xcframeworks sub-package (absolute or relative to appRoot)',
193
+ })
194
+ .usage(
195
+ 'Usage: $0 [options]\n\nGenerates autolinked/Package.swift for SPM autolinking.',
196
+ )
197
+ .help()
198
+ .parseSync();
199
+
200
+ return {
201
+ appRoot: parsed['app-root'],
202
+ reactNativeRoot: parsed['react-native-root'] ?? null,
203
+ autolinkingJson: parsed['autolinking-json'] ?? null,
204
+ output: parsed.output ?? null,
205
+ xcframeworksPath: parsed['xcframeworks-path'] ?? null,
206
+ };
207
+ }
208
+
209
+ /**
210
+ * Reads autolinking.json and returns dependencies with iOS platform support.
211
+ */
212
+ function readAutolinkingJson(
213
+ filePath /*: string */,
214
+ ) /*: RawAutolinkingJson | null */ {
215
+ if (!fs.existsSync(filePath)) {
216
+ return null;
217
+ }
218
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
219
+ }
220
+
221
+ /**
222
+ * Attempts to read react-native.config.js to find spm.modules entries.
223
+ * These are extra modules not discoverable via autolinking.json.
224
+ *
225
+ * Expected structure in react-native.config.js:
226
+ * module.exports = {
227
+ * ...
228
+ * spm: {
229
+ * modules: [
230
+ * {
231
+ * name: "MyNativeModule",
232
+ * path: "ios/MyNativeModule", // relative to appRoot
233
+ * exclude: ["*.js", "*.podspec"], // optional
234
+ * publicHeadersPath: ".", // optional
235
+ * }
236
+ * ]
237
+ * }
238
+ * }
239
+ */
240
+ function readSpmModulesFromConfig(
241
+ appRoot /*: string */,
242
+ ) /*: Array<SpmModuleConfig> */ {
243
+ const configPath = path.join(appRoot, 'react-native.config.js');
244
+ if (!fs.existsSync(configPath)) {
245
+ return [];
246
+ }
247
+ try {
248
+ // $FlowFixMe[unsupported-syntax] dynamic require by computed path
249
+ const config = require(configPath);
250
+ return config.spm?.modules ?? [];
251
+ } catch (e) {
252
+ // Config might use Ruby interop or other patterns – skip
253
+ return [];
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Reads the app's `spm.denyPlugins` — npm names of autolinking plugins to
259
+ * skip. The escape hatch for the transitive plugin discovery (an app opts a
260
+ * framework's plugin OUT); no allowlist is required.
261
+ */
262
+ function readDenyPluginsFromConfig(appRoot /*: string */) /*: Array<string> */ {
263
+ const configPath = path.join(appRoot, 'react-native.config.js');
264
+ if (!fs.existsSync(configPath)) {
265
+ return [];
266
+ }
267
+ try {
268
+ // $FlowFixMe[unsupported-syntax] dynamic require by computed path
269
+ const config = require(configPath);
270
+ return config.spm?.denyPlugins ?? [];
271
+ } catch (e) {
272
+ return [];
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Returns "." if the source directory has .h/.hpp files directly at its root
278
+ * AND no subdirectories exist at that root (adjacent subdirectories would cause
279
+ * Clang to reject the umbrella header).
280
+ * Returns null otherwise.
281
+ */
282
+ function inferPublicHeadersPath(sourcePath /*: string */) /*: string | null */ {
283
+ if (!fs.existsSync(sourcePath)) return null;
284
+ const entries /*: Array<{name: string, isDirectory(): boolean, isFile(): boolean, isSymbolicLink(): boolean}> */ =
285
+ // $FlowFixMe[incompatible-type] Dirent typing
286
+ fs.readdirSync(sourcePath, {withFileTypes: true});
287
+ const hasHeaders = entries.some(
288
+ e =>
289
+ (e.isFile() || e.isSymbolicLink()) &&
290
+ (e.name.endsWith('.h') || e.name.endsWith('.hpp')),
291
+ );
292
+ const hasSubdirs = entries.some(e => e.isDirectory());
293
+ // Only use "." if headers at root AND no adjacent subdirectories.
294
+ // If both headers and subdirectories exist, Clang rejects the module map
295
+ // (umbrella header + adjacent directories = error).
296
+ return hasHeaders && !hasSubdirs ? '.' : null;
297
+ }
298
+
299
+ /*::
300
+ type ExtensionFilter = ReadonlySet<string>;
301
+ */
302
+
303
+ const HEADER_EXTENSIONS /*: ExtensionFilter */ = new Set(['.h', '.hpp']);
304
+ const IMPL_EXTENSIONS /*: ExtensionFilter */ = new Set([
305
+ '.m',
306
+ '.mm',
307
+ '.c',
308
+ '.cpp',
309
+ '.swift',
310
+ ]);
311
+ const ALL_SOURCE_EXTENSIONS /*: ExtensionFilter */ = new Set([
312
+ ...HEADER_EXTENSIONS,
313
+ ...IMPL_EXTENSIONS,
314
+ ]);
315
+
316
+ // Directory names whose contents should never be included in an SPM target —
317
+ // test fixtures, Android sources, vendored modules. Shared between the source
318
+ // walker and the header linker so they agree on what to skip.
319
+ const SKIP_DIRS_DEFAULT /*: ReadonlySet<string> */ = new Set([
320
+ 'android',
321
+ 'tests',
322
+ '__tests__',
323
+ '__mocks__',
324
+ 'test',
325
+ 'jest',
326
+ 'node_modules',
327
+ ]);
328
+
329
+ // Name of the dir-symlink inside each wrapper that points at the dep's real
330
+ // source dir. With target.path = "." (the wrapper), SPM resolves source paths
331
+ // like "<WRAPPER_ROOT_NAME>/Foo.mm" by following this link.
332
+ const WRAPPER_ROOT_NAME = 'root';
333
+
334
+ // The config-gated C++ defines the prebuilt React.framework is built with (see
335
+ // packages/react-native/Package.swift). Autolinked Fabric C++ must compile with
336
+ // the same NDEBUG state, else DebugStringConvertible's vtable / ShadowNode
337
+ // layout diverges from a Release React.framework and the link fails.
338
+ const REACT_CXX_CONFIG_DEFINES = [
339
+ '.define("DEBUG", .when(configuration: .debug))',
340
+ '.define("NDEBUG", .when(configuration: .release))',
341
+ ];
342
+
343
+ // Marker the autolinker stamps onto every synth Package.swift it writes.
344
+ // Files lacking this marker are treated as user-managed (self-managed) and
345
+ // are referenced directly rather than wrapped — see findSelfManagedPackageDir.
346
+ const AUTOGEN_MARKER =
347
+ '// AUTO-GENERATED by scripts/generate-spm-autolinking.js';
348
+
349
+ /**
350
+ * A dep is "self-managed" when it ships a hand-written Package.swift
351
+ * (i.e. one that lacks our AUTOGEN_MARKER). The autolinker skips wrapping
352
+ * it and references the manifest's directory directly — useful for
353
+ * libraries that want to ship a real SPM manifest and have full control
354
+ * over their target settings.
355
+ *
356
+ * Two layouts are recognized:
357
+ * 1. <dep>/Package.swift — manifest at the npm-package root
358
+ * 2. <dep>/ios/Package.swift — manifest co-located with ObjC
359
+ * sources, keeping the npm-package
360
+ * root free of SPM artifacts
361
+ * (.build/, .swiftpm/, Package.resolved)
362
+ *
363
+ * Returns the directory that contains the hand-authored manifest, or null
364
+ * when no candidate exists. That directory is what the aggregator hands to
365
+ * SPM as `.package(path:)` — for layout 2 that means `<dep>/ios`.
366
+ */
367
+ function findSelfManagedPackageDir(absSource /*: string */) /*: ?string */ {
368
+ for (const sub of ['', 'ios']) {
369
+ const dir = sub === '' ? absSource : path.join(absSource, sub);
370
+ try {
371
+ const content = fs.readFileSync(path.join(dir, 'Package.swift'), 'utf8');
372
+ if (!content.includes(AUTOGEN_MARKER)) {
373
+ return dir;
374
+ }
375
+ } catch {
376
+ // candidate does not exist; try the next one
377
+ }
378
+ }
379
+ return null;
380
+ }
381
+
382
+ /**
383
+ * Does this dep ship a CocoaPods podspec? (Checked at the dep root and under
384
+ * ios/.) A missing manifest is auto-scaffoldable only when a podspec exists —
385
+ * the scaffolder translates the podspec into a Package.swift.
386
+ */
387
+ function hasPodspec(absSource /*: string */) /*: boolean */ {
388
+ for (const sub of ['', 'ios']) {
389
+ const dir = sub === '' ? absSource : path.join(absSource, sub);
390
+ try {
391
+ if (
392
+ fs
393
+ .readdirSync(dir)
394
+ .some(e => e.endsWith('.podspec') && !e.startsWith('.spm-scaffold-'))
395
+ ) {
396
+ return true;
397
+ }
398
+ } catch {
399
+ // dir does not exist; try the next candidate
400
+ }
401
+ }
402
+ return false;
403
+ }
404
+
405
+ /**
406
+ * True when a dep has BOTH Swift and C-family (.m/.mm/.c/.cpp) sources. SPM
407
+ * cannot compile mixed-language sources in a single target, and RN libs that
408
+ * mix them are typically bidirectionally coupled (ObjC↔Swift) — which can't be
409
+ * split into two targets either (it would be a circular dependency). So such a
410
+ * dep is unsupportable by the scaffolder; we surface a clear, distinct error
411
+ * instead of emitting a manifest that fails with a cryptic SPM resolve error.
412
+ * Heuristic filesystem scan (bounded depth; skips examples/tests/build noise).
413
+ */
414
+ function hasMixedLanguageSources(absSource /*: string */) /*: boolean */ {
415
+ const SKIP /*: Set<string> */ = new Set([
416
+ 'node_modules',
417
+ 'Pods',
418
+ 'build',
419
+ '.git',
420
+ '__tests__',
421
+ 'example',
422
+ 'Example',
423
+ 'examples',
424
+ ]);
425
+ let hasSwift = false;
426
+ let hasClang = false;
427
+ const walk = (dir /*: string */, depth /*: number */) => {
428
+ if (depth > 6 || (hasSwift && hasClang)) return;
429
+ let entries /*: Array<{name: string, isDirectory(): boolean}> */ = [];
430
+ try {
431
+ // $FlowFixMe[incompatible-type] Dirent typing
432
+ entries = fs.readdirSync(dir, {withFileTypes: true});
433
+ } catch {
434
+ return;
435
+ }
436
+ for (const e of entries) {
437
+ // $FlowFixMe[incompatible-type] Dirent.name is string|Buffer in stubs
438
+ const name /*: string */ = e.name;
439
+ if (e.isDirectory()) {
440
+ if (!name.startsWith('.') && !SKIP.has(name)) {
441
+ walk(path.join(dir, name), depth + 1);
442
+ }
443
+ } else if (/\.swift$/i.test(name)) {
444
+ hasSwift = true;
445
+ } else if (/\.(mm?|c|cc|cpp|cxx)$/i.test(name)) {
446
+ hasClang = true;
447
+ }
448
+ if (hasSwift && hasClang) return;
449
+ }
450
+ };
451
+ walk(absSource, 0);
452
+ return hasSwift && hasClang;
453
+ }
454
+
455
+ /**
456
+ * Error thrown when one or more autolinked community npm deps have no Swift
457
+ * Package Manager manifest (neither a shipped Package.swift nor a scaffolded
458
+ * one). The autolinker no longer silently synthesizes a manifest for these —
459
+ * that hid the gap and duplicated the scaffolder. Carries the dep list so the
460
+ * CLI can surface a precise, actionable message and set a distinct exit code
461
+ * (the Xcode build phase keys off it to fail the build).
462
+ */
463
+ class MissingManifestError extends Error {
464
+ /*:: missingManifests: Array<{name: string, npmName: string, hasPodspec: boolean, mixed?: boolean}>; */
465
+ constructor(
466
+ deps /*: Array<{name: string, npmName: string, hasPodspec: boolean, mixed?: boolean}> */,
467
+ ) {
468
+ super(
469
+ `${deps.length} autolinked native module(s) have no Package.swift. ` +
470
+ 'Run `npx react-native spm scaffold` to generate them.',
471
+ );
472
+ this.name = 'MissingManifestError';
473
+ this.missingManifests = deps;
474
+ }
475
+ }
476
+
477
+ /**
478
+ * Prints one `error:`-prefixed line per missing-manifest dep so Xcode surfaces
479
+ * each as a build error (Xcode parses lines beginning with `error: `), then
480
+ * returns the MissingManifestError to throw. Kept together so the message and
481
+ * the thrown error never drift.
482
+ */
483
+ function reportMissingManifests(
484
+ deps /*: Array<{name: string, npmName: string, hasPodspec: boolean, mixed?: boolean}> */,
485
+ ) /*: MissingManifestError */ {
486
+ for (const d of deps) {
487
+ if (d.mixed === true) {
488
+ console.error(
489
+ `error: "${d.npmName}" has mixed Swift + Objective-C/C++ sources, which Swift Package Manager cannot compile in a single target (and its Swift↔ObjC interop typically can't be split into two targets without a circular dependency).\n` +
490
+ ` • Opt it out of SPM autolinking in your app's react-native.config.js:\n` +
491
+ ` module.exports = { dependencies: { '${d.npmName}': { platforms: { ios: null } } } };\n` +
492
+ ` • Or consume ${d.npmName} as a prebuilt binary (xcframework) instead.`,
493
+ );
494
+ continue;
495
+ }
496
+ if (d.hasPodspec) {
497
+ console.error(
498
+ `error: Package.swift is missing for library "${d.npmName}" — it ships no Swift Package Manager support.\n` +
499
+ ` 1. Run \`npx react-native spm scaffold\` to generate a Package.swift for ${d.npmName}.\n` +
500
+ ` 2. Persist it with a patch: \`npx patch-package ${d.npmName}\`, and commit the patch (node_modules is not committed).\n` +
501
+ ` 3. Ask ${d.npmName}'s maintainer to ship a Package.swift upstream (or contribute one).\n` +
502
+ ' 4. Without a committed patch, this same error returns whenever node_modules is reset (fresh install / CI).',
503
+ );
504
+ } else {
505
+ console.error(
506
+ `error: Package.swift is missing for library "${d.npmName}", and it ships no podspec so it cannot be scaffolded automatically.\n` +
507
+ ` • It needs Swift Package Manager support added manually — ask ${d.npmName}'s maintainer to ship a Package.swift upstream (or contribute one).`,
508
+ );
509
+ }
510
+ }
511
+ return new MissingManifestError(deps);
512
+ }
513
+
514
+ /**
515
+ * Mirrors every header file under `srcDir` as a relative symlink at the same
516
+ * relative location under `destDir`. Used for the centralized cross-package
517
+ * headers tree at `<outputDir>/headers/<SwiftName>/` so consumers can resolve
518
+ * `#import <SwiftName/Header.h>` via a single `-I <outputDir>/headers` flag.
519
+ *
520
+ * Idempotent: existing symlinks pointing at the right target are left alone;
521
+ * stale entries are pruned. Header symlinks here are inert to Xcode (it
522
+ * doesn't navigate them as editable source — they're compiler-only).
523
+ */
524
+ function linkHeaderTree(
525
+ srcDir /*: string */,
526
+ destDir /*: string */,
527
+ skipDirNames /*: Set<string> */ = new Set(),
528
+ ) /*: void */ {
529
+ if (!srcDir || !path.isAbsolute(srcDir)) {
530
+ throw new Error(
531
+ `linkHeaderTree: srcDir must be a non-empty absolute path, got: "${srcDir}"`,
532
+ );
533
+ }
534
+ if (!destDir || !path.isAbsolute(destDir)) {
535
+ throw new Error(
536
+ `linkHeaderTree: destDir must be a non-empty absolute path, got: "${destDir}"`,
537
+ );
538
+ }
539
+ if (!fs.existsSync(srcDir)) {
540
+ return;
541
+ }
542
+
543
+ /*:: type HeaderEntry = {relSrc: string, absSrc: string}; */
544
+ const headers /*: Array<HeaderEntry> */ = [];
545
+ function collect(dir /*: string */, relBase /*: string */) /*: void */ {
546
+ const entries /*: Array<{name: string, isDirectory(): boolean, isFile(): boolean}> */ =
547
+ // $FlowFixMe[incompatible-type] Dirent typing
548
+ fs.readdirSync(dir, {withFileTypes: true});
549
+ for (const entry of entries) {
550
+ const {name} = entry;
551
+ if (entry.isDirectory()) {
552
+ if (SKIP_DIRS_DEFAULT.has(name) || skipDirNames.has(name)) continue;
553
+ collect(path.join(dir, name), path.join(relBase, name));
554
+ } else if (entry.isFile() && HEADER_EXTENSIONS.has(path.extname(name))) {
555
+ headers.push({
556
+ relSrc: path.join(relBase, name),
557
+ absSrc: path.join(dir, name),
558
+ });
559
+ }
560
+ }
561
+ }
562
+ collect(srcDir, '');
563
+
564
+ if (headers.length === 0) {
565
+ try {
566
+ if (fs.lstatSync(destDir).isDirectory()) {
567
+ fs.rmSync(destDir, {recursive: true, force: true});
568
+ }
569
+ } catch {
570
+ // destDir does not exist – fine
571
+ }
572
+ return;
573
+ }
574
+
575
+ fs.mkdirSync(destDir, {recursive: true});
576
+
577
+ const expected /*: Set<string> */ = new Set();
578
+ for (const {relSrc, absSrc} of headers) {
579
+ const linkPath = path.join(destDir, relSrc);
580
+ expected.add(relSrc);
581
+ fs.mkdirSync(path.dirname(linkPath), {recursive: true});
582
+ const desiredTarget = path.relative(path.dirname(linkPath), absSrc);
583
+ try {
584
+ const existing = fs.lstatSync(linkPath);
585
+ if (
586
+ existing.isSymbolicLink() &&
587
+ fs.readlinkSync(linkPath) === desiredTarget
588
+ ) {
589
+ continue;
590
+ }
591
+ fs.unlinkSync(linkPath);
592
+ } catch {
593
+ // nothing to remove
594
+ }
595
+ fs.symlinkSync(desiredTarget, linkPath);
596
+ }
597
+
598
+ // Prune stale entries: walk destDir and delete anything not in `expected`.
599
+ function pruneWalk(dir /*: string */, relBase /*: string */) /*: void */ {
600
+ if (!fs.existsSync(dir)) return;
601
+ const entries /*: Array<{name: string, isDirectory(): boolean, isFile(): boolean, isSymbolicLink(): boolean}> */ =
602
+ // $FlowFixMe[incompatible-type] Dirent typing
603
+ fs.readdirSync(dir, {withFileTypes: true});
604
+ for (const entry of entries) {
605
+ const rel = path.join(relBase, entry.name);
606
+ const abs = path.join(dir, entry.name);
607
+ if (entry.isDirectory()) {
608
+ pruneWalk(abs, rel);
609
+ if (fs.readdirSync(abs).length === 0) {
610
+ fs.rmdirSync(abs);
611
+ }
612
+ } else {
613
+ if (!expected.has(rel)) {
614
+ fs.unlinkSync(abs);
615
+ }
616
+ }
617
+ }
618
+ }
619
+ pruneWalk(destDir, '');
620
+ }
621
+
622
+ /**
623
+ * Searches sourcePath for a PrivacyInfo.xcprivacy file (at root or one level deep).
624
+ * Returns the relative path from sourcePath if found, null otherwise.
625
+ */
626
+ function findPrivacyManifest(sourcePath /*: string */) /*: string | null */ {
627
+ if (!fs.existsSync(sourcePath)) return null;
628
+ // Check root level
629
+ if (fs.existsSync(path.join(sourcePath, 'PrivacyInfo.xcprivacy'))) {
630
+ return 'PrivacyInfo.xcprivacy';
631
+ }
632
+ // Check one level deep (e.g. ios/PrivacyInfo.xcprivacy)
633
+ const entries /*: Array<{name: string, isDirectory(): boolean}> */ =
634
+ // $FlowFixMe[incompatible-type] Dirent typing
635
+ fs.readdirSync(sourcePath, {withFileTypes: true});
636
+ for (const entry of entries) {
637
+ if (entry.isDirectory()) {
638
+ const nested = path.join(sourcePath, entry.name, 'PrivacyInfo.xcprivacy');
639
+ if (fs.existsSync(nested)) {
640
+ return path.join(entry.name, 'PrivacyInfo.xcprivacy');
641
+ }
642
+ }
643
+ }
644
+ return null;
645
+ }
646
+
647
+ /**
648
+ * Recursively yields forward-slash paths (relative to sourcePath) for every
649
+ * regular file under sourcePath, skipping directories whose name is in
650
+ * SKIP_DIRS_DEFAULT. Used as the building block for both the auto-discovery
651
+ * (collectSpmSources) and explicit-glob (expandSpmSourceGlobs) paths so they
652
+ * agree on what's a candidate before extension/glob filtering applies.
653
+ */
654
+ function walkSourceFiles(sourcePath /*: string */) /*: Array<string> */ {
655
+ const out /*: Array<string> */ = [];
656
+ if (!fs.existsSync(sourcePath)) {
657
+ return out;
658
+ }
659
+ function walk(dir /*: string */, rel /*: string */) /*: void */ {
660
+ const entries /*: Array<{name: string, isDirectory(): boolean, isFile(): boolean, isSymbolicLink(): boolean}> */ =
661
+ // $FlowFixMe[incompatible-type] Dirent typing
662
+ fs.readdirSync(dir, {withFileTypes: true});
663
+ for (const entry of entries) {
664
+ const {name} = entry;
665
+ const childRel = rel === '' ? name : `${rel}/${name}`;
666
+ if (entry.isDirectory()) {
667
+ if (SKIP_DIRS_DEFAULT.has(name)) continue;
668
+ walk(path.join(dir, name), childRel);
669
+ } else if (entry.isFile() || entry.isSymbolicLink()) {
670
+ out.push(childRel);
671
+ }
672
+ }
673
+ }
674
+ walk(sourcePath, '');
675
+ return out;
676
+ }
677
+
678
+ /**
679
+ * Idempotent symlink: ensure `linkPath` is a symlink to `target`. If it
680
+ * already is, leave it untouched (preserves inode). If it points elsewhere
681
+ * or is a real file/directory, replace it. Returns true when the symlink
682
+ * was created or replaced, false when it was already correct.
683
+ */
684
+ function ensureSymlink(
685
+ linkPath /*: string */,
686
+ target /*: string */,
687
+ ) /*: boolean */ {
688
+ try {
689
+ const stat = fs.lstatSync(linkPath);
690
+ if (stat.isSymbolicLink() && fs.readlinkSync(linkPath) === target) {
691
+ return false;
692
+ }
693
+ if (stat.isSymbolicLink() || !stat.isDirectory()) {
694
+ fs.unlinkSync(linkPath);
695
+ } else {
696
+ fs.rmSync(linkPath, {recursive: true, force: true});
697
+ }
698
+ } catch {
699
+ // linkPath does not exist – fine
700
+ }
701
+ fs.symlinkSync(target, linkPath);
702
+ return true;
703
+ }
704
+
705
+ // Default sources allowlist when no explicit glob is provided — analog of
706
+ // CocoaPods' `s.source_files` auto-discovery.
707
+ function collectSpmSources(sourcePath /*: string */) /*: Array<string> */ {
708
+ return walkSourceFiles(sourcePath)
709
+ .filter(p => ALL_SOURCE_EXTENSIONS.has(path.extname(p)))
710
+ .sort();
711
+ }
712
+
713
+ // Filters walkSourceFiles output through CocoaPods-style globs via micromatch.
714
+ // Skip-dir filtering applies before matching, so `**/*.{h,mm}` never returns
715
+ // paths under `tests/`, `android/`, etc. — even if the pattern would match.
716
+ function expandSpmSourceGlobs(
717
+ sourcePath /*: string */,
718
+ patterns /*: Array<string> */,
719
+ ) /*: Array<string> */ {
720
+ if (patterns.length === 0) {
721
+ return [];
722
+ }
723
+ // $FlowFixMe[untyped-import] micromatch ships no types
724
+ const micromatch = require('micromatch');
725
+ return micromatch(walkSourceFiles(sourcePath), patterns).sort();
726
+ }
727
+
728
+ /**
729
+ * Converts an autolinking.json dependency to an SPM target spec.
730
+ * Returns null if the dependency doesn't have iOS support.
731
+ *
732
+ * `swiftNameByNpm` maps each autolinked dep's npm name to its resolved Swift
733
+ * name (populated by expandSpmDependencies, possibly overridden via the dep's
734
+ * `spm.name` config). Optional for backwards compatibility with callers that
735
+ * don't have the map; falls back to `toSwiftName(name)` per entry.
736
+ */
737
+ /**
738
+ * Read the dep's podspec (if any) and extract its declared
739
+ * `pod_target_xcconfig` HEADER_SEARCH_PATHS, substituted relative to the dep
740
+ * source dir. Returns paths suitable for an SPM `.headerSearchPath()`
741
+ * directive whose target.path is the dep root (entries are NOT yet prefixed
742
+ * with the synth wrapper's `root/` — the emission site adds that prefix
743
+ * because the wrapper's target.path is `.`, not the source dir).
744
+ *
745
+ * Without these, path-style angle includes like
746
+ * `<react/renderer/components/safeareacontext/X.h>` (used by
747
+ * react-native-safe-area-context, reanimated, screens, etc.) fail to resolve
748
+ * because the headers live under the dep's `common/cpp/` rather than under
749
+ * the framework-imported xcframework headers.
750
+ */
751
+ function extractPodspecHeaderSearchPaths(
752
+ sourceDir /*: string */,
753
+ ) /*: Array<string> */ {
754
+ let podspecPath /*: ?string */ = null;
755
+ try {
756
+ const entries = fs.readdirSync(sourceDir);
757
+ // Skip a crashed run's leftover `.spm-scaffold-<pid>-<name>.podspec` copy.
758
+ const candidate = entries.find(
759
+ e => e.endsWith('.podspec') && !e.startsWith('.spm-scaffold-'),
760
+ );
761
+ if (candidate != null) {
762
+ podspecPath = path.join(sourceDir, candidate);
763
+ }
764
+ } catch {
765
+ return [];
766
+ }
767
+ if (podspecPath == null) return [];
768
+
769
+ let model;
770
+ try {
771
+ model = readPodspec(podspecPath);
772
+ } catch {
773
+ return [];
774
+ }
775
+
776
+ const out /*: Array<string> */ = [];
777
+ for (const raw of model.headerSearchPaths) {
778
+ const substituted = raw
779
+ .replace(/\$\(PODS_TARGET_SRCROOT\)/g, '.')
780
+ .replace(/\$\{PODS_TARGET_SRCROOT\}/g, '.');
781
+ // Drop entries still containing unresolved Xcode tokens — emitting them
782
+ // verbatim would surface as clang "no such file" failures.
783
+ if (/\$[({]/.test(substituted)) continue;
784
+ const cleaned = substituted.replace(/^\.\//, '').replace(/^\//, '');
785
+ if (cleaned.length > 0 && !out.includes(cleaned)) {
786
+ out.push(cleaned);
787
+ }
788
+ }
789
+ return out;
790
+ }
791
+
792
+ function autolinkingDepToSpmTarget(
793
+ depName /*: string */,
794
+ dep /*: AutolinkedDep */,
795
+ outputDir /*: string */,
796
+ swiftNameByNpm /*: ?Map<string, string> */,
797
+ ) /*: SpmTarget | null */ {
798
+ const iosPlatform = dep.platforms.ios;
799
+ const sourceDir = iosPlatform.sourceDir ?? dep.root;
800
+ if (sourceDir == null) {
801
+ return null;
802
+ }
803
+
804
+ // target.path is stored relative to the autolinker's outputDir so main()'s
805
+ // `path.resolve(outputDir, target.path)` recovers the absolute source dir —
806
+ // same convention the spmModule branch in main() follows.
807
+ const relSourcePath = path.relative(outputDir, sourceDir);
808
+
809
+ // Prefer the resolved Swift name (which honors `spm.name` overrides set in
810
+ // the dep's react-native.config.js). Fall back to toSwiftName(depName) when
811
+ // the caller didn't run expandSpmDependencies.
812
+ const targetName = dep.swiftName ?? toSwiftName(depName);
813
+
814
+ // No exclude inference — main()'s emission loop emits `sources:` (an
815
+ // explicit allowlist). User-supplied excludes still work.
816
+
817
+ // Detect PrivacyInfo.xcprivacy
818
+ const privacyManifest = findPrivacyManifest(sourceDir);
819
+ const resources = privacyManifest != null ? [privacyManifest] : undefined;
820
+
821
+ // Map declared spm.dependencies (npm names) to Swift target names so the
822
+ // synth's .product(...) deps list reaches the consuming target. Each
823
+ // transitive npm name's Swift name comes from the map (honoring overrides);
824
+ // toSwiftName fallback handles entries the map doesn't know about.
825
+ const spmDeps /*: Array<string> */ = dep.spmDependencies ?? [];
826
+ const spmTargetDependencies =
827
+ spmDeps.length > 0
828
+ ? spmDeps.map(n => swiftNameByNpm?.get(n) ?? toSwiftName(n))
829
+ : undefined;
830
+
831
+ const headerSearchPaths = extractPodspecHeaderSearchPaths(sourceDir);
832
+
833
+ return {
834
+ name: targetName,
835
+ path: relSourcePath,
836
+ exclude: [],
837
+ publicHeadersPath: inferPublicHeadersPath(sourceDir),
838
+ resources,
839
+ spmTargetDependencies,
840
+ headerSearchPaths:
841
+ headerSearchPaths.length > 0 ? headerSearchPaths : undefined,
842
+ };
843
+ }
844
+
845
+ /**
846
+ * Generates the full autolinked/Package.swift content.
847
+ *
848
+ * xcframeworksRelPath – path to the xcframeworks sub-package relative to the
849
+ * autolinked/ directory (e.g. "../build/xcframeworks"). When non-null a
850
+ * React dependency is declared. Headers need no search paths — React/react
851
+ * come from the ReactHeaders target, every other RN namespace from
852
+ * ReactNativeHeaders, folly/glog/boost from ReactNativeDependenciesHeaders,
853
+ * and the app's generated headers from the ReactAppHeaders product — so
854
+ * <React/...>, <ReactCommon/...>, <react/renderer/...>, folly/glog/boost,
855
+ * and <ReactCodegen/...> all resolve.
856
+ */
857
+ /**
858
+ * Top-level autolinked/Package.swift — a thin aggregator that references each
859
+ * autolinked dep as its own sub-package (under packages/<SwiftName>) and
860
+ * re-exports them through a single AutolinkedAggregate target. Per-dep
861
+ * settings (header paths, cFlags, link order) live in each synth sub-package;
862
+ * see generateSynthPackageSwift below.
863
+ *
864
+ * input: { deps: Array<{swiftName: string}> }
865
+ */
866
+ function generateAutolinkedPackageSwift(
867
+ input /*: AggregatorInput */,
868
+ ) /*: string */ {
869
+ const npmDeps /*: ReadonlyArray<NpmDepRef> */ = input.npmDeps ?? [];
870
+ const inlineTargets /*: ReadonlyArray<SpmTarget> */ =
871
+ input.inlineTargets ?? [];
872
+ const hasReactDep /*: boolean */ = input.hasReactDep !== false;
873
+ // Relative path from autolinked/ to build/xcframeworks/, e.g. "../build/xcframeworks".
874
+ const xcframeworksRelPath /*: ?string */ = input.xcframeworksRelPath;
875
+ // Autolinking-plugin contributions (Expo & other frameworks).
876
+ const pluginPackageDeps /*: ReadonlyArray<PluginPackageDep> */ =
877
+ input.pluginPackageDeps ?? [];
878
+ const pluginProductDeps /*: ReadonlyArray<PluginProductDep> */ =
879
+ input.pluginProductDeps ?? [];
880
+
881
+ // Package-level dependencies: one .package(path:) per autolinked dep,
882
+ // plus ReactNative if any inline target needs to import React headers.
883
+ const packageDeps /*: Array<string> */ = npmDeps.map(d => {
884
+ const pkgPath = d.packagePath ?? `packages/${d.swiftName}`;
885
+ return `.package(name: "${d.swiftName}", path: "${pkgPath}")`;
886
+ });
887
+ // Framework plugin packages: local (path) or remote (url + exact version).
888
+ for (const p of pluginPackageDeps) {
889
+ packageDeps.push(
890
+ p.path != null
891
+ ? `.package(name: "${p.name}", path: "${p.path}")`
892
+ : `.package(url: "${p.url ?? ''}", exact: "${p.version ?? ''}")`,
893
+ );
894
+ }
895
+ if (
896
+ inlineTargets.length > 0 &&
897
+ hasReactDep &&
898
+ typeof xcframeworksRelPath === 'string'
899
+ ) {
900
+ packageDeps.push(
901
+ reactNativePackageDecl(
902
+ `.package(name: "ReactNative", path: "${xcframeworksRelPath}")`,
903
+ ),
904
+ );
905
+ // Per-app generated headers come from the ReactAppHeaders product in
906
+ // the codegen package (sibling of the autolinking dir).
907
+ packageDeps.push(`.package(name: "React-GeneratedCode", path: "../ios")`);
908
+ }
909
+
910
+ // AutolinkedAggregate's target dependencies: .product(...) for npm sub-package
911
+ // products and .target(...) for inline spmModule targets in the same package.
912
+ const aggregateDeps /*: Array<string> */ = [
913
+ ...npmDeps.map(
914
+ d => `.product(name: "${d.swiftName}", package: "${d.swiftName}")`,
915
+ ),
916
+ ...inlineTargets.map(t => `.target(name: "${t.name}")`),
917
+ ...pluginProductDeps.map(
918
+ p => `.product(name: "${p.name}", package: "${p.package}")`,
919
+ ),
920
+ ];
921
+
922
+ const inlineDecls = inlineTargets.map(t => {
923
+ const excludeLine =
924
+ t.exclude && t.exclude.length > 0
925
+ ? `\n exclude: [${t.exclude.map(e => `"${e}"`).join(', ')}],`
926
+ : '';
927
+ const publicHeadersLine =
928
+ t.publicHeadersPath != null
929
+ ? `\n publicHeadersPath: "${t.publicHeadersPath}",`
930
+ : '';
931
+ const resourcesLine =
932
+ t.resources && t.resources.length > 0
933
+ ? `\n resources: [${t.resources.map(r => `.copy("${r}")`).join(', ')}],`
934
+ : '';
935
+ return ` .target(
936
+ name: "${t.name}",
937
+ dependencies: [${reactProductDeps()}],
938
+ path: "${t.path}",${excludeLine}${publicHeadersLine}${resourcesLine}
939
+ cxxSettings: [${REACT_CXX_CONFIG_DEFINES.join(', ')}],
940
+ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")]
941
+ )`;
942
+ });
943
+
944
+ const packageDepsBlock =
945
+ packageDeps.length > 0
946
+ ? ` dependencies: [\n ${packageDeps.join(',\n ')},\n ],\n`
947
+ : '';
948
+ const aggregateDepsLine =
949
+ aggregateDeps.length > 0
950
+ ? `\n dependencies: [${aggregateDeps.join(', ')}],`
951
+ : '';
952
+
953
+ const inlineDeclsBlock =
954
+ inlineDecls.length > 0 ? `,\n${inlineDecls.join(',\n')}` : '';
955
+
956
+ // Eval-time missing-manifest guard. SwiftPM resolves the package graph BEFORE
957
+ // the Xcode "Sync SPM Autolinking" build phase runs, so a community library
958
+ // whose Package.swift is absent at resolution time (e.g. a scaffolded manifest
959
+ // wiped by a node_modules reset without a committed patch) fails resolution
960
+ // with an opaque "package manifest cannot be accessed" error — and the
961
+ // actionable sync-phase message never prints. Manifest evaluation may READ the
962
+ // filesystem (only writes are sandboxed), so the aggregator checks each
963
+ // referenced library here and explains the cause + fix at resolution time.
964
+ const guardEntries = npmDeps.map(d => {
965
+ const pkgPath = d.packagePath ?? `packages/${d.swiftName}`;
966
+ return ` (path: "${pkgPath}", npm: "${d.npmName ?? d.swiftName}")`;
967
+ });
968
+ const guardBlock =
969
+ guardEntries.length > 0
970
+ ? `// Eval-time guard: surface a wiped/absent library Package.swift here (at
971
+ // resolution) instead of the opaque SwiftPM "manifest cannot be accessed".
972
+ let __rnAutolinkedLibs: [(path: String, npm: String)] = [
973
+ ${guardEntries.join(',\n')},
974
+ ]
975
+ do {
976
+ let __here = URL(fileURLWithPath: #filePath).deletingLastPathComponent()
977
+ let __missing = __rnAutolinkedLibs.filter {
978
+ !FileManager.default.fileExists(
979
+ atPath: __here.appendingPathComponent($0.path)
980
+ .appendingPathComponent("Package.swift").path)
981
+ }
982
+ if !__missing.isEmpty {
983
+ var __msg = ""
984
+ for lib in __missing {
985
+ __msg += "error: Package.swift is missing for library \\"\\(lib.npm)\\" — its Swift Package Manager manifest is not present (a scaffolded manifest wiped by a node_modules reset without a committed patch, or the library ships none).\\n"
986
+ __msg += " 1. Run \`npx react-native spm scaffold\` to (re)generate it.\\n"
987
+ __msg += " 2. Persist it with \`npx patch-package \\(lib.npm)\` and commit the patch (node_modules is not committed).\\n"
988
+ __msg += " 3. Ask \\(lib.npm)'s maintainer to ship a Package.swift upstream.\\n"
989
+ __msg += " 4. Without a committed patch, this error returns on every fresh install / CI.\\n"
990
+ }
991
+ FileHandle.standardError.write(Data(__msg.utf8))
992
+ fatalError("Missing Package.swift for: \\(__missing.map { $0.npm }.joined(separator: ", ")). See the message above.")
993
+ }
994
+ }
995
+
996
+ `
997
+ : '';
998
+
999
+ return `// swift-tools-version: 6.0
1000
+ // AUTO-GENERATED by scripts/generate-spm-autolinking.js – do not edit manually.
1001
+ // Top-level Autolinked package. Every autolinked dep (npm or spmModule) is
1002
+ // referenced as .package(path: <dep-source-dir>) — each has its own synth
1003
+ // Package.swift written in-place. AutolinkedAggregate depends on every dep's
1004
+ // product so the app build pulls them all in.
1005
+
1006
+ import PackageDescription
1007
+ import Foundation
1008
+
1009
+ ${guardBlock}let package = Package(
1010
+ name: "Autolinked",
1011
+ platforms: [.iOS(.v15)],
1012
+ products: [
1013
+ .library(name: "Autolinked", targets: ["AutolinkedAggregate"]),
1014
+ ],
1015
+ ${packageDepsBlock} targets: [
1016
+ .target(
1017
+ name: "AutolinkedAggregate",${aggregateDepsLine}
1018
+ path: "AutolinkedAggregate"
1019
+ )${inlineDeclsBlock}
1020
+ ],
1021
+ cxxLanguageStandard: .cxx20
1022
+ )
1023
+ `;
1024
+ }
1025
+
1026
+ /**
1027
+ * Per-dep synthesized Package.swift, written at
1028
+ * <outputDir>/packages/<SwiftName>/Package.swift. `targetPath` points at a
1029
+ * `root` directory symlink to the real source dir, so source files stay real
1030
+ * (Xcode atomic-save works).
1031
+ *
1032
+ * The React + codegen package references are plain relative paths supplied by
1033
+ * the caller (`reactNativePackagePath` / `codegenPackagePath`), computed from
1034
+ * the synth's fixed location under the autolinking dir — the manifest holds no
1035
+ * runtime discovery and no absolute paths. Headers are served by the
1036
+ * ReactHeaders/ReactNativeHeaders/ReactNativeDependenciesHeaders targets and
1037
+ * the ReactAppHeaders product, so no
1038
+ * search-path flags are needed. Siblings use their absolute synth path from
1039
+ * `siblingSynthAbsolutePaths` (production) or a `siblingPackageBaseRelative`
1040
+ * fallback (tests).
1041
+ */
1042
+ function generateSynthPackageSwift(spec /*: SynthPackageSpec */) /*: string */ {
1043
+ const swiftName /*: string */ = spec.swiftName;
1044
+ const exclude /*: Array<string> */ = spec.exclude ?? [];
1045
+ const sources /*: ?Array<string> */ = spec.sources;
1046
+ const publicHeadersPath /*: ?string */ = spec.publicHeadersPath ?? null;
1047
+ // Per-dep header search paths from the podspec's
1048
+ // pod_target_xcconfig HEADER_SEARCH_PATHS — already prefixed by the caller
1049
+ // with the synth wrapper's `root/` so they resolve relative to target.path.
1050
+ // Emitted as `.headerSearchPath()` directives, which SPM accepts on
1051
+ // cSettings / cxxSettings without needing absolute paths.
1052
+ const headerSearchPaths /*: Array<string> */ = spec.headerSearchPaths ?? [];
1053
+ const spmDependencies /*: Array<{swiftName: string}> */ =
1054
+ spec.spmDependencies ?? [];
1055
+ const hasReactDep /*: boolean */ = spec.hasReactDep !== false;
1056
+ const resources /*: ?Array<string> */ = spec.resources;
1057
+ const isDynamic /*: boolean */ = spec.isDynamic !== false;
1058
+ const targetPath /*: string */ = spec.targetPath ?? `Sources/${swiftName}`;
1059
+ const siblingSynthAbsolutePaths /*: {[string]: string} */ =
1060
+ spec.siblingSynthAbsolutePaths ?? {};
1061
+
1062
+ // Package dependencies — ReactNative + each spm sibling synth package.
1063
+ // The React + codegen package paths are plain relative strings computed by
1064
+ // the caller at generation time (the synth always lives at a fixed depth
1065
+ // under the autolinking dir, and is regenerated on every `react-native
1066
+ // spm` run), so the manifest holds no runtime discovery. Siblings use their
1067
+ // absolute synth path when the caller provides one (production); else a
1068
+ // relative fallback.
1069
+ const packageDeps /*: Array<string> */ = [];
1070
+ if (hasReactDep) {
1071
+ const reactNativePackagePath /*: string */ =
1072
+ spec.reactNativePackagePath ?? '../../../../xcframeworks';
1073
+ const codegenPackagePath /*: string */ =
1074
+ spec.codegenPackagePath ?? '../../../ios';
1075
+ packageDeps.push(
1076
+ reactNativePackageDecl(
1077
+ `.package(name: "ReactNative", path: "${reactNativePackagePath}")`,
1078
+ ),
1079
+ );
1080
+ // Per-app generated headers come from the ReactAppHeaders product in
1081
+ // the codegen package.
1082
+ packageDeps.push(
1083
+ `.package(name: "React-GeneratedCode", path: "${codegenPackagePath}")`,
1084
+ );
1085
+ }
1086
+ for (const dep of spmDependencies) {
1087
+ const absPath = siblingSynthAbsolutePaths[dep.swiftName];
1088
+ if (absPath != null) {
1089
+ packageDeps.push(
1090
+ `.package(name: "${dep.swiftName}", path: "${absPath}")`,
1091
+ );
1092
+ } else {
1093
+ const siblingRel /*: string */ = spec.siblingPackageBaseRelative ?? '..';
1094
+ packageDeps.push(
1095
+ `.package(name: "${dep.swiftName}", path: "${siblingRel}/${dep.swiftName}")`,
1096
+ );
1097
+ }
1098
+ }
1099
+
1100
+ // Target dependencies — products from each declared package dep.
1101
+ const targetDeps /*: Array<string> */ = [];
1102
+ if (hasReactDep) {
1103
+ targetDeps.push(reactProductDeps());
1104
+ }
1105
+ for (const dep of spmDependencies) {
1106
+ targetDeps.push(
1107
+ `.product(name: "${dep.swiftName}", package: "${dep.swiftName}")`,
1108
+ );
1109
+ }
1110
+
1111
+ const excludeLine =
1112
+ exclude.length > 0
1113
+ ? `\n exclude: [${exclude.map(e => `"${e}"`).join(', ')}],`
1114
+ : '';
1115
+ // sources: explicit allowlist. One file per line because lists can run to
1116
+ // dozens of entries and an unbroken array becomes unreadable in diffs.
1117
+ const sourcesLine =
1118
+ sources != null && sources.length > 0
1119
+ ? `\n sources: [\n${sources.map(s => ` "${s}",`).join('\n')}\n ],`
1120
+ : '';
1121
+ const publicHeadersLine =
1122
+ publicHeadersPath != null
1123
+ ? `\n publicHeadersPath: "${publicHeadersPath}",`
1124
+ : '';
1125
+ const resourcesLine =
1126
+ resources != null && resources.length > 0
1127
+ ? `\n resources: [${resources.map(r => `.copy("${r}")`).join(', ')}],`
1128
+ : '';
1129
+
1130
+ const packageDepsBlock =
1131
+ packageDeps.length > 0
1132
+ ? ` dependencies: [\n ${packageDeps.join(',\n ')},\n ],\n`
1133
+ : '';
1134
+ // `.headerSearchPath(...)` entries from the podspec — first-class
1135
+ // directives keep SPM's diagnostics meaningful (clang reports the
1136
+ // dep-relative path on miss). React headers need no paths at all.
1137
+ const headerSearchPathList = headerSearchPaths.map(
1138
+ p => `.headerSearchPath("${p}")`,
1139
+ );
1140
+ const cSettingsLine =
1141
+ headerSearchPathList.length > 0
1142
+ ? `\n cSettings: [${headerSearchPathList.join(', ')}],`
1143
+ : '';
1144
+ // ALWAYS emit the config-gated C++ defines (even with no header paths): a
1145
+ // Fabric C++ target must compile with the same NDEBUG state as the prebuilt
1146
+ // React.framework, else DebugStringConvertible's vtable / ShadowNode layout
1147
+ // diverges and a Release build fails to link. Mirrors Package.swift.
1148
+ const cxxEntries = [...REACT_CXX_CONFIG_DEFINES, ...headerSearchPathList];
1149
+ const cxxSettingsLine = `\n cxxSettings: [${cxxEntries.join(', ')}],`;
1150
+
1151
+ return `// swift-tools-version: 6.0
1152
+ // AUTO-GENERATED by scripts/generate-spm-autolinking.js – do not edit manually.
1153
+ // Synth Package.swift for autolinked dep "${swiftName}".
1154
+
1155
+ import PackageDescription
1156
+
1157
+ let package = Package(
1158
+ name: "${swiftName}",
1159
+ platforms: [.iOS(.v15)],
1160
+ products: [
1161
+ .library(name: "${swiftName}"${isDynamic ? ', type: .dynamic' : ''}, targets: ["${swiftName}"]),
1162
+ ],
1163
+ ${packageDepsBlock} targets: [
1164
+ .target(
1165
+ name: "${swiftName}",
1166
+ dependencies: [${targetDeps.join(', ')}],
1167
+ path: "${targetPath}",${excludeLine}${sourcesLine}${publicHeadersLine}${resourcesLine}${cSettingsLine}${cxxSettingsLine}
1168
+ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")]
1169
+ ),
1170
+ ],
1171
+ cxxLanguageStandard: .cxx20
1172
+ )
1173
+ `;
1174
+ }
1175
+
1176
+ function main(argv /*:: ?: Array<string> */) /*: void */ {
1177
+ const args = parseArgs(argv ?? process.argv.slice(2));
1178
+ // Resolve to absolute so path.join() produces absolute paths everywhere —
1179
+ // entryAbsDirs, the headers farm, etc. all assume an absolute appRoot.
1180
+ const appRoot = path.resolve(args.appRoot);
1181
+ remoteCfg = remotePackageConfig(appRoot);
1182
+ if (remoteCfg != null) {
1183
+ log(`Remote ReactNative package: ${remoteCfg.url} @ ${remoteCfg.version}`);
1184
+ }
1185
+
1186
+ let rnRoot = args.reactNativeRoot;
1187
+ if (rnRoot == null) {
1188
+ rnRoot = path.join(appRoot, 'node_modules', 'react-native');
1189
+ if (!fs.existsSync(rnRoot)) {
1190
+ // Monorepo: try walking up
1191
+ let dir = appRoot;
1192
+ for (let i = 0; i < 5; i++) {
1193
+ const parent = path.dirname(dir);
1194
+ if (parent === dir) break;
1195
+ dir = parent;
1196
+ const c = path.join(dir, 'node_modules', 'react-native');
1197
+ if (fs.existsSync(c)) {
1198
+ rnRoot = c;
1199
+ break;
1200
+ }
1201
+ }
1202
+ }
1203
+ if (rnRoot == null || !fs.existsSync(rnRoot)) {
1204
+ console.error(
1205
+ '[generate-spm-autolinking] Could not find react-native. Pass --react-native-root.',
1206
+ );
1207
+ process.exitCode = 1;
1208
+ return;
1209
+ }
1210
+ }
1211
+
1212
+ const autolinkingJsonPath =
1213
+ args.autolinkingJson ??
1214
+ path.join(appRoot, 'build', 'generated', 'autolinking', 'autolinking.json');
1215
+
1216
+ // Output lands under <appRoot>/build/generated/autolinking/ — co-located
1217
+ // with autolinking.json (written by generate-spm-autolinking-config.js) and
1218
+ // alongside the iOS-conventional build/ tree (Pods/, build/xcframeworks/…).
1219
+ const outputDir =
1220
+ args.output != null
1221
+ ? path.resolve(appRoot, args.output)
1222
+ : path.join(appRoot, 'build', 'generated', 'autolinking');
1223
+
1224
+ // Collect all targets along with their routing metadata.
1225
+ const entries /*: Array<TargetEntry> */ = [];
1226
+ // Autolinking plugins discovered from deps' react-native.config.js
1227
+ // (populated during the dep walk below; invoked before the aggregator write).
1228
+ let discoveredPlugins /*: Array<DiscoveredPlugin> */ = [];
1229
+
1230
+ // 1. From autolinking.json (npm packages with iOS native modules), expanded
1231
+ // with transitive deps declared via `spm.dependencies` in each package's
1232
+ // react-native.config.js (analog of podspec `s.dependency`).
1233
+ const autolinkingData = readAutolinkingJson(autolinkingJsonPath);
1234
+ const depsMap = autolinkingData?.dependencies;
1235
+ if (depsMap != null) {
1236
+ // Narrow each on-disk AutolinkingDepJson into the validated AutolinkedDep
1237
+ // shape expected by expandSpmDependencies and autolinkingDepToSpmTarget.
1238
+ const directDeps /*: Array<AutolinkedDep> */ = [];
1239
+ for (const name of Object.keys(depsMap)) {
1240
+ const dep = depsMap[name];
1241
+ if (dep == null) continue;
1242
+ const iosPlatform = dep.platforms?.ios;
1243
+ const root = dep.root;
1244
+ if (iosPlatform == null || root == null) continue;
1245
+ directDeps.push({
1246
+ name,
1247
+ root,
1248
+ platforms: {ios: iosPlatform},
1249
+ });
1250
+ }
1251
+ const allDeps = expandSpmDependencies(directDeps, {
1252
+ readConfig: defaultReadConfig,
1253
+ resolveDep: defaultResolveDep,
1254
+ });
1255
+
1256
+ // Map every autolinked npm name to its resolved Swift name (post-override)
1257
+ // so transitive references inside autolinkingDepToSpmTarget find the right
1258
+ // target identifier — not just the auto-derived toSwiftName.
1259
+ const swiftNameByNpm /*: Map<string, string> */ = new Map();
1260
+ for (const dep of allDeps) {
1261
+ if (dep.swiftName != null) {
1262
+ swiftNameByNpm.set(dep.name, dep.swiftName);
1263
+ }
1264
+ }
1265
+
1266
+ // Discover framework autolinking plugins (Expo & others) from the same
1267
+ // dep set — invoked before the aggregator is written (below).
1268
+ discoveredPlugins = discoverPlugins(
1269
+ allDeps,
1270
+ defaultReadConfig,
1271
+ readDenyPluginsFromConfig(appRoot),
1272
+ );
1273
+ for (const p of discoveredPlugins) {
1274
+ log(`Found SPM autolinking plugin: ${p.depName}`);
1275
+ }
1276
+
1277
+ // A dep that declares an autolinking plugin OWNS its native contribution:
1278
+ // the plugin (invoked below) returns its package/product/generated-source
1279
+ // deps. RN must not also try to source-build that package through the
1280
+ // community-lib path — it typically has no Package.swift and may be mixed
1281
+ // Swift/ObjC (e.g. expo → ExpoModulesCore), which would throw before the
1282
+ // plugin ever runs. Mirrors CocoaPods: `use_expo_modules!` owns Expo's
1283
+ // pods; podspec autolinking doesn't also build Expo as a community lib.
1284
+ // Skipping here also keeps the dep out of `entries` → out of the
1285
+ // missing-manifest scan and the aggregator's package refs.
1286
+ const pluginHostDeps /*: Set<string> */ = new Set(
1287
+ discoveredPlugins.map(p => p.depName),
1288
+ );
1289
+
1290
+ for (const dep of allDeps) {
1291
+ if (pluginHostDeps.has(dep.name)) {
1292
+ log(
1293
+ `Skipping ${dep.name} target generation — provided by its SPM autolinking plugin`,
1294
+ );
1295
+ continue;
1296
+ }
1297
+ const target = autolinkingDepToSpmTarget(
1298
+ dep.name,
1299
+ dep,
1300
+ outputDir,
1301
+ swiftNameByNpm,
1302
+ );
1303
+ if (target != null) {
1304
+ entries.push({
1305
+ target,
1306
+ origin: 'npm',
1307
+ npmName: dep.name,
1308
+ root: dep.root,
1309
+ });
1310
+ log(`Found npm native module: ${target.name} → ${target.path}`);
1311
+ }
1312
+ }
1313
+ } else {
1314
+ log(
1315
+ `No autolinking.json found at ${path.relative(appRoot, autolinkingJsonPath)} or no dependencies. Using only built-in modules.`,
1316
+ );
1317
+ }
1318
+
1319
+ // 2. From react-native.config.js spm.modules (user-defined extra modules).
1320
+ // If the module declares `sources: [glob, ...]` (CocoaPods-style), expand
1321
+ // the globs now relative to its dir and attach the file list to the target
1322
+ // so the emission loop below renders `sources: [...]` literally.
1323
+ const configModules = readSpmModulesFromConfig(appRoot);
1324
+ for (const mod of configModules) {
1325
+ const absPath = path.resolve(appRoot, mod.path);
1326
+ const relPath = path.relative(outputDir, absPath);
1327
+ const userSources =
1328
+ Array.isArray(mod.sources) && mod.sources.length > 0
1329
+ ? expandSpmSourceGlobs(absPath, mod.sources)
1330
+ : null;
1331
+ entries.push({
1332
+ target: {
1333
+ name: mod.name,
1334
+ path: relPath,
1335
+ exclude: mod.exclude ?? [],
1336
+ publicHeadersPath: mod.publicHeadersPath ?? null,
1337
+ sources: userSources,
1338
+ },
1339
+ origin: 'spmModule',
1340
+ });
1341
+ log(`Config module: ${mod.name} → ${relPath}`);
1342
+ }
1343
+
1344
+ // Resolve xcframeworks package path relative to outputDir (autolinked/).
1345
+ // When provided this causes each target to declare a React dependency so
1346
+ // Xcode adds the xcframework's header search paths (needed for <React/...>).
1347
+ // Always set xcframeworksRelPath to the default even if the directory doesn't
1348
+ // exist yet — on first run, step 2 (autolinking) runs before step 4
1349
+ // (xcframework symlinks), but the generated Swift code resolves paths at
1350
+ // Xcode build time, not generation time.
1351
+ let xcframeworksRelPath /*: string | null */ = null;
1352
+ const absXcframeworks /*: string */ =
1353
+ args.xcframeworksPath != null
1354
+ ? path.resolve(appRoot, args.xcframeworksPath)
1355
+ : path.join(appRoot, 'build', 'xcframeworks');
1356
+ xcframeworksRelPath = path.relative(outputDir, absXcframeworks);
1357
+
1358
+ if (xcframeworksRelPath != null) {
1359
+ log(
1360
+ `React xcframeworks → ${xcframeworksRelPath} (relative to autolinked/)`,
1361
+ );
1362
+ }
1363
+
1364
+ // Whether autolinked targets declare a React dependency at all. Headers are
1365
+ // served by the ReactHeaders/ReactNativeHeaders/ReactNativeDependenciesHeaders
1366
+ // binaryTargets and the ReactAppHeaders product — no `-I` flags anywhere.
1367
+ const hasReactDep = xcframeworksRelPath != null;
1368
+
1369
+ // Each entry gets a wrapper dir at <outputDir>/packages/<SwiftName>/ that
1370
+ // contains the synth Package.swift and a `root` directory symlink pointing
1371
+ // at the dep's real source dir. SPM derives package identity from the path
1372
+ // basename, so the wrapper's unique name (SwiftName) sidesteps the basename
1373
+ // collision that in-place at the source dir would have. Files inside the
1374
+ // source dir stay real, so Xcode's atomic-save works through the dir
1375
+ // symlink (intermediate path components — even symlinks — resolve cleanly;
1376
+ // the issue was only file-symlinks as the final path component).
1377
+ const entryAbsDirs /*: Map<string, string> */ = new Map();
1378
+ for (const entry of entries) {
1379
+ entryAbsDirs.set(
1380
+ entry.target.name,
1381
+ path.resolve(outputDir, entry.target.path),
1382
+ );
1383
+ }
1384
+
1385
+ const packagesDir = path.join(outputDir, 'packages');
1386
+ const headersDir = path.join(outputDir, 'headers');
1387
+ // libs/<SwiftName>/ symlinks for self-managed deps. The symlink basename
1388
+ // is the Swift module name (guaranteed unique per dep), so SPM's
1389
+ // path-basename-based package identity never collides — even when two
1390
+ // libs ship their own Package.swift inside `ios/` (a common convention).
1391
+ // Wiped on every run; populated below as self-managed deps are visited.
1392
+ const libsDir = path.join(outputDir, 'libs');
1393
+ fs.mkdirSync(packagesDir, {recursive: true});
1394
+ fs.mkdirSync(headersDir, {recursive: true});
1395
+ fs.rmSync(libsDir, {recursive: true, force: true});
1396
+ fs.mkdirSync(libsDir, {recursive: true});
1397
+
1398
+ const wrapperDirs /*: Map<string, string> */ = new Map();
1399
+ const selfManagedDirs /*: Map<string, string> */ = new Map();
1400
+ const aggregatorPackageDeps /*: Array<NpmDepRef> */ = [];
1401
+ // Community npm deps that autolink but ship/scaffold no Package.swift. We no
1402
+ // longer silently synthesize one for them (that duplicated the scaffolder and
1403
+ // hid the gap from the developer and the library author) — collect them and
1404
+ // fail with an actionable message after the classification pass. spmModules
1405
+ // (app-local, podspec-less, explicitly declared in react-native.config.js)
1406
+ // keep their synth wrappers: there is nothing to scaffold for them.
1407
+ const missingManifests /*: Array<{name: string, npmName: string, hasPodspec: boolean, mixed?: boolean}> */ =
1408
+ [];
1409
+
1410
+ for (const entry of entries) {
1411
+ const {target} = entry;
1412
+ const absSource /*: string */ = entryAbsDirs.get(target.name) ?? '';
1413
+ if (!fs.existsSync(absSource)) {
1414
+ log(`Skipping ${target.name}: source dir missing (${absSource})`);
1415
+ continue;
1416
+ }
1417
+ const selfManagedDir = findSelfManagedPackageDir(absSource);
1418
+ if (selfManagedDir != null) {
1419
+ // Record the manifest's actual directory — for the nested layout this
1420
+ // is <dep>/ios, not <dep>. SPM resolves `.package(path:)` against that
1421
+ // directory expecting Package.swift to live alongside.
1422
+ selfManagedDirs.set(target.name, selfManagedDir);
1423
+ // If a wrapper exists from a prior synth-mode run (i.e. the dep WAS
1424
+ // autolinker-wrapped, then later transitioned to self-managed via
1425
+ // `spm scaffold` or shipping its own Package.swift), remove the
1426
+ // wrapper now. Without this, the pruning loop below preserves it
1427
+ // (because the dep is "active" via selfManagedDirs) and Xcode's
1428
+ // SwiftPM cache picks up the stale wrapper Package.swift instead of
1429
+ // the self-managed one.
1430
+ const staleWrapper = path.join(packagesDir, target.name);
1431
+ if (fs.existsSync(staleWrapper)) {
1432
+ fs.rmSync(staleWrapper, {recursive: true, force: true});
1433
+ log(`Removed stale wrapper: packages/${target.name}/`);
1434
+ }
1435
+ log(
1436
+ `Self-managed: ${target.name} → ${path.relative(appRoot, selfManagedDir)} (using its own Package.swift)`,
1437
+ );
1438
+ continue;
1439
+ }
1440
+ if (entry.origin === 'npm') {
1441
+ // No shipped or scaffolded manifest — this is the gap we now surface.
1442
+ // A mixed-language dep is reported distinctly (it can't be scaffolded at
1443
+ // all, so "run spm scaffold" would be misleading).
1444
+ missingManifests.push({
1445
+ name: target.name,
1446
+ npmName: entry.npmName ?? target.name,
1447
+ hasPodspec: hasPodspec(absSource),
1448
+ mixed: hasMixedLanguageSources(absSource),
1449
+ });
1450
+ // Drop any stale wrapper from a previous synth-mode run so SPM doesn't
1451
+ // resolve against it.
1452
+ const staleWrapper = path.join(packagesDir, target.name);
1453
+ if (fs.existsSync(staleWrapper)) {
1454
+ fs.rmSync(staleWrapper, {recursive: true, force: true});
1455
+ }
1456
+ continue;
1457
+ }
1458
+ // spmModule: synth wrapper is the legitimate mechanism (no podspec exists
1459
+ // to scaffold from, and the app developer declared it explicitly). But a
1460
+ // mixed-language module can't be wrapped either — SPM can't compile Swift +
1461
+ // C-family sources in one target, and a synth wrapper would fail with a
1462
+ // cryptic SPM resolve error. Surface the same friendly diagnostic the
1463
+ // community-dep path uses instead of letting SPM emit the cryptic one.
1464
+ if (hasMixedLanguageSources(absSource)) {
1465
+ throw new Error(
1466
+ `react-native autolinking: the spm.module "${target.name}" mixes Swift ` +
1467
+ `and C-family (.m/.mm/.c/.cpp) sources, which SwiftPM cannot compile ` +
1468
+ `in a single target. Split it into separate single-language modules, ` +
1469
+ `or ship a hand-written Package.swift with multiple targets.`,
1470
+ );
1471
+ }
1472
+ const wrapperDir = path.join(packagesDir, target.name);
1473
+ wrapperDirs.set(target.name, wrapperDir);
1474
+ fs.mkdirSync(wrapperDir, {recursive: true});
1475
+ ensureSymlink(path.join(wrapperDir, WRAPPER_ROOT_NAME), absSource);
1476
+ }
1477
+
1478
+ // Fail before writing any wrappers/aggregator: a missing community-lib
1479
+ // manifest is a hard error the developer must resolve by scaffolding (or the
1480
+ // library shipping its own). reportMissingManifests prints one `error:` line
1481
+ // per dep so Xcode renders them as build errors.
1482
+ if (missingManifests.length > 0) {
1483
+ throw reportMissingManifests(missingManifests);
1484
+ }
1485
+
1486
+ // Sibling refs: each synth Package.swift declares its sibling deps via the
1487
+ // dep's actual package root — wrapper dir for autolinker-managed deps,
1488
+ // source dir for self-managed ones. SPM identity stays unique either way
1489
+ // (wrapper basename = SwiftName; self-managed manifests declare the same
1490
+ // package name).
1491
+ const siblingPackagePaths /*: {[string]: string} */ = {};
1492
+ for (const [name, wrapper] of wrapperDirs.entries()) {
1493
+ siblingPackagePaths[name] = wrapper;
1494
+ }
1495
+ for (const [name, sourceDir] of selfManagedDirs.entries()) {
1496
+ siblingPackagePaths[name] = sourceDir;
1497
+ }
1498
+
1499
+ for (const entry of entries) {
1500
+ const {target} = entry;
1501
+ const absSource /*: string */ = entryAbsDirs.get(target.name) ?? '';
1502
+
1503
+ // Self-managed deps: skip the synth step entirely. The dep's own
1504
+ // Package.swift handles its targets, headers, and React framework
1505
+ // wiring. We just register it with the aggregator so the app pulls it
1506
+ // in alongside autolinker-managed deps. The central headers/<SwiftName>/
1507
+ // tree still gets populated so consumers (host app + sibling synths
1508
+ // that hit -I autolinking/headers) can resolve `<SwiftName/Header.h>`
1509
+ // by file path — synth packages use `-fno-implicit-module-maps`, so
1510
+ // we can't rely on SPM's auto-generated module map alone.
1511
+ if (selfManagedDirs.has(target.name)) {
1512
+ // Centralized headers tree walks the WHOLE dep root, not just the
1513
+ // manifest's directory — headers may live anywhere (e.g. common/cpp/
1514
+ // outside of ios/), and cross-package consumers should still resolve
1515
+ // them via the centralized -I path.
1516
+ linkHeaderTree(absSource, path.join(headersDir, target.name));
1517
+ // Route the manifest reference through a uniquely-named symlink at
1518
+ // libs/<SwiftName>/ so SPM derives the package identity from the
1519
+ // alias basename. Two libs that both ship Package.swift inside their
1520
+ // own `ios/` subdir would otherwise collide with identity "ios".
1521
+ const realPackageDir = selfManagedDirs.get(target.name) ?? absSource;
1522
+ const aliasPath = path.join(libsDir, target.name);
1523
+ ensureSymlink(aliasPath, realPackageDir);
1524
+ aggregatorPackageDeps.push({
1525
+ swiftName: target.name,
1526
+ packagePath: `libs/${target.name}`,
1527
+ npmName: entry.npmName ?? target.name,
1528
+ });
1529
+ continue;
1530
+ }
1531
+
1532
+ const wrapperDir = wrapperDirs.get(target.name);
1533
+ if (wrapperDir == null) continue;
1534
+ const skipDirNames = new Set(
1535
+ (target.exclude || [])
1536
+ .filter(e => e.endsWith('/'))
1537
+ .map(e => e.slice(0, -1)),
1538
+ );
1539
+
1540
+ const siblingSynthAbsolutePaths /*: {[string]: string} */ = {};
1541
+ for (const sibling of target.spmTargetDependencies ?? []) {
1542
+ const sibPath = siblingPackagePaths[sibling];
1543
+ if (sibPath != null) {
1544
+ siblingSynthAbsolutePaths[sibling] = sibPath;
1545
+ }
1546
+ }
1547
+
1548
+ // target.path = "." (the wrapper dir) so SPM sees an empty `include/`
1549
+ // sibling of `root/` for its required `publicHeadersPath`. Without that,
1550
+ // SPM defaults publicHeadersPath to "include" and errors out when no
1551
+ // such dir exists inside the dep's source tree. Sources come from
1552
+ // `root/<...>` via the dir symlink — paths from auto-discovery or
1553
+ // user globs are relative to the dep's source dir, so we prefix with
1554
+ // `root/` to keep them inside target.path.
1555
+ const withRoot = (p /*: string */) => `${WRAPPER_ROOT_NAME}/${p}`;
1556
+ const prefixedExclude /*: Array<string> */ = (target.exclude ?? []).map(
1557
+ withRoot,
1558
+ );
1559
+ const prefixedResources /*: ?Array<string> */ =
1560
+ target.resources != null ? target.resources.map(withRoot) : undefined;
1561
+
1562
+ // sources: explicit allowlist. Pre-resolved on the target (spmModule
1563
+ // glob expansion) or auto-collected here. We always emit `sources:` so
1564
+ // SPM never falls back to scanning the source dir verbatim (which would
1565
+ // pick up tests/, *.js, *.podspec, etc.).
1566
+ const rawSources /*: Array<string> */ =
1567
+ target.sources != null && target.sources.length > 0
1568
+ ? target.sources
1569
+ : collectSpmSources(absSource);
1570
+ const prefixedSources /*: ?Array<string> */ =
1571
+ rawSources.length > 0 ? rawSources.map(withRoot) : null;
1572
+
1573
+ // Podspec HEADER_SEARCH_PATHS were captured relative to the dep's source
1574
+ // dir. The wrapper exposes the source dir under `root/` (target.path is
1575
+ // `.`, the wrapper dir), so each entry must be prefixed with `root/` so
1576
+ // clang sees the real subtree.
1577
+ const prefixedHeaderSearchPaths /*: ?Array<string> */ =
1578
+ target.headerSearchPaths != null && target.headerSearchPaths.length > 0
1579
+ ? target.headerSearchPaths.map(withRoot)
1580
+ : null;
1581
+
1582
+ const synthContent = generateSynthPackageSwift({
1583
+ swiftName: target.name,
1584
+ exclude: prefixedExclude,
1585
+ sources: prefixedSources,
1586
+ // Stub include/ subdir lives in the wrapper dir; satisfies SPM's
1587
+ // publicHeadersPath requirement without exposing anything. Cross-pkg
1588
+ // angle includes resolve through the merged header tree (the autolinking
1589
+ // header farm at <outputDir>/headers is folded into it).
1590
+ publicHeadersPath: 'include',
1591
+ resources: prefixedResources,
1592
+ headerSearchPaths: prefixedHeaderSearchPaths,
1593
+ spmDependencies: (target.spmTargetDependencies ?? []).map(swiftName => ({
1594
+ swiftName,
1595
+ })),
1596
+ hasReactDep,
1597
+ // Relative paths from the synth dir (<outputDir>/packages/<Name>) to the
1598
+ // app's React xcframeworks + codegen packages. Computed here because the
1599
+ // synth's depth is fixed and it is regenerated every run — no runtime
1600
+ // discovery needed in the manifest.
1601
+ reactNativePackagePath: toPosix(
1602
+ path.relative(wrapperDir, absXcframeworks),
1603
+ ),
1604
+ codegenPackagePath: toPosix(
1605
+ path.relative(
1606
+ wrapperDir,
1607
+ path.join(appRoot, 'build', 'generated', 'ios'),
1608
+ ),
1609
+ ),
1610
+ isDynamic: false,
1611
+ targetPath: '.',
1612
+ siblingSynthAbsolutePaths,
1613
+ });
1614
+
1615
+ fs.writeFileSync(
1616
+ path.join(wrapperDir, 'Package.swift'),
1617
+ synthContent,
1618
+ 'utf8',
1619
+ );
1620
+ // Centralized headers tree at <outputDir>/headers/<SwiftName>/<relpath>.h.
1621
+ // Used two ways:
1622
+ // * SPM-internal: cFlags add `-I <outputDir>/headers`, so cross-package
1623
+ // angle includes like <SwiftName/Header.h> resolve.
1624
+ // * Host app + sibling consumers: each wrapper's `include/` is a dir
1625
+ // symlink to its slice of this tree, so `#import <RelPath/Header.h>`
1626
+ // (e.g. <ReactCommon/RCTSampleTurboModule.h>) resolves through SPM's
1627
+ // publicHeadersPath propagation (-I .../packages/<SwiftName>/include).
1628
+ const pkgHeadersDir = path.join(headersDir, target.name);
1629
+ linkHeaderTree(absSource, pkgHeadersDir, skipDirNames);
1630
+
1631
+ const includePath = path.join(wrapperDir, 'include');
1632
+ if (fs.existsSync(pkgHeadersDir)) {
1633
+ ensureSymlink(includePath, pkgHeadersDir);
1634
+ } else {
1635
+ // Header-less package (rare): keep an empty dir so SPM's
1636
+ // publicHeadersPath: "include" requirement is still satisfied.
1637
+ fs.mkdirSync(includePath, {recursive: true});
1638
+ }
1639
+
1640
+ log(
1641
+ `Synth: packages/${target.name}/ → ${path.relative(appRoot, absSource)}`,
1642
+ );
1643
+
1644
+ aggregatorPackageDeps.push({
1645
+ swiftName: target.name,
1646
+ packagePath: `packages/${target.name}`,
1647
+ });
1648
+ }
1649
+
1650
+ // Prune stale wrappers + header dirs for entries no longer autolinked.
1651
+ // Preserve both wrapper-managed and self-managed names; only entries that
1652
+ // are no longer autolinked at all get removed. Note: `packages/` only has
1653
+ // wrapper-managed names (self-managed deps live in their own source dirs),
1654
+ // but `headers/` has both since we populate the central tree for everyone.
1655
+ const activeNames /*: Set<string> */ = new Set([
1656
+ ...wrapperDirs.keys(),
1657
+ ...selfManagedDirs.keys(),
1658
+ ]);
1659
+ for (const subdir of ['packages', 'headers']) {
1660
+ const dir = path.join(outputDir, subdir);
1661
+ try {
1662
+ const existing /*: Array<{name: string, isSymbolicLink(): boolean, isDirectory(): boolean}> */ =
1663
+ // $FlowFixMe[incompatible-type] Dirent typing
1664
+ fs.readdirSync(dir, {withFileTypes: true});
1665
+ for (const entry of existing) {
1666
+ if (activeNames.has(entry.name)) continue;
1667
+ const stale = path.join(dir, entry.name);
1668
+ if (entry.isSymbolicLink() || !entry.isDirectory()) {
1669
+ fs.unlinkSync(stale);
1670
+ } else {
1671
+ fs.rmSync(stale, {recursive: true, force: true});
1672
+ }
1673
+ log(`Removed stale ${subdir}/${entry.name}`);
1674
+ }
1675
+ } catch {
1676
+ // dir doesn't exist – fine
1677
+ }
1678
+ }
1679
+
1680
+ // Invoke discovered framework plugins now that the RN dep graph + autolinking
1681
+ // data are final. Their package/product contributions merge into the
1682
+ // aggregator below; this runs in add/update AND every build-time sync (both
1683
+ // call main), so a plugin's contribution survives every regeneration.
1684
+ let pluginPackageDeps /*: Array<PluginPackageDep> */ = [];
1685
+ let pluginProductDeps /*: Array<PluginProductDep> */ = [];
1686
+ let pluginGeneratedSources /*: Array<{path: string}> */ = [];
1687
+ let pluginFlavoredFrameworks /*: Array<PluginFlavoredFramework> */ = [];
1688
+ let pluginWatchPaths /*: Array<string> */ = [];
1689
+ if (discoveredPlugins.length > 0) {
1690
+ // React-GeneratedCode is the per-app codegen package (referenced as
1691
+ // `../ios` from outputDir). It may be absent (no codegen this run), so the
1692
+ // descriptor only lists its products when it actually resolves.
1693
+ const codegenPackageExists = fs.existsSync(
1694
+ path.join(outputDir, '..', 'ios', 'Package.swift'),
1695
+ );
1696
+ const result = invokePlugins(
1697
+ discoveredPlugins,
1698
+ {
1699
+ appRoot,
1700
+ projectRoot: findProjectRoot(appRoot),
1701
+ reactNativeRoot: rnRoot,
1702
+ autolinking: autolinkingData ?? {},
1703
+ outputDir,
1704
+ react: reactDescriptor(
1705
+ absXcframeworks,
1706
+ xcframeworksRelPath,
1707
+ codegenPackageExists,
1708
+ ),
1709
+ },
1710
+ {warn},
1711
+ );
1712
+ pluginPackageDeps = result.packageDependencies;
1713
+ pluginProductDeps = result.productDependencies;
1714
+ pluginGeneratedSources = result.generatedSources;
1715
+ pluginFlavoredFrameworks = result.flavoredFrameworks;
1716
+ pluginWatchPaths = result.watchPaths;
1717
+ log(
1718
+ `SPM plugins contributed ${pluginPackageDeps.length} package(s), ` +
1719
+ `${pluginProductDeps.length} product(s), ` +
1720
+ `${pluginGeneratedSources.length} generated source(s), ` +
1721
+ `${pluginFlavoredFrameworks.length} flavored framework(s)`,
1722
+ );
1723
+ }
1724
+
1725
+ // Plugin sidecars. Both are ALWAYS written — even `[]` — so removing a
1726
+ // plugin (or dropping its declaration) clears stale entries. Machine-local
1727
+ // absolute paths; gitignored + regenerated every sync.
1728
+ fs.mkdirSync(outputDir, {recursive: true});
1729
+ // Generated-source registration (e.g. Expo's ExpoModulesProvider.swift),
1730
+ // consumed by the injector at add/update time — the provider ordering
1731
+ // contract is still Preview and co-designed with the first consumer.
1732
+ fs.writeFileSync(
1733
+ path.join(outputDir, '.spm-plugin-generated-sources.json'),
1734
+ JSON.stringify(pluginGeneratedSources, null, 2) + '\n',
1735
+ 'utf8',
1736
+ );
1737
+ // Flavored-framework sidecar consumed by `spm add` / `spm update` when it
1738
+ // regenerates the app's linker settings and sole embed phase.
1739
+ fs.writeFileSync(
1740
+ path.join(outputDir, '.spm-plugin-flavored-frameworks.json'),
1741
+ JSON.stringify(pluginFlavoredFrameworks, null, 2) + '\n',
1742
+ 'utf8',
1743
+ );
1744
+
1745
+ // Top-level aggregator: references every entry as .package(path:) and
1746
+ // depends on each via .product(...). No more inline targets — every
1747
+ // autolinked dep is a real SPM package in its own source dir.
1748
+ const aggregatorContent = generateAutolinkedPackageSwift({
1749
+ npmDeps: aggregatorPackageDeps,
1750
+ hasReactDep,
1751
+ xcframeworksRelPath,
1752
+ pluginPackageDeps,
1753
+ pluginProductDeps,
1754
+ });
1755
+ fs.mkdirSync(outputDir, {recursive: true});
1756
+ const outputPath = path.join(outputDir, 'Package.swift');
1757
+ fs.writeFileSync(outputPath, aggregatorContent, 'utf8');
1758
+ log(`Generated: ${path.relative(appRoot, outputPath)}`);
1759
+
1760
+ // .spm-sync-watch-paths: absolute paths (dirs OR files) the Xcode auto-sync
1761
+ // build phase watches for staleness. Three kinds of input, mixed freely:
1762
+ // 1. Each module's source dir (entryAbsDirs) — a dir; adding/removing a
1763
+ // child bumps its mtime so `find -newer` trips and the `sources:`
1764
+ // allowlist regenerates.
1765
+ // 2. Each npm dep's checked-in root `Package.swift` (a file) and its
1766
+ // `.react-native/` metadata dir. Editing a manifest does NOT bump the
1767
+ // source dir's mtime, so without these a manifest edit stays silently
1768
+ // stale until an unrelated install triggers a sync. The dep ROOT is
1769
+ // threaded through the entry (entry.root, from the autolinking model),
1770
+ // not derived by walking up from the (possibly nested) source dir.
1771
+ // 3. Plugin-contributed paths (e.g. Expo's own Package.swift / per-module
1772
+ // manifests) — already validated absolute in invokePlugins.
1773
+ // The phase distinguishes dir vs file with `-d`/`-f` at build time (no
1774
+ // markers). The existsSync filter here is safe: these paths come from a
1775
+ // successful sync so they exist now; a path that later VANISHES is caught at
1776
+ // phase time against this file and forces a re-sync.
1777
+ const watchCandidates /*: Array<string> */ = [...entryAbsDirs.values()];
1778
+ for (const entry of entries) {
1779
+ const root = entry.root;
1780
+ if (entry.origin !== 'npm' || root == null) {
1781
+ continue;
1782
+ }
1783
+ watchCandidates.push(path.join(root, 'Package.swift'));
1784
+ watchCandidates.push(path.join(root, '.react-native'));
1785
+ }
1786
+ watchCandidates.push(...pluginWatchPaths);
1787
+ const watchPaths = Array.from(new Set(watchCandidates))
1788
+ .filter(p => p.length > 0 && fs.existsSync(p))
1789
+ .sort();
1790
+ fs.writeFileSync(
1791
+ path.join(outputDir, '.spm-sync-watch-paths'),
1792
+ watchPaths.join('\n') + (watchPaths.length > 0 ? '\n' : ''),
1793
+ 'utf8',
1794
+ );
1795
+
1796
+ // AutolinkedAggregate is glue; needs at least one source file (Swift, so we
1797
+ // sidestep the Obj-C public-headers-dir requirement).
1798
+ const aggregateDir = path.join(outputDir, 'AutolinkedAggregate');
1799
+ fs.mkdirSync(aggregateDir, {recursive: true});
1800
+ const stubPath = path.join(aggregateDir, 'AutolinkedAggregate.swift');
1801
+ if (!fs.existsSync(stubPath)) {
1802
+ fs.writeFileSync(
1803
+ stubPath,
1804
+ '// Placeholder. Real native modules live in transitively-referenced sub-packages.\n',
1805
+ 'utf8',
1806
+ );
1807
+ }
1808
+ const legacyStub = path.join(aggregateDir, 'AutolinkedAggregate.m');
1809
+ if (fs.existsSync(legacyStub)) {
1810
+ fs.unlinkSync(legacyStub);
1811
+ }
1812
+
1813
+ // One-time migration cleanup: remove the legacy <appRoot>/autolinked/ tree
1814
+ // and any stale in-source `Package.swift` / `include/<Name>/` from the
1815
+ // prior in-place layout (those files lived in user source dirs and have
1816
+ // been replaced by the wrapper layout under outputDir).
1817
+ const legacyAutolinkedDir = path.join(appRoot, 'autolinked');
1818
+ if (
1819
+ fs.existsSync(legacyAutolinkedDir) &&
1820
+ path.resolve(legacyAutolinkedDir) !== path.resolve(outputDir)
1821
+ ) {
1822
+ fs.rmSync(legacyAutolinkedDir, {recursive: true, force: true});
1823
+ log(`Removed legacy autolinked/ tree`);
1824
+ }
1825
+ for (const absSource of entryAbsDirs.values()) {
1826
+ const legacyPkg = path.join(absSource, 'Package.swift');
1827
+ let removedLegacyPkg = false;
1828
+ try {
1829
+ const content = fs.readFileSync(legacyPkg, 'utf8');
1830
+ if (content.includes(AUTOGEN_MARKER)) {
1831
+ fs.unlinkSync(legacyPkg);
1832
+ removedLegacyPkg = true;
1833
+ log(
1834
+ `Removed legacy in-place synth: ${path.relative(appRoot, legacyPkg)}`,
1835
+ );
1836
+ }
1837
+ } catch {
1838
+ // not present – fine
1839
+ }
1840
+ // Only treat include/ as a legacy leftover when the in-place synth
1841
+ // manifest was just removed alongside it: a SCAFFOLDED dep legitimately
1842
+ // owns include/<SwiftName>/ (the namespaced shim headers behind its
1843
+ // publicHeadersPath: "include") — nuking it unconditionally would break
1844
+ // every dependent's `#import <SwiftName/Header.h>` on the next sync.
1845
+ if (removedLegacyPkg) {
1846
+ const legacyInclude = path.join(absSource, 'include');
1847
+ try {
1848
+ if (fs.lstatSync(legacyInclude).isDirectory()) {
1849
+ fs.rmSync(legacyInclude, {recursive: true, force: true});
1850
+ log(
1851
+ `Removed legacy in-place include/: ${path.relative(appRoot, legacyInclude)}`,
1852
+ );
1853
+ }
1854
+ } catch {
1855
+ // not present – fine
1856
+ }
1857
+ }
1858
+ }
1859
+ }
1860
+
1861
+ if (require.main === module) {
1862
+ try {
1863
+ main();
1864
+ } catch (e) {
1865
+ if (e instanceof RemoteVersionError) {
1866
+ log(e.message);
1867
+ process.exitCode = 2;
1868
+ } else {
1869
+ throw e;
1870
+ }
1871
+ }
1872
+ }
1873
+
1874
+ module.exports = {
1875
+ main,
1876
+ generateAutolinkedPackageSwift,
1877
+ generateSynthPackageSwift,
1878
+ reactDescriptor,
1879
+ linkHeaderTree,
1880
+ collectSpmSources,
1881
+ expandSpmSourceGlobs,
1882
+ findSelfManagedPackageDir,
1883
+ hasPodspec,
1884
+ hasMixedLanguageSources,
1885
+ MissingManifestError,
1886
+ reportMissingManifests,
1887
+ AUTOGEN_MARKER,
1888
+ };