diff --git a/.changeset/big-insects-move.md b/.changeset/big-insects-move.md new file mode 100644 index 000000000..50c724983 --- /dev/null +++ b/.changeset/big-insects-move.md @@ -0,0 +1,5 @@ +--- +"@callstack/repack": minor +--- + +Add support for Module Federation V2 diff --git a/.changeset/config.json b/.changeset/config.json index 1926d15a7..df83609cb 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -13,7 +13,13 @@ "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": ["tester-app", "tester-federation", "metro-compat-test", "website"], + "ignore": [ + "tester-app", + "tester-federation", + "tester-federation-v2", + "metro-compat-test", + "website" + ], "snapshot": { "useCalculatedVersion": true } diff --git a/.gitignore b/.gitignore index edddab162..c94f9103e 100644 --- a/.gitignore +++ b/.gitignore @@ -383,3 +383,6 @@ packages/**/docs # cocoapods **/Pods/ + +# mf-types +**/@mf-types/ diff --git a/apps/tester-app/android/gradle/wrapper/gradle-wrapper.properties b/apps/tester-app/android/gradle/wrapper/gradle-wrapper.properties index 0aaefbcaf..df97d72b8 100644 --- a/apps/tester-app/android/gradle/wrapper/gradle-wrapper.properties +++ b/apps/tester-app/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/apps/tester-app/ios/Podfile.lock b/apps/tester-app/ios/Podfile.lock index dff04c115..6ea42f4d4 100644 --- a/apps/tester-app/ios/Podfile.lock +++ b/apps/tester-app/ios/Podfile.lock @@ -1556,7 +1556,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - ReactTestApp-DevSupport (3.10.6): + - ReactTestApp-DevSupport (3.10.14): - React-Core - React-jsi - ReactTestApp-Resources (1.0.0-dev) @@ -1696,7 +1696,7 @@ DEPENDENCIES: - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - "ReactNativeHost (from `../../../node_modules/.pnpm/react-native-test-app@3.10.6_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7._jnc5b3losnxyfzhli62dpvggx4/node_modules/@rnx-kit/react-native-host`)" + - "ReactNativeHost (from `../../../node_modules/.pnpm/react-native-test-app@3.10.14_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7_4hoym5y635xztqjr6vc3r7wfte/node_modules/@rnx-kit/react-native-host`)" - ReactTestApp-DevSupport (from `../node_modules/react-native-test-app`) - ReactTestApp-Resources (from `..`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" @@ -1838,7 +1838,7 @@ EXTERNAL SOURCES: ReactCommon: :path: "../node_modules/react-native/ReactCommon" ReactNativeHost: - :path: "../../../node_modules/.pnpm/react-native-test-app@3.10.6_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7._jnc5b3losnxyfzhli62dpvggx4/node_modules/@rnx-kit/react-native-host" + :path: "../../../node_modules/.pnpm/react-native-test-app@3.10.14_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7_4hoym5y635xztqjr6vc3r7wfte/node_modules/@rnx-kit/react-native-host" ReactTestApp-DevSupport: :path: "../node_modules/react-native-test-app" ReactTestApp-Resources: @@ -1916,7 +1916,7 @@ SPEC CHECKSUMS: ReactCodegen: f4ec52507766ae9229e6daff936ef4819cd38d64 ReactCommon: 964a21f03865d9b98dcc64df7b172be083e108c9 ReactNativeHost: a27bb5af1c4d73dd3e80cc7ce295407f414e0e8c - ReactTestApp-DevSupport: eaa57f45a3a9d3c14415037f0a26eea7f55799d7 + ReactTestApp-DevSupport: ed439cce949caf074af3ae05051b4bd157ed4019 ReactTestApp-Resources: 155b35f70d032289bb4d2abc6caa9502748a166d RNCAsyncStorage: 3ad840f7b17b45ca7ebbbb0e80948564a9513315 RNSVG: 08750404f92a36162a92522cc77dee437be1d257 diff --git a/apps/tester-app/package.json b/apps/tester-app/package.json index 5f85b153d..6521720aa 100644 --- a/apps/tester-app/package.json +++ b/apps/tester-app/package.json @@ -26,11 +26,11 @@ "@react-native-community/cli": "15.0.0-alpha.2", "@react-native/babel-preset": "0.76.0-rc.6", "@react-native/typescript-config": "0.76.0-rc.6", - "@rsdoctor/rspack-plugin": "^0.4.1", - "@rspack/core": "1.0.1", + "@rsdoctor/rspack-plugin": "^0.4.5", + "@rspack/core": "1.0.8", "@rspack/plugin-react-refresh": "1.0.0", "@svgr/webpack": "^8.1.0", - "@swc/helpers": "^0.5.11", + "@swc/helpers": "^0.5.13", "@types/jest": "^29.5.12", "@types/react": "^18.2.51", "babel-loader": "^9.1.3", @@ -38,7 +38,7 @@ "get-port": "^6.1.2", "globby": "^13.1.2", "http-server": "^14.1.1", - "react-native-test-app": "^3.10.6", + "react-native-test-app": "^3.10.14", "terser-webpack-plugin": "^5.3.10", "typescript": "^5.5.3", "vitest": "^2.0.5", diff --git a/apps/tester-federation-v2/.gitignore b/apps/tester-federation-v2/.gitignore new file mode 100644 index 000000000..de13ae3b6 --- /dev/null +++ b/apps/tester-federation-v2/.gitignore @@ -0,0 +1,64 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +**/.xcode.env +**/.xcode.env.local + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output + +# Bundle artifact +*.jsbundle + +# Ruby / CocoaPods +**/Pods/ +/vendor/bundle/ + +# MF +**/@mf-types diff --git a/apps/tester-federation-v2/.ruby-version b/apps/tester-federation-v2/.ruby-version new file mode 100644 index 000000000..49cdd668e --- /dev/null +++ b/apps/tester-federation-v2/.ruby-version @@ -0,0 +1 @@ +2.7.6 diff --git a/apps/tester-federation-v2/Gemfile b/apps/tester-federation-v2/Gemfile new file mode 100644 index 000000000..a020a0e38 --- /dev/null +++ b/apps/tester-federation-v2/Gemfile @@ -0,0 +1,8 @@ +source 'https://rubygems.org' + +# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version +ruby '>= 2.6.10' + +# Exclude problematic versions of cocoapods and activesupport that causes build failures. +gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' +gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' diff --git a/apps/tester-federation-v2/Gemfile.lock b/apps/tester-federation-v2/Gemfile.lock new file mode 100644 index 000000000..93b4ad5c6 --- /dev/null +++ b/apps/tester-federation-v2/Gemfile.lock @@ -0,0 +1,117 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.7) + base64 + nkf + rexml + activesupport (7.1.3.3) + base64 + bigdecimal + concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + minitest (>= 5.1) + mutex_m + tzinfo (~> 2.0) + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + base64 (0.2.0) + bigdecimal (3.1.8) + claide (1.1.0) + cocoapods (1.15.2) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.15.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.15.2) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored2 (3.1.2) + concurrent-ruby (1.3.1) + connection_pool (2.4.1) + drb (2.2.1) + escape (0.0.4) + ethon (0.16.0) + ffi (>= 1.15.0) + ffi (1.17.0) + ffi (1.17.0-arm64-darwin) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + httpclient (2.8.3) + i18n (1.14.5) + concurrent-ruby (~> 1.0) + json (2.7.2) + minitest (5.23.1) + molinillo (0.8.0) + mutex_m (0.2.0) + nanaimo (0.3.0) + nap (1.1.0) + netrc (0.11.0) + nkf (0.2.0) + public_suffix (4.0.7) + rexml (3.2.8) + strscan (>= 3.0.9) + ruby-macho (2.5.1) + strscan (3.1.0) + typhoeus (1.4.1) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + xcodeproj (1.24.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + +PLATFORMS + arm64-darwin-21 + arm64-darwin-22 + ruby + +DEPENDENCIES + activesupport (>= 6.1.7.5, != 7.1.0) + cocoapods (>= 1.13, != 1.15.1, != 1.15.0) + +RUBY VERSION + ruby 2.7.6p219 + +BUNDLED WITH + 2.4.20 diff --git a/apps/tester-federation-v2/android/build.gradle b/apps/tester-federation-v2/android/build.gradle new file mode 100644 index 000000000..d8bcc3aeb --- /dev/null +++ b/apps/tester-federation-v2/android/build.gradle @@ -0,0 +1,43 @@ +buildscript { + apply(from: { + def searchDir = rootDir.toPath() + do { + def p = searchDir.resolve("node_modules/react-native-test-app/android/dependencies.gradle") + if (p.toFile().exists()) { + return p.toRealPath().toString() + } + } while (searchDir = searchDir.getParent()) + throw new GradleException("Could not find `react-native-test-app`"); + }()) + + repositories { + mavenCentral() + google() + } + + dependencies { + getReactNativeDependencies().each { dependency -> + classpath(dependency) + } + } +} + +allprojects { + repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url({ + def searchDir = rootDir.toPath() + do { + def p = searchDir.resolve("node_modules/react-native/android") + if (p.toFile().exists()) { + return p.toRealPath().toString() + } + } while (searchDir = searchDir.getParent()) + throw new GradleException("Could not find `react-native`"); + }()) + } + mavenCentral() + google() + } +} diff --git a/apps/tester-federation-v2/android/debug.keystore b/apps/tester-federation-v2/android/debug.keystore new file mode 100644 index 000000000..364e105ed Binary files /dev/null and b/apps/tester-federation-v2/android/debug.keystore differ diff --git a/apps/tester-federation-v2/android/gradle.properties b/apps/tester-federation-v2/android/gradle.properties new file mode 100644 index 000000000..a713e83e3 --- /dev/null +++ b/apps/tester-federation-v2/android/gradle.properties @@ -0,0 +1,53 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the Gradle Daemon. The setting is +# particularly useful for configuring JVM memory settings for build performance. +# This does not affect the JVM settings for the Gradle client VM. +# The default is `-Xmx512m -XX:MaxMetaspaceSize=256m`. +org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will fork up to org.gradle.workers.max JVMs to execute +# projects in parallel. To learn more about parallel task execution, see the +# section on Gradle build performance: +# https://docs.gradle.org/current/userguide/performance.html#parallel_execution. +# Default is `false`. +#org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true +# Jetifier randomly fails on these libraries +android.jetifier.ignorelist=hermes-android,react-android + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +# Note that this is incompatible with web debugging. +#newArchEnabled=true +#bridgelessEnabled=true + +# Uncomment the line below to build React Native from source. +#react.buildFromSource=true + +# Version of Android NDK to build against. +#ANDROID_NDK_VERSION=26.1.10909125 + +# Version of Kotlin to build against. +#KOTLIN_VERSION=1.8.22 diff --git a/apps/tester-federation-v2/android/gradle/wrapper/gradle-wrapper.jar b/apps/tester-federation-v2/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..e6441136f Binary files /dev/null and b/apps/tester-federation-v2/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/apps/tester-federation-v2/android/gradle/wrapper/gradle-wrapper.properties b/apps/tester-federation-v2/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..df97d72b8 --- /dev/null +++ b/apps/tester-federation-v2/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/apps/tester-federation-v2/android/gradlew b/apps/tester-federation-v2/android/gradlew new file mode 100755 index 000000000..f5feea6d6 --- /dev/null +++ b/apps/tester-federation-v2/android/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/apps/tester-federation-v2/android/gradlew.bat b/apps/tester-federation-v2/android/gradlew.bat new file mode 100644 index 000000000..9d21a2183 --- /dev/null +++ b/apps/tester-federation-v2/android/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/apps/tester-federation-v2/android/settings.gradle b/apps/tester-federation-v2/android/settings.gradle new file mode 100644 index 000000000..0a2ba67cc --- /dev/null +++ b/apps/tester-federation-v2/android/settings.gradle @@ -0,0 +1,21 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + google() + } +} + +rootProject.name = "ModuleFederationTesterV2" + +apply(from: { + def searchDir = rootDir.toPath() + do { + def p = searchDir.resolve("node_modules/react-native-test-app/test-app.gradle") + if (p.toFile().exists()) { + return p.toRealPath().toString() + } + } while (searchDir = searchDir.getParent()) + throw new GradleException("Could not find `react-native-test-app`"); +}()) +applyTestAppSettings(settings) diff --git a/apps/tester-federation-v2/app.json b/apps/tester-federation-v2/app.json new file mode 100644 index 000000000..7d155773f --- /dev/null +++ b/apps/tester-federation-v2/app.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://raw.githubusercontent.com/microsoft/react-native-test-app/trunk/schema.json", + "name": "ModuleFederationTesterV2", + "displayName": "ModuleFederationTesterV2", + "singleApp": "host-app", + "components": [ + { + "appKey": "HostApp", + "displayName": "HostApp", + "slug": "host-app" + } + ], + "android": { + "package": "com.tester.federationV2", + "signingConfigs": { + "debug": { + "storeFile": "android/debug.keystore" + }, + "release": { + "storeFile": "android/debug.keystore" + } + } + }, + "ios": { + "bundleIdentifier": "com.tester.federationV2" + }, + "resources": { + "android": [], + "ios": [] + } +} diff --git a/apps/tester-federation-v2/babel.config.js b/apps/tester-federation-v2/babel.config.js new file mode 100644 index 000000000..d4461aec7 --- /dev/null +++ b/apps/tester-federation-v2/babel.config.js @@ -0,0 +1,4 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], + comments: true, +}; diff --git a/apps/tester-federation-v2/index.js b/apps/tester-federation-v2/index.js new file mode 100644 index 000000000..e10fb4bc9 --- /dev/null +++ b/apps/tester-federation-v2/index.js @@ -0,0 +1,6 @@ +import { AppRegistry } from 'react-native'; + +import { components } from './app.json'; +import App from './src/host/App'; + +AppRegistry.registerComponent(components[0].appKey, () => App); diff --git a/apps/tester-federation-v2/ios/ModuleFederationTesterV2.xcworkspace/contents.xcworkspacedata b/apps/tester-federation-v2/ios/ModuleFederationTesterV2.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..57f64952a --- /dev/null +++ b/apps/tester-federation-v2/ios/ModuleFederationTesterV2.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/apps/tester-federation-v2/ios/Podfile b/apps/tester-federation-v2/ios/Podfile new file mode 100644 index 000000000..ee7901b45 --- /dev/null +++ b/apps/tester-federation-v2/ios/Podfile @@ -0,0 +1,15 @@ +ws_dir = Pathname.new(__dir__) +ws_dir = ws_dir.parent until + File.exist?("#{ws_dir}/node_modules/react-native-test-app/test_app.rb") || + ws_dir.expand_path.to_s == '/' +require "#{ws_dir}/node_modules/react-native-test-app/test_app.rb" + +workspace 'ModuleFederationTesterV2.xcworkspace' + +options = { + :bridgeless_enabled => false, + :fabric_enabled => true, + :hermes_enabled => true, +} + +use_test_app! options diff --git a/apps/tester-federation-v2/ios/Podfile.lock b/apps/tester-federation-v2/ios/Podfile.lock new file mode 100644 index 000000000..2697e4470 --- /dev/null +++ b/apps/tester-federation-v2/ios/Podfile.lock @@ -0,0 +1,1971 @@ +PODS: + - boost (1.84.0) + - callstack-repack (5.0.0-alpha.0): + - DoubleConversion + - glog + - hermes-engine + - JWTDecode (~> 3.0.0) + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SwiftyRSA (~> 1.7) + - Yoga + - DoubleConversion (1.1.6) + - FBLazyVector (0.76.0-rc.6) + - fmt (9.1.0) + - glog (0.3.5) + - hermes-engine (0.76.0-rc.6): + - hermes-engine/Pre-built (= 0.76.0-rc.6) + - hermes-engine/Pre-built (0.76.0-rc.6) + - JWTDecode (3.0.1) + - RCT-Folly (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Default (= 2024.01.01.00) + - RCT-Folly/Default (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Fabric (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCTDeprecation (0.76.0-rc.6) + - RCTRequired (0.76.0-rc.6) + - RCTTypeSafety (0.76.0-rc.6): + - FBLazyVector (= 0.76.0-rc.6) + - RCTRequired (= 0.76.0-rc.6) + - React-Core (= 0.76.0-rc.6) + - React (0.76.0-rc.6): + - React-Core (= 0.76.0-rc.6) + - React-Core/DevSupport (= 0.76.0-rc.6) + - React-Core/RCTWebSocket (= 0.76.0-rc.6) + - React-RCTActionSheet (= 0.76.0-rc.6) + - React-RCTAnimation (= 0.76.0-rc.6) + - React-RCTBlob (= 0.76.0-rc.6) + - React-RCTImage (= 0.76.0-rc.6) + - React-RCTLinking (= 0.76.0-rc.6) + - React-RCTNetwork (= 0.76.0-rc.6) + - React-RCTSettings (= 0.76.0-rc.6) + - React-RCTText (= 0.76.0-rc.6) + - React-RCTVibration (= 0.76.0-rc.6) + - React-callinvoker (0.76.0-rc.6) + - React-Core (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.76.0-rc.6) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/CoreModulesHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/Default (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/DevSupport (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.76.0-rc.6) + - React-Core/RCTWebSocket (= 0.76.0-rc.6) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTActionSheetHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTAnimationHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTBlobHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTImageHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTLinkingHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTNetworkHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTSettingsHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTTextHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTVibrationHeaders (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTWebSocket (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.76.0-rc.6) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-CoreModules (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety (= 0.76.0-rc.6) + - React-Core/CoreModulesHeaders (= 0.76.0-rc.6) + - React-jsi (= 0.76.0-rc.6) + - React-jsinspector + - React-NativeModulesApple + - React-RCTBlob + - React-RCTImage (= 0.76.0-rc.6) + - ReactCodegen + - ReactCommon + - SocketRocket (= 0.7.1) + - React-cxxreact (0.76.0-rc.6): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.76.0-rc.6) + - React-debug (= 0.76.0-rc.6) + - React-jsi (= 0.76.0-rc.6) + - React-jsinspector + - React-logger (= 0.76.0-rc.6) + - React-perflogger (= 0.76.0-rc.6) + - React-runtimeexecutor (= 0.76.0-rc.6) + - React-timing (= 0.76.0-rc.6) + - React-debug (0.76.0-rc.6) + - React-defaultsnativemodule (0.76.0-rc.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-domnativemodule + - React-Fabric + - React-featureflags + - React-featureflagsnativemodule + - React-graphics + - React-idlecallbacksnativemodule + - React-ImageManager + - React-microtasksnativemodule + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-domnativemodule (0.76.0-rc.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.76.0-rc.6) + - React-Fabric/attributedstring (= 0.76.0-rc.6) + - React-Fabric/componentregistry (= 0.76.0-rc.6) + - React-Fabric/componentregistrynative (= 0.76.0-rc.6) + - React-Fabric/components (= 0.76.0-rc.6) + - React-Fabric/core (= 0.76.0-rc.6) + - React-Fabric/dom (= 0.76.0-rc.6) + - React-Fabric/imagemanager (= 0.76.0-rc.6) + - React-Fabric/leakchecker (= 0.76.0-rc.6) + - React-Fabric/mounting (= 0.76.0-rc.6) + - React-Fabric/observers (= 0.76.0-rc.6) + - React-Fabric/scheduler (= 0.76.0-rc.6) + - React-Fabric/telemetry (= 0.76.0-rc.6) + - React-Fabric/templateprocessor (= 0.76.0-rc.6) + - React-Fabric/uimanager (= 0.76.0-rc.6) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.0-rc.6) + - React-Fabric/components/root (= 0.76.0-rc.6) + - React-Fabric/components/view (= 0.76.0-rc.6) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric/core (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/dom (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.76.0-rc.6) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers/events (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.76.0-rc.6) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager/consistency (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricComponents (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.76.0-rc.6) + - React-FabricComponents/textlayoutmanager (= 0.76.0-rc.6) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.76.0-rc.6) + - React-FabricComponents/components/iostextinput (= 0.76.0-rc.6) + - React-FabricComponents/components/modal (= 0.76.0-rc.6) + - React-FabricComponents/components/rncore (= 0.76.0-rc.6) + - React-FabricComponents/components/safeareaview (= 0.76.0-rc.6) + - React-FabricComponents/components/scrollview (= 0.76.0-rc.6) + - React-FabricComponents/components/text (= 0.76.0-rc.6) + - React-FabricComponents/components/textinput (= 0.76.0-rc.6) + - React-FabricComponents/components/unimplementedview (= 0.76.0-rc.6) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/inputaccessory (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/iostextinput (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/modal (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/rncore (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/safeareaview (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/scrollview (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/text (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/textinput (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/unimplementedview (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/textlayoutmanager (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricImage (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired (= 0.76.0-rc.6) + - RCTTypeSafety (= 0.76.0-rc.6) + - React-Fabric + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.76.0-rc.6) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-featureflags (0.76.0-rc.6) + - React-featureflagsnativemodule (0.76.0-rc.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-graphics (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-jsi + - React-jsiexecutor + - React-utils + - React-hermes (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact (= 0.76.0-rc.6) + - React-jsi + - React-jsiexecutor (= 0.76.0-rc.6) + - React-jsinspector + - React-perflogger (= 0.76.0-rc.6) + - React-runtimeexecutor + - React-idlecallbacksnativemodule (0.76.0-rc.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-ImageManager (0.76.0-rc.6): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-cxxreact + - React-debug + - React-jsi + - React-jsi (0.76.0-rc.6): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-jsiexecutor (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact (= 0.76.0-rc.6) + - React-jsi (= 0.76.0-rc.6) + - React-jsinspector + - React-perflogger (= 0.76.0-rc.6) + - React-jsinspector (0.76.0-rc.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-featureflags + - React-jsi + - React-perflogger (= 0.76.0-rc.6) + - React-runtimeexecutor (= 0.76.0-rc.6) + - React-jsitracing (0.76.0-rc.6): + - React-jsi + - React-logger (0.76.0-rc.6): + - glog + - React-Mapbuffer (0.76.0-rc.6): + - glog + - React-debug + - React-microtasksnativemodule (0.76.0-rc.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context (4.11.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common (= 4.11.0) + - react-native-safe-area-context/fabric (= 4.11.0) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/common (4.11.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/fabric (4.11.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-nativeconfig (0.76.0-rc.6) + - React-NativeModulesApple (0.76.0-rc.6): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-jsinspector + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.76.0-rc.6): + - DoubleConversion + - RCT-Folly (= 2024.01.01.00) + - React-performancetimeline (0.76.0-rc.6): + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact + - React-timing + - React-RCTActionSheet (0.76.0-rc.6): + - React-Core/RCTActionSheetHeaders (= 0.76.0-rc.6) + - React-RCTAnimation (0.76.0-rc.6): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTAppDelegate (0.76.0-rc.6): + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-nativeconfig + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon + - React-RCTBlob (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTNetwork + - ReactCodegen + - ReactCommon + - React-RCTFabric (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-nativeconfig + - React-performancetimeline + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTImage (0.76.0-rc.6): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCodegen + - ReactCommon + - React-RCTLinking (0.76.0-rc.6): + - React-Core/RCTLinkingHeaders (= 0.76.0-rc.6) + - React-jsi (= 0.76.0-rc.6) + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - ReactCommon/turbomodule/core (= 0.76.0-rc.6) + - React-RCTNetwork (0.76.0-rc.6): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTSettings (0.76.0-rc.6): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTText (0.76.0-rc.6): + - React-Core/RCTTextHeaders (= 0.76.0-rc.6) + - Yoga + - React-RCTVibration (0.76.0-rc.6): + - RCT-Folly (= 2024.01.01.00) + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-rendererconsistency (0.76.0-rc.6) + - React-rendererdebug (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - RCT-Folly (= 2024.01.01.00) + - React-debug + - React-rncore (0.76.0-rc.6) + - React-RuntimeApple (0.76.0-rc.6): + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - React-RuntimeCore (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - React-runtimeexecutor (0.76.0-rc.6): + - React-jsi (= 0.76.0-rc.6) + - React-RuntimeHermes (0.76.0-rc.6): + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsitracing + - React-nativeconfig + - React-RuntimeCore + - React-utils + - React-runtimescheduler (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-timing + - React-utils + - React-timing (0.76.0-rc.6) + - React-utils (0.76.0-rc.6): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-debug + - React-jsi (= 0.76.0-rc.6) + - ReactCodegen (0.76.0-rc.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactCommon (0.76.0-rc.6): + - ReactCommon/turbomodule (= 0.76.0-rc.6) + - ReactCommon/turbomodule (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.76.0-rc.6) + - React-cxxreact (= 0.76.0-rc.6) + - React-jsi (= 0.76.0-rc.6) + - React-logger (= 0.76.0-rc.6) + - React-perflogger (= 0.76.0-rc.6) + - ReactCommon/turbomodule/bridging (= 0.76.0-rc.6) + - ReactCommon/turbomodule/core (= 0.76.0-rc.6) + - ReactCommon/turbomodule/bridging (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.76.0-rc.6) + - React-cxxreact (= 0.76.0-rc.6) + - React-jsi (= 0.76.0-rc.6) + - React-logger (= 0.76.0-rc.6) + - React-perflogger (= 0.76.0-rc.6) + - ReactCommon/turbomodule/core (0.76.0-rc.6): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.76.0-rc.6) + - React-cxxreact (= 0.76.0-rc.6) + - React-debug (= 0.76.0-rc.6) + - React-featureflags (= 0.76.0-rc.6) + - React-jsi (= 0.76.0-rc.6) + - React-logger (= 0.76.0-rc.6) + - React-perflogger (= 0.76.0-rc.6) + - React-utils (= 0.76.0-rc.6) + - ReactNativeHost (0.5.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - ReactTestApp-DevSupport (3.10.14): + - React-Core + - React-jsi + - RNScreens (3.34.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNScreens/common (= 3.34.0) + - Yoga + - RNScreens/common (3.34.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - SocketRocket (0.7.1) + - SwiftyRSA (1.7.0): + - SwiftyRSA/ObjC (= 1.7.0) + - SwiftyRSA/ObjC (1.7.0) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - "callstack-repack (from `../node_modules/@callstack/repack`)" + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactCodegen (from `build/generated/ios`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - "ReactNativeHost (from `../../../node_modules/.pnpm/react-native-test-app@3.10.14_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7_4hoym5y635xztqjr6vc3r7wfte/node_modules/@rnx-kit/react-native-host`)" + - ReactTestApp-DevSupport (from `../node_modules/react-native-test-app`) + - RNScreens (from `../node_modules/react-native-screens`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - JWTDecode + - SocketRocket + - SwiftyRSA + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + callstack-repack: + :path: "../node_modules/@callstack/repack" + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2024-09-09-RNv0.76.0-db6d12e202e15f7a446d8848d6ca8f7abb3cfb32 + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-defaultsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + React-nativeconfig: + :path: "../node_modules/react-native/ReactCommon" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactCodegen: + :path: build/generated/ios + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + ReactNativeHost: + :path: "../../../node_modules/.pnpm/react-native-test-app@3.10.14_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7_4hoym5y635xztqjr6vc3r7wfte/node_modules/@rnx-kit/react-native-host" + ReactTestApp-DevSupport: + :path: "../node_modules/react-native-test-app" + RNScreens: + :path: "../node_modules/react-native-screens" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: 1dca942403ed9342f98334bf4c3621f011aa7946 + callstack-repack: 101158626fc46ba3d24c4b56d81188c12427b49b + DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 + FBLazyVector: 319d66555ce769137a84559a19fb8197733a68e1 + fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be + glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a + hermes-engine: 8d54e8b503c75afaf8f4cf61a22e2fe8e1badcde + JWTDecode: 2eed97c2fa46ccaf3049a787004eedf0be474a87 + RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648 + RCTDeprecation: 41b81ffee0755cd07c0ccc9132bda4d15548f54c + RCTRequired: 67416fa5a975096df7226fed460bc468226440a9 + RCTTypeSafety: b5997285e05d3e2960fd1b5704cca2066db42300 + React: 2bbc56a13da3eb90a3417be54d7882d653a5ce3d + React-callinvoker: 6cbc2bb752c2ca492ea4d36c5b05436c60bfaa92 + React-Core: 39d2057537745f93b1c2cc4ad6c210e0d269bb02 + React-CoreModules: eb7ab7dbd2ae00d6a19f60ec7780f81c266ebd78 + React-cxxreact: f911fc86b34a7c7a166a8f582aaf38f350b787d2 + React-debug: 612aa1f74bd6ef1ec2d34ea427d2316428757fb7 + React-defaultsnativemodule: 8d4f282d45c9e5c8b6dfb21d3818ecb4d438929e + React-domnativemodule: 3065cd6597dc08daae2bce52531e2c9f37bbc8c7 + React-Fabric: b365a71c07e9b2902299b68419b28e8c4277a557 + React-FabricComponents: d680578e824bbdef418cae70697786bb12b248de + React-FabricImage: f223fd3a32642cc157d6013a97695a69b4d416b1 + React-featureflags: 0fa2e6491b2ed1753b495229b292670a37aeb8f5 + React-featureflagsnativemodule: f9bc68341172a699c213aa689635901c3c4b0c4d + React-graphics: b17369a2aeb3949957b59ce0f4b2118a0bde86b4 + React-hermes: 1beb90db74f2a3c06277ba3dee4a9cbdc1d38b57 + React-idlecallbacksnativemodule: 3884619506b02e5cc71a7f23e46dad679e441eb6 + React-ImageManager: 286882bd4fe41bee58da68403024efefb54e7601 + React-jserrorhandler: e95815657ee08ea88ab4890309ffb2bfc2cb5f54 + React-jsi: 33cd45a947ce461e228179a7b1f175742d528fff + React-jsiexecutor: 55a0a1c8ba0025648131519c6aa8fe8e58415b4d + React-jsinspector: 1fa973c8bfcc1747cdf880e4470047e37667b1df + React-jsitracing: 1c49248a400cc501b692517bebbd6cde2e3d236f + React-logger: a6d7479d445d6b557ab73729dc71db14d35b0f93 + React-Mapbuffer: 30cda50703756c688d4cd016ee84b54b80f6435e + React-microtasksnativemodule: 8fc3fb2e65975db9f323a4d84a44d313b57c4f33 + react-native-safe-area-context: f1fda705dfe14355f41933debb5932887e234cc5 + React-nativeconfig: 6bf19f5279402e095a35ac880144c14aa9b63df4 + React-NativeModulesApple: 1636a3fcfc14025481c5933f4582a512f65cb152 + React-perflogger: c6e000a569b3a45d5de65b0bf81e35d91f3fe5a8 + React-performancetimeline: 4e2fed8ce8f5b1b303b4e6ebf5a5f85494fd0a85 + React-RCTActionSheet: 0169a12a5f5085d31d93294c0302aff66e9f9cee + React-RCTAnimation: a2039d635e1519bd736b983cce266e9081b073ee + React-RCTAppDelegate: 2087344d4417abee751eb7f65b6ef572119f0b05 + React-RCTBlob: 22dbeb1e49faf83bda307060162de6c22becbe47 + React-RCTFabric: 1c66506f73632c5d38b400e669ca94706c19c8b0 + React-RCTImage: dbdc3981f8b0fc6e0f358cb9a4db8bf42c0fea7d + React-RCTLinking: 5705a5ae9ea58b803a4b6bfbb1b0f6baf377bb76 + React-RCTNetwork: a6e333a48abdbe892fc2961c6cf32472969acb01 + React-RCTSettings: d8a94fb83b800d8c272503b8312ebac019b40d08 + React-RCTText: dd601ba38405f56c6bbb936815fbf8f1dabc33c7 + React-RCTVibration: 249ce3aa017d9093228372b193fa55741cc73fe7 + React-rendererconsistency: 660af52b5b8b2599f0dfde7f8212fb8bf684d968 + React-rendererdebug: 782760e7f56bc6d78c7917b8000442c79bb0ab15 + React-rncore: 855146e1e0b9bdeeddf6f6f1aca5c68d306b5e44 + React-RuntimeApple: fc2293ed693e2f8ba738a34aac98dafbfe873ffe + React-RuntimeCore: 17d33d54ef200d41829a9d0aa95ad454583faf60 + React-runtimeexecutor: 6ed13de8c9a67c6001ba82ca108055d8acfc2f8b + React-RuntimeHermes: d9db4a678c02b3ac5f3901a528d37446083de0d8 + React-runtimescheduler: 88658434e250d004d77f3b8f94078cf5836ff9b5 + React-timing: 9e213f60979bd63e39cc81f07a02a39b1ba694d5 + React-utils: 7b5f884193005345985dad15b84f324d6bc7731d + ReactCodegen: f4ec52507766ae9229e6daff936ef4819cd38d64 + ReactCommon: 964a21f03865d9b98dcc64df7b172be083e108c9 + ReactNativeHost: 3aa90998ab38ddbcfd0075b88d1062d1488cf749 + ReactTestApp-DevSupport: ed439cce949caf074af3ae05051b4bd157ed4019 + RNScreens: de6e57426ba0e6cbc3fb5b4f496e7f08cb2773c2 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + SwiftyRSA: 8c6dd1ea7db1b8dc4fb517a202f88bb1354bc2c6 + Yoga: dcf6b28b5105d538537e656bf4e239f4d87fc546 + +PODFILE CHECKSUM: a2fe66c9f356ead5b62cb5a645336db60f03a64d + +COCOAPODS: 1.15.2 diff --git a/apps/tester-federation-v2/package.json b/apps/tester-federation-v2/package.json new file mode 100644 index 000000000..2ac631350 --- /dev/null +++ b/apps/tester-federation-v2/package.json @@ -0,0 +1,42 @@ +{ + "name": "tester-federation-v2", + "version": "0.0.1", + "private": true, + "scripts": { + "android": "react-native run-android", + "ios": "react-native run-ios", + "start:hostapp": "react-native webpack-start --webpackConfig rspack.config.host-app.mjs", + "start:miniapp": "react-native webpack-start --webpackConfig rspack.config.mini-app.mjs --port 8082" + }, + "dependencies": { + "@callstack/repack": "workspace:*", + "@module-federation/enhanced": "0.6.10", + "@react-navigation/native": "^6.1.18", + "@react-navigation/native-stack": "^6.10.1", + "react": "18.3.1", + "react-native": "0.76.0-rc.6", + "react-native-safe-area-context": "^4.11.0", + "react-native-screens": "^3.34.0" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@react-native/babel-preset": "0.76.0-rc.6", + "@react-native/typescript-config": "0.76.0-rc.6", + "@react-native-community/cli": "15.0.0-alpha.2", + "@rsdoctor/rspack-plugin": "^0.4.5", + "@rspack/core": "1.0.8", + "@rspack/plugin-react-refresh": "1.0.0", + "@swc/helpers": "^0.5.13", + "@types/jest": "^29.5.12", + "@types/react": "^18.2.51", + "babel-loader": "^9.1.3", + "execa": "^6.1.0", + "get-port": "^6.1.2", + "globby": "^13.1.2", + "http-server": "^14.1.1", + "react-native-test-app": "^3.10.14", + "terser-webpack-plugin": "^5.3.3", + "typescript": "^5.5.3", + "webpack": "^5.91.0" + } +} diff --git a/apps/tester-federation-v2/react-native.config.js b/apps/tester-federation-v2/react-native.config.js new file mode 100644 index 000000000..d01dff358 --- /dev/null +++ b/apps/tester-federation-v2/react-native.config.js @@ -0,0 +1,13 @@ +const { configureProjects } = require('react-native-test-app'); + +module.exports = { + project: configureProjects({ + android: { + sourceDir: 'android', + }, + ios: { + sourceDir: 'ios', + }, + }), + commands: require('@callstack/repack/commands/rspack'), +}; diff --git a/apps/tester-federation-v2/rspack.config.host-app.mjs b/apps/tester-federation-v2/rspack.config.host-app.mjs new file mode 100644 index 000000000..c83706221 --- /dev/null +++ b/apps/tester-federation-v2/rspack.config.host-app.mjs @@ -0,0 +1,166 @@ +// @ts-check +import { createRequire } from 'node:module'; +import path from 'node:path'; +import * as Repack from '@callstack/repack'; +import rspack from '@rspack/core'; + +const dirname = Repack.getDirname(import.meta.url); +const { resolve } = createRequire(import.meta.url); + +/** @type {(env: import('@callstack/repack').EnvOptions) => import('@rspack/core').Configuration} */ +export default (env) => { + const { + mode = 'development', + context = dirname, + entry = './index.js', + platform = process.env.PLATFORM, + minimize = mode === 'production', + devServer = undefined, + bundleFilename = undefined, + sourceMapFilename = undefined, + assetsPath = undefined, + } = env; + + if (!platform) { + throw new Error('Missing platform'); + } + + process.env.BABEL_ENV = mode; + + return { + mode, + devtool: false, + context, + entry, + resolve: { + ...Repack.getResolveOptions(platform), + }, + output: { + clean: true, + hashFunction: 'xxhash64', + path: path.join(dirname, 'build', 'host-app', platform), + filename: 'index.bundle', + chunkFilename: '[name].chunk.bundle', + publicPath: Repack.getPublicPath({ platform, devServer }), + uniqueName: 'MF2-HostApp', + }, + optimization: { + minimize, + chunkIds: 'named', + }, + module: { + rules: [ + Repack.REACT_NATIVE_LOADING_RULES, + Repack.NODE_MODULES_LOADING_RULES, + /* repack is symlinked to a local workspace */ + { + test: /\.[jt]sx?$/, + type: 'javascript/auto', + include: [/repack[/\\]dist/], + use: { + loader: 'builtin:swc-loader', + options: { + env: { targets: { 'react-native': '0.74' } }, + jsc: { externalHelpers: true }, + }, + }, + }, + /* codebase rules */ + { + test: /\.[jt]sx?$/, + type: 'javascript/auto', + exclude: [/node_modules/, /repack[/\\]dist/], + use: { + loader: 'builtin:swc-loader', + /** @type {import('@rspack/core').SwcLoaderOptions} */ + options: { + sourceMaps: true, + env: { + targets: { 'react-native': '0.74' }, + }, + jsc: { + externalHelpers: true, + transform: { + react: { + runtime: 'automatic', + }, + }, + }, + }, + }, + }, + Repack.REACT_NATIVE_CODEGEN_RULES, + { + test: Repack.getAssetExtensionsRegExp(Repack.ASSET_EXTENSIONS), + use: { + loader: '@callstack/repack/assets-loader', + options: { + platform, + devServerEnabled: Boolean(devServer), + }, + }, + }, + ], + }, + plugins: [ + new Repack.RepackPlugin({ + context, + mode, + platform, + devServer, + output: { + bundleFilename, + sourceMapFilename, + assetsPath, + }, + }), + new Repack.plugins.ModuleFederationPluginV2({ + name: 'HostApp', + filename: 'HostApp.container.js.bundle', + remotes: { + MiniApp: `MiniApp@http://localhost:8082/${platform}/mf-manifest.json`, + }, + dts: false, + runtimePlugins: [ + resolve('@callstack/repack/federation-runtime-plugin'), + ], + shared: { + react: { + singleton: true, + eager: true, + requiredVersion: '18.3.1', + }, + 'react-native': { + singleton: true, + eager: true, + requiredVersion: '0.76.0-rc.6', + }, + '@react-navigation/native': { + singleton: true, + eager: true, + requiredVersion: '^6.1.18', + }, + '@react-navigation/native-stack': { + singleton: true, + eager: true, + requiredVersion: '^6.10.1', + }, + 'react-native-safe-area-context': { + singleton: true, + eager: true, + requiredVersion: '^4.11.0', + }, + 'react-native-screens': { + singleton: true, + eager: true, + requiredVersion: '^3.34.0', + }, + }, + }), + // silence missing @react-native-masked-view optionally required by @react-navigation/elements + new rspack.IgnorePlugin({ + resourceRegExp: /^@react-native-masked-view/, + }), + ], + }; +}; diff --git a/apps/tester-federation-v2/rspack.config.mini-app.mjs b/apps/tester-federation-v2/rspack.config.mini-app.mjs new file mode 100644 index 000000000..a433affe5 --- /dev/null +++ b/apps/tester-federation-v2/rspack.config.mini-app.mjs @@ -0,0 +1,162 @@ +// @ts-check +import path from 'node:path'; +import * as Repack from '@callstack/repack'; +import rspack from '@rspack/core'; + +const dirname = Repack.getDirname(import.meta.url); + +/** @type {(env: import('@callstack/repack').EnvOptions) => import('@rspack/core').Configuration} */ +export default (env) => { + const { + mode = 'development', + context = dirname, + platform = process.env.PLATFORM, + minimize = mode === 'production', + devServer = undefined, + bundleFilename = undefined, + sourceMapFilename = undefined, + assetsPath = undefined, + } = env; + + if (!platform) { + throw new Error('Missing platform'); + } + + process.env.BABEL_ENV = mode; + + return { + mode, + devtool: false, + context, + entry: {}, + resolve: { + ...Repack.getResolveOptions(platform), + }, + output: { + clean: true, + hashFunction: 'xxhash64', + path: path.join(dirname, 'build', 'mini-app', platform), + filename: 'index.bundle', + chunkFilename: '[name].chunk.bundle', + publicPath: Repack.getPublicPath({ platform, devServer }), + uniqueName: 'MF2-MiniApp', + }, + optimization: { + minimize, + chunkIds: 'named', + }, + module: { + rules: [ + Repack.REACT_NATIVE_LOADING_RULES, + Repack.NODE_MODULES_LOADING_RULES, + /* repack is symlinked to a local workspace */ + { + test: /\.[jt]sx?$/, + type: 'javascript/auto', + include: [/repack[/\\]dist/], + use: { + loader: 'builtin:swc-loader', + options: { + env: { targets: { 'react-native': '0.74' } }, + jsc: { externalHelpers: true }, + }, + }, + }, + /* codebase rules */ + { + test: /\.[jt]sx?$/, + type: 'javascript/auto', + exclude: [/node_modules/, /repack[/\\]dist/], + use: { + loader: 'builtin:swc-loader', + /** @type {import('@rspack/core').SwcLoaderOptions} */ + options: { + sourceMaps: true, + env: { + targets: { 'react-native': '0.74' }, + }, + jsc: { + externalHelpers: true, + transform: { + react: { + runtime: 'automatic', + }, + }, + }, + }, + }, + }, + Repack.REACT_NATIVE_CODEGEN_RULES, + { + test: Repack.getAssetExtensionsRegExp(Repack.ASSET_EXTENSIONS), + use: { + loader: '@callstack/repack/assets-loader', + options: { + platform, + devServerEnabled: Boolean(devServer), + inline: true, + }, + }, + }, + ], + }, + plugins: [ + new Repack.RepackPlugin({ + context, + mode, + platform, + devServer, + output: { + bundleFilename, + sourceMapFilename, + assetsPath, + }, + }), + new Repack.plugins.ModuleFederationPluginV2({ + name: 'MiniApp', + filename: 'MiniApp.container.js.bundle', + exposes: { + './MiniAppNavigator': './src/mini/navigation/MainNavigator', + }, + dts: false, + getPublicPath: `return "http://localhost:8082/${platform}/"`, + shared: { + react: { + singleton: true, + eager: false, + requiredVersion: '18.3.1', + }, + 'react-native': { + singleton: true, + eager: false, + requiredVersion: '0.76.0-rc.6', + }, + '@react-navigation/native': { + singleton: true, + eager: false, + requiredVersion: '^6.1.18', + }, + '@react-navigation/native-stack': { + singleton: true, + eager: false, + requiredVersion: '^6.10.1', + }, + 'react-native-safe-area-context': { + singleton: true, + eager: false, + requiredVersion: '^4.11.0', + }, + 'react-native-screens': { + singleton: true, + eager: false, + requiredVersion: '^3.34.0', + }, + }, + }), + // silence missing @react-native-masked-view optionally required by @react-navigation/elements + new rspack.IgnorePlugin({ + resourceRegExp: /^@react-native-masked-view/, + }), + ], + }; +}; diff --git a/apps/tester-federation-v2/src/host/App.tsx b/apps/tester-federation-v2/src/host/App.tsx new file mode 100644 index 000000000..4fd1a6851 --- /dev/null +++ b/apps/tester-federation-v2/src/host/App.tsx @@ -0,0 +1,12 @@ +import { NavigationContainer } from '@react-navigation/native'; +import MainNavigator from './navigation/MainNavigator'; + +const App = () => { + return ( + + + + ); +}; + +export default App; diff --git a/apps/tester-federation-v2/src/host/navigation/MainNavigator.tsx b/apps/tester-federation-v2/src/host/navigation/MainNavigator.tsx new file mode 100644 index 000000000..bb7a5ad31 --- /dev/null +++ b/apps/tester-federation-v2/src/host/navigation/MainNavigator.tsx @@ -0,0 +1,55 @@ +import { + type NativeStackNavigationProp, + createNativeStackNavigator, +} from '@react-navigation/native-stack'; +import { StyleSheet } from 'react-native'; + +import DetailScreen from '../screens/DetailScreen'; +import HomeScreen from '../screens/HomeScreen'; +import MiniAppScreen from '../screens/MiniAppScreen'; + +export type MainStackParamList = { + Home: undefined; + Detail: undefined; + MiniApp: undefined; +}; + +export type MainStackNavigationProp = + NativeStackNavigationProp; + +const Main = createNativeStackNavigator(); + +const MainNavigator = () => { + return ( + + + + + + ); +}; + +const styles = StyleSheet.create({ + header: { + backgroundColor: '#3498DB', // Bright blue + }, + headerTitle: { + color: '#FFFFFF', // White text + }, +}); + +export default MainNavigator; diff --git a/apps/tester-federation-v2/src/host/screens/DetailScreen.tsx b/apps/tester-federation-v2/src/host/screens/DetailScreen.tsx new file mode 100644 index 000000000..211051c96 --- /dev/null +++ b/apps/tester-federation-v2/src/host/screens/DetailScreen.tsx @@ -0,0 +1,24 @@ +import { StyleSheet, Text, View } from 'react-native'; + +const DetailScreen = () => { + return ( + + DetailScreen + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + gap: 10, + justifyContent: 'center', + alignItems: 'center', + }, + label: { + fontSize: 20, + fontWeight: '700', + }, +}); + +export default DetailScreen; diff --git a/apps/tester-federation-v2/src/host/screens/HomeScreen.tsx b/apps/tester-federation-v2/src/host/screens/HomeScreen.tsx new file mode 100644 index 000000000..5dcf03d2f --- /dev/null +++ b/apps/tester-federation-v2/src/host/screens/HomeScreen.tsx @@ -0,0 +1,157 @@ +import { useNavigation } from '@react-navigation/native'; +import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import type { MainStackNavigationProp } from '../navigation/MainNavigator'; + +const HomeScreen = () => { + const navigation = useNavigation(); + + return ( + + + Welcome Home + + Explore the host app and its features + + navigation.navigate('Detail')} + > + See details + + + + Mini Apps + + navigation.navigate('MiniApp')} + > + 🖼️ + + Gallery + + + + 💬 + + Messages + + + + ⚙️ + + Settings + + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#F5F9FF', + }, + hostSection: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + paddingHorizontal: 20, + }, + title: { + fontSize: 28, + fontWeight: 'bold', + marginBottom: 10, + color: '#2C3E50', + }, + subtitle: { + fontSize: 16, + color: '#34495E', + marginBottom: 30, + textAlign: 'center', + }, + button: { + backgroundColor: '#3498DB', + padding: 15, + borderRadius: 10, + alignItems: 'center', + }, + buttonText: { + color: 'white', + fontSize: 16, + fontWeight: '600', + }, + miniAppSection: { + backgroundColor: 'white', + padding: 20, + borderTopLeftRadius: 30, + borderTopRightRadius: 30, + shadowColor: '#34495E', + shadowOffset: { width: 0, height: -3 }, + shadowOpacity: 0.1, + shadowRadius: 5, + elevation: 5, + }, + sectionTitle: { + fontSize: 24, + fontWeight: '600', + marginBottom: 20, + color: '#2C3E50', + textAlign: 'center', + }, + miniAppContainer: { + flexDirection: 'row', + flexWrap: 'wrap', + justifyContent: 'center', + minHeight: 150, + }, + miniAppButton: { + backgroundColor: '#ECF0F1', + width: 100, + height: 100, + borderColor: '#BDC3C7', + borderWidth: 1, + borderRadius: 15, + alignItems: 'center', + justifyContent: 'center', + margin: 5, + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.1, + shadowRadius: 4, + elevation: 3, + }, + galleryButton: { + borderColor: '#FF9F00', + backgroundColor: '#FFF5E6', + }, + galleryButtonText: { + color: '#FF9F00', + }, + miniAppIcon: { + fontSize: 40, + marginBottom: 5, + color: '#FFFFFF', + }, + miniAppText: { + color: '#FFFFFF', + fontSize: 16, + fontWeight: '700', + }, + disabledMiniApp: { + opacity: 0.5, + }, + disabledText: { + color: '#95A5A6', + }, +}); + +export default HomeScreen; diff --git a/apps/tester-federation-v2/src/host/screens/MiniAppScreen.tsx b/apps/tester-federation-v2/src/host/screens/MiniAppScreen.tsx new file mode 100644 index 000000000..fa9032b27 --- /dev/null +++ b/apps/tester-federation-v2/src/host/screens/MiniAppScreen.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { ActivityIndicator, StyleSheet, View } from 'react-native'; + +const MiniAppNavigator = React.lazy(() => import('MiniApp/MiniAppNavigator')); + +const FallbackComponent = () => ( + + + +); + +const MiniAppScreen = () => { + return ( + }> + + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, +}); + +export default MiniAppScreen; diff --git a/apps/tester-federation-v2/src/mini/assets/pic_1.jpg b/apps/tester-federation-v2/src/mini/assets/pic_1.jpg new file mode 100644 index 000000000..dad6029fe Binary files /dev/null and b/apps/tester-federation-v2/src/mini/assets/pic_1.jpg differ diff --git a/apps/tester-federation-v2/src/mini/assets/pic_2.jpg b/apps/tester-federation-v2/src/mini/assets/pic_2.jpg new file mode 100644 index 000000000..f129a030c Binary files /dev/null and b/apps/tester-federation-v2/src/mini/assets/pic_2.jpg differ diff --git a/apps/tester-federation-v2/src/mini/assets/pic_3.jpg b/apps/tester-federation-v2/src/mini/assets/pic_3.jpg new file mode 100644 index 000000000..29f6093e8 Binary files /dev/null and b/apps/tester-federation-v2/src/mini/assets/pic_3.jpg differ diff --git a/apps/tester-federation-v2/src/mini/navigation/MainNavigator.tsx b/apps/tester-federation-v2/src/mini/navigation/MainNavigator.tsx new file mode 100644 index 000000000..2af7230c2 --- /dev/null +++ b/apps/tester-federation-v2/src/mini/navigation/MainNavigator.tsx @@ -0,0 +1,44 @@ +import { + type NativeStackNavigationProp, + createNativeStackNavigator, +} from '@react-navigation/native-stack'; +import { StyleSheet } from 'react-native'; + +import GalleryScreen from '../screens/GalleryScreen'; + +export type MainStackParamList = { + Gallery: undefined; +}; + +export type MainStackNavigationProp = + NativeStackNavigationProp; + +const Main = createNativeStackNavigator(); + +const MainNavigator = () => { + return ( + + + + ); +}; + +const styles = StyleSheet.create({ + header: { + backgroundColor: '#E68A00', + }, + headerTitle: { + color: '#FFFFFF', + }, +}); + +export default MainNavigator; diff --git a/apps/tester-federation-v2/src/mini/screens/GalleryScreen.tsx b/apps/tester-federation-v2/src/mini/screens/GalleryScreen.tsx new file mode 100644 index 000000000..d8a0b5023 --- /dev/null +++ b/apps/tester-federation-v2/src/mini/screens/GalleryScreen.tsx @@ -0,0 +1,95 @@ +import { + Image, + type ImageRequireSource, + ScrollView, + StyleSheet, + Text, + View, +} from 'react-native'; + +const pics = [ + require('../assets/pic_1.jpg'), + require('../assets/pic_2.jpg'), + require('../assets/pic_3.jpg'), +]; + +const data = Array(3) + .fill('') + .map((_, i) => ({ + title: `Picture ${i + 1}`, + source: pics[i % pics.length], + })); + +const Row = ({ + title, + source, +}: { + title: string; + source: ImageRequireSource; +}) => ( + + + + {title} + + The quick brown fox jumps over the lazy dog + + + +); + +const GalleryScreen = () => { + return ( + + {data.map(({ title, source }) => ( + + ))} + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#FDF2E9', + }, + contentContainer: { + marginTop: 20, + }, + row: { + marginBottom: 20, + backgroundColor: 'white', + borderRadius: 10, + overflow: 'hidden', + shadowColor: '#D35400', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.1, + shadowRadius: 4, + elevation: 3, + marginHorizontal: 15, + }, + image: { + width: '100%', + height: 250, + resizeMode: 'cover', + }, + titleContainer: { + padding: 15, + }, + title: { + fontSize: 18, + fontWeight: '600', + color: '#000000', + marginBottom: 5, + }, + subtitle: { + fontSize: 14, + color: '#E67E22', + fontWeight: '400', + }, +}); + +export default GalleryScreen; diff --git a/apps/tester-federation-v2/tsconfig.json b/apps/tester-federation-v2/tsconfig.json new file mode 100644 index 000000000..80f1693b4 --- /dev/null +++ b/apps/tester-federation-v2/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@react-native/typescript-config/tsconfig.json", + "compilerOptions": { + "module": "ES2020", // for dynamic imports + "paths": { + "*": ["./@mf-types/*"] + } + } +} diff --git a/apps/tester-federation-v2/webpack.config.host-app.mjs b/apps/tester-federation-v2/webpack.config.host-app.mjs new file mode 100644 index 000000000..83f0cb269 --- /dev/null +++ b/apps/tester-federation-v2/webpack.config.host-app.mjs @@ -0,0 +1,150 @@ +// @ts-check +import { createRequire } from 'node:module'; +import path from 'node:path'; +import * as Repack from '@callstack/repack'; +import webpack from 'webpack'; + +const dirname = Repack.getDirname(import.meta.url); +const { resolve } = createRequire(import.meta.url); + +/** @type {(env: import('@callstack/repack').EnvOptions) => import('webpack').Configuration} */ +export default (env) => { + const { + mode = 'development', + context = dirname, + entry = './index.js', + platform = process.env.PLATFORM, + minimize = mode === 'production', + devServer = undefined, + bundleFilename = undefined, + sourceMapFilename = undefined, + assetsPath = undefined, + } = env; + + if (!platform) { + throw new Error('Missing platform'); + } + + process.env.BABEL_ENV = mode; + + return { + mode, + devtool: false, + context, + entry, + resolve: { + ...Repack.getResolveOptions(platform), + }, + output: { + clean: true, + hashFunction: 'xxhash64', + path: path.join(dirname, 'build', 'host-app', platform), + filename: 'index.bundle', + chunkFilename: '[name].chunk.bundle', + publicPath: Repack.getPublicPath({ platform, devServer }), + uniqueName: 'MFTester-HostApp', + }, + optimization: { + minimize, + chunkIds: 'named', + }, + module: { + rules: [ + { + test: /\.[cm]?[jt]sx?$/, + include: [ + /node_modules(.*[/\\])+react-native/, + /node_modules(.*[/\\])+@react-native/, + /node_modules(.*[/\\])+@react-navigation/, + /node_modules(.*[/\\])+@react-native-community/, + /node_modules(.*[/\\])+react-freeze/, + /node_modules(.*[/\\])+expo/, + /node_modules(.*[/\\])+pretty-format/, + /node_modules(.*[/\\])+metro/, + /node_modules(.*[/\\])+abort-controller/, + /packages[/\\]repack/, + /node_modules(.*[/\\])+@module-federation/, + ], + use: 'babel-loader', + }, + { + test: /\.[jt]sx?$/, + exclude: /node_modules/, + use: 'babel-loader', + }, + { + test: Repack.getAssetExtensionsRegExp(Repack.ASSET_EXTENSIONS), + use: { + loader: '@callstack/repack/assets-loader', + options: { + platform, + devServerEnabled: Boolean(devServer), + scalableAssetExtensions: Repack.SCALABLE_ASSETS, + }, + }, + }, + ], + }, + plugins: [ + // @ts-ignore + new Repack.RepackPlugin({ + context, + mode, + platform, + devServer, + output: { + bundleFilename, + sourceMapFilename, + assetsPath, + }, + }), + // @ts-ignore + new Repack.plugins.ModuleFederationPluginV2({ + name: 'HostApp', + filename: 'HostApp.container.js.bundle', + remotes: { + MiniApp: `MiniApp@http://localhost:8082/${platform}/mf-manifest.json`, + }, + runtimePlugins: [ + resolve('@callstack/repack/federation-runtime-plugin'), + ], + shared: { + react: { + singleton: true, + eager: true, + requiredVersion: '18.3.1', + }, + 'react-native': { + singleton: true, + eager: true, + requiredVersion: '0.76.0-rc.6', + }, + '@react-navigation/native': { + singleton: true, + eager: true, + requiredVersion: '^6.1.18', + }, + '@react-navigation/native-stack': { + singleton: true, + eager: true, + requiredVersion: '^6.10.1', + }, + 'react-native-safe-area-context': { + singleton: true, + eager: true, + requiredVersion: '^4.11.0', + }, + 'react-native-screens': { + singleton: true, + eager: true, + requiredVersion: '^3.34.0', + }, + }, + }), + // silence missing @react-native-masked-view optionally required by @react-navigation/elements + new webpack.IgnorePlugin({ + resourceRegExp: /^@react-native-masked-view/, + }), + ], + }; +}; diff --git a/apps/tester-federation-v2/webpack.config.mini-app.mjs b/apps/tester-federation-v2/webpack.config.mini-app.mjs new file mode 100644 index 000000000..69bd160d1 --- /dev/null +++ b/apps/tester-federation-v2/webpack.config.mini-app.mjs @@ -0,0 +1,139 @@ +// @ts-check +import path from 'node:path'; +import * as Repack from '@callstack/repack'; +import webpack from 'webpack'; + +const dirname = Repack.getDirname(import.meta.url); + +/** @type {(env: import('@callstack/repack').EnvOptions) => import('webpack').Configuration} */ +export default (env) => { + const { + mode = 'development', + context = dirname, + platform = process.env.PLATFORM, + minimize = mode === 'production', + devServer = undefined, + } = env; + + if (!platform) { + throw new Error('Missing platform'); + } + + process.env.BABEL_ENV = mode; + + return { + mode, + devtool: false, + context, + entry: {}, + resolve: { + ...Repack.getResolveOptions(platform), + }, + output: { + clean: true, + hashFunction: 'xxhash64', + path: path.join(dirname, 'build', 'mini-app', platform), + filename: 'index.bundle', + chunkFilename: '[name].chunk.bundle', + publicPath: Repack.getPublicPath({ platform, devServer }), + uniqueName: 'MFTester-MiniApp', + }, + optimization: { + minimize, + chunkIds: 'named', + }, + module: { + rules: [ + { + test: /\.[cm]?[jt]sx?$/, + include: [ + /node_modules(.*[/\\])+react-native/, + /node_modules(.*[/\\])+@react-native/, + /node_modules(.*[/\\])+@react-navigation/, + /node_modules(.*[/\\])+@react-native-community/, + /node_modules(.*[/\\])+react-freeze/, + /node_modules(.*[/\\])+expo/, + /node_modules(.*[/\\])+pretty-format/, + /node_modules(.*[/\\])+metro/, + /node_modules(.*[/\\])+abort-controller/, + /node_modules(.*[/\\])+@callstack[/\\]repack/, + /node_modules(.*[/\\])+@module-federation/, + ], + use: 'babel-loader', + }, + { + test: /\.[jt]sx?$/, + exclude: /node_modules/, + use: 'babel-loader', + }, + { + test: Repack.getAssetExtensionsRegExp(Repack.ASSET_EXTENSIONS), + use: { + loader: '@callstack/repack/assets-loader', + options: { + platform, + devServerEnabled: Boolean(devServer), + scalableAssetExtensions: Repack.SCALABLE_ASSETS, + inline: true, + }, + }, + }, + ], + }, + plugins: [ + // @ts-ignore + new Repack.RepackPlugin({ + context, + mode, + platform, + devServer, + output: {}, + }), + // @ts-ignore + new Repack.plugins.ModuleFederationPluginV2({ + name: 'MiniApp', + filename: 'MiniApp.container.js.bundle', + exposes: { + './MiniAppNavigator': './src/mini/navigation/MainNavigator', + }, + getPublicPath: `return "http://localhost:8082/${platform}/"`, + shared: { + react: { + singleton: true, + eager: false, + requiredVersion: '18.3.1', + }, + 'react-native': { + singleton: true, + eager: false, + requiredVersion: '0.76.0-rc.6', + }, + '@react-navigation/native': { + singleton: true, + eager: false, + requiredVersion: '^6.1.18', + }, + '@react-navigation/native-stack': { + singleton: true, + eager: false, + requiredVersion: '^6.10.1', + }, + 'react-native-safe-area-context': { + singleton: true, + eager: false, + requiredVersion: '^4.11.0', + }, + 'react-native-screens': { + singleton: true, + eager: false, + requiredVersion: '^3.34.0', + }, + }, + }), + // silence missing @react-native-masked-view optionally required by @react-navigation/elements + new webpack.IgnorePlugin({ + resourceRegExp: /^@react-native-masked-view/, + }), + ], + }; +}; diff --git a/apps/tester-federation/android/gradle/wrapper/gradle-wrapper.properties b/apps/tester-federation/android/gradle/wrapper/gradle-wrapper.properties index 0aaefbcaf..df97d72b8 100644 --- a/apps/tester-federation/android/gradle/wrapper/gradle-wrapper.properties +++ b/apps/tester-federation/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/apps/tester-federation/ios/Podfile.lock b/apps/tester-federation/ios/Podfile.lock index 2d05393c6..09bbd615c 100644 --- a/apps/tester-federation/ios/Podfile.lock +++ b/apps/tester-federation/ios/Podfile.lock @@ -1622,7 +1622,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - ReactTestApp-DevSupport (3.10.6): + - ReactTestApp-DevSupport (3.10.14): - React-Core - React-jsi - RNCAsyncStorage (1.24.0): @@ -1764,7 +1764,7 @@ DEPENDENCIES: - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - "ReactNativeHost (from `../../../node_modules/.pnpm/react-native-test-app@3.10.6_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7._jnc5b3losnxyfzhli62dpvggx4/node_modules/@rnx-kit/react-native-host`)" + - "ReactNativeHost (from `../../../node_modules/.pnpm/react-native-test-app@3.10.14_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7_4hoym5y635xztqjr6vc3r7wfte/node_modules/@rnx-kit/react-native-host`)" - ReactTestApp-DevSupport (from `../node_modules/react-native-test-app`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - RNScreens (from `../node_modules/react-native-screens`) @@ -1907,7 +1907,7 @@ EXTERNAL SOURCES: ReactCommon: :path: "../node_modules/react-native/ReactCommon" ReactNativeHost: - :path: "../../../node_modules/.pnpm/react-native-test-app@3.10.6_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7._jnc5b3losnxyfzhli62dpvggx4/node_modules/@rnx-kit/react-native-host" + :path: "../../../node_modules/.pnpm/react-native-test-app@3.10.14_react-native@0.76.0-rc.6_@babel+core@7.25.2_@babel+preset-env@7_4hoym5y635xztqjr6vc3r7wfte/node_modules/@rnx-kit/react-native-host" ReactTestApp-DevSupport: :path: "../node_modules/react-native-test-app" RNCAsyncStorage: @@ -1984,7 +1984,7 @@ SPEC CHECKSUMS: ReactCodegen: f4ec52507766ae9229e6daff936ef4819cd38d64 ReactCommon: 964a21f03865d9b98dcc64df7b172be083e108c9 ReactNativeHost: 3aa90998ab38ddbcfd0075b88d1062d1488cf749 - ReactTestApp-DevSupport: eaa57f45a3a9d3c14415037f0a26eea7f55799d7 + ReactTestApp-DevSupport: ed439cce949caf074af3ae05051b4bd157ed4019 RNCAsyncStorage: 3ad840f7b17b45ca7ebbbb0e80948564a9513315 RNScreens: de6e57426ba0e6cbc3fb5b4f496e7f08cb2773c2 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 diff --git a/apps/tester-federation/package.json b/apps/tester-federation/package.json index b83f04b59..afcef0f43 100644 --- a/apps/tester-federation/package.json +++ b/apps/tester-federation/package.json @@ -30,10 +30,10 @@ "@react-native/babel-preset": "0.76.0-rc.6", "@react-native/typescript-config": "0.76.0-rc.6", "@react-native-community/cli": "15.0.0-alpha.2", - "@rsdoctor/rspack-plugin": "^0.4.1", - "@rspack/core": "1.0.1", + "@rsdoctor/rspack-plugin": "^0.4.5", + "@rspack/core": "1.0.8", "@rspack/plugin-react-refresh": "1.0.0", - "@swc/helpers": "^0.5.11", + "@swc/helpers": "^0.5.13", "@types/jest": "^29.5.12", "@types/react": "^18.2.51", "babel-loader": "^9.1.3", @@ -41,7 +41,7 @@ "get-port": "^6.1.2", "globby": "^13.1.2", "http-server": "^14.1.1", - "react-native-test-app": "^3.10.6", + "react-native-test-app": "^3.10.14", "typescript": "^5.5.3" } } diff --git a/apps/tester-federation/rspack.config.host-app.mjs b/apps/tester-federation/rspack.config.host-app.mjs index a385b6c45..a99de8552 100644 --- a/apps/tester-federation/rspack.config.host-app.mjs +++ b/apps/tester-federation/rspack.config.host-app.mjs @@ -93,7 +93,7 @@ export default (env) => { }, }, }, - // Repack.REACT_NATIVE_CODEGEN_RULES, + Repack.REACT_NATIVE_CODEGEN_RULES, { test: Repack.getAssetExtensionsRegExp(Repack.ASSET_EXTENSIONS), use: { @@ -126,7 +126,7 @@ export default (env) => { }, ], }), - new Repack.plugins.ModuleFederationPlugin({ + new Repack.plugins.ModuleFederationPluginV1({ name: 'HostApp', shared: { react: { diff --git a/apps/tester-federation/rspack.config.mini-app.mjs b/apps/tester-federation/rspack.config.mini-app.mjs index 358d3b470..9b816f838 100644 --- a/apps/tester-federation/rspack.config.mini-app.mjs +++ b/apps/tester-federation/rspack.config.mini-app.mjs @@ -92,7 +92,7 @@ export default (env) => { }, }, }, - // Repack.REACT_NATIVE_CODEGEN_RULES, + Repack.REACT_NATIVE_CODEGEN_RULES, { test: Repack.getAssetExtensionsRegExp(Repack.ASSET_EXTENSIONS), use: { @@ -126,7 +126,7 @@ export default (env) => { }, ], }), - new Repack.plugins.ModuleFederationPlugin({ + new Repack.plugins.ModuleFederationPluginV1({ name: 'MiniApp', exposes: { './MiniAppNavigator': './src/mini/navigation/MainNavigator', @@ -142,12 +142,6 @@ export default (env) => { eager: false, requiredVersion: '0.76.0-rc.6', }, - 'react-native/Libraries/Core/Devtools/getDevServer': { - singleton: true, - eager: true, - requiredVersion: '0.76.0-rc.6', - shareScope: 'internal', - }, '@react-navigation/native': { singleton: true, eager: false, diff --git a/apps/tester-federation/src/host/navigation/MainNavigator.tsx b/apps/tester-federation/src/host/navigation/MainNavigator.tsx index 6a76ebbc2..43f20bb64 100644 --- a/apps/tester-federation/src/host/navigation/MainNavigator.tsx +++ b/apps/tester-federation/src/host/navigation/MainNavigator.tsx @@ -23,8 +23,10 @@ const MainNavigator = () => { return ( { > - + ); }; const styles = StyleSheet.create({ header: { - backgroundColor: 'rgba(56, 30, 114, 1)', + backgroundColor: '#3498DB', }, headerTitle: { - color: 'rgba(255,255,255,1)', + color: '#FFFFFF', }, }); diff --git a/apps/tester-federation/src/host/screens/HomeScreen.tsx b/apps/tester-federation/src/host/screens/HomeScreen.tsx index 1de6705a5..5dcf03d2f 100644 --- a/apps/tester-federation/src/host/screens/HomeScreen.tsx +++ b/apps/tester-federation/src/host/screens/HomeScreen.tsx @@ -1,5 +1,5 @@ import { useNavigation } from '@react-navigation/native'; -import { Button, StyleSheet, Text, View } from 'react-native'; +import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; import type { MainStackNavigationProp } from '../navigation/MainNavigator'; const HomeScreen = () => { @@ -7,35 +7,150 @@ const HomeScreen = () => { return ( - HomeScreen -