diff --git a/.eslintignore b/.eslintignore
index e16e0140326a..a288117cf8ee 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -13,6 +13,7 @@ packages/*/dist
packages/*/types_generated
packages/debugger-frontend/dist/**/*
packages/react-native-codegen/lib
+private/react-native-codegen-typescript-test/lib/**/*
**/Pods/*
**/*.macos.js
**/*.windows.js
diff --git a/.eslintrc.js b/.eslintrc.js
index a6d2c177a278..3f3ff7adda01 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -35,6 +35,9 @@ module.exports = {
// Flow handles these checks for us, so they aren't required
'no-undef': 'off',
'no-unreachable': 'off',
+ // Throwing from function or rejecting promises with non-error values could result in unclear error stack traces and lead to harder debugging
+ 'prefer-promise-reject-errors': 'error',
+ 'no-throw-literal': 'error',
},
},
{
diff --git a/.flowconfig b/.flowconfig
index 6d4cec2f2326..9ccb6588a52f 100644
--- a/.flowconfig
+++ b/.flowconfig
@@ -69,17 +69,12 @@ munge_underscores=true
module.name_mapper='^react-native$' -> '/packages/react-native/index.js'
module.name_mapper='^react-native/\(.*\)$' -> '/packages/react-native/\1'
module.name_mapper='^@react-native/dev-middleware$' -> '/packages/dev-middleware'
-module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\|xml\)$' -> '/packages/react-native/Libraries/Image/RelativeImageStub'
+module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\|xml\|ktx\|heic\|heif\)$' -> '/packages/react-native/Libraries/Image/RelativeImageStub'
module.system.haste.module_ref_prefix=m#
react.runtime=automatic
-experimental.only_support_flow_fixme_and_expected_error=true
-experimental.require_suppression_with_error_code=true
-experimental.invariant_subtyping_error_message_improvement=true
-experimental.natural_inference.local_object_literals.followup_fix=true
-
ban_spread_key_props=true
[lints]
@@ -103,4 +98,4 @@ untyped-import
untyped-type-import
[version]
-^0.280.0
+^0.297.0
diff --git a/.github/actions/build-android/action.yml b/.github/actions/build-android/action.yml
index ac769b62ce95..89ca4c49b284 100644
--- a/.github/actions/build-android/action.yml
+++ b/.github/actions/build-android/action.yml
@@ -16,7 +16,17 @@ runs:
uses: ./.github/actions/setup-node
- name: Install node dependencies
uses: ./.github/actions/yarn-install
+ - name: Read current RNVersion
+ shell: bash
+ id: read-rn-version
+ run: |
+ echo "rn-version=$(jq -r '.version' packages/react-native/package.json)" >> $GITHUB_OUTPUT
- name: Set React Native Version
+ # We don't want to set the version for stable branches, because this has been
+ # already set from the 'create release' commits on the release branch.
+ # For testing RC.0, though, the version has not been set yet. In that case, we are on Stable branch and
+ # it is the only case when the version is still 1000.0.0
+ if: ${{ !endsWith(github.ref_name, '-stable') || endsWith(github.ref_name, '-stable') && steps.read-rn-version.outputs.rn-version == '1000.0.0' }}
shell: bash
run: node ./scripts/releases/set-rn-artifacts-version.js --build-type ${{ inputs.release-type }}
- name: Setup gradle
@@ -25,7 +35,7 @@ runs:
cache-read-only: "false"
cache-encryption-key: ${{ inputs.gradle-cache-encryption-key }}
- name: Restore Android ccache
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: /github/home/.cache/ccache
key: v2-ccache-android-${{ github.job }}-${{ github.ref }}-${{ hashFiles('packages/react-native/ReactAndroid/**/*.cpp', 'packages/react-native/ReactAndroid/**/*.h', 'packages/react-native/ReactCommon/**/*.cpp', 'packages/react-native/ReactAndroid/**/CMakeLists.txt', 'packages/react-native/ReactCommon/**/CMakeLists.txt') }}
@@ -42,19 +52,22 @@ runs:
if [[ "${{ inputs.release-type }}" == "dry-run" ]]; then
# dry-run: we only build ARM64 to save time/resources. For release/nightlies the default is to build all archs.
export ORG_GRADLE_PROJECT_reactNativeArchitectures="arm64-v8a,x86" # x86 is required for E2E testing
+ export HERMES_PREBUILT_FLAG="ORG_GRADLE_PROJECT_react.internal.useHermesNightly=true"
TASKS="publishAllToMavenTempLocal build"
elif [[ "${{ inputs.release-type }}" == "nightly" ]]; then
# nightly: we set isSnapshot to true so artifacts are sent to the right repository on Maven Central.
export ORG_GRADLE_PROJECT_isSnapshot="true"
+ export HERMES_PREBUILT_FLAG="ORG_GRADLE_PROJECT_react.internal.useHermesNightly=true"
TASKS="publishAllToMavenTempLocal publishAndroidToSonatype build"
else
# release: we want to build all archs (default)
+ export HERMES_PREBUILT_FLAG="ORG_GRADLE_PROJECT_react.internal.useHermesStable=true"
TASKS="publishAllToMavenTempLocal publishAndroidToSonatype build"
fi
- ./gradlew $TASKS -PenableWarningsAsErrors=true
+ env "$HERMES_PREBUILT_FLAG" ./gradlew $TASKS -PenableWarningsAsErrors=true
- name: Save Android ccache
if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }}
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: /github/home/.cache/ccache
key: v2-ccache-android-${{ github.job }}-${{ github.ref }}-${{ hashFiles('packages/react-native/ReactAndroid/**/*.cpp', 'packages/react-native/ReactAndroid/**/*.h', 'packages/react-native/ReactCommon/**/*.cpp', 'packages/react-native/ReactAndroid/**/CMakeLists.txt', 'packages/react-native/ReactCommon/**/CMakeLists.txt') }}
@@ -62,13 +75,13 @@ runs:
shell: bash
run: ccache -s -v
- name: Upload Maven Artifacts
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: maven-local
path: /tmp/maven-local
- name: Upload test results
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: build-android-results
compression-level: 1
@@ -78,14 +91,14 @@ runs:
packages/react-native/ReactAndroid/build/reports
- name: Upload RNTester APK - hermes-debug
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: rntester-debug
path: packages/rn-tester/android/app/build/outputs/apk/debug/
compression-level: 0
- name: Upload RNTester APK - hermes-release
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: rntester-release
path: packages/rn-tester/android/app/build/outputs/apk/release/
diff --git a/.github/actions/build-apple-slices-hermes/action.yml b/.github/actions/build-apple-slices-hermes/action.yml
deleted file mode 100644
index bc66de6a21b2..000000000000
--- a/.github/actions/build-apple-slices-hermes/action.yml
+++ /dev/null
@@ -1,103 +0,0 @@
-name: build-apple-slices-hermes
-description: This action builds hermesc for Apple platforms
-inputs:
- hermes-version:
- required: true
- description: The version of Hermes
- react-native-version:
- required: true
- description: The version of Hermes
- slice:
- required: true
- description: The slice of hermes you want to build. It could be iphone, iphonesimulator, macos, catalyst, appletvos, appletvsimulator, xros, or xrossimulator
- flavor:
- required: true
- description: The flavor we want to build. It can be Debug or Release
-runs:
- using: composite
- steps:
- - name: Setup xcode
- uses: ./.github/actions/setup-xcode
- - name: Restore Hermes workspace
- uses: ./.github/actions/restore-hermes-workspace
- - name: Restore HermesC Artifact
- uses: actions/download-artifact@v4
- with:
- name: hermesc-apple
- path: ./packages/react-native/sdks/hermes/build_host_hermesc
- - name: Restore Slice From Cache
- id: restore-slice-cache
- uses: actions/cache/restore@v4
- with:
- path: ./packages/react-native/sdks/hermes/build_${{ inputs.slice }}_${{ inputs.flavor }}
- key: v6-hermes-apple-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-${{ inputs.slice }}-${{ inputs.flavor }}
- - name: Build the Hermes ${{ inputs.slice }} frameworks
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes || exit 1
- SLICE=${{ inputs.slice }}
- FLAVOR=${{ inputs.flavor }}
- FINAL_PATH=build_"$SLICE"_"$FLAVOR"
- echo "Final path for this slice is: $FINAL_PATH"
-
- if [[ -d "$FINAL_PATH" ]]; then
- echo "[HERMES] Skipping! Found the requested slice at $FINAL_PATH".
- exit 0
- fi
-
- if [[ "$ARTIFACTS_EXIST" ]]; then
- echo "[HERMES] Skipping! Artifacts exists already."
- exit 0
- fi
-
- export RELEASE_VERSION=${{ inputs.react-native-version }}
-
- # HermesC is used to build hermes, so it has to be executable
- chmod +x ./build_host_hermesc/bin/hermesc
-
- if [[ "$SLICE" == "macosx" ]]; then
- echo "[HERMES] Building Hermes for MacOS"
-
- chmod +x ./utils/build-mac-framework.sh
- BUILD_TYPE="${{ inputs.flavor }}" ./utils/build-mac-framework.sh
- else
- echo "[HERMES] Building Hermes for iOS: $SLICE"
-
- chmod +x ./utils/build-ios-framework.sh
- BUILD_TYPE="${{ inputs.flavor }}" ./utils/build-ios-framework.sh "$SLICE"
- fi
-
- echo "Moving from build_$SLICE to $FINAL_PATH"
- mv build_"$SLICE" "$FINAL_PATH"
-
- # check whether everything is there
- if [[ -d "$FINAL_PATH/lib/hermesvm.framework" ]]; then
- echo "Successfully built hermesvm.framework for $SLICE in $FLAVOR"
- else
- echo "Failed to built hermesvm.framework for $SLICE in $FLAVOR"
- exit 1
- fi
-
- if [[ -d "$FINAL_PATH/lib/hermesvm.framework.dSYM" ]]; then
- echo "Successfully built hermesvm.framework.dSYM for $SLICE in $FLAVOR"
- else
- echo "Failed to built hermesvm.framework.dSYM for $SLICE in $FLAVOR"
- echo "Please try again"
- exit 1
- fi
- - name: Compress slices to preserve Symlinks
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes
- tar -czv -f build_${{ matrix.slice }}_${{ matrix.flavor }}.tar.gz build_${{ matrix.slice }}_${{ matrix.flavor }}
- - name: Upload Artifact for Slice (${{ inputs.slice }}, ${{ inputs.flavor }}}
- uses: actions/upload-artifact@v4.3.4
- with:
- name: slice-${{ inputs.slice }}-${{ inputs.flavor }}
- path: ./packages/react-native/sdks/hermes/build_${{ inputs.slice }}_${{ inputs.flavor }}.tar.gz
- - name: Save slice cache
- if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }} # To avoid that the cache explode.
- uses: actions/cache/save@v4
- with:
- path: ./packages/react-native/sdks/hermes/build_${{ inputs.slice }}_${{ inputs.flavor }}
- key: v6-hermes-apple-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-${{ inputs.SLICE }}-${{ inputs.FLAVOR }}
diff --git a/.github/actions/build-hermes-macos/action.yml b/.github/actions/build-hermes-macos/action.yml
deleted file mode 100644
index 0f3a42a367f7..000000000000
--- a/.github/actions/build-hermes-macos/action.yml
+++ /dev/null
@@ -1,227 +0,0 @@
-name: build-hermes-macos
-description: This action builds hermesc for Apple platforms
-inputs:
- hermes-version:
- required: true
- description: The version of Hermes
- react-native-version:
- required: true
- description: The version of React Native
- flavor:
- required: true
- description: The flavor we want to build. It can be Debug or Release
-runs:
- using: composite
- steps:
- - name: Setup xcode
- uses: ./.github/actions/setup-xcode
- - name: Restore Hermes workspace
- uses: ./.github/actions/restore-hermes-workspace
- - name: Restore Cached Artifacts
- uses: actions/cache/restore@v4
- with:
- key: v4-hermes-artifacts-${{ inputs.flavor }}-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashFiles('./packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}
- path: |
- /tmp/hermes/osx-bin/${{ inputs.flavor }}
- /tmp/hermes/dSYM/${{ inputs.flavor }}
- /tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
- - name: Check if the required artifacts already exist
- id: check_if_apple_artifacts_are_there
- shell: bash
- run: |
- FLAVOR="${{ inputs.flavor }}"
- echo "Flavor is $FLAVOR"
- OSX_BIN="/tmp/hermes/osx-bin/$FLAVOR"
- DSYM="/tmp/hermes/dSYM/$FLAVOR"
- HERMES="/tmp/hermes/hermes-runtime-darwin/hermes-ios-$FLAVOR.tar.gz"
-
- if [[ -d "$OSX_BIN" ]] && \
- [[ -d "$DSYM" ]] && \
- [[ -f "$HERMES" ]]; then
-
- echo "Artifacts are there!"
- echo "ARTIFACTS_EXIST=true" >> $GITHUB_ENV
- echo "ARTIFACTS_EXIST=true" >> $GITHUB_OUTPUT
- fi
- - name: Setup node.js
- uses: ./.github/actions/setup-node
- - name: Yarn- Install Dependencies
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: ./.github/actions/yarn-install
- - name: Slice cache macosx
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-macosx-${{ inputs.flavor }}
- - name: Slice cache iphoneos
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-iphoneos-${{ inputs.flavor }}
- - name: Slice cache iphonesimulator
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-iphonesimulator-${{ inputs.flavor }}
- - name: Slice cache appletvos
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-appletvos-${{ inputs.flavor }}
- - name: Slice cache appletvsimulator
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-appletvsimulator-${{ inputs.flavor }}
- - name: Slice cache catalyst
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-catalyst-${{ inputs.flavor }}
- - name: Slice cache xros
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-xros-${{ inputs.flavor }}
- - name: Slice cache xrsimulator
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- uses: actions/download-artifact@v4
- with:
- path: ./packages/react-native/sdks/hermes/
- name: slice-xrsimulator-${{ inputs.flavor }}
- - name: Unzip slices
- shell: bash
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- run: |
- cd ./packages/react-native/sdks/hermes
- ls -l .
- tar -xzv -f build_catalyst_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_iphoneos_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_iphonesimulator_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_appletvos_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_appletvsimulator_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_macosx_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_xros_${{ matrix.flavor }}.tar.gz
- tar -xzv -f build_xrsimulator_${{ matrix.flavor }}.tar.gz
- - name: Move back build folders
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- ls -l ./packages/react-native/sdks/hermes
- cd ./packages/react-native/sdks/hermes || exit 1
- mv build_macosx_${{ inputs.flavor }} build_macosx
- mv build_iphoneos_${{ inputs.flavor }} build_iphoneos
- mv build_iphonesimulator_${{ inputs.flavor }} build_iphonesimulator
- mv build_appletvos_${{ inputs.flavor }} build_appletvos
- mv build_appletvsimulator_${{ inputs.flavor }} build_appletvsimulator
- mv build_catalyst_${{ inputs.flavor }} build_catalyst
- mv build_xros_${{ inputs.flavor }} build_xros
- mv build_xrsimulator_${{ inputs.flavor }} build_xrsimulator
- - name: Prepare destroot folder
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes || exit 1
- chmod +x ./utils/build-apple-framework.sh
- . ./utils/build-apple-framework.sh
- prepare_dest_root_for_ci
- - name: Create fat framework for iOS
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes || exit 1
- echo "[HERMES] Creating the universal framework"
- chmod +x ./utils/build-ios-framework.sh
- ./utils/build-ios-framework.sh build_framework
-
- chmod +x ./destroot/bin/hermesc
- - name: Package the Hermes Apple frameworks
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- BUILD_TYPE="${{ inputs.flavor }}"
- echo "Packaging Hermes Apple frameworks for $BUILD_TYPE build type"
-
- TARBALL_OUTPUT_DIR=$(mktemp -d /tmp/hermes-tarball-output-XXXXXXXX)
-
- TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "$BUILD_TYPE")
-
- echo "Packaging Hermes Apple frameworks for $BUILD_TYPE build type"
-
- TARBALL_OUTPUT_PATH=$(node ./packages/react-native/scripts/hermes/create-tarball.js \
- --inputDir ./packages/react-native/sdks/hermes \
- --buildType "$BUILD_TYPE" \
- --outputDir $TARBALL_OUTPUT_DIR)
-
- echo "Hermes tarball saved to $TARBALL_OUTPUT_PATH"
-
- mkdir -p $HERMES_TARBALL_ARTIFACTS_DIR
- cp $TARBALL_OUTPUT_PATH $HERMES_TARBALL_ARTIFACTS_DIR/.
-
- mkdir -p /tmp/hermes/osx-bin/${{ inputs.flavor }}
- cp ./packages/react-native/sdks/hermes/build_macosx/bin/* /tmp/hermes/osx-bin/${{ inputs.flavor }}
- ls -lR /tmp/hermes/osx-bin/
- - name: Create dSYM archive
- if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
- shell: bash
- run: |
- FLAVOR=${{ inputs.flavor }}
- WORKING_DIR="/tmp/hermes_tmp/dSYM/$FLAVOR"
-
- mkdir -p "$WORKING_DIR/macosx"
- mkdir -p "$WORKING_DIR/catalyst"
- mkdir -p "$WORKING_DIR/iphoneos"
- mkdir -p "$WORKING_DIR/iphonesimulator"
- mkdir -p "$WORKING_DIR/appletvos"
- mkdir -p "$WORKING_DIR/appletvsimulator"
- mkdir -p "$WORKING_DIR/xros"
- mkdir -p "$WORKING_DIR/xrsimulator"
-
- cd ./packages/react-native/sdks/hermes || exit 1
-
- DSYM_FILE_PATH=lib/hermesvm.framework.dSYM
- cp -r build_macosx/$DSYM_FILE_PATH "$WORKING_DIR/macosx/"
- cp -r build_catalyst/$DSYM_FILE_PATH "$WORKING_DIR/catalyst/"
- cp -r build_iphoneos/$DSYM_FILE_PATH "$WORKING_DIR/iphoneos/"
- cp -r build_iphonesimulator/$DSYM_FILE_PATH "$WORKING_DIR/iphonesimulator/"
- cp -r build_appletvos/$DSYM_FILE_PATH "$WORKING_DIR/appletvos/"
- cp -r build_appletvsimulator/$DSYM_FILE_PATH "$WORKING_DIR/appletvsimulator/"
- cp -r build_xros/$DSYM_FILE_PATH "$WORKING_DIR/xros/"
- cp -r build_xrsimulator/$DSYM_FILE_PATH "$WORKING_DIR/xrsimulator/"
-
- DEST_DIR="/tmp/hermes/dSYM/$FLAVOR"
- tar -C "$WORKING_DIR" -czvf "hermesvm.framework.dSYM" .
-
- mkdir -p "$DEST_DIR"
- mv "hermesvm.framework.dSYM" "$DEST_DIR"
- - name: Upload hermes dSYM artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-dSYM-${{ inputs.flavor }}
- path: /tmp/hermes/dSYM/${{ inputs.flavor }}
- - name: Upload hermes Runtime artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-darwin-bin-${{ inputs.flavor }}
- path: /tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
- - name: Upload hermes osx artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-osx-bin-${{ inputs.flavor }}
- path: /tmp/hermes/osx-bin/${{ inputs.flavor }}
- - name: Upload Hermes Artifacts
- uses: actions/cache/save@v4
- if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }} # To avoid that the cache explode.
- with:
- key: v4-hermes-artifacts-${{ inputs.flavor }}-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashFiles('./packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}
- path: |
- /tmp/hermes/osx-bin/${{ inputs.flavor }}
- /tmp/hermes/dSYM/${{ inputs.flavor }}
- /tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
diff --git a/.github/actions/build-hermesc-apple/action.yml b/.github/actions/build-hermesc-apple/action.yml
deleted file mode 100644
index c4fefdce9e17..000000000000
--- a/.github/actions/build-hermesc-apple/action.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: build-hermesc-apple
-description: This action builds hermesc for Apple platforms
-inputs:
- hermes-version:
- required: true
- description: The version of Hermes
- react-native-version:
- required: true
- description: The version of React Native
-runs:
- using: composite
- steps:
- - name: Setup xcode
- uses: ./.github/actions/setup-xcode
- - name: Restore Hermes workspace
- uses: ./.github/actions/restore-hermes-workspace
- - name: Hermes apple cache
- uses: actions/cache/restore@v4
- with:
- path: ./packages/react-native/sdks/hermes/build_host_hermesc
- key: v2-hermesc-apple-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}
- - name: Build HermesC Apple
- shell: bash
- run: |
- cd ./packages/react-native/sdks/hermes || exit 1
- . ./utils/build-apple-framework.sh
- build_host_hermesc_if_needed
- - name: Upload HermesC Artifact
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermesc-apple
- path: ./packages/react-native/sdks/hermes/build_host_hermesc
- - name: Cache hermesc apple
- uses: actions/cache/save@v4
- if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }} # To avoid that the cache explode.
- with:
- path: ./packages/react-native/sdks/hermes/build_host_hermesc
- key: v2-hermesc-apple-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}
- enableCrossOsArchive: true
diff --git a/.github/actions/build-hermesc-linux/action.yml b/.github/actions/build-hermesc-linux/action.yml
deleted file mode 100644
index 0c90739d0a72..000000000000
--- a/.github/actions/build-hermesc-linux/action.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-name: build-hermesc-linux
-description: This action builds hermesc for linux platforms
-inputs:
- hermes-version:
- required: True
- description: The version of Hermes
- react-native-version:
- required: True
- description: The version of React Native
-runs:
- using: composite
- steps:
- - name: Install dependencies
- shell: bash
- run: |
- sudo apt update
- sudo apt install -y git openssh-client build-essential \
- libreadline-dev libicu-dev jq zip python3
-
- # Install cmake 3.28.3-1build7
- sudo apt-get install cmake=3.28.3-1build7
- sudo ln -sf /usr/bin/cmake /usr/local/bin/cmake
- - name: Restore Hermes workspace
- uses: ./.github/actions/restore-hermes-workspace
- - name: Linux cache
- uses: actions/cache@v4
- with:
- key: v1-hermes-${{ github.job }}-linux-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}
- path: |
- /tmp/hermes/linux64-bin/
- /tmp/hermes/hermes/destroot/
- - name: Set up workspace
- shell: bash
- run: |
- mkdir -p /tmp/hermes/linux64-bin
- - name: Build HermesC for Linux
- shell: bash
- run: |
- if [ -f /tmp/hermes/linux64-bin/hermesc ]; then
- echo 'Skipping; Clean "/tmp/hermes/linux64-bin" to rebuild.'
- else
- cd /tmp/hermes
- cmake -S hermes -B build -DHERMES_STATIC_LINK=ON -DCMAKE_BUILD_TYPE=Release -DHERMES_ENABLE_TEST_SUITE=OFF \
- -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DCMAKE_CXX_FLAGS=-s -DCMAKE_C_FLAGS=-s \
- -DCMAKE_EXE_LINKER_FLAGS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
- cmake --build build --target hermesc -j 4
- cp /tmp/hermes/build/bin/hermesc /tmp/hermes/linux64-bin/.
- fi
- - name: Upload linux artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-linux-bin
- path: /tmp/hermes/linux64-bin
diff --git a/.github/actions/build-hermesc-windows/action.yml b/.github/actions/build-hermesc-windows/action.yml
deleted file mode 100644
index 1dcaebb2fb93..000000000000
--- a/.github/actions/build-hermesc-windows/action.yml
+++ /dev/null
@@ -1,86 +0,0 @@
-name: build-hermesc-windows
-description: This action builds hermesc for Windows platforms
-inputs:
- hermes-version:
- required: True
- description: The version of Hermes
- react-native-version:
- required: True
- description: The version of React Native
-runs:
- using: composite
- steps:
- - name: Download Previous Artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-workspace
- path: 'C:\tmp\hermes'
- - name: Set up workspace
- shell: powershell
- run: |
- mkdir -p C:\tmp\hermes\osx-bin
- mkdir -p .\packages\react-native\sdks\hermes
- cp -r -Force C:\tmp\hermes\hermes\* .\packages\react-native\sdks\hermes\.
- cp -r -Force .\packages\react-native\sdks\hermes-engine\utils\* .\packages\react-native\sdks\hermes\.
- - name: Windows cache
- uses: actions/cache@v4
- with:
- key: v3-hermes-${{ github.job }}-windows-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}
- path: |
- C:\tmp\hermes\win64-bin\
- C:\tmp\hermes\hermes\icu\
- C:\tmp\hermes\hermes\deps\
- C:\tmp\hermes\hermes\build_release\
- - name: setup-msbuild
- uses: microsoft/setup-msbuild@v1.3.2
- - name: Set up workspace
- shell: powershell
- run: |
- New-Item -ItemType Directory -ErrorAction SilentlyContinue $Env:HERMES_WS_DIR\icu
- New-Item -ItemType Directory -ErrorAction SilentlyContinue $Env:HERMES_WS_DIR\deps
- New-Item -ItemType Directory -ErrorAction SilentlyContinue $Env:HERMES_WS_DIR\win64-bin
- - name: Downgrade CMake
- shell: powershell
- run: choco install cmake --version 3.31.6 --force
- - name: Build HermesC for Windows
- shell: powershell
- run: |
- if (-not(Test-Path -Path $Env:HERMES_WS_DIR\win64-bin\hermesc.exe)) {
- cd $Env:HERMES_WS_DIR\icu
- # If Invoke-WebRequest shows a progress bar, it will fail with
- # Win32 internal error "Access is denied" 0x5 occurred [...]
- $progressPreference = 'silentlyContinue'
- Invoke-WebRequest -Uri "$Env:ICU_URL" -OutFile "icu.zip"
- Expand-Archive -Path "icu.zip" -DestinationPath "."
-
- cd $Env:HERMES_WS_DIR
- Copy-Item -Path "icu\bin64\icu*.dll" -Destination "deps"
- # Include MSVC++ 2015 redistributables
- Copy-Item -Path "c:\windows\system32\msvcp140.dll" -Destination "deps"
- Copy-Item -Path "c:\windows\system32\vcruntime140.dll" -Destination "deps"
- Copy-Item -Path "c:\windows\system32\vcruntime140_1.dll" -Destination "deps"
-
- $Env:PATH += ";$Env:CMAKE_DIR;$Env:MSBUILD_DIR"
- $Env:ICU_ROOT = "$Env:HERMES_WS_DIR\icu"
-
- cmake -S hermes -B build_release -G 'Visual Studio 17 2022' -Ax64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DHERMES_ENABLE_WIN10_ICU_FALLBACK=OFF
- if (-not $?) { throw "Failed to configure Hermes" }
- echo "Running windows build..."
- cd build_release
- cmake --build . --target hermesc --config Release
- if (-not $?) { throw "Failed to build Hermes" }
-
- echo "Copying hermesc.exe to win64-bin"
- cd $Env:HERMES_WS_DIR
- Copy-Item -Path "build_release\bin\Release\hermesc.exe" -Destination "win64-bin"
- # Include Windows runtime dependencies
- Copy-Item -Path "deps\*" -Destination "win64-bin"
- }
- else {
- Write-Host "Skipping; Clean c:\tmp\hermes\win64-bin to rebuild."
- }
- - name: Upload windows artifacts
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-win64-bin
- path: C:\tmp\hermes\win64-bin\
diff --git a/.github/actions/build-npm-package/action.yml b/.github/actions/build-npm-package/action.yml
index 8b894e906395..6bacb3d29dde 100644
--- a/.github/actions/build-npm-package/action.yml
+++ b/.github/actions/build-npm-package/action.yml
@@ -4,9 +4,6 @@ inputs:
release-type:
required: true
description: The type of release we are building. It could be nightly, release or dry-run
- hermes-ws-dir:
- required: 'true'
- description: The workspace for hermes
gha-npm-token:
required: false
description: The GHA npm token, required only to publish to npm
@@ -20,95 +17,14 @@ runs:
- name: Setup git safe folders
shell: bash
run: git config --global --add safe.directory '*'
- - name: Create /tmp/hermes/osx-bin directory
- shell: bash
- run: mkdir -p /tmp/hermes/osx-bin
- - name: Download osx-bin release artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-osx-bin-Release
- path: /tmp/hermes/osx-bin/Release
- - name: Download osx-bin debug artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-osx-bin-Debug
- path: /tmp/hermes/osx-bin/Debug
- - name: Download darwin-bin release artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-Release
- path: /tmp/hermes/hermes-runtime-darwin
- - name: Download darwin-bin debug artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-Debug
- path: /tmp/hermes/hermes-runtime-darwin
- - name: Download hermes dSYM debug artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-dSYM-Debug
- path: /tmp/hermes/dSYM/Debug
- - name: Download hermes dSYM release vartifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-dSYM-Release
- path: /tmp/hermes/dSYM/Release
- - name: Download windows-bin artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-win64-bin
- path: /tmp/hermes/win64-bin
- - name: Download linux-bin artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-linux-bin
- path: /tmp/hermes/linux64-bin
- - name: Show /tmp/hermes directory
- shell: bash
- run: ls -lR /tmp/hermes
- - name: Copy Hermes binaries
- shell: bash
- run: |
- mkdir -p ./packages/react-native/sdks/hermesc ./packages/react-native/sdks/hermesc/osx-bin ./packages/react-native/sdks/hermesc/win64-bin ./packages/react-native/sdks/hermesc/linux64-bin
-
- # When build_hermes_macos runs as a matrix, it outputs
- if [[ -d ${{ inputs.hermes-ws-dir }}/osx-bin/Release ]]; then
- cp -r ${{ inputs.hermes-ws-dir }}/osx-bin/Release/* ./packages/react-native/sdks/hermesc/osx-bin/.
- elif [[ -d ${{ inputs.hermes-ws-dir }}/osx-bin/Debug ]]; then
- cp -r ${{ inputs.hermes-ws-dir }}/osx-bin/Debug/* ./packages/react-native/sdks/hermesc/osx-bin/.
- else
- ls ${{ inputs.hermes-ws-dir }}/osx-bin || echo "hermesc macOS artifacts directory missing."
- echo "Could not locate macOS hermesc binary."; exit 1;
- fi
-
- # Sometimes, GHA creates artifacts with lowercase Debug/Release. Make sure that if it happen, we uppercase them.
- if [[ -f "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-debug.tar.gz" ]]; then
- mv "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-debug.tar.gz" "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-Debug.tar.gz"
- fi
-
- if [[ -f "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-release.tar.gz" ]]; then
- mv "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-release.tar.gz" "${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-Release.tar.gz"
- fi
-
- cp -r ${{ inputs.hermes-ws-dir }}/win64-bin/* ./packages/react-native/sdks/hermesc/win64-bin/.
- cp -r ${{ inputs.hermes-ws-dir }}/linux64-bin/* ./packages/react-native/sdks/hermesc/linux64-bin/.
-
- # Make sure the hermesc files are actually executable.
- chmod -R +x packages/react-native/sdks/hermesc/*
-
- mkdir -p ./packages/react-native/ReactAndroid/external-artifacts/artifacts/
- cp ${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-Debug.tar.gz ./packages/react-native/ReactAndroid/external-artifacts/artifacts/hermes-ios-debug.tar.gz
- cp ${{ inputs.hermes-ws-dir }}/hermes-runtime-darwin/hermes-ios-Release.tar.gz ./packages/react-native/ReactAndroid/external-artifacts/artifacts/hermes-ios-release.tar.gz
- cp ${{ inputs.hermes-ws-dir }}/dSYM/Debug/hermesvm.framework.dSYM ./packages/react-native/ReactAndroid/external-artifacts/artifacts/hermes-framework-dSYM-debug.tar.gz
- cp ${{ inputs.hermes-ws-dir }}/dSYM/Release/hermesvm.framework.dSYM ./packages/react-native/ReactAndroid/external-artifacts/artifacts/hermes-framework-dSYM-release.tar.gz
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: ReactNativeDependencies*
path: ./packages/react-native/ReactAndroid/external-artifacts/artifacts
merge-multiple: true
- name: Download ReactCore artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: ReactCore*
path: ./packages/react-native/ReactAndroid/external-artifacts/artifacts
@@ -149,7 +65,7 @@ runs:
fi
node ./scripts/releases-ci/publish-npm.js -t ${{ inputs.release-type }}
- name: Upload npm logs
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: npm-logs
path: ~/.npm/_logs
@@ -164,7 +80,7 @@ runs:
echo "$FILENAME" > build/react-native-package-version
- name: Upload release package
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
if: ${{ inputs.release-type == 'dry-run' }}
with:
name: react-native-package
diff --git a/.github/actions/diff-js-api-breaking-changes/action.yml b/.github/actions/diff-js-api-breaking-changes/action.yml
deleted file mode 100644
index bc45b1b207aa..000000000000
--- a/.github/actions/diff-js-api-breaking-changes/action.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: diff-js-api-breaking-changes
-description: Check for breaking changes in the public React Native JS API
-runs:
- using: composite
- steps:
- - name: Fetch snapshot from PR head
- shell: bash
- env:
- SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-breaking-changes
- run: |
- mkdir $SCRATCH_DIR
- git fetch --depth=1 origin ${{ github.event.pull_request.head.sha }}
- git show ${{ github.event.pull_request.head.sha }}:packages/react-native/ReactNativeApi.d.ts > $SCRATCH_DIR/ReactNativeApi-after.d.ts \
- || echo "" > $SCRATCH_DIR/ReactNativeApi.d.ts
- - name: Run breaking change detection
- shell: bash
- env:
- SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-breaking-changes
- run: |
- node ./scripts/js-api/diff-api-snapshot \
- ${{ github.workspace }}/packages/react-native/ReactNativeApi.d.ts \
- $SCRATCH_DIR/ReactNativeApi-after.d.ts \
- > $SCRATCH_DIR/output.json
diff --git a/.github/actions/diff-js-api-changes/action.yml b/.github/actions/diff-js-api-changes/action.yml
new file mode 100644
index 000000000000..9e186d27cc01
--- /dev/null
+++ b/.github/actions/diff-js-api-changes/action.yml
@@ -0,0 +1,31 @@
+name: diff-js-api-changes
+description: Check for breaking changes in the public React Native JS API
+runs:
+ using: composite
+ steps:
+ - name: Compute merge base with main
+ id: merge_base
+ shell: bash
+ run: |
+ git fetch origin main
+ git fetch --deepen=500
+ echo "merge_base=$(git merge-base HEAD origin/main)" >> $GITHUB_OUTPUT
+
+ - name: Output snapshot before state for comparison
+ shell: bash
+ env:
+ SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-changes
+ run: |
+ mkdir -p $SCRATCH_DIR
+ git show ${{ steps.merge_base.outputs.merge_base }}:packages/react-native/ReactNativeApi.d.ts > $SCRATCH_DIR/ReactNativeApi-before.d.ts \
+ || echo "" > $SCRATCH_DIR/ReactNativeApi-before.d.ts
+
+ - name: Run breaking change detection
+ shell: bash
+ env:
+ SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-changes
+ run: |
+ node ./scripts/js-api/diff-api-snapshot \
+ $SCRATCH_DIR/ReactNativeApi-before.d.ts \
+ ./packages/react-native/ReactNativeApi.d.ts \
+ > $SCRATCH_DIR/output.json
diff --git a/.github/actions/maestro-android/action.yml b/.github/actions/maestro-android/action.yml
index 4a24e2c0231e..4aa15709070e 100644
--- a/.github/actions/maestro-android/action.yml
+++ b/.github/actions/maestro-android/action.yml
@@ -22,6 +22,10 @@ inputs:
required: false
default: "."
description: The directory from which metro should be started
+ emulator-arch:
+ required: false
+ default: x86
+ description: The architecture of the emulator to run
runs:
using: composite
@@ -31,7 +35,7 @@ runs:
run: export MAESTRO_VERSION=1.40.0; curl -Ls "https://get.maestro.mobile.dev" | bash
- name: Set up JDK 17
if: ${{ inputs.install-java == 'true' }}
- uses: actions/setup-java@v4
+ uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'zulu'
@@ -53,7 +57,7 @@ runs:
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 24
- arch: x86
+ arch: ${{ inputs.emulator-arch }}
ram-size: '8192M'
heap-size: '4096M'
disk-size: '10G'
@@ -69,16 +73,16 @@ runs:
NORM_APP_ID=$(echo "${{ inputs.app-id }}" | tr '.' '-')
echo "app-id=$NORM_APP_ID" >> $GITHUB_OUTPUT
- name: Store tests result
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
if: always()
with:
- name: e2e_android_${{ steps.normalize-app-id.outputs.app-id }}_report_${{ inputs.flavor }}_NewArch
+ name: e2e_android_${{ steps.normalize-app-id.outputs.app-id }}_report_${{ inputs.flavor }}_${{ inputs.emulator-arch }}_NewArch
path: |
report.xml
screen.mp4
- name: Store Logs
if: steps.run-tests.outcome == 'failure'
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
- name: maestro-logs-android-${{ steps.normalize-app-id.outputs.app-id }}-${{ inputs.flavor }}-NewArch
+ name: maestro-logs-android-${{ steps.normalize-app-id.outputs.app-id }}-${{ inputs.flavor }}-${{ inputs.emulator-arch }}-NewArch
path: /tmp/MaestroLogs
diff --git a/.github/actions/maestro-ios/action.yml b/.github/actions/maestro-ios/action.yml
index 50b21597c9ed..16fbb84173f1 100644
--- a/.github/actions/maestro-ios/action.yml
+++ b/.github/actions/maestro-ios/action.yml
@@ -30,8 +30,8 @@ runs:
run: |
brew tap facebook/fb
brew install facebook/fb/idb-companion
- - name: Set up JDK 11
- uses: actions/setup-java@v2
+ - name: Set up JDK 17
+ uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'zulu'
@@ -66,7 +66,7 @@ runs:
"${{ inputs.working-directory }}"
- name: Store video record
if: always()
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: e2e_ios_${{ inputs.app-id }}_report_${{ inputs.flavor }}_NewArch
path: |
@@ -78,7 +78,7 @@ runs:
report.xml
- name: Store Logs
if: failure() && steps.run-tests.outcome == 'failure'
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: maestro-logs-${{ inputs.app-id }}-${{ inputs.flavor }}-NewArch
path: /tmp/MaestroLogs
diff --git a/.github/actions/prepare-hermes-v1-app/action.yml b/.github/actions/prepare-hermes-v1-app/action.yml
new file mode 100644
index 000000000000..24f40d0fbacd
--- /dev/null
+++ b/.github/actions/prepare-hermes-v1-app/action.yml
@@ -0,0 +1,41 @@
+name: prepare-hermes-v1-app
+description: Prepares a React Native app with Hermes V1 enabled
+inputs:
+ retry-count:
+ description: 'Number of times to retry the yarn install on failure'
+runs:
+ using: composite
+ steps:
+ - name: Create new app
+ shell: bash
+ run: |
+ cd /tmp
+ npx @react-native-community/cli init RNApp --skip-install --version nightly
+
+ - name: Select latest Hermes V1 version
+ shell: bash
+ run: |
+ node "$GITHUB_WORKSPACE/.github/workflow-scripts/selectLatestHermesV1Version.js"
+
+ - name: Apply patch to enable Hermes V1
+ shell: bash
+ run: |
+ cd /tmp/RNApp
+ git apply --binary --3way --whitespace=nowarn "$GITHUB_WORKSPACE/.github/workflow-scripts/hermes-v1.patch"
+ echo "✅ Patch applied successfully"
+
+ - name: Install app dependencies with retry
+ uses: nick-fields/retry@v3
+ with:
+ timeout_minutes: 10
+ max_attempts: ${{ inputs.retry-count }}
+ retry_wait_seconds: 15
+ shell: bash
+ command: |
+ cd /tmp/RNApp
+ yarn install
+ on_retry_command: |
+ echo "Cleaning up for yarn retry..."
+ cd /tmp/RNApp
+ rm -rf node_modules yarn.lock || true
+ yarn cache clean || true
diff --git a/.github/actions/prepare-hermes-workspace/action.yml b/.github/actions/prepare-hermes-workspace/action.yml
deleted file mode 100644
index 47953b676007..000000000000
--- a/.github/actions/prepare-hermes-workspace/action.yml
+++ /dev/null
@@ -1,99 +0,0 @@
-name: prepare-hermes-workspace
-description: This action prepares the hermes workspace with the right hermes and react-native versions.
-inputs:
- hermes-ws-dir:
- required: true
- description: The hermes dir we need to use to setup the workspace
- hermes-version-file:
- required: true
- description: the path to the file that will contain the hermes version
-outputs:
- hermes-version:
- description: the version of Hermes tied to this run
- value: ${{ steps.hermes-version.outputs.VERSION }}
- react-native-version:
- description: the version of React Native tied to this run
- value: ${{ steps.react-native-version.outputs.VERSION }}
-runs:
- using: composite
- steps:
- - name: Setup hermes version
- shell: bash
- id: hermes-version
- run: |
- mkdir -p "/tmp/hermes" "/tmp/hermes/download" "/tmp/hermes/hermes"
-
- if [ -f "${{ inputs.hermes-version-file }}" ]; then
- echo "Hermes Version file found! Using this version for the build:"
- echo "VERSION=$(cat ${{ inputs.hermes-version-file }})" >> "$GITHUB_OUTPUT"
- else
- echo "Hermes Version file not found!!!"
- echo "Using the last commit from main for the build:"
- HERMES_TAG_SHA=$(git ls-remote https://github.com/facebook/hermes main | cut -f 1 | tr -d '[:space:]')
- echo "VERSION=$HERMES_TAG_SHA" >> "$GITHUB_OUTPUT"
- fi
- echo "Hermes commit is $HERMES_TAG_SHA"
-
- - name: Get react-native version
- shell: bash
- id: react-native-version
- run: |
- VERSION=$(cat packages/react-native/package.json | jq -r '.version')
- # Save the react native version we are building in an output variable so we can use that file as part of the cache key.
- echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
- echo "React Native Version is $VERSION"
-
- - name: Cache hermes workspace
- id: restore-hermes
- uses: actions/cache/restore@v4
- with:
- path: |
- /tmp/hermes/download/
- /tmp/hermes/hermes/
- key: v1-hermes-${{ steps.hermes-version.outputs.version }}
- enableCrossOsArchive: true
-
- # It happened while testing that a cache was created from the right folders
- # but those folders where empty. Thus, the next check ensures that we can work with those caches.
- - name: Check if cache was meaningful
- id: meaningful-cache
- shell: bash
- run: |
- if [[ -d /tmp/hermes/hermes ]] && [[ -n "$(ls -A /tmp/hermes/hermes)" ]]; then
- echo "Found a good hermes cache"
- echo "HERMES_CACHED=true" >> "$GITHUB_OUTPUT"
- fi
-
- - name: Setup node.js
- uses: ./.github/actions/setup-node
- - name: Yarn- Install Dependencies
- if: ${{ steps.meaningful-cache.outputs.HERMES_CACHED != 'true' }}
- uses: ./.github/actions/yarn-install
-
- - name: Download Hermes tarball
- if: ${{ steps.meaningful-cache.outputs.HERMES_CACHED != 'true' }}
- shell: bash
- run: |
- node packages/react-native/scripts/hermes/prepare-hermes-for-build ${{ github.event.pull_request.html_url }}
- cp packages/react-native/sdks/download/* ${{ inputs.hermes-ws-dir }}/download/.
- cp -r packages/react-native/sdks/hermes/* ${{ inputs.hermes-ws-dir }}/hermes/.
-
- echo ${{ steps.hermes-version.outputs.version }}
-
- - name: Upload Hermes artifact
- uses: actions/upload-artifact@v4.3.4
- with:
- name: hermes-workspace
- path: |
- /tmp/hermes/download/
- /tmp/hermes/hermes/
-
- - name: Cache hermes workspace
- uses: actions/cache/save@v4
- if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode.
- with:
- path: |
- /tmp/hermes/download/
- /tmp/hermes/hermes/
- key: v1-hermes-${{ steps.hermes-version.outputs.version }}
- enableCrossOsArchive: true
diff --git a/.github/actions/restore-hermes-workspace/action.yml b/.github/actions/restore-hermes-workspace/action.yml
deleted file mode 100644
index 0b1cb2594357..000000000000
--- a/.github/actions/restore-hermes-workspace/action.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: restore-hermes-workspace
-description: "Restore hermes workspace that has been created in Prepare Hermes Workspace"
-runs:
- using: composite
- steps:
- - name: Download Previous Artifacts
- uses: actions/download-artifact@v4
- with:
- name: hermes-workspace
- path: /tmp/hermes
- - name: Set up workspace
- shell: bash
- run: |
- mkdir -p $HERMES_OSXBIN_ARTIFACTS_DIR ./packages/react-native/sdks/hermes
- cp -r $HERMES_WS_DIR/hermes/* ./packages/react-native/sdks/hermes/.
- cp -r ./packages/react-native/sdks/hermes-engine/utils ./packages/react-native/sdks/hermes/.
diff --git a/.github/actions/run-fantom-tests/action.yml b/.github/actions/run-fantom-tests/action.yml
index 1f143f2367bd..83fdd3a03d3f 100644
--- a/.github/actions/run-fantom-tests/action.yml
+++ b/.github/actions/run-fantom-tests/action.yml
@@ -27,7 +27,7 @@ runs:
cache-read-only: "false"
cache-encryption-key: ${{ inputs.gradle-cache-encryption-key }}
- name: Restore Fantom ccache
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: /github/home/.cache/ccache
key: v2-ccache-fantom-${{ github.job }}-${{ github.ref }}-${{ hashFiles(
@@ -56,7 +56,7 @@ runs:
CXX: clang++
- name: Save Fantom ccache
if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }}
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: /github/home/.cache/ccache
key: v2-ccache-fantom-${{ github.job }}-${{ github.ref }}-${{ hashFiles(
@@ -75,7 +75,7 @@ runs:
run: ccache -s -v
- name: Upload test results
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: run-fantom-tests-results
compression-level: 1
diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml
index d076bf4acb8b..7b5aa82470a4 100644
--- a/.github/actions/setup-node/action.yml
+++ b/.github/actions/setup-node/action.yml
@@ -9,7 +9,7 @@ runs:
using: "composite"
steps:
- name: Setup node.js
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version: ${{ inputs.node-version }}
cache: yarn
diff --git a/.github/actions/setup-xcode/action.yml b/.github/actions/setup-xcode/action.yml
index c0ae6ceccea7..19e3f3e6f06e 100644
--- a/.github/actions/setup-xcode/action.yml
+++ b/.github/actions/setup-xcode/action.yml
@@ -4,7 +4,7 @@ inputs:
xcode-version:
description: 'The xcode version to use'
required: false
- default: '16.2.0'
+ default: '16.4.0'
runs:
using: "composite"
steps:
diff --git a/.github/actions/test-ios-helloworld/action.yml b/.github/actions/test-ios-helloworld/action.yml
index 0a9a6939bba2..66d4ee84791b 100644
--- a/.github/actions/test-ios-helloworld/action.yml
+++ b/.github/actions/test-ios-helloworld/action.yml
@@ -10,12 +10,6 @@ inputs:
flavor:
description: The flavor of the build. Must be one of "Debug", "Release".
default: Debug
- hermes-version:
- description: The version of hermes
- required: true
- react-native-version:
- description: The version of react-native
- required: true
runs:
using: composite
steps:
@@ -25,23 +19,18 @@ runs:
uses: ./.github/actions/setup-node
- name: Run yarn install
uses: ./.github/actions/yarn-install
- - name: Create Hermes folder
- shell: bash
- run: mkdir -p "$HERMES_WS_DIR"
- - name: Download Hermes
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-${{ inputs.flavor }}
- path: /tmp/hermes/hermes-runtime-darwin/
- - name: Print Downloaded hermes
- shell: bash
- run: ls -lR "$HERMES_WS_DIR"
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ inputs.ruby-version }}
+ - name: Set nightly Hermes versions
+ shell: bash
+ run: |
+ node ./scripts/releases/use-hermes-nightly.js
+ - name: Run yarn install again, with the correct hermes version
+ uses: ./.github/actions/yarn-install
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz
path: /tmp/third-party
@@ -49,7 +38,7 @@ runs:
shell: bash
run: ls -lR /tmp/third-party
- name: Download React Native Prebuilds
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactCore${{ inputs.flavor }}.xcframework.tar.gz
path: /tmp/ReactCore
@@ -66,20 +55,6 @@ runs:
args+=(--frameworks dynamic)
fi
- # Tarball is restored with capital flavors suffix, but somehow the tarball name from JS at line 96 returns as lowercased.
- # Let's ensure that the tarballs have the right names
-
- if [[ -f "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-Debug.tar.gz" ]]; then
- mv "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-Debug.tar.gz" "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-debug.tar.gz"
- fi
-
- if [[ -f "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-Release.tar.gz" ]]; then
- mv "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-Release.tar.gz" "$HERMES_WS_DIR/hermes-runtime-darwin/hermes-ios-release.tar.gz"
- fi
-
- BUILD_TYPE="${{ inputs.flavor }}"
- TARBALL_FILENAME=$(node ../../packages/react-native/scripts/hermes/get-tarball-name.js --buildType "$BUILD_TYPE")
- export HERMES_ENGINE_TARBALL_PATH="$HERMES_WS_DIR/hermes-runtime-darwin/$TARBALL_FILENAME"
export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ inputs.flavor }}.xcframework.tar.gz"
diff --git a/.github/actions/test-ios-rntester/action.yml b/.github/actions/test-ios-rntester/action.yml
index b54e4a36c6e5..3d6d83b3b6e7 100644
--- a/.github/actions/test-ios-rntester/action.yml
+++ b/.github/actions/test-ios-rntester/action.yml
@@ -1,31 +1,23 @@
name: test-ios-rntester
description: Test iOS RNTester
inputs:
- use-frameworks:
- description: The dependency building and linking strategy to use. Must be one of "StaticLibraries", "DynamicFrameworks"
- default: StaticLibraries
ruby-version:
description: The version of ruby that must be used
default: 2.6.10
run-unit-tests:
description: whether unit tests should run or not.
- default: "false"
- hermes-tarball-artifacts-dir:
- description: The directory where the hermes tarball artifacts are stored
- default: /tmp/hermes/hermes-runtime-darwin
+ default: false
flavor:
description: The flavor of the build. Must be one of "Debug", "Release".
default: Debug
- hermes-version:
- description: The version of hermes
- required: true
- react-native-version:
- description: The version of react-native
- required: true
run-e2e-tests:
description: Whether we want to run E2E tests or not
required: false
default: false
+ use-frameworks:
+ description: Whether we have to build with Dynamic Frameworks. If this is set to true, it builds from source
+ required: false
+ default: false
runs:
using: composite
@@ -36,87 +28,54 @@ runs:
uses: ./.github/actions/setup-node
- name: Run yarn
uses: ./.github/actions/yarn-install
- - name: Download Hermes
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-${{ inputs.flavor }}
- path: ${{ inputs.hermes-tarball-artifacts-dir }}
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ inputs.ruby-version }}
+ - name: Set nightly Hermes versions
+ shell: bash
+ run: |
+ node ./scripts/releases/use-hermes-nightly.js
+ - name: Run yarn install again, with the correct hermes version
+ uses: ./.github/actions/yarn-install
- name: Prepare IOS Tests
if: ${{ inputs.run-unit-tests == 'true' }}
uses: ./.github/actions/prepare-ios-tests
- - name: Set HERMES_ENGINE_TARBALL_PATH envvar if Hermes tarball is present
- shell: bash
- run: |
- HERMES_TARBALL_ARTIFACTS_DIR=${{ inputs.hermes-tarball-artifacts-dir }}
- if [ ! -d $HERMES_TARBALL_ARTIFACTS_DIR ]; then
- echo "Hermes tarball artifacts dir not present ($HERMES_TARBALL_ARTIFACTS_DIR). Build Hermes from source."
- exit 0
- fi
-
- TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "${{ inputs.flavor }}")
- TARBALL_PATH=$HERMES_TARBALL_ARTIFACTS_DIR/$TARBALL_FILENAME
-
- echo "Looking for $TARBALL_FILENAME in $HERMES_TARBALL_ARTIFACTS_DIR"
- echo "$TARBALL_PATH"
-
- if [ ! -f $TARBALL_PATH ]; then
- echo "Hermes tarball not present ($TARBALL_PATH). Build Hermes from source."
- exit 0
- fi
-
- echo "Found Hermes tarball at $TARBALL_PATH"
- echo "HERMES_ENGINE_TARBALL_PATH=$TARBALL_PATH" >> $GITHUB_ENV
- - name: Print Hermes version
- shell: bash
- run: |
- HERMES_TARBALL_ARTIFACTS_DIR=${{ inputs.hermes-tarball-artifacts-dir }}
- TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "${{ inputs.flavor }}")
- TARBALL_PATH=$HERMES_TARBALL_ARTIFACTS_DIR/$TARBALL_FILENAME
- if [[ -e $TARBALL_PATH ]]; then
- tar -xf $TARBALL_PATH
- echo 'print(HermesInternal?.getRuntimeProperties?.()["OSS Release Version"])' > test.js
- chmod +x ./destroot/bin/hermes
- ./destroot/bin/hermes test.js
- rm test.js
- rm -rf destroot
- else
- echo 'No Hermes tarball found.'
- fi
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ if: ${{ inputs.use-frameworks == 'false' }}
+ uses: actions/download-artifact@v7
with:
name: ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz
path: /tmp/third-party/
- name: Print third-party folder
+ if: ${{ inputs.use-frameworks == 'false' }}
shell: bash
run: ls -lR /tmp/third-party
- name: Download React Native Prebuilds
- uses: actions/download-artifact@v4
+ if: ${{ inputs.use-frameworks == 'false' }}
+ uses: actions/download-artifact@v7
with:
name: ReactCore${{ inputs.flavor }}.xcframework.tar.gz
path: /tmp/ReactCore
- name: Print ReactCore folder
+ if: ${{ inputs.use-frameworks == 'false' }}
shell: bash
run: ls -lR /tmp/ReactCore
- name: Install CocoaPods dependencies
shell: bash
run: |
- export HERMES_ENGINE_TARBALL_PATH=$HERMES_ENGINE_TARBALL_PATH
- export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
- export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ inputs.flavor }}.xcframework.tar.gz"
-
- if [[ ${{ inputs.use-frameworks }} == "DynamicFrameworks" ]]; then
+ if [[ ${{ inputs.use-frameworks }} == "true" ]]; then
export USE_FRAMEWORKS=dynamic
+ else
+ # If use-frameworks is false, let's use prebuilds
+ export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
+ export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ inputs.flavor }}.xcframework.tar.gz"
fi
cd packages/rn-tester
bundle install
- bundle exec pod install
+ bundle exec pod update hermes-engine --no-repo-update
- name: Build RNTester
shell: bash
run: |
@@ -143,24 +102,23 @@ runs:
shell: bash
run: |
echo "zipping tests results"
- cd /Users/distiller/Library/Developer/Xcode
- XCRESULT_PATH=$(find . -name '*.xcresult')
- tar -zcvf xcresults.tar.gz $XCRESULT_PATH
+ cd /Users/runner/Library/Developer/Xcode
+ tar -zcvf xcresults.tar.gz "/tmp/RNTesterTestResults"
- name: Upload artifact
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
if: ${{ inputs.run-unit-tests == 'true' }}
with:
- name: xcresults
- path: /Users/distiller/Library/Developer/Xcode/xcresults.tar.gz
+ name: xcresults-${{ inputs.flavor }}-${{ inputs.use-frameworks == 'true' && 'dynamic-frameworks' || 'static-libraries' }}-Ruby${{ inputs.ruby-version }}
+ path: /Users/runner/Library/Developer/Xcode/xcresults.tar.gz
- name: Upload RNTester App
- if: ${{ inputs.use-frameworks == 'StaticLibraries' && inputs.ruby-version == '2.6.10' }} # This is needed to avoid conflicts with the artifacts
- uses: actions/upload-artifact@v4.3.4
+ if: ${{ inputs.use-frameworks == 'false' && inputs.ruby-version == '2.6.10' }} # This is needed to avoid conflicts with the artifacts
+ uses: actions/upload-artifact@v6
with:
name: RNTesterApp-NewArch-${{ inputs.flavor }}
path: ${{ env.app-path }}
- name: Store test results
if: ${{ inputs.run-unit-tests == 'true' }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
- name: test-results
+ name: test-results-${{ inputs.flavor }}-${{ inputs.use-frameworks == 'true' && 'dynamic-frameworks' || 'static-libraries' }}-Ruby${{ inputs.ruby-version }}
path: ./reports/junit
diff --git a/.github/actions/test-js/action.yml b/.github/actions/test-js/action.yml
index 2528973d6e4a..2b5c97a009a0 100644
--- a/.github/actions/test-js/action.yml
+++ b/.github/actions/test-js/action.yml
@@ -19,7 +19,7 @@ runs:
run: node ./scripts/run-ci-javascript-tests.js --maxWorkers 2
- name: Upload test results
if: ${{ always() }}
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: test-js-results
compression-level: 1
diff --git a/.github/workflow-scripts/__tests__/createDraftRelease-test.js b/.github/workflow-scripts/__tests__/createDraftRelease-test.js
index 77901d4df099..b1b330acd87f 100644
--- a/.github/workflow-scripts/__tests__/createDraftRelease-test.js
+++ b/.github/workflow-scripts/__tests__/createDraftRelease-test.js
@@ -121,7 +121,7 @@ describe('Create Draft Release', () => {
});
describe('#_computeBody', () => {
- it('computes body for release', async () => {
+ it('computes body for release when no hermes versions are passed', async () => {
const version = '0.77.1';
const changelog = `## v${version}
### Breaking Changes
@@ -134,20 +134,83 @@ describe('Create Draft Release', () => {
#### iOS
- [PR #3436](https://github.com/facebook/react-native/pull/3436) - Some other change
- [PR #3437](https://github.com/facebook/react-native/pull/3437) - Some other change`;
- const body = _computeBody(version, changelog);
+ const body = _computeBody(changelog, version);
expect(body).toEqual(`${changelog}
---
Hermes dSYMS:
-- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-debug.tar.gz)
-- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-release.tar.gz)
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-release.tar.gz)
+
+Hermes V1 dSYMS:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-release.tar.gz)
+
+ReactNativeDependencies dSYMs:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz)
+
+ReactNative Core dSYMs:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz)
+
+---
+
+You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose).
+
+---
+
+To help you upgrade to this version, you can use the [Upgrade Helper](https://react-native-community.github.io/upgrade-helper/) ⚛️.
+
+---
+
+View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/react-native/blob/main/CHANGELOG.md).`);
+ });
+
+ it('computes body for release when hermes versions are passed', async () => {
+ const version = '0.77.1';
+ const hermesVersion = '0.15.0';
+ const hermesV1Version = '250829098.0.2';
+ const changelog = `## v${version}
+### Breaking Changes
+- [PR #9012](https://github.com/facebook/react-native/pull/9012) - Some other change
+
+#### Android
+- [PR #3456](https://github.com/facebook/react-native/pull/3456) - Some other change
+- [PR #3457](https://github.com/facebook/react-native/pull/3457) - Some other change
+
+#### iOS
+- [PR #3436](https://github.com/facebook/react-native/pull/3436) - Some other change
+- [PR #3437](https://github.com/facebook/react-native/pull/3437) - Some other change`;
+ const body = _computeBody(
+ changelog,
+ version,
+ hermesVersion,
+ hermesV1Version,
+ );
+
+ expect(body).toEqual(`${changelog}
+
+---
+
+Hermes dSYMS:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-release.tar.gz)
+
+Hermes V1 dSYMS:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-release.tar.gz)
ReactNativeDependencies dSYMs:
- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz)
- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz)
+ReactNative Core dSYMs:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz)
+
---
You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose).
@@ -188,6 +251,7 @@ View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/
status: 201,
json: () =>
Promise.resolve({
+ id: 1,
html_url:
'https://github.com/facebook/react-native/releases/tag/v0.77.1',
}),
@@ -208,9 +272,11 @@ View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/
body: fetchBody,
},
);
- expect(response).toEqual(
- 'https://github.com/facebook/react-native/releases/tag/v0.77.1',
- );
+ expect(response).toEqual({
+ id: 1,
+ html_url:
+ 'https://github.com/facebook/react-native/releases/tag/v0.77.1',
+ });
});
it('creates a draft release for prerelease on GitHub', async () => {
@@ -238,6 +304,7 @@ View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/
status: 201,
json: () =>
Promise.resolve({
+ id: 1,
html_url:
'https://github.com/facebook/react-native/releases/tag/v0.77.1',
}),
@@ -258,9 +325,11 @@ View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/
body: fetchBody,
},
);
- expect(response).toEqual(
- 'https://github.com/facebook/react-native/releases/tag/v0.77.1',
- );
+ expect(response).toEqual({
+ id: 1,
+ html_url:
+ 'https://github.com/facebook/react-native/releases/tag/v0.77.1',
+ });
});
it('throws if the post failes', async () => {
diff --git a/.github/workflow-scripts/analyze_scripts.sh b/.github/workflow-scripts/analyze_scripts.sh
index 5f9bcfadee49..cdf280636b2b 100755
--- a/.github/workflow-scripts/analyze_scripts.sh
+++ b/.github/workflow-scripts/analyze_scripts.sh
@@ -16,6 +16,7 @@ if [ -x "$(command -v shellcheck)" ]; then
-type f \
-not -path "*node_modules*" \
-not -path "*third-party*" \
+ -not -path "*vendor*" \
-name '*.sh' \
-exec sh -c 'shellcheck "$1"' -- {} \;
diff --git a/.github/workflow-scripts/createDraftRelease.js b/.github/workflow-scripts/createDraftRelease.js
index f8737c3cbfda..ca9771b713c9 100644
--- a/.github/workflow-scripts/createDraftRelease.js
+++ b/.github/workflow-scripts/createDraftRelease.js
@@ -40,19 +40,29 @@ function _extractChangelog(version) {
return changelog.slice(changelogStarts, changelogEnds).join('\n').trim();
}
-function _computeBody(version, changelog) {
+function _computeBody(changelog, version, hermesVersion, hermesV1Version) {
+ hermesVersion = hermesVersion ?? version;
+ hermesV1Version = hermesV1Version ?? version;
return `${changelog}
---
Hermes dSYMS:
-- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-debug.tar.gz)
-- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-release.tar.gz)
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-release.tar.gz)
+
+Hermes V1 dSYMS:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-release.tar.gz)
ReactNativeDependencies dSYMs:
- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz)
- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz)
+ReactNative Core dSYMs:
+- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz)
+- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz)
+
---
You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose).
@@ -101,7 +111,11 @@ async function _createDraftReleaseOnGitHub(version, body, latest, token) {
}
const data = await response.json();
- return data.html_url;
+ const {html_url, id} = data;
+ return {
+ html_url,
+ id,
+ };
}
function moveToChangelogBranch(version) {
@@ -109,7 +123,13 @@ function moveToChangelogBranch(version) {
run(`git checkout -b changelog/v${version}`);
}
-async function createDraftRelease(version, latest, token) {
+async function createDraftRelease(
+ version,
+ latest,
+ token,
+ hermesVersion,
+ hermesV1Version,
+) {
if (version.startsWith('v')) {
version = version.substring(1);
}
@@ -117,14 +137,15 @@ async function createDraftRelease(version, latest, token) {
_verifyTagExists(version);
moveToChangelogBranch(version);
const changelog = _extractChangelog(version);
- const body = _computeBody(version, changelog);
+ const body = _computeBody(changelog, version, hermesVersion, hermesV1Version);
const release = await _createDraftReleaseOnGitHub(
version,
body,
latest,
token,
);
- log(`Created draft release: ${release}`);
+ log(`Created draft release: ${release.html_url}, ID ${release.id}`);
+ return release;
}
module.exports = {
diff --git a/.github/workflow-scripts/generateChangelog.js b/.github/workflow-scripts/generateChangelog.js
index fc7a9c1794de..2b01a5f8ccb8 100644
--- a/.github/workflow-scripts/generateChangelog.js
+++ b/.github/workflow-scripts/generateChangelog.js
@@ -45,8 +45,8 @@ function _generateChangelog(previousVersion, version, token) {
run('git checkout main');
run('git fetch');
run('git pull origin main');
- const generateChangelogComand = `npx @rnx-kit/rn-changelog-generator --base v${previousVersion} --compare v${version} --repo . --changelog ./CHANGELOG.md --token ${token}`;
- run(generateChangelogComand);
+ const generateChangelogCommand = `npx @rnx-kit/rn-changelog-generator --base v${previousVersion} --compare v${version} --repo . --changelog ./CHANGELOG.md --token ${token}`;
+ run(generateChangelogCommand);
}
function _pushCommit(version) {
diff --git a/.github/workflow-scripts/hermes-v1.patch b/.github/workflow-scripts/hermes-v1.patch
new file mode 100644
index 000000000000..213020381fc4
--- /dev/null
+++ b/.github/workflow-scripts/hermes-v1.patch
@@ -0,0 +1,30 @@
+diff --git a/android/settings.gradle b/android/settings.gradle
+index 63b5d4e..6359ec3 100644
+--- a/android/settings.gradle
++++ b/android/settings.gradle
+@@ -4,3 +4,11 @@ extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autoli
+ rootProject.name = 'RNApp'
+ include ':app'
+ includeBuild('../node_modules/@react-native/gradle-plugin')
++
++includeBuild('../node_modules/react-native') {
++ dependencySubstitution {
++ substitute(module("com.facebook.react:react-android")).using(project(":packages:react-native:ReactAndroid"))
++ substitute(module("com.facebook.react:react-native")).using(project(":packages:react-native:ReactAndroid"))
++ substitute(project(":packages:react-native:ReactAndroid:hermes-engine")).using(module("com.facebook.hermes:hermes-android:$HERMES_V1_VERSION"))
++ }
++}
+diff --git a/package.json b/package.json
+index f05d51b..69938af 100644
+--- a/package.json
++++ b/package.json
+@@ -35,6 +35,9 @@
+ "react-test-renderer": "19.2.0",
+ "typescript": "^5.8.3"
+ },
++ "resolutions": {
++ "hermes-compiler": "$HERMES_V1_VERSION"
++ },
+ "engines": {
+ "node": ">=20"
+ }
diff --git a/.github/workflow-scripts/maestro-ios.js b/.github/workflow-scripts/maestro-ios.js
index ca9b546cd17b..bad5f8a35248 100644
--- a/.github/workflow-scripts/maestro-ios.js
+++ b/.github/workflow-scripts/maestro-ios.js
@@ -162,7 +162,7 @@ async function main() {
console.info(`WORKING_DIRECTORY: ${WORKING_DIRECTORY}`);
console.info('==============================\n');
- const simulatorName = 'iPhone 15 Pro';
+ const simulatorName = 'iPhone 16 Pro';
launchSimulator(simulatorName);
installAppOnSimulator(APP_PATH);
const udid = extractSimulatorUDID();
diff --git a/.github/workflow-scripts/selectLatestHermesV1Version.js b/.github/workflow-scripts/selectLatestHermesV1Version.js
new file mode 100644
index 000000000000..db11b9278c1b
--- /dev/null
+++ b/.github/workflow-scripts/selectLatestHermesV1Version.js
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const { execSync } = require('child_process');
+const fs = require('fs');
+const path = require('path');
+
+const PATCH_FILE_PATH = path.join(__dirname, 'hermes-v1.patch');
+
+function getLatestHermesV1Version() {
+ const npmString = "npm view hermes-compiler@latest-v1 version";
+
+ try {
+ const result = execSync(npmString, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
+ return result;
+ } catch (error) {
+ throw new Error(`Failed to get package version for hermes-compiler@latest-v1`);
+ }
+}
+
+function setHermesV1VersionInPatch(version) {
+ if (!fs.existsSync(PATCH_FILE_PATH)) {
+ throw new Error(`Patch file not found at path: ${PATCH_FILE_PATH}`);
+ }
+
+ let patchContent = fs.readFileSync(PATCH_FILE_PATH, 'utf8');
+ const updatedContent = patchContent.replaceAll(
+ "$HERMES_V1_VERSION",
+ version
+ );
+ fs.writeFileSync(PATCH_FILE_PATH, updatedContent, 'utf8');
+}
+
+setHermesV1VersionInPatch(getLatestHermesV1Version());
diff --git a/.github/workflows/autorebase.yml b/.github/workflows/autorebase.yml
index 447e7dc5ece5..aee759bf78b0 100644
--- a/.github/workflows/autorebase.yml
+++ b/.github/workflows/autorebase.yml
@@ -17,7 +17,7 @@ jobs:
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase')
steps:
- name: Checkout the latest code
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0 # otherwise, you will fail to push refs to dest repo
diff --git a/.github/workflows/bump-podfile-lock.yml b/.github/workflows/bump-podfile-lock.yml
index 80b726edfd53..81468f3cca7f 100644
--- a/.github/workflows/bump-podfile-lock.yml
+++ b/.github/workflows/bump-podfile-lock.yml
@@ -8,8 +8,9 @@ jobs:
runs-on: macos-latest
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
+ token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
fetch-depth: 0
fetch-tags: true
- name: Install dependencies
@@ -20,8 +21,6 @@ jobs:
git config --local user.name "React Native Bot"
- name: Setup xcode
uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.2.0'
- name: Extract branch name
run: |
TAG="${{ github.ref_name }}";
diff --git a/.github/workflows/cache-reaper.yml b/.github/workflows/cache-reaper.yml
index 91ebb083e024..59feda574c19 100644
--- a/.github/workflows/cache-reaper.yml
+++ b/.github/workflows/cache-reaper.yml
@@ -13,7 +13,7 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Trim the cache
diff --git a/.github/workflows/check-for-reproducer.yml b/.github/workflows/check-for-reproducer.yml
index 5d124c32787a..e986259a3a23 100644
--- a/.github/workflows/check-for-reproducer.yml
+++ b/.github/workflows/check-for-reproducer.yml
@@ -10,8 +10,8 @@ jobs:
if: |
github.repository == 'facebook/react-native' && github.event.issue.pull_request == null && github.event.issue.state == 'open' && !contains(github.event.issue.labels.*.name, ':open_umbrella: Umbrella')
steps:
- - uses: actions/checkout@v4
- - uses: actions/github-script@v6
+ - uses: actions/checkout@v6
+ - uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
diff --git a/.github/workflows/close-pr.yml b/.github/workflows/close-pr.yml
index 2b3d773fa993..5d0489f170b7 100644
--- a/.github/workflows/close-pr.yml
+++ b/.github/workflows/close-pr.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'facebook/react-native'
steps:
- - uses: actions/github-script@v6
+ - uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
diff --git a/.github/workflows/create-draft-release.yml b/.github/workflows/create-draft-release.yml
index d3b89dba90d8..ca947dc267c1 100644
--- a/.github/workflows/create-draft-release.yml
+++ b/.github/workflows/create-draft-release.yml
@@ -2,14 +2,24 @@ name: Create Draft Release
on:
workflow_call:
+ inputs:
+ hermesVersion:
+ required: false
+ type: string
+ description: The version of Hermes to use for this release (eg. 0.15.0). If not specified, it will use React Native Version
+ hermesV1Version:
+ required: false
+ type: string
+ description: The version of Hermes V1 to use for this release (eg. 250829098.0.2). If not specified, it will use React Native Version
jobs:
create-draft-release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
+ token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
fetch-depth: 0
fetch-tags: true
- name: Install dependencies
@@ -20,10 +30,25 @@ jobs:
git config --local user.email "bot@reactnative.dev"
git config --local user.name "React Native Bot"
- name: Create draft release
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
+ id: create-draft-release
with:
script: |
const {createDraftRelease} = require('./.github/workflow-scripts/createDraftRelease.js');
const version = '${{ github.ref_name }}';
const {isLatest} = require('./.github/workflow-scripts/publishTemplate.js');
- await createDraftRelease(version, isLatest(), '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}');
+ return (await createDraftRelease(version, isLatest(), '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}', '${{ inputs.hermesVersion }}', '${{ inputs.hermesV1Version }}')).id;
+ result-encoding: string
+ - name: Upload release assets for DotSlash
+ uses: actions/github-script@v8
+ env:
+ RELEASE_ID: ${{ steps.create-draft-release.outputs.result }}
+ with:
+ script: |
+ const {uploadReleaseAssetsForDotSlashFiles} = require('./scripts/releases/upload-release-assets-for-dotslash.js');
+ const version = '${{ github.ref_name }}';
+ await uploadReleaseAssetsForDotSlashFiles({
+ version,
+ token: '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}',
+ releaseId: process.env.RELEASE_ID,
+ });
diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml
index ae5800f81ee2..464e9eb3f86c 100644
--- a/.github/workflows/create-release.yml
+++ b/.github/workflows/create-release.yml
@@ -19,10 +19,11 @@ on:
jobs:
create_release:
+ if: github.repository == 'facebook/react-native'
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
fetch-depth: 0
diff --git a/.github/workflows/danger-pr.yml b/.github/workflows/danger-pr.yml
index cf28b788105a..ce41f6f602cd 100644
--- a/.github/workflows/danger-pr.yml
+++ b/.github/workflows/danger-pr.yml
@@ -17,13 +17,14 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'facebook/react-native'
steps:
- - uses: actions/checkout@v4
+ - name: Check out PR branch
+ uses: actions/checkout@v6
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Run yarn install
uses: ./.github/actions/yarn-install
- - name: Run diff-js-api-breaking-changes
- uses: ./.github/actions/diff-js-api-breaking-changes
+ - name: Run diff-js-api-changes
+ uses: ./.github/actions/diff-js-api-changes
- name: Danger
run: yarn danger ci --use-github-checks --failOnErrors
working-directory: private/react-native-bots
diff --git a/.github/workflows/generate-changelog.yml b/.github/workflows/generate-changelog.yml
index 9734ebd64173..ff8ee8d76def 100644
--- a/.github/workflows/generate-changelog.yml
+++ b/.github/workflows/generate-changelog.yml
@@ -8,8 +8,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
+ token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
fetch-depth: 0
fetch-tags: true
- name: Install dependencies
@@ -20,7 +21,7 @@ jobs:
git config --local user.email "bot@reactnative.dev"
git config --local user.name "React Native Bot"
- name: Generate Changelog
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
script: |
const {generateChangelog} = require('./.github/workflow-scripts/generateChangelog');
diff --git a/.github/workflows/monitor-new-issues.yml b/.github/workflows/monitor-new-issues.yml
index 4c751b097965..36abe0bb4cfa 100644
--- a/.github/workflows/monitor-new-issues.yml
+++ b/.github/workflows/monitor-new-issues.yml
@@ -15,7 +15,7 @@ jobs:
if: github.repository == 'facebook/react-native'
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Set up Node.js
uses: ./.github/actions/setup-node
- name: Install dependencies
diff --git a/.github/workflows/needs-attention.yml b/.github/workflows/needs-attention.yml
index 4d7a0cf8f02f..485bbef9bf5d 100644
--- a/.github/workflows/needs-attention.yml
+++ b/.github/workflows/needs-attention.yml
@@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'facebook/react-native'
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Apply Needs Attention Label
uses: react-native-community/needs-attention@v2.0.0
with:
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 24177338f955..420439705e14 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -21,130 +21,22 @@ jobs:
echo "Setting release type to nightly"
echo "RELEASE_TYPE=nightly" >> $GITHUB_OUTPUT
- prepare_hermes_workspace:
- runs-on: ubuntu-latest
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion
- outputs:
- react-native-version: ${{ steps.prepare-hermes-workspace.outputs.react-native-version }}
- hermes-version: ${{ steps.prepare-hermes-workspace.outputs.hermes-version }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Prepare Hermes Workspace
- id: prepare-hermes-workspace
- uses: ./.github/actions/prepare-hermes-workspace
- with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
- hermes-version-file: ${{ env.HERMES_VERSION_FILE }}
-
- build_hermesc_apple:
- runs-on: macos-14
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Apple
- uses: ./.github/actions/build-hermesc-apple
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.output.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.output.react-native-version }}
-
- build_apple_slices_hermes:
- runs-on: macos-14
- needs: [build_hermesc_apple, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- HERMES_OSXBIN_ARTIFACTS_DIR: /tmp/hermes/osx-bin
- IOS_DEPLOYMENT_TARGET: "15.1"
- XROS_DEPLOYMENT_TARGET: "1.0"
- MAC_DEPLOYMENT_TARGET: "10.15"
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- slice: [macosx, iphoneos, iphonesimulator, appletvos, appletvsimulator, catalyst, xros, xrsimulator]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Slice
- uses: ./.github/actions/build-apple-slices-hermes
- with:
- flavor: ${{ matrix.flavor }}
- slice: ${{ matrix.slice}}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_hermes_macos:
- runs-on: macos-14
- needs: [build_apple_slices_hermes, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- continue-on-error: true
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Hermes MacOS
- uses: ./.github/actions/build-hermes-macos
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
- flavor: ${{ matrix.flavor }}
-
prebuild_apple_dependencies:
+ if: github.repository == 'facebook/react-native'
uses: ./.github/workflows/prebuild-ios-dependencies.yml
secrets: inherit
prebuild_react_native_core:
uses: ./.github/workflows/prebuild-ios-core.yml
+ with:
+ use-hermes-nightly: true
+ version-type: nightly
secrets: inherit
- needs: [prebuild_apple_dependencies, build_hermes_macos]
-
- build_hermesc_linux:
- runs-on: ubuntu-latest
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Linux
- uses: ./.github/actions/build-hermesc-linux
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_hermesc_windows:
- runs-on: windows-2025
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: 'C:\tmp\hermes'
- HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin'
- HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin'
- ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip"
- MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin'
- CMAKE_DIR: 'C:\Program Files\CMake\bin'
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Windows
- uses: ./.github/actions/build-hermesc-windows
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
+ needs: [prebuild_apple_dependencies]
build_android:
runs-on: 8-core-ubuntu
+ if: github.repository == 'facebook/react-native'
needs: [set_release_type]
container:
image: reactnativecommunity/react-native-android:latest
@@ -157,7 +49,7 @@ jobs:
ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build Android
uses: ./.github/actions/build-android
with:
@@ -169,10 +61,6 @@ jobs:
needs:
[
set_release_type,
- prepare_hermes_workspace,
- build_hermes_macos,
- build_hermesc_linux,
- build_hermesc_windows,
build_android,
prebuild_apple_dependencies,
prebuild_react_native_core,
@@ -185,7 +73,6 @@ jobs:
# By default we only build ARM64 to save time/resources. For release/nightlies, we override this value to build all archs.
ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a"
env:
- HERMES_WS_DIR: /tmp/hermes
GHA_NPM_TOKEN: ${{ secrets.GHA_NPM_TOKEN }}
ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }}
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
@@ -193,11 +80,10 @@ jobs:
ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build and Publish NPM Package
uses: ./.github/actions/build-npm-package
with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }}
gha-npm-token: ${{ env.GHA_NPM_TOKEN }}
gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
diff --git a/.github/workflows/on-issue-labeled.yml b/.github/workflows/on-issue-labeled.yml
index a58009873312..7500d9ce3d3b 100644
--- a/.github/workflows/on-issue-labeled.yml
+++ b/.github/workflows/on-issue-labeled.yml
@@ -16,10 +16,10 @@ jobs:
if: "${{ github.repository == 'facebook/react-native' && contains(github.event.label.name, 'Needs: Triage :mag:') }}"
steps:
- name: Checkout code
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Verify RN version
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -39,7 +39,7 @@ jobs:
}
- name: Add descriptive label
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -51,8 +51,8 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'facebook/react-native'
steps:
- - uses: actions/checkout@v4
- - uses: actions/github-script@v6
+ - uses: actions/checkout@v6
+ - uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
diff --git a/.github/workflows/prebuild-ios-core.yml b/.github/workflows/prebuild-ios-core.yml
index b2d05c5e88fe..ce2f6b88c30b 100644
--- a/.github/workflows/prebuild-ios-core.yml
+++ b/.github/workflows/prebuild-ios-core.yml
@@ -1,12 +1,22 @@
-name: Prebuild iOS Dependencies
+name: Prebuild iOS Core
on:
workflow_call: # this directive allow us to call this workflow from other workflows
-
+ inputs:
+ version-type:
+ description: 'The version type to set for the prebuild (nightly or release)'
+ type: string
+ required: false
+ default: ''
+ use-hermes-nightly:
+ description: 'Whether to use the hermes nightly build or read the version from the versions.properties file'
+ type: boolean
+ required: false
+ default: false
jobs:
build-rn-slice:
- runs-on: macos-14
+ runs-on: macos-15
strategy:
fail-fast: false
matrix:
@@ -18,10 +28,10 @@ jobs:
]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Restore cache if present
id: restore-ios-slice
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
path: packages/react-native/
@@ -31,42 +41,29 @@ jobs:
- name: Setup xcode
if: steps.restore-ios-slice.outputs.cache-hit != 'true'
uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.2.0'
- name: Yarn Install
if: steps.restore-ios-slice.outputs.cache-hit != 'true'
uses: ./.github/actions/yarn-install
- - name: Download Hermes
- if: steps.restore-ios-slice.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-${{ matrix.flavor }}
- path: /tmp/hermes/hermes-runtime-darwin
- - name: Extract Hermes
- if: steps.restore-ios-slice.outputs.cache-hit != 'true'
+ - name: Set Hermes version
shell: bash
run: |
- HERMES_TARBALL_ARTIFACTS_DIR=/tmp/hermes/hermes-runtime-darwin
- if [ ! -d $HERMES_TARBALL_ARTIFACTS_DIR ]; then
- echo "Hermes tarball artifacts dir not present ($HERMES_TARBALL_ARTIFACTS_DIR)."
- exit 0
+ if [ "${{ inputs.use-hermes-nightly }}" == "true" ]; then
+ # We are not publishing nightly versions of Hermes V1 yet.
+ # For now, we can use the latest version of Hermes V1 published on maven and npm.
+ HERMES_VERSION="latest-v1"
+ else
+ HERMES_VERSION=$(sed -n 's/^HERMES_V1_VERSION_NAME=//p' packages/react-native/sdks/hermes-engine/version.properties)
fi
-
- TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "${{ matrix.flavor }}")
- TARBALL_PATH=$HERMES_TARBALL_ARTIFACTS_DIR/$TARBALL_FILENAME
-
- echo "Looking for $TARBALL_FILENAME in $HERMES_TARBALL_ARTIFACTS_DIR"
- echo "$TARBALL_PATH"
-
- if [ ! -f $TARBALL_PATH ]; then
- echo "Hermes tarball not present ($TARBALL_PATH). Build Hermes from source."
- exit 0
+ echo "Using Hermes version: $HERMES_VERSION"
+ echo "HERMES_VERSION=$HERMES_VERSION" >> $GITHUB_ENV
+ - name: Set React Native version
+ shell: bash
+ run: |
+ if [ "${{ inputs.version-type }}" != "" ]; then
+ node ./scripts/releases/set-rn-artifacts-version.js --build-type "${{ inputs.version-type }}"
fi
-
- echo "Found Hermes tarball at $TARBALL_PATH"
- echo "HERMES_ENGINE_TARBALL_PATH=$TARBALL_PATH" >> $GITHUB_ENV
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
path: /tmp/third-party/
@@ -102,19 +99,19 @@ jobs:
cd packages/react-native
node scripts/ios-prebuild -b -f "${{ matrix.flavor }}" -p "${{ matrix.slice }}"
- name: Upload headers
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: prebuild-ios-core-headers-${{ matrix.flavor }}-${{ matrix.slice }}
path:
packages/react-native/.build/headers
- name: Upload artifacts
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: prebuild-ios-core-slice-${{ matrix.flavor }}-${{ matrix.slice }}
path: |
packages/react-native/.build/output/spm/${{ matrix.flavor }}/Build/Products
- name: Save Cache
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
with:
key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
@@ -123,7 +120,7 @@ jobs:
packages/react-native/.build/headers
compose-xcframework:
- runs-on: macos-14
+ runs-on: macos-15
needs: [build-rn-slice]
strategy:
fail-fast: false
@@ -134,10 +131,10 @@ jobs:
REACT_ORG_CODE_SIGNING_P12_CERT_PWD: ${{ secrets.REACT_ORG_CODE_SIGNING_P12_CERT_PWD }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Restore cache if present
id: restore-ios-xcframework
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: packages/react-native/.build/output/xcframeworks
key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/*.js', 'packages/react-native/scripts/ios-prebuild.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
@@ -147,21 +144,19 @@ jobs:
- name: Setup xcode
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.2.0'
- name: Yarn Install
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
uses: ./.github/actions/yarn-install
- name: Download slice artifacts
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: prebuild-ios-core-slice-${{ matrix.flavor }}-*
path: packages/react-native/.build/output/spm/${{ matrix.flavor }}/Build/Products
merge-multiple: true
- name: Download headers
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: prebuild-ios-core-headers-${{ matrix.flavor }}-*
path: packages/react-native/.build/headers
@@ -193,18 +188,18 @@ jobs:
cd packages/react-native/.build/output/xcframeworks/${{matrix.flavor}}/Symbols
tar -cz -f ../../ReactCore${{ matrix.flavor }}.framework.dSYM.tar.gz .
- name: Upload XCFramework Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: ReactCore${{ matrix.flavor }}.xcframework.tar.gz
path: packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.xcframework.tar.gz
- name: Upload dSYM Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: ReactCore${{ matrix.flavor }}.framework.dSYM.tar.gz
path: packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.framework.dSYM.tar.gz
- name: Save cache if present
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: |
packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.xcframework.tar.gz
diff --git a/.github/workflows/prebuild-ios-dependencies.yml b/.github/workflows/prebuild-ios-dependencies.yml
index 70ca3fe2a5c7..73cf9870c66c 100644
--- a/.github/workflows/prebuild-ios-dependencies.yml
+++ b/.github/workflows/prebuild-ios-dependencies.yml
@@ -7,18 +7,18 @@ on:
jobs:
prepare_workspace:
name: Prepare workspace
- runs-on: macos-14
+ runs-on: macos-15
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Restore cache if present
id: restore-ios-prebuilds
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: packages/react-native/third-party/
- key: v2-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
enableCrossOsArchive: true
- name: Yarn Install
if: steps.restore-ios-prebuilds.outputs.cache-hit != 'true'
@@ -32,21 +32,21 @@ jobs:
run: |
node scripts/releases/prepare-ios-prebuilds.js -w
- name: Upload Artifacts
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: ios-prebuilds-workspace
path: packages/react-native/third-party/
- name: Save Cache
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
with:
- key: v2-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
enableCrossOsArchive: true
path: packages/react-native/third-party/
build-apple-slices:
name: Build Apple Slice
- runs-on: macos-14
+ runs-on: macos-15
needs: [prepare_workspace]
strategy:
fail-fast: false
@@ -62,59 +62,51 @@ jobs:
'xros-simulator']
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- - name: Setup xcode
- uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.1'
- name: Restore slice folder
id: restore-slice-folder
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: packages/react-native/third-party/.build/Build/Products
- key: v2-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ - name: Setup xcode
+ if: steps.restore-slice-folder.outputs.cache-hit != 'true'
+ uses: ./.github/actions/setup-xcode
- name: Yarn Install
if: steps.restore-slice-folder.outputs.cache-hit != 'true'
uses: ./.github/actions/yarn-install
- name: Restore workspace
if: steps.restore-slice-folder.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ios-prebuilds-workspace
path: packages/react-native/third-party/
- name: Print third-party folder structure
+ if: steps.restore-slice-folder.outputs.cache-hit != 'true'
run: ls -lR packages/react-native/third-party
- - name: Install VisionOS
- if: ${{ steps.restore-slice-folder.outputs.cache-hit != 'true' && (matrix.slice == 'xros' || matrix.slice == 'xros-simulator') }}
- run: |
- # https://github.com/actions/runner-images/issues/10559
- sudo xcodebuild -runFirstLaunch
- sudo xcrun simctl list
- sudo xcodebuild -downloadPlatform visionOS
- sudo xcodebuild -runFirstLaunch
- name: Build slice ${{ matrix.slice }} for ${{ matrix.flavor }}
if: steps.restore-slice-folder.outputs.cache-hit != 'true'
run: node scripts/releases/prepare-ios-prebuilds.js -b -p ${{ matrix.slice }} -r ${{ matrix.flavor }}
- name: Upload Artifacts
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: prebuild-slice-${{ matrix.flavor }}-${{ matrix.slice }}
path: |
packages/react-native/third-party/.build/Build/Products
- name: Save Cache
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
with:
- key: v2-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
enableCrossOsArchive: true
path: |
packages/react-native/third-party/.build/Build/Products
create-xcframework:
name: Prepare XCFramework
- runs-on: macos-14
+ runs-on: macos-15
needs: [build-apple-slices]
strategy:
fail-fast: false
@@ -125,33 +117,31 @@ jobs:
REACT_ORG_CODE_SIGNING_P12_CERT_PWD: ${{ secrets.REACT_ORG_CODE_SIGNING_P12_CERT_PWD }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Setup xcode
uses: ./.github/actions/setup-xcode
- with:
- xcode-version: '16.1'
- name: Restore XCFramework
id: restore-xcframework
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
with:
path: |
packages/react-native/third-party/
- key: v2-ios-dependencies-xcframework-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-xcframework-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
# If cache hit, we already have our binary. We don't need to do anything.
- name: Yarn Install
if: steps.restore-xcframework.outputs.cache-hit != 'true'
uses: ./.github/actions/yarn-install
- name: Restore workspace
if: steps.restore-xcframework.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ios-prebuilds-workspace
path: packages/react-native/third-party/
- name: Download slices
if: steps.restore-xcframework.outputs.cache-hit != 'true'
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: prebuild-slice-${{ matrix.flavor }}-*
path: packages/react-native/third-party/.build/Build/Products
@@ -183,21 +173,21 @@ jobs:
tar -cz -f ../ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz .
mv ../ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz ./ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz
- name: Upload XCFramework Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
path: packages/react-native/third-party/ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
- name: Upload dSYM Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz
path: |
packages/react-native/third-party/Symbols/ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz
- name: Save XCFramework in Cache
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: |
packages/react-native/third-party/ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
packages/react-native/third-party/ReactNativeDependencies${{ matrix.flavor }}.framework.dSYM.tar.gz
- key: v2-ios-dependencies-xcframework-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
+ key: v3-ios-dependencies-xcframework-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }}
diff --git a/.github/workflows/publish-bumped-packages.yml b/.github/workflows/publish-bumped-packages.yml
index f47ddd9fc034..cf0b69b8c354 100644
--- a/.github/workflows/publish-bumped-packages.yml
+++ b/.github/workflows/publish-bumped-packages.yml
@@ -9,11 +9,12 @@ on:
jobs:
publish_bumped_packages:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
env:
GHA_NPM_TOKEN: ${{ secrets.GHA_NPM_TOKEN }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Run Yarn Install
diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml
index 8f356720f0b9..99e3b94fc9b4 100644
--- a/.github/workflows/publish-release.yml
+++ b/.github/workflows/publish-release.yml
@@ -19,136 +19,43 @@ jobs:
echo "Setting release type to release"
echo "RELEASE_TYPE=release" >> $GITHUB_OUTPUT
- prepare_hermes_workspace:
+ set_hermes_versions:
runs-on: ubuntu-latest
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion
+ if: github.repository == 'facebook/react-native'
outputs:
- react-native-version: ${{ steps.prepare-hermes-workspace.outputs.react-native-version }}
- hermes-version: ${{ steps.prepare-hermes-workspace.outputs.hermes-version }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Prepare Hermes Workspace
- id: prepare-hermes-workspace
- uses: ./.github/actions/prepare-hermes-workspace
- with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
- hermes-version-file: ${{ env.HERMES_VERSION_FILE }}
-
- build_hermesc_apple:
- runs-on: macos-14
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
+ HERMES_VERSION: ${{ steps.set_hermes_versions.outputs.HERMES_VERSION }}
+ HERMES_V1_VERSION: ${{ steps.set_hermes_versions.outputs.HERMES_V1_VERSION }}
steps:
- name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Apple
- uses: ./.github/actions/build-hermesc-apple
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.output.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.output.react-native-version }}
- build_apple_slices_hermes:
- runs-on: macos-14
- needs: [build_hermesc_apple, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- HERMES_OSXBIN_ARTIFACTS_DIR: /tmp/hermes/osx-bin
- IOS_DEPLOYMENT_TARGET: "15.1"
- XROS_DEPLOYMENT_TARGET: "1.0"
- MAC_DEPLOYMENT_TARGET: "10.15"
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- slice: [macosx, iphoneos, iphonesimulator, appletvos, appletvsimulator, catalyst, xros, xrsimulator]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Slice
- uses: ./.github/actions/build-apple-slices-hermes
- with:
- flavor: ${{ matrix.flavor }}
- slice: ${{ matrix.slice}}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
+ uses: actions/checkout@v6
+ - id: set_hermes_versions
+ run: |
+ echo "Setting hermes versions to latest"
+ hermes_version=$(grep -oE 'HERMES_VERSION_NAME=([0-9]+\.[0-9]+\.[0-9]+)' packages/react-native/sdks/hermes-engine/version.properties | cut -d'=' -f2)
+ hermes_v1_version=$(grep -oE 'HERMES_V1_VERSION_NAME=([0-9]+\.[0-9]+\.[0-9]+)' packages/react-native/sdks/hermes-engine/version.properties | cut -d'=' -f2)
- build_hermes_macos:
- runs-on: macos-14
- needs: [build_apple_slices_hermes, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- continue-on-error: true
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Hermes MacOS
- uses: ./.github/actions/build-hermes-macos
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
- flavor: ${{ matrix.flavor }}
+ echo "HERMES_VERSION=$hermes_version" >> $GITHUB_OUTPUT
+ echo "HERMES_V1_VERSION=$hermes_v1_version" >> $GITHUB_OUTPUT
+ - name: Print hermes versions
+ run: |
+ echo "HERMES_VERSION=${{ steps.set_hermes_versions.outputs.HERMES_VERSION }}"
+ echo "HERMES_V1_VERSION=${{ steps.set_hermes_versions.outputs.HERMES_V1_VERSION }}"
prebuild_apple_dependencies:
+ if: github.repository == 'facebook/react-native'
uses: ./.github/workflows/prebuild-ios-dependencies.yml
secrets: inherit
prebuild_react_native_core:
uses: ./.github/workflows/prebuild-ios-core.yml
secrets: inherit
- needs: [prebuild_apple_dependencies, build_hermes_macos]
-
- build_hermesc_linux:
- runs-on: ubuntu-latest
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Linux
- uses: ./.github/actions/build-hermesc-linux
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_hermesc_windows:
- runs-on: windows-2025
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: 'C:\tmp\hermes'
- HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin'
- HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin'
- ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip"
- MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin'
- CMAKE_DIR: 'C:\Program Files\CMake\bin'
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Windows
- uses: ./.github/actions/build-hermesc-windows
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
+ needs: [prebuild_apple_dependencies]
build_npm_package:
runs-on: 8-core-ubuntu
needs:
[
set_release_type,
- prepare_hermes_workspace,
- build_hermes_macos,
- build_hermesc_linux,
- build_hermesc_windows,
prebuild_apple_dependencies,
prebuild_react_native_core,
]
@@ -160,7 +67,6 @@ jobs:
# By default we only build ARM64 to save time/resources. For release/nightlies, we override this value to build all archs.
ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a"
env:
- HERMES_WS_DIR: /tmp/hermes
GHA_NPM_TOKEN: ${{ secrets.GHA_NPM_TOKEN }}
ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }}
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
@@ -169,20 +75,19 @@ jobs:
REACT_NATIVE_BOT_GITHUB_TOKEN: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
fetch-depth: 0
fetch-tags: true
- name: Build and Publish NPM Package
uses: ./.github/actions/build-npm-package
with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }}
gha-npm-token: ${{ env.GHA_NPM_TOKEN }}
gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Publish @react-native-community/template
id: publish-template-to-npm
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -192,7 +97,7 @@ jobs:
await publishTemplate(github, version, isDryRun);
- name: Wait for template to be published
timeout-minutes: 3
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -207,7 +112,7 @@ jobs:
-d "{\"event_type\": \"publish\", \"client_payload\": { \"version\": \"${{ github.ref_name }}\" }}"
- name: Verify Release is on NPM
timeout-minutes: 3
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
github-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
script: |
@@ -216,7 +121,7 @@ jobs:
const version = "${{ github.ref_name }}";
await verifyReleaseOnNpm(version, isLatest());
- name: Verify that artifacts are on Maven
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
script: |
const {verifyArtifactsAreOnMaven} = require('./.github/workflow-scripts/verifyArtifactsAreOnMaven.js');
@@ -234,6 +139,9 @@ jobs:
secrets: inherit
create_draft_release:
- needs: generate_changelog
+ needs: [generate_changelog, set_hermes_versions]
uses: ./.github/workflows/create-draft-release.yml
secrets: inherit
+ with:
+ hermesVersion: ${{ needs.set_hermes_versions.outputs.HERMES_VERSION }}
+ hermesV1Version: ${{ needs.set_hermes_versions.outputs.HERMES_V1_VERSION }}
diff --git a/.github/workflows/retry-workflow.yml b/.github/workflows/retry-workflow.yml
index aef1766b3613..d943d657d825 100644
--- a/.github/workflows/retry-workflow.yml
+++ b/.github/workflows/retry-workflow.yml
@@ -9,6 +9,7 @@ on:
jobs:
rerun:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
steps:
- name: rerun ${{ inputs.run_id }}
env:
diff --git a/.github/workflows/stale-bot.yml b/.github/workflows/stale-bot.yml
index 585ea9a9e743..f4c2fa8d353f 100644
--- a/.github/workflows/stale-bot.yml
+++ b/.github/workflows/stale-bot.yml
@@ -10,7 +10,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
repo-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
days-before-stale: 180
@@ -27,7 +27,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
ascending: true
repo-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
@@ -45,7 +45,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
repo-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
any-of-labels: 'Needs: Author Feedback'
@@ -63,7 +63,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
ascending: true
repo-token: ${{ secrets.REACT_NATIVE_BOT_GITHUB_TOKEN }}
diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml
index e4f00621dee9..5a59c493f41e 100644
--- a/.github/workflows/test-all.yml
+++ b/.github/workflows/test-all.yml
@@ -11,6 +11,7 @@ on:
jobs:
set_release_type:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
outputs:
RELEASE_TYPE: ${{ steps.set_release_type.outputs.RELEASE_TYPE }}
env:
@@ -32,154 +33,81 @@ jobs:
echo "Should I run E2E tests? ${{ inputs.run-e2e-tests }}"
- prepare_hermes_workspace:
- runs-on: ubuntu-latest
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion
- outputs:
- react-native-version: ${{ steps.prepare-hermes-workspace.outputs.react-native-version }}
- hermes-version: ${{ steps.prepare-hermes-workspace.outputs.hermes-version }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Prepare Hermes Workspace
- id: prepare-hermes-workspace
- uses: ./.github/actions/prepare-hermes-workspace
- with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
- hermes-version-file: ${{ env.HERMES_VERSION_FILE }}
-
- build_hermesc_apple:
- runs-on: macos-14
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Apple
- uses: ./.github/actions/build-hermesc-apple
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_apple_slices_hermes:
- runs-on: macos-14
- needs: [build_hermesc_apple, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- HERMES_OSXBIN_ARTIFACTS_DIR: /tmp/hermes/osx-bin
- IOS_DEPLOYMENT_TARGET: "15.1"
- XROS_DEPLOYMENT_TARGET: "1.0"
- MAC_DEPLOYMENT_TARGET: "10.15"
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- slice: [macosx, iphoneos, iphonesimulator, appletvos, appletvsimulator, catalyst, xros, xrsimulator]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Slice
- uses: ./.github/actions/build-apple-slices-hermes
- with:
- flavor: ${{ matrix.flavor }}
- slice: ${{ matrix.slice}}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
- build_hermes_macos:
- runs-on: macos-14
- needs: [build_apple_slices_hermes, prepare_hermes_workspace]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- continue-on-error: true
- strategy:
- fail-fast: false
- matrix:
- flavor: [Debug, Release]
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build Hermes MacOS
- uses: ./.github/actions/build-hermes-macos
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
- flavor: ${{ matrix.flavor }}
-
prebuild_apple_dependencies:
+ if: github.repository == 'facebook/react-native'
uses: ./.github/workflows/prebuild-ios-dependencies.yml
secrets: inherit
prebuild_react_native_core:
uses: ./.github/workflows/prebuild-ios-core.yml
+ with:
+ use-hermes-nightly: ${{ !endsWith(github.ref_name, '-stable') }}
secrets: inherit
- needs: [prebuild_apple_dependencies, build_hermes_macos]
+ needs: [prebuild_apple_dependencies]
test_ios_rntester_ruby_3_2_0:
- runs-on: macos-14
+ runs-on: macos-15
needs:
- [build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
+ [prebuild_apple_dependencies, prebuild_react_native_core]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Run it
uses: ./.github/actions/test-ios-rntester
with:
ruby-version: "3.2.0"
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
flavor: Debug
+ test_ios_rntester_dynamic_frameworks:
+ runs-on: macos-15-large
+ strategy:
+ fail-fast: false
+ matrix:
+ flavor: [Debug, Release]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ - name: Run it
+ uses: ./.github/actions/test-ios-rntester
+ with:
+ flavor: ${{ matrix.flavor }}
+ use-frameworks: true
+ run-unit-tests: false # tests for dynamic frameworks are already run in the test_ios_rntester job; this is to just a test build from source (no prebuilds)
+
test_ios_rntester:
- runs-on: macos-14-large
+ runs-on: macos-15-large
needs:
- [build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
+ [prebuild_apple_dependencies, prebuild_react_native_core]
continue-on-error: true
strategy:
fail-fast: false
matrix:
flavor: [Debug, Release]
- frameworks: [StaticLibraries, DynamicFrameworks]
+ frameworks: [false, true]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Run it
uses: ./.github/actions/test-ios-rntester
with:
use-frameworks: ${{ matrix.frameworks }}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
flavor: ${{ matrix.flavor }}
test_e2e_ios_rntester:
- runs-on: macos-14-large
+ runs-on: macos-15-large
needs:
[test_ios_rntester]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
strategy:
fail-fast: false
matrix:
flavor: [Debug, Release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Download App
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: RNTesterApp-NewArch-${{ matrix.flavor }}
path: /tmp/RNTesterBuild/RNTester.app
@@ -196,18 +124,15 @@ jobs:
flavor: ${{ matrix.flavor }}
test_e2e_ios_templateapp:
- runs-on: macos-14-large
+ runs-on: macos-15-large
needs: [build_npm_package, prebuild_apple_dependencies]
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
strategy:
fail-fast: false
matrix:
flavor: [Debug, Release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup xcode
uses: ./.github/actions/setup-xcode
- name: Setup node.js
@@ -218,20 +143,15 @@ jobs:
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.6.10
- - name: Download Hermes
- uses: actions/download-artifact@v4
- with:
- name: hermes-darwin-bin-${{matrix.flavor}}
- path: /tmp/react-native-tmp
- name: Download React Native Package
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: react-native-package
path: /tmp/react-native-tmp
- name: Print /tmp folder
run: ls -lR /tmp/react-native-tmp
- name: Download ReactNativeDependencies
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
path: /tmp/third-party
@@ -239,7 +159,7 @@ jobs:
shell: bash
run: ls -lR /tmp/third-party
- name: Download React Native Prebuilds
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ReactCore${{ matrix.flavor }}.xcframework.tar.gz
path: /tmp/ReactCore
@@ -256,9 +176,6 @@ jobs:
REACT_NATIVE_PKG=$(find /tmp/react-native-tmp -type f -name "*.tgz")
echo "React Native tgs is $REACT_NATIVE_PKG"
- HERMES_PATH=$(find /tmp/react-native-tmp -type f -name "*.tar.gz")
- echo "Hermes path is $HERMES_PATH"
-
# For stable branches, we want to use the stable branch of the template
# In all the other cases, we want to use "main"
BRANCH=${{ github.ref_name }}
@@ -273,8 +190,9 @@ jobs:
NEW_ARCH_ENABLED=1
export RCT_USE_LOCAL_RN_DEP=/tmp/third-party/ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
+ # Disable prebuilds for now, as they are causing issues with E2E tests for 0.82-stable branch
export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ matrix.flavor }}.xcframework.tar.gz"
- HERMES_ENGINE_TARBALL_PATH=$HERMES_PATH RCT_NEW_ARCH_ENABLED=$NEW_ARCH_ENABLED bundle exec pod install
+ RCT_NEW_ARCH_ENABLED=$NEW_ARCH_ENABLED bundle exec pod install
xcodebuild \
-scheme "RNTestProject" \
@@ -301,23 +219,23 @@ jobs:
flavor: [debug, release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Run yarn
uses: ./.github/actions/yarn-install
- name: Set up JDK 17
- uses: actions/setup-java@v2
+ uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'zulu'
- name: Download Maven Local
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: maven-local
path: /tmp/react-native-tmp/maven-local
- name: Download React Native Package
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: react-native-package
path: /tmp/react-native-tmp
@@ -360,21 +278,6 @@ jobs:
flavor: ${{ matrix.flavor }}
working-directory: /tmp/RNTestProject
- build_hermesc_linux:
- runs-on: ubuntu-latest
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: /tmp/hermes
- HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Linux
- uses: ./.github/actions/build-hermesc-linux
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
run_fantom_tests:
runs-on: 8-core-ubuntu
needs: [set_release_type]
@@ -387,32 +290,13 @@ jobs:
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build and Test Fantom
uses: ./.github/actions/run-fantom-tests
with:
release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }}
gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- build_hermesc_windows:
- runs-on: windows-2025
- needs: prepare_hermes_workspace
- env:
- HERMES_WS_DIR: 'C:\tmp\hermes'
- HERMES_TARBALL_ARTIFACTS_DIR: 'C:\tmp\hermes\hermes-runtime-darwin'
- HERMES_OSXBIN_ARTIFACTS_DIR: 'C:\tmp\hermes\osx-bin'
- ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip"
- MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin'
- CMAKE_DIR: 'C:\Program Files\CMake\bin'
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Build HermesC Windows
- uses: ./.github/actions/build-hermesc-windows
- with:
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
-
build_android:
runs-on: 8-core-ubuntu
needs: [set_release_type]
@@ -425,7 +309,7 @@ jobs:
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build Android
uses: ./.github/actions/build-android
with:
@@ -441,13 +325,13 @@ jobs:
flavor: [debug, release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup node.js
uses: ./.github/actions/setup-node
- name: Install node dependencies
uses: ./.github/actions/yarn-install
- name: Download APK
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: rntester-${{ matrix.flavor }}
path: ./packages/rn-tester/android/app/build/outputs/apk/${{ matrix.flavor }}/
@@ -467,10 +351,6 @@ jobs:
needs:
[
set_release_type,
- prepare_hermes_workspace,
- build_hermes_macos,
- build_hermesc_linux,
- build_hermesc_windows,
build_android,
prebuild_apple_dependencies,
prebuild_react_native_core,
@@ -480,15 +360,12 @@ jobs:
env:
TERM: "dumb"
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
- env:
- HERMES_WS_DIR: /tmp/hermes
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build NPM Package
uses: ./.github/actions/build-npm-package
with:
- hermes-ws-dir: ${{ env.HERMES_WS_DIR }}
release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }}
gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
@@ -512,16 +389,16 @@ jobs:
flavor: [Debug, Release]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup git safe folders
run: git config --global --add safe.directory '*'
- name: Download npm package artifact
- uses: actions/download-artifact@v4.1.3
+ uses: actions/download-artifact@v7
with:
name: react-native-package
path: build
- name: Download maven-local artifact
- uses: actions/download-artifact@v4.1.3
+ uses: actions/download-artifact@v7
with:
name: maven-local
path: /tmp/maven-local
@@ -531,6 +408,12 @@ jobs:
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
- name: Run yarn install
uses: ./.github/actions/yarn-install
+ - name: Set nightly Hermes versions
+ shell: bash
+ run: |
+ node ./scripts/releases/use-hermes-nightly.js
+ - name: Run yarn install again, with the correct hermes version
+ uses: ./.github/actions/yarn-install
- name: Prepare the Helloworld application
shell: bash
run: node ./scripts/e2e/init-project-e2e.js --useHelloWorld --pathToLocalReactNative "$GITHUB_WORKSPACE/build/$(cat build/react-native-package-version)"
@@ -544,63 +427,58 @@ jobs:
fi
yarn build android "${args[@]}" -P reactNativeArchitectures="$TARGET_ARCHITECTURE" -P react.internal.mavenLocalRepo="/tmp/maven-local"
- name: Upload artifact
- uses: actions/upload-artifact@v4.3.4
+ uses: actions/upload-artifact@v6
with:
name: helloworld-apk-${{ matrix.flavor }}-NewArch-hermes
path: ./private/helloworld/android/app/build/outputs/apk/
compression-level: 0
test_ios_helloworld_with_ruby_3_2_0:
- runs-on: macos-14
- needs: [prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core] # prepare_hermes_workspace must be there because we need its reference to retrieve a couple of outputs
+ runs-on: macos-15
+ needs: [prebuild_apple_dependencies, prebuild_react_native_core]
env:
PROJECT_NAME: iOSTemplateProject
- HERMES_WS_DIR: /tmp/hermes
YARN_ENABLE_IMMUTABLE_INSTALLS: false
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- uses: ./.github/actions/test-ios-helloworld
with:
ruby-version: 3.2.0
flavor: Debug
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
test_ios_helloworld:
- runs-on: macos-14
- needs: [prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core] # prepare_hermes_workspace must be there because we need its reference to retrieve a couple of outputs
+ runs-on: macos-15
+ needs: [prebuild_apple_dependencies, prebuild_react_native_core]
strategy:
matrix:
flavor: [Debug, Release]
- use_frameworks: [StaticLibraries, DynamicFrameworks]
+ use_frameworks: [false, true]
exclude:
# This config is tested with Ruby 3.2.0. Let's not double test it.
- flavor: Debug
use_frameworks: StaticLibraries
env:
PROJECT_NAME: iOSTemplateProject
- HERMES_WS_DIR: /tmp/hermes
YARN_ENABLE_IMMUTABLE_INSTALLS: false
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- uses: ./.github/actions/test-ios-helloworld
with:
flavor: ${{ matrix.flavor }}
use-frameworks: ${{ matrix.use_frameworks }}
- hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
- react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
test_js:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
strategy:
fail-fast: false
matrix:
- node-version: ["24.4.1", "22", "20.19.4"]
+ node-version: ["24", "22", "20.19.4"]
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Test JS
uses: ./.github/actions/test-js
with:
@@ -608,11 +486,12 @@ jobs:
lint:
runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Run all the linters
uses: ./.github/actions/lint
with:
@@ -629,11 +508,11 @@ jobs:
# This is exactly the same as rerunning failed tests from the GH UI, but automated.
rerun-failed-jobs:
runs-on: ubuntu-latest
- needs: [test_e2e_ios_rntester, test_e2e_android_rntester, test_e2e_ios_templateapp, test_e2e_android_templateapp]
+ needs: [test_e2e_ios_rntester, test_e2e_android_rntester, test_e2e_ios_templateapp, test_e2e_android_templateapp, run_fantom_tests]
if: ${{ github.ref == 'refs/heads/main' && always() }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Rerun failed jobs in the current workflow
env:
GH_TOKEN: ${{ github.token }}
@@ -647,13 +526,15 @@ jobs:
TEMPLATE_ANDROID_FAILED=${{ needs.test_e2e_android_templateapp.result == 'failure' }}
RNTESTER_IOS_FAILED=${{ needs.test_e2e_ios_rntester.result == 'failure' }}
TEMPLATE_IOS_FAILED=${{ needs.test_e2e_ios_templateapp.result == 'failure' }}
+ FANTOM_TESTS_FAILED=${{ needs.run_fantom_tests.result == 'failure' }}
echo "RNTESTER_ANDROID_FAILED: $RNTESTER_ANDROID_FAILED"
echo "TEMPLATE_ANDROID_FAILED: $TEMPLATE_ANDROID_FAILED"
echo "RNTESTER_IOS_FAILED: $RNTESTER_IOS_FAILED"
echo "TEMPLATE_IOS_FAILED: $TEMPLATE_IOS_FAILED"
+ echo "FANTOM_TESTS_FAILED: $FANTOM_TESTS_FAILED"
- if [[ $RNTESTER_ANDROID_FAILED == "true" || $TEMPLATE_ANDROID_FAILED == "true" || $RNTESTER_IOS_FAILED == "true" || $TEMPLATE_IOS_FAILED == "true" ]]; then
+ if [[ $RNTESTER_ANDROID_FAILED == "true" || $TEMPLATE_ANDROID_FAILED == "true" || $RNTESTER_IOS_FAILED == "true" || $TEMPLATE_IOS_FAILED == "true" || $FANTOM_TESTS_FAILED == "true" ]]; then
echo "Rerunning failed jobs in the current workflow"
gh workflow run retry-workflow.yml -F run_id=${{ github.run_id }}
fi
diff --git a/.github/workflows/test-hermes-v1-android.yml b/.github/workflows/test-hermes-v1-android.yml
new file mode 100644
index 000000000000..1c7b7eedf12b
--- /dev/null
+++ b/.github/workflows/test-hermes-v1-android.yml
@@ -0,0 +1,70 @@
+name: Test Hermes V1 with nightly on Android
+
+on:
+ workflow_call:
+ inputs:
+ retry-count:
+ description: 'Number of times to retry the build on failure'
+ required: false
+ type: number
+ default: 3
+
+jobs:
+ test-hermes-v1-android:
+ name: Test Hermes V1 on Android
+ runs-on: 4-core-ubuntu
+ strategy:
+ matrix:
+ flavor: [debug, release]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+
+ - name: Setup node.js
+ uses: actions/setup-node@v6
+ with:
+ node-version: '22.14.0'
+ cache: yarn
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v5
+ with:
+ java-version: '17'
+ distribution: 'zulu'
+
+ - name: Prepare the app with Hermes V1
+ uses: ./.github/actions/prepare-hermes-v1-app
+ with:
+ retry-count: ${{ inputs.retry-count }}
+
+ - name: Build Android with retry
+ uses: nick-fields/retry@v3
+ env:
+ CMAKE_VERSION: 3.31.5
+ ORG_GRADLE_PROJECT_reactNativeArchitectures: x86_64
+ with:
+ timeout_minutes: 45
+ max_attempts: ${{ inputs.retry-count }}
+ retry_wait_seconds: 30
+ shell: bash
+ command: |
+ cd /tmp/RNApp/android
+ CAPITALIZED_FLAVOR=$(echo "${{ matrix.flavor }}" | awk '{print toupper(substr($0, 1, 1)) substr($0, 2)}')
+ ./gradlew assemble${CAPITALIZED_FLAVOR} -PhermesV1Enabled=true
+ on_retry_command: |
+ echo "Cleaning up for Android retry..."
+ cd /tmp/RNApp/android
+ ./gradlew clean || true
+ rm -rf build app/build .gradle || true
+
+ - name: Run E2E Tests
+ uses: ./.github/actions/maestro-android
+ timeout-minutes: 60
+ with:
+ app-path: /tmp/RNApp/android/app/build/outputs/apk/${{ matrix.flavor }}/app-${{ matrix.flavor }}.apk
+ app-id: com.rnapp
+ maestro-flow: ./scripts/e2e/.maestro/
+ install-java: 'false'
+ flavor: ${{ matrix.flavor }}
+ working-directory: /tmp/RNApp
+ emulator-arch: x86_64
diff --git a/.github/workflows/test-hermes-v1-ios.yml b/.github/workflows/test-hermes-v1-ios.yml
new file mode 100644
index 000000000000..bdafd9181b81
--- /dev/null
+++ b/.github/workflows/test-hermes-v1-ios.yml
@@ -0,0 +1,76 @@
+name: Test Hermes V1 with nightly on iOS
+
+on:
+ workflow_call:
+ inputs:
+ retry-count:
+ description: 'Number of times to retry the build on failure'
+ required: false
+ type: number
+ default: 3
+
+jobs:
+ test-hermes-v1-ios:
+ name: Test Hermes V1 on iOS
+ runs-on: macos-15-large
+ strategy:
+ matrix:
+ flavor: [debug, release]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+
+ - name: Setup node.js
+ uses: actions/setup-node@v6
+ with:
+ node-version: '22.14.0'
+ cache: yarn
+
+ - name: Prepare capitalized flavor
+ id: prepare-flavor
+ shell: bash
+ run: |
+ CAPITALIZED_FLAVOR=$(echo "${{ matrix.flavor }}" | awk '{print toupper(substr($0, 1, 1)) substr($0, 2)}')
+ echo "capitalized_flavor=$CAPITALIZED_FLAVOR" >> $GITHUB_OUTPUT
+
+ - name: Prepare the app with Hermes V1
+ uses: ./.github/actions/prepare-hermes-v1-app
+ with:
+ retry-count: ${{ inputs.retry-count }}
+
+ - name: Setup xcode
+ uses: maxim-lobanov/setup-xcode@v1
+
+ - name: Build iOS with retry
+ uses: nick-fields/retry@v3
+ with:
+ timeout_minutes: 45
+ max_attempts: ${{ inputs.retry-count }}
+ retry_wait_seconds: 30
+ shell: bash
+ command: |
+ cd /tmp/RNApp/ios
+ bundle install
+ RCT_HERMES_V1_ENABLED=1 bundle exec pod install
+ xcodebuild build \
+ -workspace "RNApp.xcworkspace" \
+ -scheme "RNApp" \
+ -configuration "${{ steps.prepare-flavor.outputs.capitalized_flavor }}" \
+ -sdk "iphonesimulator" \
+ -destination "generic/platform=iOS Simulator" \
+ -derivedDataPath "/tmp/RNApp" \
+ -quiet
+ on_retry_command: |
+ echo "Cleaning up for iOS retry..."
+ cd /tmp/RNApp/ios
+ rm -rf Pods Podfile.lock build
+ rm -rf ~/Library/Developer/Xcode/DerivedData/* || true
+
+ - name: Run E2E Tests
+ uses: ./.github/actions/maestro-ios
+ with:
+ app-path: "/tmp/RNApp/Build/Products/${{ steps.prepare-flavor.outputs.capitalized_flavor }}-iphonesimulator/RNApp.app"
+ app-id: org.reactjs.native.example.RNApp
+ maestro-flow: ./scripts/e2e/.maestro/
+ flavor: ${{ steps.prepare-flavor.outputs.capitalized_flavor }}
+ working-directory: /tmp/RNApp
diff --git a/.github/workflows/test-hermes-v1.yml b/.github/workflows/test-hermes-v1.yml
new file mode 100644
index 000000000000..d11e444e5ff6
--- /dev/null
+++ b/.github/workflows/test-hermes-v1.yml
@@ -0,0 +1,39 @@
+# This jobs runs every day 2 hours after the nightly job for React Native so we can verify how the nightly is behaving.
+name: Check Hermes V1 with the nightly build
+
+on:
+ workflow_dispatch:
+ # nightly build @ 4:15 AM UTC
+ schedule:
+ - cron: '15 4 * * *'
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ check-nightly:
+ runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ - name: Check nightly
+ run: |
+ TODAY=$(date "+%Y%m%d")
+ echo "Checking nightly for $TODAY"
+ NIGHTLY="$(npm view react-native | grep $TODAY)"
+ if [[ -z $NIGHTLY ]]; then
+ echo 'Nightly job failed.'
+ exit 1
+ else
+ echo 'Nightly Worked, All Good!'
+ fi
+
+ test-hermes-v1-ios:
+ uses: ./.github/workflows/test-hermes-v1-ios.yml
+ needs: check-nightly
+
+ test-hermes-v1-android:
+ uses: ./.github/workflows/test-hermes-v1-android.yml
+ needs: check-nightly
diff --git a/.github/workflows/validate-dotslash-artifacts.yml b/.github/workflows/validate-dotslash-artifacts.yml
new file mode 100644
index 000000000000..c1baac14097d
--- /dev/null
+++ b/.github/workflows/validate-dotslash-artifacts.yml
@@ -0,0 +1,51 @@
+name: Validate DotSlash Artifacts
+
+on:
+ workflow_dispatch:
+ release:
+ types: [published]
+ push:
+ branches:
+ - main
+ paths:
+ - packages/debugger-shell/bin/react-native-devtools
+ - "scripts/releases/**"
+ - package.json
+ - yarn.lock
+ pull_request:
+ branches:
+ - main
+ paths:
+ - packages/debugger-shell/bin/react-native-devtools
+ - "scripts/releases/**"
+ - package.json
+ - yarn.lock
+ # Same time as the nightly build: 2:15 AM UTC
+ schedule:
+ - cron: "15 2 * * *"
+
+jobs:
+ validate-dotslash-artifacts:
+ runs-on: ubuntu-latest
+ if: github.repository == 'facebook/react-native'
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ fetch-tags: true
+ - name: Setup node.js
+ uses: ./.github/actions/setup-node
+ - name: Install dependencies
+ uses: ./.github/actions/yarn-install
+ - name: Configure Git
+ shell: bash
+ run: |
+ git config --local user.email "bot@reactnative.dev"
+ git config --local user.name "React Native Bot"
+ - name: Validate DotSlash artifacts
+ uses: actions/github-script@v8
+ with:
+ script: |
+ const {validateDotSlashArtifacts} = require('./scripts/releases/validate-dotslash-artifacts.js');
+ await validateDotSlashArtifacts();
diff --git a/.gitignore b/.gitignore
index 8533677fca9d..dd5a1d4431db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -133,6 +133,7 @@ vendor/
# Swift Package build folder
/packages/react-native/.build
/packages/react-native/.swiftpm
+/packages/react-native/React/includes/
# @react-native/codegen
/packages/react-native/React/FBReactNativeSpec/
@@ -175,6 +176,3 @@ fix_*.patch
# [Experimental] Generated TS type definitions
/packages/**/types_generated/
-
-/packages/debugger-shell/build/
-/packages/*/dist/
diff --git a/CHANGELOG-0.6x.md b/CHANGELOG-0.6x.md
index 8e4e433af8e3..9cf3b2b4018f 100644
--- a/CHANGELOG-0.6x.md
+++ b/CHANGELOG-0.6x.md
@@ -606,7 +606,7 @@ This file contains all changelogs for releases in the 0.60-0.69 range. Please ch
- Fix crash on ReactEditText with AppCompat 1.4.0 ([e21f8ec349](https://github.com/facebook/react-native/commit/e21f8ec34984551f87a306672160cc88e67e4793) by [@cortinico](https://github.com/cortinico))
- Do not .lowerCase the library name when codegenerating TurboModule Specs ([28aeb7b865](https://github.com/facebook/react-native/commit/28aeb7b8659b38ee3a27fae213c4d0800f4d7e31) by [@cortinico](https://github.com/cortinico))
- Enable hitSlop to be set using a single number. ([a96bdb7154](https://github.com/facebook/react-native/commit/a96bdb7154b0d8c7f43977d8a583e8d2cbdcb795) by [@javache](https://github.com/javache))
-- Updated TextInput prop types to accomodate for new autoComplete values ([9eb0881c8f](https://github.com/facebook/react-native/commit/9eb0881c8fecd0e974b1cb9f479bad3075854340) by [@TheWirv](https://github.com/TheWirv))
+- Updated TextInput prop types to accommodate for new autoComplete values ([9eb0881c8f](https://github.com/facebook/react-native/commit/9eb0881c8fecd0e974b1cb9f479bad3075854340) by [@TheWirv](https://github.com/TheWirv))
- Don't reconstruct app components https://github.com/facebook/react-native/issues/25040 ([fc962c9b6c](https://github.com/facebook/react-native/commit/fc962c9b6c4bf9f88decbe014ab9a9d5c1cf51bc) by [@Somena1](https://github.com/Somena1))
- Do NOT skip the first child view in the scroll view group when measuring the lower and upper bounds for snapping. ([61e1b6f86c](https://github.com/facebook/react-native/commit/61e1b6f86cf98d8a74eeb9353143fe0c624fe6e6) by [@ryancat](https://github.com/ryancat))
- Fix crash when a Switch is initialised with both backgroundColor and thumbColor. ([456cf3db14](https://github.com/facebook/react-native/commit/456cf3db14c443c483d63aa97c88b45ffd25799b) by [@smarki](https://github.com/smarki))
diff --git a/CHANGELOG-0.7x.md b/CHANGELOG-0.7x.md
index fa8de8fe9d7d..6058d5ccfe24 100644
--- a/CHANGELOG-0.7x.md
+++ b/CHANGELOG-0.7x.md
@@ -1,5 +1,14 @@
# Changelog (pre 0.80)
+## v0.79.7
+
+### Fixed
+
+#### Android specific
+
+- **Layout:** Make missing parent view state in updateLayout a soft error ([56ad8d9bfd](https://github.com/facebook/react-native/commit/56ad8d9bfd08ea70bc6f5726a2b4a6afb6d2d7c2) by [@javache](https://github.com/javache))
+- **Layout:** Make missing parent view state in updateLayout a soft error ([f2e47d8dab](https://github.com/facebook/react-native/commit/f2e47d8dabcd61621ea81c86cd1e2488948c4229) by [@cipolleschi](https://github.com/cipolleschi))
+
## v0.79.6
### Added
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bada6155afa6..c55b794917d8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,358 @@
# Changelog
-## v0.82.0-rc.0
+## v0.84.0-rc.1
+
+### Breaking
+
+#### iOS specific
+
+- Make Hermes V1 the default engine for iOS ([f140c4906b](https://github.com/facebook/react-native/commit/f140c4906b286a85772d0b7d97eecd0798805fcd) by [@cipolleschi](https://github.com/cipolleschi))
+
+### Fixed
+
+- Fixed missing dependency breaking `react-native config` in pnpm setups ([5c43ed2348](https://github.com/facebook/react-native/commit/5c43ed2348d1a0123164f5246aa4a85f909c5560) by [@tido64](https://github.com/tido64))
+
+#### Android specific
+
+- Handle `unstable_path` query param in asset URLs ([42986f27a0](https://github.com/facebook/react-native/commit/42986f27a0285e501f71cf5cedacedefdc44c74e) by [@tido64](https://github.com/tido64))
+
+## v0.84.0-rc.0
+
+### Breaking
+
+- Bump minimum Node.js version to v22.11 ([8f10b339d4](https://github.com/facebook/react-native/commit/8f10b339d48ab3ee6a121e435b380cbe5f5fe36e) by [@robhogan](https://github.com/robhogan))
+- Make the TurboModuleBinding constructor private. ([53944eaa6c](https://github.com/facebook/react-native/commit/53944eaa6c99e6c916d7147b1ef7061fc1ce0e58) by [@RSNara](https://github.com/RSNara))
+- Remove TurboCxxModule ([2d6a3236ed](https://github.com/facebook/react-native/commit/2d6a3236ed2b82d8dc1868439ba958c9f888e48a) by [@christophpurrer](https://github.com/christophpurrer))
+- Removed microtask API from JSTimerManager ([60471cb268](https://github.com/facebook/react-native/commit/60471cb268a70546d6ea555d25c90ca47ad3d839) by [@javache](https://github.com/javache))
+- Remove CxxModule 2/2 C++ part ([a945cd99fa](https://github.com/facebook/react-native/commit/a945cd99fa106bcf327cb90c3349fb5511703663) by [@christophpurrer](https://github.com/christophpurrer))
+- Remove CxxModule 1/2 Java/Kotlin part ([75a11703a0](https://github.com/facebook/react-native/commit/75a11703a0baa0f3b48f977d5ca861eb177c5ab5) by [@christophpurrer](https://github.com/christophpurrer))
+- Remove CxxModule support from CatalystInstance ([c726c27537](https://github.com/facebook/react-native/commit/c726c27537d5fe81f3eeeef9a181888fcf1bb2c1) by [@christophpurrer](https://github.com/christophpurrer))
+- Remove RCTCxxModule ([2c8a376c47](https://github.com/facebook/react-native/commit/2c8a376c47cd112b765ef5b4003751875ba9a4b0) by [@christophpurrer](https://github.com/christophpurrer))
+
+#### Android specific
+
+- Remove unstable_shouldEnableLegacyModuleInterop() ([e4eb64d6cc](https://github.com/facebook/react-native/commit/e4eb64d6cc4ca8834f94d5262f52ac0f099d75a3) by [@RSNara](https://github.com/RSNara))
+- Delete deprecated NativeKind class from React Native Android ([284d841b3d](https://github.com/facebook/react-native/commit/284d841b3d82ff102ff0d839216212e7d6acccea) by [@mdvacca](https://github.com/mdvacca))
+- Remove unnecessary classes inside `com.facebook.react.uimanager.layoutanimation` used in legacy architecture ([0b09e6f696](https://github.com/facebook/react-native/commit/0b09e6f6968240f43db5fec8f2ff7dc1e8d8d7db) by [@cortinico](https://github.com/cortinico))
+- Remove unnecessary `LazyReactPackage` used in legacy architecture ([2b09ae8992](https://github.com/facebook/react-native/commit/2b09ae8992bde33e32e8241792b125449bd4365b) by [@cortinico](https://github.com/cortinico))
+- Remove unused internal `NotThreadSafeBridgeIdleDebugListener` ([0ee4a2d01a](https://github.com/facebook/react-native/commit/0ee4a2d01a7abac197851d648260a7a34648c59d) by [@cortinico](https://github.com/cortinico))
+- Remove unused internal `NotThreadSafeViewHierarchyUpdateDebugListener` ([991dff2322](https://github.com/facebook/react-native/commit/991dff2322eb5d36af4c493e0ad8531d8015c2dc) by [@cortinico](https://github.com/cortinico))
+
+#### iOS specific
+
+- Remove legacy arch by default ([c7f433a413](https://github.com/facebook/react-native/commit/c7f433a4130a04ff1fd765565f3b1bd030031767) by [@cipolleschi](https://github.com/cipolleschi))
+- Make `RCTPackagerConnection` instance of the `RCTDevSettings` and use bundle config. ([cf92cade49](https://github.com/facebook/react-native/commit/cf92cade4938518169aa52a12960d2d04501b78e) by [@coado](https://github.com/coado))
+
+### Added
+
+- A new test for the AnimationBackend ([8bc6214284](https://github.com/facebook/react-native/commit/8bc62142845960d53145bd350e632c7b28e32746) by Bartlomiej Bloniarz)
+- Added support for `maxWidth`, `maxHeight`, `minWidth`, and `minHeight` props to the AnimationBackend. ([3650ae3d08](https://github.com/facebook/react-native/commit/3650ae3d08755975287b7feffb10a85d0f8192fe) by [@coado](https://github.com/coado))
+- Added support for flex props to the AnimationBackend. ([33b2d6d367](https://github.com/facebook/react-native/commit/33b2d6d367f9236fa32a349203e0a6a003757437) by [@coado](https://github.com/coado))
+- Support parsing `Readonly` for the new Flow utility types ([a6b76c0c51](https://github.com/facebook/react-native/commit/a6b76c0c51bf37a864b88d48775afbc1143eebde) by [@marcoww6](https://github.com/marcoww6))
+- Support parsing `ReadonlyArray` for the new Flow utility types ([3bf7a09ecb](https://github.com/facebook/react-native/commit/3bf7a09ecba3fe9ed62631e29c192d7a64d43f1e) by [@marcoww6](https://github.com/marcoww6))
+- Added support for outline props to the AnimationBackend. ([4de9242e80](https://github.com/facebook/react-native/commit/4de9242e809a5ddef26c1c96f85f046309d4a9ba) by [@coado](https://github.com/coado))
+- Added support for filter props to Animation Backend ([e744329c3d](https://github.com/facebook/react-native/commit/e744329c3dc002ecd689e925974f62b0c00b61e0) by [@coado](https://github.com/coado))
+- Added support for border width props to the animation backend. ([782dc0e038](https://github.com/facebook/react-native/commit/782dc0e0381150ee8c7114944d210baf96ba7a6b) by [@coado](https://github.com/coado))
+- Add ResourceReceivedData trace events for network data chunks in Performance timeline ([c400b88ebf](https://github.com/facebook/react-native/commit/c400b88ebf749b00741a6abcce39007bff5ee4cb) by [@emily8rown](https://github.com/emily8rown))
+- Added support for positional `left`, `top`, `right`, `bottom` props to the animation backend. ([9931aeb830](https://github.com/facebook/react-native/commit/9931aeb8302686ce97b3590f1e2e1a2442c77859) by [@coado](https://github.com/coado))
+- Added support for margin and padding props to AnimationBackend. ([cd4744cb98](https://github.com/facebook/react-native/commit/cd4744cb985bb7f08ce94db7d41788cbf9ba2bd8) by [@coado](https://github.com/coado))
+- Added missing `experimental_backgroundSize`, `experimental_backgroundPosition`, `experimental_backgroundRepeat` to manually written types. ([37bf285836](https://github.com/facebook/react-native/commit/37bf285836f5cb0addd2acb0dbe6b85a706f9ab5) by [@tjzel](https://github.com/tjzel))
+- Added support for `shadowColor`, `shadowOffset`, `shadowOpacity`, and `shadowRadius` props to the animation backend. ([c31a5a8896](https://github.com/facebook/react-native/commit/c31a5a8896e31007ee76b7732564806af63a2ff1) by [@coado](https://github.com/coado))
+- Export `usePressability` hook and `PressabilityConfig`/`PressabilityEventHandlers` types from the public API ([d0e9b9c078](https://github.com/facebook/react-native/commit/d0e9b9c07858f140d9da97c080d47c833a82acae) by [@natew](https://github.com/natew))
+- Added missing standard properties to `URL` (hash, host, pathname, etc.) and methods to `URLSearchParams` (get, set, delete, etc.). ([f97b9a521d](https://github.com/facebook/react-native/commit/f97b9a521d6a1cd6141c39253267d26f4d0b359f) by Manish Balayan)
+- Use the commit hook to reconcile the UI updates with react ([d04e1528da](https://github.com/facebook/react-native/commit/d04e1528da262968a5e6e5fe0194dcd277552938) by Bartlomiej Bloniarz)
+- Add `connectAnimatedNodeToShadowNodeFamily` method to `NativeAnimatedModule` and `NativeAnimatedTurboModule` ([d7ef651c5c](https://github.com/facebook/react-native/commit/d7ef651c5cbfdd8a7289746d1afbe2c63bb61a83) by Bartlomiej Bloniarz)
+- Added support for transform, border radius, and background color props to Animation Backend. ([e167faa449](https://github.com/facebook/react-native/commit/e167faa4494e03073dc9fc53581fad532cc3f1ee) by [@coado](https://github.com/coado))
+- Bundle support for heic and heif files ([f472ef980a](https://github.com/facebook/react-native/commit/f472ef980a19fc710baf6203a67c72d73b378fed) by [@anthonybajoua](https://github.com/anthonybajoua))
+- Thread down rootTag/surfaceId to AnimatedInterpolation node ([b46427a673](https://github.com/facebook/react-native/commit/b46427a67399874bd827658191898eeffcc9e56e) by [@zeyap](https://github.com/zeyap))
+- DevServer fast refresh banners now have a dismiss button but still tap anywhere to dismiss. ([fcd63032d0](https://github.com/facebook/react-native/commit/fcd63032d029cf9ec31605e9be4bb63d5e44ce1e) by [@emily8rown](https://github.com/emily8rown))
+- Jest tests for PlatformColor support ([cbbba7b9a5](https://github.com/facebook/react-native/commit/cbbba7b9a5cf81d5454f13dbf399a4c35d7d6667) by [@zeyap](https://github.com/zeyap))
+- (js part) Support PlatformColor type of toValue and interpolation outputRange ([8b6b47bd57](https://github.com/facebook/react-native/commit/8b6b47bd57f5b3d47d729c335c304b4c744576d7) by [@zeyap](https://github.com/zeyap))
+- Expose methods for registering packager connection handlers. ([d9842fdbe3](https://github.com/facebook/react-native/commit/d9842fdbe32a4c6eeae7cbca92f0f1706d9004ce) by [@coado](https://github.com/coado))
+- Add support for Flat Config (eslint v9) ([18592451de](https://github.com/facebook/react-native/commit/18592451de8106071473a898cbc4b6d4efc7814b) by [@pipopotamasu](https://github.com/pipopotamasu))
+- UIManagerNativeAnimatedDelegateBackendImpl for running animation frame updates on android ([219c2b84c2](https://github.com/facebook/react-native/commit/219c2b84c284f162f2f261a09b5a94d197408357) by Bartlomiej Bloniarz)
+
+#### Android specific
+
+- Add `{add|remove}SchemeChangeListener()` function to `OverrideColorScheme` interface to support dynamic appearance updates via override ([80e384a801](https://github.com/facebook/react-native/commit/80e384a8011762f571ff6f47b6674de00aab0485) by [@alanleedev](https://github.com/alanleedev))
+- Include activeHitPath in payload when it's PointerUp/Down ([1d6d8fc058](https://github.com/facebook/react-native/commit/1d6d8fc058bbfbc529ddfa65a0d7658eeca75332) by [@zeyap](https://github.com/zeyap))
+- Add onKeyDown/onKeyUp support to Android ([79b09ce9c4](https://github.com/facebook/react-native/commit/79b09ce9c416ed2b9ac5e168579150dd26823673) by [@Abbondanzo](https://github.com/Abbondanzo))
+- Add c++ animated support for PlatformColor type of toValue and interpolation outputRange ([7941a621f9](https://github.com/facebook/react-native/commit/7941a621f955d6b62e7a359de67cd3b375c45d9b) by [@zeyap](https://github.com/zeyap))
+
+#### iOS specific
+
+- Allow invalidateDisplayLink on RCTAnimatedModuleProvider ([7c603ee261](https://github.com/facebook/react-native/commit/7c603ee261c3eb2d9bf160505427ba06607d3465) by [@zeyap](https://github.com/zeyap))
+- Add support for UIAccessibilityPriority in announcements ([4851fb2fc3](https://github.com/facebook/react-native/commit/4851fb2fc30c45da496bb982d13568767ddbad02) by [@maxencehenneron](https://github.com/maxencehenneron))
+- Added documentation for the prebuild scripts for precompiling React Native Core and React Native Dependencies. ([7a66582f60](https://github.com/facebook/react-native/commit/7a66582f60a743834a96101476dc6b54786b68a2) by [@chrfalch](https://github.com/chrfalch))
+- Add new `RCTBundleConfiguration` for modifying bundle URL on `RCTReactNativeFactory`. ([6fa75cce48](https://github.com/facebook/react-native/commit/6fa75cce48f4f3dc631c181a25a9401a2bf88eeb) by [@coado](https://github.com/coado))
+
+### Changed
+
+- Sync React 19.2.3 into React Native ([e6923dd1e1](https://github.com/facebook/react-native/commit/e6923dd1e1dbcab0cb9f7441331b99071663c55a) by [@cipolleschi](https://github.com/cipolleschi))
+- AnimatedPropsRegistry now also receive the updates from the synchronous updates that bypass the ShadowTree, so that these updates are not overwritten by React commits ([c52d30e79b](https://github.com/facebook/react-native/commit/c52d30e79b680db15bd2d39b74e4e1f38bb00649) by Bartlomiej Bloniarz)
+- C++ animated now passes the calculated `folly::dynamic` directly to the backend, without repacking it into `AnimatedProp` ([84e408cf89](https://github.com/facebook/react-native/commit/84e408cf89eb537439dc99db95d33df3c2a9394a) by Bartlomiej Bloniarz)
+- Extracted `cloneProp` from `AnimationBackend.cpp` to `AnimatedProps.h` ([33f783ae23](https://github.com/facebook/react-native/commit/33f783ae23dca139900767108b2ad4390ea865ca) by Bartlomiej Bloniarz)
+- CloneMultiple now invokes the callback for every cloned node, instead of doing that only for the nodes in `familiesToUpdate` ([976c849057](https://github.com/facebook/react-native/commit/976c849057ec6056727ffa71cac0d0c0a513a97e) by Bartlomiej Bloniarz)
+- Text components with onPress or onLongPress now automatically get accessibilityRole='link' for proper accessibility support ([4c732b4ccf](https://github.com/facebook/react-native/commit/4c732b4ccf2f5c458640f8024759f5f57877749e) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Split the families by `SurfaceId` in `onAnimationFrame` ([5c078bd490](https://github.com/facebook/react-native/commit/5c078bd4905615b0fb3a640e81e53d594f195ca6) by Bartlomiej Bloniarz)
+- Move the animation backend callback scheduling, behind the `isRenderCallbackStarted` check. ([8b95fce84e](https://github.com/facebook/react-native/commit/8b95fce84ea0a7fef79e78582a8717e403fa7349) by Bartlomiej Bloniarz)
+- JSBigString mutable data accessor has been renamed to mutableData ([3012aac2ad](https://github.com/facebook/react-native/commit/3012aac2adc04659d6b882e910b1ecf14c8e5225) by [@javache](https://github.com/javache))
+
+#### Android specific
+
+- `VirtualView` not clips subviews even if its parent `ScrollView` does not have `removeClippedSubviews` enabled. ([b0e754bc7f](https://github.com/facebook/react-native/commit/b0e754bc7f7b55c13b7632d354aaf3ee48f7296d) by [@yungsters](https://github.com/yungsters))
+- Set isClickable=true by default or based on the pointerEvents value for all views to improve accessibility tool detection while maintaining the configured focusable state ([427995858d](https://github.com/facebook/react-native/commit/427995858d604ab749d4b550a91be19c60cbf840) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Enabled shouldUseLinkRoleForPressableText and shouldSetEnabledBasedOnAccessibilityState feature flags by default to improve accessibility behavior. ([38e3075310](https://github.com/facebook/react-native/commit/38e3075310e2e0bc062406a06bfcdc232fe6100f) by [@fabriziocucci](https://github.com/fabriziocucci))
+
+#### iOS specific
+
+- Use prebuild by default ([df9d31b243](https://github.com/facebook/react-native/commit/df9d31b2435255f799aa024ffb0f87bcdb665645) by [@cipolleschi](https://github.com/cipolleschi))
+- Add `RCTBundleConfiguration` property on `RCTReactNativeFactory` and pass it down to `RCTHost`. ([5465a511f4](https://github.com/facebook/react-native/commit/5465a511f4c23692371ebe5756d260281386520a) by [@coado](https://github.com/coado))
+- Allow linking local SPM packages in CocoaPods ([d31fc32882](https://github.com/facebook/react-native/commit/d31fc328826a584a2351acf831ee987846ca7e21) by [@sbuggay](https://github.com/sbuggay))
+
+### Deprecated
+
+- Deprecate TurboModuleProviderFunctionType ([7a6a6ae2e6](https://github.com/facebook/react-native/commit/7a6a6ae2e63f907f95764e52bf958897462a5c8b) by [@RSNara](https://github.com/RSNara))
+- Deprecate `XHRInterceptor` and `WebSocketInterceptor` APIs. Developer tools should use the CDP `Network` domain instead. ([41380f39ab](https://github.com/facebook/react-native/commit/41380f39aba22913a2aa45a951a36cacc95fb57a) by [@huntie](https://github.com/huntie))
+
+### Removed
+
+- Remove Babel preset transforms for already-unsupported non-Hermes engines ([07bd24ed0d](https://github.com/facebook/react-native/commit/07bd24ed0dbd11e77743086a970b9e7507e15c8f) by [@robhogan](https://github.com/robhogan))
+- Legacy Arch: Remove Perf and Network tabs from in-app Element Inspector. See [RFC0777](https://github.com/react-native-community/discussions-and-proposals/blob/main/proposals/0777-remove-legacy-element-inspector-features.md) ([b7ca04844d](https://github.com/facebook/react-native/commit/b7ca04844d689116692c16fce251f3270250854e) by [@huntie](https://github.com/huntie))
+
+#### Android specific
+
+- Remove unnecessary `OnBatchCompleteListener` used in Legacy Architecture ([1bdd2a0aba](https://github.com/facebook/react-native/commit/1bdd2a0abac4ab2c420cadbf8796e44471201f06) by [@cortinico](https://github.com/cortinico))
+- Remove unnecessary and unused BridgeDevSupportManager ([13da82a337](https://github.com/facebook/react-native/commit/13da82a337826ac30fd2d4b581d963f5b872381b) by [@cortinico](https://github.com/cortinico))
+
+### Fixed
+
+- Added handling of missing props to `AnimatedPropsRegistry` ([31a9eeeba4](https://github.com/facebook/react-native/commit/31a9eeeba4d7c4790133f41df48b16aff6920601) by [@j-piasecki](https://github.com/j-piasecki))
+- Handle `Object.create(null)` correctly in AnimatedObject.js' `isPlainObject` function ([4e0b9233c0](https://github.com/facebook/react-native/commit/4e0b9233c0242f46239f0f8b21f82b4cbd5ba781) by [@maman](https://github.com/maman))
+- Hash generation includes `declare const` types in API snapshot ([c36665f7c6](https://github.com/facebook/react-native/commit/c36665f7c658c641cf1b6cca890415bdb149a623) by [@emily8rown](https://github.com/emily8rown))
+- Nullcheck result of getAnimatedNode in NativeAnimatedNodesManager::updateNodes ([3e9083b423](https://github.com/facebook/react-native/commit/3e9083b4234eabfd4f3444c6b6804c66389739a5) by [@zeyap](https://github.com/zeyap))
+- React Native DevTools: Fix a bug where we would incorrectly flag apps using additonal Hermes runtimes (e.g. Reanimated) as being multi-host ([c800503214](https://github.com/facebook/react-native/commit/c8005032140f1aff16027b5ed53caea6c9d299f5) by [@huntie](https://github.com/huntie))
+- Fixed `hermes-compiler` not being resolved correctly when your repo is set up as a monorepo using pnpm. ([e23e9add80](https://github.com/facebook/react-native/commit/e23e9add8080a0204221edd4d8cc5e2f1a2f621b) by [@tido64](https://github.com/tido64))
+- Ensure codegen CLI supports unspecified `--outputPath` argument and respects `codegenConfig.outputDir` configurations ([716303362a](https://github.com/facebook/react-native/commit/716303362aead08310e2101f15a319b64a602026) by [@kitten](https://github.com/kitten))
+- Fixed an `ENOENT` exception when a dependency does not export `package.json`, and your repo is set up as a monorepo using pnpm ([20550c45d2](https://github.com/facebook/react-native/commit/20550c45d276a9cb348116a24cddc20415449e0e) by [@tido64](https://github.com/tido64))
+- Fixed URLSearchParams duplicate issue. ([1e06c92404](https://github.com/facebook/react-native/commit/1e06c9240407611558f4905117335e792446125f) by [@riteshshukla04](https://github.com/riteshshukla04))
+- Check nodesManager_ in AnimatedModule::executeOperation ([199b8982de](https://github.com/facebook/react-native/commit/199b8982de55a470a05efb27b63e55365e5e9997) by [@zeyap](https://github.com/zeyap))
+- `color` and `blurRadius` of BoxShadowValue mistakenly swapped ([8fa8fb7a52](https://github.com/facebook/react-native/commit/8fa8fb7a5265dc879106dbec6ec0232268910c56) by [@Phecda](https://github.com/Phecda))
+
+#### Android specific
+
+- Fix BackHandler callbacks not working after app resume on API 36+ ([fef5b84996](https://github.com/facebook/react-native/commit/fef5b8499667f980c7ad7fe7400c3316722b90ba) by [@anferrat](https://github.com/anferrat))
+- Fix `ReactModalHostView` hover interception to call `super.onInterceptHoverEvent` instead of `super.onHoverEvent`. ([0fe23d7066](https://github.com/facebook/react-native/commit/0fe23d70660db0f97cec0a68a545ace8ee780666) by [@MegaManSec](https://github.com/MegaManSec))
+- DevSupport - fix small bugs with Host change dialog ([c4c587e5c3](https://github.com/facebook/react-native/commit/c4c587e5c3ce4c9d4bdcb9dd95b28cf222bdadee) by [@cortinico](https://github.com/cortinico))
+- Fix jni aborts when turbomodule constructors throw ([d67fc70497](https://github.com/facebook/react-native/commit/d67fc704978ec258b732d61f197d4faa6a784a9c) by [@RSNara](https://github.com/RSNara))
+- Make ReactDelegate.onBackPressed() return correct status ([17b3c1c698](https://github.com/facebook/react-native/commit/17b3c1c69877b674b61904ebec5b3a46d6075233) by [@RSNara](https://github.com/RSNara))
+- RNGP using node invocation non-compatible with Gradle Compilation Cache ([dd1f83e616](https://github.com/facebook/react-native/commit/dd1f83e61656f21769bd66b28a4c389d6ec31a72) by [@tjzel](https://github.com/tjzel))
+- RNGP using node invocation non-compatible with Gradle Compilation Cache ([dc73ec438a](https://github.com/facebook/react-native/commit/dc73ec438a00c17d3fe338db45919cf371828a3b) by [@tjzel](https://github.com/tjzel))
+- Fix text clipping on Android 15+ due to useBoundsForWidth change ([8347cc4b50](https://github.com/facebook/react-native/commit/8347cc4b50ca9229b638d0823d3148fed50b9a61) by [@chrfalch](https://github.com/chrfalch))
+- A11y: Mark virtual views for links as [`clickable`](https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo#setClickable(boolean%29) ([a9a0268953](https://github.com/facebook/react-native/commit/a9a02689533f9cf30fc20cfc7be1ade4f4a624da) by Tom Scallon)
+- Fixed `adjustsFontSizeToFit` scaling the font size too much down ([253fdf4753](https://github.com/facebook/react-native/commit/253fdf475365f6ad7c7c7ba17098589cf18a5c3e) by [@j-piasecki](https://github.com/j-piasecki))
+- Use FQCN to avoid collisions ([5bb3a6d68d](https://github.com/facebook/react-native/commit/5bb3a6d68db113d49528848df8704c5adeb1eba8) by [@riteshshukla04](https://github.com/riteshshukla04))
+- Allow nullable `code` in `Promise.reject` to prevent NPEs from Java modules ([47c45688c7](https://github.com/facebook/react-native/commit/47c45688c7db5aa8da512928b1d5b216b46fc8c6) by [@ramanverse](https://github.com/ramanverse))
+- A11y: prevent redundant double screen reader focus steps on `` ([06786a8afa](https://github.com/facebook/react-native/commit/06786a8afa037296c3f779eab7779a2af42fe294) by [@mdjastrzebski](https://github.com/mdjastrzebski))
+- Emit scroll event once on overscrolled ([f60789abac](https://github.com/facebook/react-native/commit/f60789abac75ad4d1feaadff3fed0b8796a4f8ef) by [@zeyap](https://github.com/zeyap))
+- Fix isClickable state for TextViews after recycling ([cf3af8bf4a](https://github.com/facebook/react-native/commit/cf3af8bf4ac99f8671036addeb60df101197d5b7) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fix isClickable state for TextViews based on onClickListener ([9ec41774b9](https://github.com/facebook/react-native/commit/9ec41774b942014e3c06c3a1f30bb3b6c0fc2de8) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fixed recycled TextViews incorrectly appearing as clickable to accessibility systems ([b34e9c542d](https://github.com/facebook/react-native/commit/b34e9c542d494e704f45b6b950c6f23d86bb326f) by [@fabriziocucci](https://github.com/fabriziocucci))
+- – Enabled shouldResetOnClickListenerWhenRecyclingView by default to reset OnClickListener to null when recycling views and prevent accessibility tools from detecting incorrect states. ([21b93d82df](https://github.com/facebook/react-native/commit/21b93d82df560f31fde9405184399630cbfa437b) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Enabled shouldResetClickableWhenRecyclingView by default to reset isClickable to false when recycling views and prevent accessibility tools from detecting incorrect clickable states. ([a2e8bac60f](https://github.com/facebook/react-native/commit/a2e8bac60f343f4e28abd50fad0f89ecd18afc61) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fix NPE on ReactAccessibilityDelegate.performAccessibilityAction ([cf6de77408](https://github.com/facebook/react-native/commit/cf6de774088f87304080755a8110999ed88b9556) by [@cortinico](https://github.com/cortinico))
+- Reset isClickable when recycling views to prevent accessibility tools from detecting incorrect state ([d553c31160](https://github.com/facebook/react-native/commit/d553c31160294e6094b96f706f07d06a589da79b) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Reset OnClickListener when recycling views to prevent accessibility tools from detecting incorrect state ([52a4f4b83d](https://github.com/facebook/react-native/commit/52a4f4b83dec615d2d6d67854aed42930682f708) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fixed antialiasing issues from border radius usage in API <= 28 ([e08abbcb99](https://github.com/facebook/react-native/commit/e08abbcb99270381c94145a33476f51684dffd93) by [@Abbondanzo](https://github.com/Abbondanzo))
+- View.setEnabled() now properly reflects accessibilityState.disabled ([6fbe284082](https://github.com/facebook/react-native/commit/6fbe284082aa603c44df5edba9d86f8519b7dbf0) by [@fabriziocucci](https://github.com/fabriziocucci))
+- Fix android_ripple not working with foreground: false in Pressable components ([ca077c6bf8](https://github.com/facebook/react-native/commit/ca077c6bf8e1c842857878deb153b1fdbc71b1a2) by [@ish1416](https://github.com/ish1416))
+- Fix keyboard navigation through items in horizontal ScrollView with snapToInterval enabled ([a460df2165](https://github.com/facebook/react-native/commit/a460df216527b1a4435bd72f027565c5fd5e05a3) by [@jgryko5](https://github.com/jgryko5))
+
+#### iOS specific
+
+- Moved setting xcconfig to after `add_rn_core` pod function is called. ([73d3429a44](https://github.com/facebook/react-native/commit/73d3429a44e67745a5c5df5d0a0560a40dbbb430) by [@chrfalch](https://github.com/chrfalch))
+- Fix listenerCount not resetting for RCTEventEmitter ([ac8fa25147](https://github.com/facebook/react-native/commit/ac8fa25147c3ee2cd3fefde79d09e3a8f87b95c1) by [@brainbicycle](https://github.com/brainbicycle))
+- Fix legacy module interop not handling hitTest correctly ([700d320a5f](https://github.com/facebook/react-native/commit/700d320a5f1615a2ae6ea69bcc68b645a2cd4618) by [@kruczy](https://github.com/kruczy))
+- Accessibility actions labels are not read by VoiceOver ([602a2d213a](https://github.com/facebook/react-native/commit/602a2d213a735e43c92edff3e2357085fa0d3af7) by [@maxencehenneron](https://github.com/maxencehenneron))
+- Respect `cancelsTouchesInView` when canceling touches in `RCTSurfaceTouchHandler` ([5634e8a601](https://github.com/facebook/react-native/commit/5634e8a601caf0faa174bac3511929de767609ac) by [@intmain](https://github.com/intmain))
+- Remove redundant gesture to tap button when the layer beneath is already tappable ([8b8cceac89](https://github.com/facebook/react-native/commit/8b8cceac89a5962fb2bc52025702f2c023d41055) by [@emily8rown](https://github.com/emily8rown))
+- Make rest of app responsive whilst dev loading banner present ([f97354368c](https://github.com/facebook/react-native/commit/f97354368ccdb5e72e5c233e90cd2a9755ffcf7f) by [@emily8rown](https://github.com/emily8rown))
+- Fixed dismiss button not appearing consistently in dev loading view ([336042ccb3](https://github.com/facebook/react-native/commit/336042ccb30903ee3e16ffbf9e100bb5ad3cf7e3) by [@emily8rown](https://github.com/emily8rown))
+- Fixed copying symbol bundles into correct slice folder ([ac31e96e49](https://github.com/facebook/react-native/commit/ac31e96e4925b3238ab548c91584a7e608a2e17c) by [@chrfalch](https://github.com/chrfalch))
+- Fixed crash from dismiss button in DevLoadingView ([6793f5cc51](https://github.com/facebook/react-native/commit/6793f5cc516170d1c28e3e762f0b7dd065330b8b) by [@emily8rown](https://github.com/emily8rown))
+- Address `-Wswitch-default` warnings for projects that use that compiler flag ([4c560b118c](https://github.com/facebook/react-native/commit/4c560b118c683c72e9eeebdca473b8ec3cdd7e41) by [@NSProgrammer](https://github.com/NSProgrammer))
+- Avoid reallocating views on RCTDevLoadingView progress updates ([55a5b6b015](https://github.com/facebook/react-native/commit/55a5b6b0156bfe81143caad6b0e69924939045e6) by [@shirakaba](https://github.com/shirakaba))
+- Fix missing default statements for projects that have `-Wswitch-default` enabled (along with `-Wswitch-enum`). ([a210409e03](https://github.com/facebook/react-native/commit/a210409e03c1951ab7c88100c763eff055b88e8a) by [@NSProgrammer](https://github.com/NSProgrammer))
+- Fix crash in RCTEnhancedScrollView when scrollViewDidScroll is called ([5f14001e92](https://github.com/facebook/react-native/commit/5f14001e929426144d1eaa5e5e52fb23a4d4f296) by Gabriel Cadden)
+- Fix undefined behavior for values outside of enum range in generated `switch` methods in Objective-C. ([4bf8204391](https://github.com/facebook/react-native/commit/4bf8204391c6dc4014944bc21c997bdb8a7ef584) by [@NSProgrammer](https://github.com/NSProgrammer))
+- A Crash when some error information are nil ([efd2f679f2](https://github.com/facebook/react-native/commit/efd2f679f2cf054bd1301a1e6e851de5cdc38cc7) by [@cipolleschi](https://github.com/cipolleschi))
+- Improve -Wswitch-default support ([8f91076397](https://github.com/facebook/react-native/commit/8f910763973a5b59b515951d7ec4c4f88d0c3b4d) by [@NSProgrammer](https://github.com/NSProgrammer))
+- Improve -Wswitch-default support ([fedd1cfbda](https://github.com/facebook/react-native/commit/fedd1cfbda093dd9c96ab63ed9c2b8d81b6af1c5) by [@NSProgrammer](https://github.com/NSProgrammer))
+- Fix duplicate shadow bug during component recycling by cleaning up visual layers in prepareForRecycle ([7dcedf1def](https://github.com/facebook/react-native/commit/7dcedf1def880163ab7ca07b2575a8153029a925) by Atharv Soni)
+- Make sure to only call onRender when NativeAnimatedNodesManagerProvider is not destroyed ([d8f9b3f1f5](https://github.com/facebook/react-native/commit/d8f9b3f1f59ebfea17105ea849469cf42325db1a) by [@zeyap](https://github.com/zeyap))
+- Fix rounding error occurring randomly in iOS text line height calculation ([581d643a9e](https://github.com/facebook/react-native/commit/581d643a9e59fd88f93757f80194e1efd11bd0e5) by [@soutua](https://github.com/soutua))
+- Fix incorrect source path resolution in dSYM remapping in precompiled framework scripts ([f383241b19](https://github.com/facebook/react-native/commit/f383241b197f4b98a8fca6bbd948de9ce1a756c9) by [@chrfalch](https://github.com/chrfalch))
+- Set the `CURRENT_ARCH=arm64` on M4 ([b78099b821](https://github.com/facebook/react-native/commit/b78099b821357a5449592c48bd4156e3b7c315dc) by [@ISeekTruth](https://github.com/ISeekTruth))
+- Fixed build with dynamic frameworks ([1033dbd1da](https://github.com/facebook/react-native/commit/1033dbd1da013a07ee5d2a13fadeba9f38fa8426) by [@cipolleschi](https://github.com/cipolleschi))
+- Improve support for projects with `-Wswitch-enum` compiler error ([f687292aad](https://github.com/facebook/react-native/commit/f687292aad20a79d9d8d8a706aa2fec64fe92f4b) by [@NSProgrammer](https://github.com/NSProgrammer))
+
+## v0.83.1
+
+### Fixed
+
+#### Android specific
+
+- **Networking**: Fix Network error that could occur for `FormData` uploads with binary data ([471ef7212e](https://github.com/facebook/react-native/commit/471ef7212e8f7778bb7692a372a58c6fba9d081d) by [@huntie](https://github.com/huntie))
+
+## v0.83.0
+
+### Breaking
+
+None
+
+### Deprecated
+
+#### Android specific
+
+- **Animated**: Mark `startOperationBatch` and `finishOperationBatch` as deprecated, replace with no-op ([c9dcd64ed5](https://github.com/facebook/react-native/commit/c9dcd64ed557d477828549e54afa71a12e5294ec) by [@zeyap](https://github.com/zeyap))
+- **Networking**: Mark `NetworkingModule.sendRequestInternal` as deprecated ([30999b868c](https://github.com/facebook/react-native/commit/30999b868cf1655b6799edfa65dba2cc9fa8161a) by [@motiz88](https://github.com/motiz88))
+
+### Added
+
+- **Accessibility**: Add meaningful error reporting when `AccessibilityInfo`'s methods are not available ([9cadfe6607](https://github.com/facebook/react-native/commit/9cadfe6607159f78bdd45929e0eb9b3292240cb9) by [@vzaidman](https://github.com/vzaidman))
+- **Animated**: `AnimationBackend` initialisation and style updates ([e091759947](https://github.com/facebook/react-native/commit/e09175994759a8868148b4a5d31768e18057d5a4) by [@bartlomiejbloniarz](https://github.com/bartlomiejbloniarz))
+- **Animated**: Make `AnimatedNodesManager` use the backend behind the flag ([325c681cb1](https://github.com/facebook/react-native/commit/325c681cb17996c15b246ad0012cbde3d4631f08) by Bartlomiej Bloniarz)
+- **Animated**: Add `unstable_setAnimationBackend`, `unstable_getAnimationBackend` in UIManager ([7ec470d49a](https://github.com/facebook/react-native/commit/7ec470d49abded215fef260d577b8424207f7fb9) by Bartlomiej Bloniarz)
+- **Dev Server**: Dev server banners can now be closed on tap. On iOS, don't close them after 15s anymore ([6936bd9f6b](https://github.com/facebook/react-native/commit/6936bd9f6bcb4fce5af33442e72992e7aa3767d6) by [@vzaidman](https://github.com/vzaidman))
+- **Fast Refresh**: New banner Add to indicate that Fast Refresh has lost connection, and that the app needs to be restarted to reconnect ([4148746941](https://github.com/facebook/react-native/commit/4148746941f957031dd65fe94481bb3ea6367a47) by [@vzaidman](https://github.com/vzaidman))
+- **IntersectionObserver**: Gate `IntersectionObserver` in the Canary release level ([5119db44ce](https://github.com/facebook/react-native/commit/5119db44ce5b600edc79dd9fe752d6e0a53375f4) by [@lunaleaps](https://github.com/lunaleaps))
+- **JavaScript API**: `ListViewToken` is now exposed when using `"react-native-strict-api"` ([0a0b48b5ff](https://github.com/facebook/react-native/commit/0a0b48b5fff508a1976604bedc931a1b5110a4f2) by [@huntie](https://github.com/huntie))
+- **JavaScript API**: `unstable_NativeText` and `unstable_NativeView` are now exported from the `react-native` package ([90ac3ac7bd](https://github.com/facebook/react-native/commit/90ac3ac7bd2c7f8761d02e503224828f8af97fec) by [@huntie](https://github.com/huntie))
+- **JavaScript API**: Expose `NativeComponentRegistry` API to index.d.ts ([3f7f9d8fb8](https://github.com/facebook/react-native/commit/3f7f9d8fb8beb41408d092870a7c7cac58029a4d) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+- **Performance**: Enable Web Performance APIs ([beccee2164](https://github.com/facebook/react-native/commit/beccee21649eb0353e2828c65f0045053f04c6db) by [@rubennorte](https://github.com/rubennorte))
+- **React Native DevTools**: Enable Network inspection features [66469b58d8](https://github.com/facebook/react-native/commit/66469b58d85e820e401b82028b3fda57c53f08c1) by [@cipolleschi](https://github.com/cipolleschi)
+- **React Native DevTools**: Enable standalone app shell by default (https://github.com/facebook/react-native/commit/3341bb57b188d0e20ac6e9ebb1e8b1fbb6b26514 by [@huntie](https://github.com/huntie))
+- **StyleSheet**: Background image native parser ([a9780f9102](https://github.com/facebook/react-native/commit/a9780f9102800a53e381271bcf27542eaea4a46e) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **StyleSheet**: Merge the [iOS](https://github.com/facebook/react-native/pull/52283) and [android](https://github.com/facebook/react-native/pull/52282) PR into this, this PR includes `BackgroundImageExample`. I have also Add testcases for parsing syntax in JS ([3d08683d0f](https://github.com/facebook/react-native/commit/3d08683d0fcb66cd657e3f72388a53605c7c3974) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **TypeScript**: Add `@react-native/typescript-config/strict` export enabling the `react-native-strict-api` custom condition ([0198c92c71](https://github.com/facebook/react-native/commit/0198c92c714cdfe48bb8d84771e5ef25c17fb47f) by [@kraenhansen](https://github.com/kraenhansen))
+
+#### Android specific
+
+- **Dev Menu**: Add new configuration for `RCTDevMenu` ([4ddf2ce64f](https://github.com/facebook/react-native/commit/4ddf2ce64f8c6886a575c69872273005fd4d90cd) by [@coado](https://github.com/coado))
+- **ReactHost**: Add new `setBundleSource` method to `ReactHost` for changing bundle URL at runtime ([005d705aff](https://github.com/facebook/react-native/commit/005d705aff70e560ac937740798b69582a5b6954) by [@coado](https://github.com/coado))
+- **StyleSheet**: Background size, position and repeat styles ([e859293674](https://github.com/facebook/react-native/commit/e859293674243d94895f710d1cb197e9e6f2e9e8) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+
+#### iOS specific
+
+- **Build options**: Add way to set the `RCT_REMOVE_LEGACY_ARCH` flag from Cocoapods to compile ou the legacy arch ([5abda9c7da](https://github.com/facebook/react-native/commit/5abda9c7dacc5533fac35675c09100c7120dd634) by [@cipolleschi](https://github.com/cipolleschi))
+- **Build options**: Add support for symbolication of precompiled `React.xcframework` ([07f40ec6b4](https://github.com/facebook/react-native/commit/07f40ec6b48bf4b6507bda5819b873f3a7334dea) by [@chrfalch](https://github.com/chrfalch))
+- **Codegen**: Update Codegen to generate `Package.swift` file for Codegen targets ([a7cd3cc08f](https://github.com/facebook/react-native/commit/a7cd3cc08fd2679bb00666162d91ee2fb7107d06) by [@cipolleschi](https://github.com/cipolleschi))
+- **Dev Menu**: Add new configuration for `RCTDevMenu` ([29d5aa582f](https://github.com/facebook/react-native/commit/29d5aa582ffd6c395e34a1d03d2fdd742df647af) by [@coado](https://github.com/coado))
+- **Font**: Add support for condensed system font when using the New Architecture ([07da2ff3e1](https://github.com/facebook/react-native/commit/07da2ff3e18bbb71f428985f185d5f971843ec26) by [@ismarbesic](https://github.com/ismarbesic))
+- **StyleSheet**: Add contrast and hue-rotate CSS filters ([20ba98e00d](https://github.com/facebook/react-native/commit/20ba98e00da84b629cf2c1b11fa24c28c7046093) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **StyleSheet**: Add grayscale, drop-shadow and saturate CSS filters ([1198a55d50](https://github.com/facebook/react-native/commit/1198a55d50809b9086771fa0b40415dd487afe0f) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **StyleSheet**: Background size, position and repeat styles ([d8c2f1c883](https://github.com/facebook/react-native/commit/d8c2f1c883180828ce2784c4b30565e2bec194cf) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+- **StyleSheet**: Filter blur ([b365e26593](https://github.com/facebook/react-native/commit/b365e26593112fee8824c53a2787679a29cbe9ab) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+
+### Changed
+
+- **Animated**: Initialize the backend in `NativeAnimatedNodesManagerProvider` ([3f396616d2](https://github.com/facebook/react-native/commit/3f396616d20beaebeb1fa7ab35deebc195bbcd2b) by Bartlomiej Bloniarz)
+- **Animated**: Move using declarations into `AnimationBackend` class ([9e98c72ad3](https://github.com/facebook/react-native/commit/9e98c72ad34e0124df4ae846381fbc862d87206c) by [@zeyap](https://github.com/zeyap))
+- **Codegen**: Improve Codegen error when iOS native project not found ([bc3503452f](https://github.com/facebook/react-native/commit/bc3503452f70e1f6917070f3a1b00d75bcd46b3f) by [@vonovak](https://github.com/vonovak))
+- **ESLint**: Bump `eslint-plugin-react-hooks` to 7.0.1 ([28101284a9](https://github.com/facebook/react-native/commit/28101284a92ac0c93f646636423e6edf5e830006) by [@cipolleschi](https://github.com/cipolleschi))
+- **Hermes**: Use Hermes artifacts published independently from React Native ([27bb34c006](https://github.com/facebook/react-native/commit/27bb34c006bb5daaac639d065aaa4c963528814e) by [@j-piasecki](https://github.com/j-piasecki))
+- **Metro**: Metro bump to ^0.83.3 ([89f0a37800](https://github.com/facebook/react-native/commit/89f0a3780066e1d74b0cf45ff65a79534638f157) by [@robhogan](https://github.com/robhogan))
+- **React**: Bump React version to 19.2 ([6f482708b5](https://github.com/facebook/react-native/commit/6f482708b5abd31ec12c18afc874420f06eb22e3) by [@cipolleschi](https://github.com/cipolleschi))
+- **React Native DevTools**: Remove network experiment and experimental icon, Add conditional disabling of features incompatible with multiple hosts ([19359ed095](https://github.com/facebook/react-native/commit/19359ed095059c5d6befcc7e2ff3472447680add) by [@huntie](https://github.com/huntie))
+- **Yoga**: Update copyright header in Yoga CMake file from Facebook to Meta ([118a6621f5](https://github.com/facebook/react-native/commit/118a6621f5c4b15d89505b4dc12f05870c042194) by [@aialok](https://github.com/aialok))
+
+#### Android specific
+
+- **Animated**: [c++ animated] Course correct props at `SurfaceMountingManager.updateProps()` ([dae2f606c7](https://github.com/facebook/react-native/commit/dae2f606c76905de74e76db7b0a20052a5caea46) by [@zeyap](https://github.com/zeyap))
+- **Fast Refresh**: Hot reload banner is now displayed in blue background like on iOS ([4d45e5987c](https://github.com/facebook/react-native/commit/4d45e5987c1d85e5f56ae9501ba74eed48939307) by [@vzaidman](https://github.com/vzaidman))
+- **Font**: Request layout on configuration change only when the font scale has changed ([e02e7b1a29](https://github.com/facebook/react-native/commit/e02e7b1a2943b3ec6e1eb15723c86a8255b100a6) by [@j-piasecki](https://github.com/j-piasecki))
+- **Hermes**: Changed value of `HERMESVM_HEAP_HV_MODE` to `HEAP_HV_PREFER32` for Hermes V1 ([fcb51b1392](https://github.com/facebook/react-native/commit/fcb51b13921dea7ed7d478d6944b52df470e2bef) by [@j-piasecki](https://github.com/j-piasecki))
+- **Kotlin**: Migrated `ReactRoot` to Kotlin ([0b14a19ea6](https://github.com/facebook/react-native/commit/0b14a19ea6f0bfd97fc8d3e3663615feab875d66) by [@sbuggay](https://github.com/sbuggay))
+- **New Architecture**: Runtime check that `NewArchitecture` is enabled in `DefaultNewArchitectureEntryPoint` ([d0d08e4554](https://github.com/facebook/react-native/commit/d0d08e4554c2b3a7676793fe2a43cedcf54b523f) by [@cortinico](https://github.com/cortinico))
+- **React Native DevTools**: Add Log error to discourage usages of `getJSModule(RCTEventEmitter)` API ([aab0d3397c](https://github.com/facebook/react-native/commit/aab0d3397c67bb3e27c3607ff2ed240859b5b039) by [@mdvacca](https://github.com/mdvacca))
+- **Touch Handling**: Defer to responder system to terminate on scroll ([1e1af623b1](https://github.com/facebook/react-native/commit/1e1af623b14f7952c2f39a601098533f899bb464) by [@zeyap](https://github.com/zeyap))
+- **UI**: Split `VirtualViewContainerState` into classic, experimental versions [Android] ([793f99d949](https://github.com/facebook/react-native/commit/793f99d949049c7ab9a7991af0a19010d5444b9f) by [@CalixTang](https://github.com/CalixTang))
+
+#### iOS specific
+
+- **Image**: Use `CGImageSourceCreateImageAtIndex` instead of `CGImageSourceCreateThumbnailAtIndex` to decode full-sized images ([be4fcdafb1](https://github.com/facebook/react-native/commit/be4fcdafb13c2cee702bb120b0feb9b5966ca50e) by [@tsapeta](https://github.com/tsapeta))
+- **Prebuild**: Update logging functions for prebuilds ([f0f8b95719](https://github.com/facebook/react-native/commit/f0f8b957190f2f9bf162528210c41f1437346af9) by [@chrfalch](https://github.com/chrfalch))
+
+### Fixed
+
+- **Animated**: Fix array type parsing in `DynamicEventPayload::extractValue` ([cf5040b4f8](https://github.com/facebook/react-native/commit/cf5040b4f82934c075a72b35d5f2d1d0dfa7aac1) by [@zeyap](https://github.com/zeyap))
+- **Babel**: Invalidate transform cache when `react-native/babel-preset` is Update ([2d2011c7ae](https://github.com/facebook/react-native/commit/2d2011c7ae0145369ad226417e9ecc3bf6df7890) by [@robhogan](https://github.com/robhogan))
+- **Build**: Fixed `hermes-compiler` not being resolved correctly when your repo is set up as a monorepo using pnpm (https://github.com/facebook/react-native/commit/45281ba48fc17508539c0b881327ef8b4bf8e530 by [@tido64](https://github.com/tido64))
+- **Codegen**: Fixed an `ENOENT` exception when a dependency does not export `package.json`, and your repo is set up as a monorepo using pnpm (https://github.com/facebook/react-native/commit/ad5e2680c8e491d89d7544ffb2fff45190cd5ef6 by [@tido64](https://github.com/tido64))
+- **Codegen**: Ensure codegen CLI supports unspecified `--outputPath` argument and respects `codegenConfig.outputDir` configurations (https://github.com/facebook/react-native/commit/f8207d6c757552ddac472aa278d7dd56ad04fb7e by [@kitten](https://github.com/kitten))
+- **Events**: Allow `EventEmitter`s to be optional (for push safety) ([4308185b64](https://github.com/facebook/react-native/commit/4308185b64145f315132865cc69f219bc3299eb3) by Tom Scallon)
+- **Fast Refresh**: Only remove the Fast Refresh "Refreshing..." toast when all bundles being loaded finished loading ([92cae27cb2](https://github.com/facebook/react-native/commit/92cae27cb24590e96b01a1dc9547687bafea877b) by [@vzaidman](https://github.com/vzaidman))
+- **FlatList**: The `ItemSeparatorComponent` prop on list components now accepts a React element as well as a component function ([35f6ed1146](https://github.com/facebook/react-native/commit/35f6ed1146fae2c36113f5705230188790a0d70c) by [@huntie](https://github.com/huntie))
+- **Image**: `ResizeMethod` was not propagated correctly on Android with Props 2.0 ([7c543db181](https://github.com/facebook/react-native/commit/7c543db181a0c2dfce46cb26428e7bbc0341945c) by [@Abbondanzo](https://github.com/Abbondanzo))
+- **LogBox**: Fixing an issue with the error LogBox formatting on windows causing text to wrap ([e2b62bc435](https://github.com/facebook/react-native/commit/e2b62bc43549545dfb29e7efad7aaf115cadc1f2) by Gianni Moschini)
+- **Renderer**: Avoid data loss during CSS property conversion ([c629019080](https://github.com/facebook/react-native/commit/c62901908088b9c03baffb8903e9b19ba1bc919d) by [@vineethkuttan](https://github.com/vineethkuttan))
+- **Renderer**: Use `size_t` instead of `int` for vector iteration in `cloneMultipleRecursive` ([f9754d3459](https://github.com/facebook/react-native/commit/f9754d34590fe4d988065a92de5d512883de3b33) by Harini Malothu)
+- **Renderer**: Fix 9-element (2D) transform matrix conversions ([ce243df972](https://github.com/facebook/react-native/commit/ce243df9725baff265fcd275b420ee78971e75cb) by [@cortinico](https://github.com/cortinico))
+- **Runtime**: [ReactCxxPlatform] Don't crash on reload ([5d65794ee4](https://github.com/facebook/react-native/commit/5d65794ee4fadc135d1c47ccd3bcce36e594ab8d) by [@christophpurrer](https://github.com/christophpurrer))
+- **TypeScript**: Fixed missing type definitions for new DOM APIs in legacy TypeScript types ([05ec7e0ad1](https://github.com/facebook/react-native/commit/05ec7e0ad13cce59e7e3161aa1005392584d6c59) by [@rubennorte](https://github.com/rubennorte))
+- **TypeScript**: Fixed Types in Refresh control ([ed24a4d05b](https://github.com/facebook/react-native/commit/ed24a4d05bb2e1e4a7e32a955777e59e827ebce5) by [@riteshshukla04](https://github.com/riteshshukla04))
+- **TypeScript**: TypeScript types of `positions` in `GradientValue` ([f7ea40bc28](https://github.com/facebook/react-native/commit/f7ea40bc28605fb712910e20d150af0bb9942611) by [@SimpleCreations](https://github.com/SimpleCreations))
+- **Yoga**: Update copyright headers ([0b68dcfac8](https://github.com/facebook/react-native/commit/0b68dcfac80e37423c886cc481a616506351bd81) by [@willspag](https://github.com/willspag))
+
+#### Android specific
+
+- **API**: Correct deprecation message for `ReactContextBaseJavaModule#getCurrentActivity()` ([81bbbe3c45](https://github.com/facebook/react-native/commit/81bbbe3c458628187c078fe2c0ef2b5d13867fe5) by [@vladd-g](https://github.com/vladd-g))
+- **Build**: Fix build failures with `RNGP` due to `AGP` 9.0.0-alpha05 ([69dc655005](https://github.com/facebook/react-native/commit/69dc655005bc20feb119ddeca7f663d2d64a6275) by [@cortinico](https://github.com/cortinico))
+- **Dev Menu**: Fix displaying dev menu items in light mode ([269b0bd877](https://github.com/facebook/react-native/commit/269b0bd877b018e9d54e7b08ab9b4d265daaaef3) by [@coado](https://github.com/coado))
+- **React Native DevTools**: Fix `SoLoader` race condition in `InspectorNetworkRequestListener` ([6c874f25e2](https://github.com/facebook/react-native/commit/6c874f25e20499f6f5a2ccac38b157018e3ccb33) by [@vzaidman](https://github.com/vzaidman))
+- **Hermes**: Read the Hermes V1 opt-in flag from the apps properties when building from source ([813b9441ca](https://github.com/facebook/react-native/commit/813b9441cad3c5bd45ef25f438217281e66dcf65) by [@j-piasecki](https://github.com/j-piasecki))
+- **Permissions**: Fix request permission not always resolving in Android 16 ([39ede95921](https://github.com/facebook/react-native/commit/39ede959211e10032f147d2b0b7af783cba049c8) by [@lukmccall](https://github.com/lukmccall))
+- **Fabric**: Do not crash inside `getEncodedScreenSizeWithoutVerticalInsets` if `SurfaceMountingManager` is null ([f59a6f9508](https://github.com/facebook/react-native/commit/f59a6f9508f92391b26d44854f3da238ccbc5e62) by [@cortinico](https://github.com/cortinico))
+- **Runtime**: Request layout on attached surfaces when font scale changes ([417e068220](https://github.com/facebook/react-native/commit/417e0682203d70bd5ca510f7999a7f6c6990566f) by [@j-piasecki](https://github.com/j-piasecki))
+- **ScrollView**: Controller-driven scroll events now honor paging/snap alignment ([ed75963c0d](https://github.com/facebook/react-native/commit/ed75963c0d14ba0b7c85b0aaed8fe635d60d1b99) by [@Abbondanzo](https://github.com/Abbondanzo))
+- **ScrollView**: Focused scroll into view behaviors for nested vertical scroll views ([26502c6319](https://github.com/facebook/react-native/commit/26502c63193c3f4814af82ca6f8ff4c45abbb76b) by [@rozele](https://github.com/rozele))
+- **ScrollView**: Issue with restarting scroll in `maintainVisibleContentPosition` ([a034841fd6](https://github.com/facebook/react-native/commit/a034841fd68a93778d4999f8bc540cf6a5fef8d4) by [@rozele](https://github.com/rozele))
+- **Text**: Fix text not scaling down when system `fontScale` < 1.0 ([642f086b8c](https://github.com/facebook/react-native/commit/642f086b8ce4088d7f0b3c6453e2bb8c5f75e41b) by [@kdwkr](https://github.com/kdwkr))
+- **View**: Defers focus until View is attached ([9d498f676d](https://github.com/facebook/react-native/commit/9d498f676d96b1c8d3d6c58dc188ea51e88e3474) by [@rozele](https://github.com/rozele))
+- **View**: Resolves an int overflow in `findNextFocusableElement` ([363d297260](https://github.com/facebook/react-native/commit/363d2972608e90abb423f9e0592270978a73fb9f) by [@rozele](https://github.com/rozele))
+
+#### iOS specific
+
+- **ActionSheet**: Apply tint color to Actions sheets buttons ([535efc1403](https://github.com/facebook/react-native/commit/535efc1403e53bde190ce5ddb7ecf97918c5e5fd) by [@cipolleschi](https://github.com/cipolleschi))
+- **ActionSheet**: Revert action sheet behavior not to break apps on iOS 26 ([82d2352b19](https://github.com/facebook/react-native/commit/82d2352b19b5255c74d17efea467bdad2ba93f29) by [@cipolleschi](https://github.com/cipolleschi))
+- **Build**: Fix loading bundle using `debug_http_host` preferences (https://github.com/facebook/react-native/commit/2ac54881f3967346faafa4e5a6bc3b9a68c29e46 by [@coado](https://github.com/coado))
+- **Build**: Fixed copying symbol bundles into correct slice folder (https://github.com/facebook/react-native/commit/2bc6b0083237839b224d5427407d33cab3e2de6b by [@chrfalch](https://github.com/chrfalch))
+- **Codegen**: Fix autolinking-generated `react-native-config` output not being used in `ReactCodegen` script phase due to temp output directory ([c0290329cd](https://github.com/facebook/react-native/commit/c0290329cdb1771ec087c8552049a287c67259c6) by [@kitten](https://github.com/kitten))
+- **DeviceInfo**: Fix `RCTDeviceInfo` crash when `application.delegate.window` is nil in modern iOS app architectures ([968909488a](https://github.com/facebook/react-native/commit/968909488a844c695a92ce000497840e577190dd) by [@25harsh](https://github.com/25harsh))
+- **Events**: Add missing `break;` to `-[RCTViewManager pointerEvents]` ([916e53f845](https://github.com/facebook/react-native/commit/916e53f845cdb438c1bb38590d7743f113eed8f7) by [@NSProgrammer](https://github.com/NSProgrammer))
+- **Events**: Raised the maximum number of pointers tracked at the same time to 17 ([58bd51e7e2](https://github.com/facebook/react-native/commit/58bd51e7e23cbd1f5f0f360587610c9fc70c0d76) by [@j-piasecki](https://github.com/j-piasecki))
+- **Fabric**: Address unexpected warning about "Unbalanced calls start/end for tag 20/19" ([796d182d89](https://github.com/facebook/react-native/commit/796d182d8989ff826eaa3a57458bdfc79750f820) by [@lokshunhung](https://github.com/lokshunhung))
+- **Font**: Make `RCTSetDefaultFontHandler` compatible with the new arch, and add a more powerful version as `RCTSetDefaultFontResolver` ([64b30a9376](https://github.com/facebook/react-native/commit/64b30a937607e436b7979e245c456e7ca45bfd11) by [@javache](https://github.com/javache))
+- **Image**: Images are removed from memory more aggressively to prevent OOMs ([3895831c2b](https://github.com/facebook/react-native/commit/3895831c2bc83faf68223bb2a491e796d2799b24) by [@sammy-SC](https://github.com/sammy-SC))
+- **Image**: Update the `source`property to avoid multiple downloads ([0a71b43fbc](https://github.com/facebook/react-native/commit/0a71b43fbc9d759bb8effd0197031a955687d07a) by [@chrfalch](https://github.com/chrfalch))
+- **Modal**: Modal swipe dismissal works only for the first time ([3a0c402d26](https://github.com/facebook/react-native/commit/3a0c402d26c366126fe7b36b2d504be4f658d68d) by [@okwasniewski](https://github.com/okwasniewski))
+- **Prebuild**: Fix iOS version mismatch when using nightly prebuilds ([790860782e](https://github.com/facebook/react-native/commit/790860782e07c02b3d89742006d9e73fea62bcfc) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+- **Prebuild**: Fix using iOS nightly prebuilds in release mode ([19d87c874e](https://github.com/facebook/react-native/commit/19d87c874edb534d3acf5cb6576c6335983b661e) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+- **StyleSheet**: `BoxShadow` + overflow hidden combination interfering with pointerEvents and transform scale ([c8e5f9766b](https://github.com/facebook/react-native/commit/c8e5f9766b8caaf66aa61ef48eeab740a10a725a) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
+
+## v0.82.1
+
+### Fixed
+
+#### Android specific
+
+- Fixed representation of transforms when view is originally zero-sized ([a81e94a40c](https://github.com/facebook/react-native/commit/a81e94a40ca8dca9e57b562db21f8f235c5b25a0) by [@javache](https://github.com/javache))
+
+#### iOS specific
+
+- Fixed issue when using gnu coreutils cp command when using precompiled binaries causing compilation error ([068ec39aea](https://github.com/facebook/react-native/commit/068ec39aea543617e5159fe22274b294bfb29026) by [@chrfalch](https://github.com/chrfalch))
+
+## v0.82.0
### Breaking
@@ -8,8 +360,10 @@
- **`CxxSharedModuleWrapper`:** Removed CxxSharedModuleWrapper ([fafbee2402](https://github.com/facebook/react-native/commit/fafbee240235ea0e63eb01abd31ce32d6a576429) by [@javache](https://github.com/javache))
- **DOM API:** Enable DOM APIs in host component refs ([2ad845ccb2](https://github.com/facebook/react-native/commit/2ad845ccb2fea277e05513dcf41407026a8224f0) by [@rubennorte](https://github.com/rubennorte))
- **Error Handling:** Unhandled promises are now handled by ExceptionsManager.handleException, instead of being swallowed as Logbox Warnings. ([c4082c9ce2](https://github.com/facebook/react-native/commit/c4082c9ce208a324c2d011823ca2ba432411aafc) by [@krystofwoldrich](https://github.com/krystofwoldrich))
+- **InteractionManager:** InteractionManager has been deprecated and no longer respects interaction handles. Instead, it is now recommended to avoid executing long-running JavaScript tasks by breaking them up into smaller tasks and scheduling them using `requestIdleCallback()`. ([03d9f34a82](https://github.com/facebook/react-native/commit/03d9f34a8252456d389d9f9a3bd04b99a2828c16) by [@yungsters](https://github.com/yungsters))
- **`shouldEmitW3CPointerEvents`:** Migrate `shouldPressibilityUseW3CPointerEventsForHover` to common private feature flags and remove `shouldEmitW3CPointerEvents` flag. ([fb4587780e](https://github.com/facebook/react-native/commit/fb4587780e8d6111139d73598a9a26ff392dee28) by [@coado](https://github.com/coado))
- **TurboModuleUtils:** Remove unused ReactCommon/TurboModuleUtils functions #deepCopyJSIObject and #deepCopyJSIArray ([ead669ade3](https://github.com/facebook/react-native/commit/ead669ade31ee703c407f96c0ce98d8f2991bdc8) by [@christophpurrer](https://github.com/christophpurrer))
+- **TurboModules:** Delete old location of CallbackWrapper.h / LongLivedObject.h by ([cb94e71](https://github.com/facebook/react-native/commit/cb94e71845259ae7fa823eb4d21cde74fccd7435) [@christophpurrer](https://github.com/christophpurrer))
#### Android specific
@@ -24,12 +378,13 @@
### Added
-- **Animated:** `Animated.CompositeAnomation` is now exposed when using `"react-native-strict-api"` ([024d25794a](https://github.com/facebook/react-native/commit/024d25794a51c94c877c1dfa115a82ebbf559614) by [@huntie](https://github.com/huntie))
+- **Animated:** `Animated.CompositeAnimation` is now exposed when using `"react-native-strict-api"` ([024d25794a](https://github.com/facebook/react-native/commit/024d25794a51c94c877c1dfa115a82ebbf559614) by [@huntie](https://github.com/huntie))
- **Animated:** Allow calling createAnimatedNode without batching ([d9d9a49e18](https://github.com/facebook/react-native/commit/d9d9a49e18f3c51caa18cf7da0a1fcd62f1ecf18) by [@zeyap](https://github.com/zeyap))
- **Animated:** Allow filter usage with native animated driver. ([138d0eb01d](https://github.com/facebook/react-native/commit/138d0eb01dbe597261459a37d364d1780c3ef228) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
- **API:** Expose NativeComponentRegistry API as JavaScript root export ([f936780cd5](https://github.com/facebook/react-native/commit/f936780cd5c0c17797f9d2bbc8f5cee81c2eefce) by [@zhongwuzw](https://github.com/zhongwuzw))
- **API:** Expose `ReactNativeVersion` API as JavaScript root export ([ec5638abd0](https://github.com/facebook/react-native/commit/ec5638abd0e872be62b6ea5d8df9bed6335c2191) by [@huntie](https://github.com/huntie))
- **Codegen:** Added getDebugProps to codegen ([e547f466ee](https://github.com/facebook/react-native/commit/e547f466ee41415a75ec6b6f910171285ee7bfc3) by [@cipolleschi](https://github.com/cipolleschi))
+- **Hermes V1:** Added a dependency on hermes-compiler ([0caf8e70d5](https://github.com/facebook/react-native/commit/0caf8e70d53f611a73ad9b55879dfe0a5f036371) by [@j-piasecki](https://github.com/j-piasecki))
- **Pressable:** Allow setting `blockNativeResponder` on Pressable ([6e4d23ded2](https://github.com/facebook/react-native/commit/6e4d23ded2da4a717bafcc032e3d7a0a5fbe3731) by [@zeyap](https://github.com/zeyap))
- **Yoga/API:** Make yoga/Yoga.h an umbrell header ([8ed2cee80e](https://github.com/facebook/react-native/commit/8ed2cee80e0aaac2f2a6a897ba450888f274a5a4) by [@rudybear](https://github.com/rudybear))
@@ -39,18 +394,23 @@
- **DevMenu:** Add long-press back as an option to open the DevMenu for devices that lack menu & fast-forward. ([32d37f03ad](https://github.com/facebook/react-native/commit/32d37f03ad05290205a4f04d756f6e1880c4ff89) by [@sbuggay](https://github.com/sbuggay))
- **DevTools:** `DevSupportManager::openDebugger` now supports an optional `panel` param determining the starting panel ([7eb3536728](https://github.com/facebook/react-native/commit/7eb3536728c4a20f7e51245f4f7b64aa505bd799) by [@huntie](https://github.com/huntie))
- **DevTools:** Adds a landing view parameter to opening RNDT, enabling arbitrary view focus on launch. ([635c707eec](https://github.com/facebook/react-native/commit/635c707eec18f6d2ceceac2dcee9f458f17f8aab) by [@sbuggay](https://github.com/sbuggay))
+- **Hermes V1:** Added opt-in to use the new Hermes ([3e9990f860](https://github.com/facebook/react-native/commit/3e9990f860eb9380837ef431ca02def32c4261ad) by [@j-piasecki](https://github.com/j-piasecki))
- **HWInput:** Channel up/down hardware events. ([c2a3e4420e](https://github.com/facebook/react-native/commit/c2a3e4420e07147f9a040a665da98dbe22b87a2a) by [@sbuggay](https://github.com/sbuggay))
- **Manifest:** Add support to specify a single Manifest rather than 2 (main/debug) by using the `usesCleartextTraffic` manifest placeholder which is autoconfigured by RNGP. ([d89acc1596](https://github.com/facebook/react-native/commit/d89acc1596345534882938d2bbf40275a6cb89bd) by [@cortinico](https://github.com/cortinico))
#### iOS specific
- **API:** Add deprecation message for RCTAppdelegate APIs ([d503ea4efc](https://github.com/facebook/react-native/commit/d503ea4efc84b6511cef2a46421a16e044862e88) by [@cipolleschi](https://github.com/cipolleschi))
+- **Fabric:** Add invalidation callback for non-recycled component instances ([dc4a6d2c7e](https://github.com/facebook/react-native/commit/dc4a6d2c7e2ed421b61929896f60b1a864a60d97) by [@kkafar](https://github.com/kkafar))
+- **Hermes V1:** Added opt-in to use the new Hermes ([e9cdc308b4](https://github.com/facebook/react-native/commit/e9cdc308b4c04753d85757e8877ac00c3c687b95) by [@j-piasecki](https://github.com/j-piasecki))
- **New Architecture:** Add warning if RCT_NEW_ARCH_ENABLED is set to 0 ([7d0bef2f25](https://github.com/facebook/react-native/commit/7d0bef2f25a206d917e7f5cc2b9a6c088f13a832) by [@cipolleschi](https://github.com/cipolleschi))
+- **New Architecture:** Crash the app if they force the legacy architecture. ([dc132a4fd4](https://github.com/facebook/react-native/commit/dc132a4fd4ca8dc28dc7dbb2406ac67dac1a0ee7) by [@cipolleschi](https://github.com/cipolleschi))
### Changed
- **Font:** Enabled `enableFontScaleChangesUpdatingLayout` feature flag by default ([686d14f1d1](https://github.com/facebook/react-native/commit/686d14f1d16c2f02720104ddd395f7d27c908350) by [@j-piasecki](https://github.com/j-piasecki))
- **Hermes:** Changed names of hermes binaries ([776fca1e7c](https://github.com/facebook/react-native/commit/776fca1e7c978a2d8f817d042836073e4dcb4e0e) by [@j-piasecki](https://github.com/j-piasecki))
+- **Hermes V1:** Changed the source of hermesc binary to be an npm package ([2e0bd13a25](https://github.com/facebook/react-native/commit/2e0bd13a2533fe7ab64125a95b9215b806018c6e) by [@j-piasecki](https://github.com/j-piasecki))
- **Metro:** Bump Metro to ^0.83.1 ([840fd6c83f](https://github.com/facebook/react-native/commit/840fd6c83f45326a796bf2823f8c2fa942aed06c) by [@robhogan](https://github.com/robhogan))
- **React:** Bumped React to 19.1.1 ([ec5a98b1f5](https://github.com/facebook/react-native/commit/ec5a98b1f5c2137f5f6ff5f5f6706f20384c44df) by [@cipolleschi](https://github.com/cipolleschi))
- **Runtime:** CDP backend now accepts `addBinding` and `removeBinding` methods earlier, before a Runtime exists. ([3271e57c75](https://github.com/facebook/react-native/commit/3271e57c751e7d1193c1e9f7b53e545231511b9d) by [@motiz88](https://github.com/motiz88))
@@ -61,7 +421,7 @@
- **AGP:** AGP to 8.12.0 ([742ef3d661](https://github.com/facebook/react-native/commit/742ef3d6615c8c1202e9f683e6127ac97d7a9e23) by [@cortinico](https://github.com/cortinico))
- **DevSupportManager:** DevSupport `openDebugger()` methods now accept a `panel: String?` param. Frameworks directly implementing `DevSupportManager` will need to adjust call signatures. ([9dba7112cf](https://github.com/facebook/react-native/commit/9dba7112cfd09b02300869a77dba3dca16f49a28) by [@huntie](https://github.com/huntie))
-- **Kotlin:**Migrated TextAttributeProps to Kotlin. You might need to update your property access to use camelCase instead of Hungarian notation. ([fa921b3c7b](https://github.com/facebook/react-native/commit/fa921b3c7b289800a79196468f993a0eb0bf693f) by [@mateoguzmana](https://github.com/mateoguzmana))
+- **Kotlin:** Migrated TextAttributeProps to Kotlin. You might need to update your property access to use camelCase instead of Hungarian notation. ([fa921b3c7b](https://github.com/facebook/react-native/commit/fa921b3c7b289800a79196468f993a0eb0bf693f) by [@mateoguzmana](https://github.com/mateoguzmana))
- **Kotlin:** Migrated ReactBaseTextShadowNode to Kotlin. You might need to update your property access to use camelCase instead of Hungarian notation. ([8ccfff9a46](https://github.com/facebook/react-native/commit/8ccfff9a46f317fd78f478c8b3f180441535d1ca) by [@mateoguzmana](https://github.com/mateoguzmana))
- **Kotlin:** Migrated com.facebook.react.bridge.Arguments to Kotlin. ([2534aeaddb](https://github.com/facebook/react-native/commit/2534aeaddb0490b69dfaba6b8d316616c7e10a9c) by [@mateoguzmana](https://github.com/mateoguzmana))
- **Kotlin:** Migrate `YogaConfig` to Kotlin ([4d5caef76b](https://github.com/facebook/react-native/commit/4d5caef76b83eb7e983364ecc81abb6027e5f98e) by [@mateoguzmana](https://github.com/mateoguzmana))
@@ -84,6 +444,7 @@
### Deprecated
+- **APIs:** Deprecate legacy javascript react native apis ([e7aeea26bd](https://github.com/facebook/react-native/commit/e7aeea26bde6e9cda0a3a0a55fc2a0421fb0c0e5) by [@RSNara](https://github.com/RSNara))
- **StyleSheet:** `StyleSheet.absoluteFillObject` is deprecated in favor of `StyleSheet.absoluteFill` (equivalent). ([83e19813ff](https://github.com/facebook/react-native/commit/83e19813ff5498ab3497d97fe38dba63a5554425) by [@huntie](https://github.com/huntie))
- Deprecate all the c++ classes not used by interop, or the new architecture. ([9539cd2626](https://github.com/facebook/react-native/commit/9539cd26261aef646379104833c7f719e3d83d02) by [@RSNara](https://github.com/RSNara))
@@ -137,6 +498,7 @@
- **Casting:** Casting rawValue to int was incorrectly truncating ([31b9f10364](https://github.com/facebook/react-native/commit/31b9f103645e67586bdfc5c2f590c28c04ca3871) by [@javache](https://github.com/javache))
- **Codegen:** Help Codegen find library's package.json if some libraries using `exports` field in their package.json file and the `./package.json` subpath is not explicitly defined ([739dfd2141](https://github.com/facebook/react-native/commit/739dfd2141015a8126448bda64a559f5bf22672e) by [@RakaDoank](https://github.com/RakaDoank))
- **Hermes:** Change leftover references to `hermes.framework` to `hermesvm.framework` ([7f051c5470](https://github.com/facebook/react-native/commit/7f051c54701b3585f76f63846abbf7e68e2688d2) by [@j-piasecki](https://github.com/j-piasecki))
+- **Hermes V1:** Fixed coordinates for Hermes V1 artifacts ([674fb77d93](https://github.com/facebook/react-native/commit/674fb77d93dfe67a5fe90449dc71b195b1851e13) by [@j-piasecki](https://github.com/j-piasecki))
- **Performance Panel:** Fix typo in Performance.js type checking condition ([6caf2dfa38](https://github.com/facebook/react-native/commit/6caf2dfa382fd4f1184b8d21b030c36687a256e4) by [@YangJonghun](https://github.com/YangJonghun))
- **Performance Panel:** Add default cases to switch statements in headers ([323fe3a5d4](https://github.com/facebook/react-native/commit/323fe3a5d471ae5a2f94d5c2bd13cc97feffe0a5) by [@NSProgrammer](https://github.com/NSProgrammer))
- **ReactCommon:** Bring back ContextContainer::Shared = std::shared_ptr alias ([daeb6e99ab](https://github.com/facebook/react-native/commit/daeb6e99abbca2b6395a9a703d2b0bb9e5091fb7) by [@christophpurrer](https://github.com/christophpurrer))
@@ -148,11 +510,13 @@
#### Android specific
- **Accessability:** Stabilize custom accessibility action IDs to prevent "incompatible action" errors in TalkBack. ([626568f9a3](https://github.com/facebook/react-native/commit/626568f9a3f956a52f6c55df1dc3bc5cd017e353) by [@leg234-png](https://github.com/leg234-png))
+- **Build From Source:** Fix build from source due to missing folder error on Gradle 9.0 ([9fbce3eff1](https://github.com/facebook/react-native/commit/9fbce3eff18060f16e796badc415ba733ede19af) by [@cortinico](https://github.com/cortinico))
- **Determinism:** Turned off build IDs for native libraries, fixing issues with reproducibility ([4b8dbe7642](https://github.com/facebook/react-native/commit/4b8dbe7642be53d0ccfc68ca8c9b3f5e750a68c0) by [@Rexogamer](https://github.com/Rexogamer))
- **DevTools:** Fix stack trace linkifying failing when using Android emulator and other situations where the device and debugger have different bundle urls ([794df48ad6](https://github.com/facebook/react-native/commit/794df48ad6a259022e66de1a38ff54b5ec67c3e4) by [@vzaidman](https://github.com/vzaidman))
- **Edge to Edge:** Fix `Dimensions` `window` values on Android < 15 when edge-to-edge is enabled ([3b185e4bce](https://github.com/facebook/react-native/commit/3b185e4bcef24e0689cccd4cf250d469b114d4da) by [@zoontek](https://github.com/zoontek))
- **Fonts:** Update font scale when recreating `RootView` ([5cda3065ce](https://github.com/facebook/react-native/commit/5cda3065ce635460a7458cbab5c10e24bea3bfe2) by [@j-piasecki](https://github.com/j-piasecki))
- **Fonts:** Fix incorrect positioning of inline view at the end of string when RTL text in LTR container ([7f224941bb](https://github.com/facebook/react-native/commit/7f224941bb807919b487d8e1634dd2124f9258b8) by [@NickGerleman](https://github.com/NickGerleman))
+- **Hermes V1:** Changed the coordinates of hermes artifacts when using Hermes V1 ([d0fb33822d](https://github.com/facebook/react-native/commit/d0fb33822de38183895c8b3421f46966909beaf3) by [@j-piasecki](https://github.com/j-piasecki))
- **Locale:** Use the first available locale instead of the default one to decide `isDevicePreferredLanguageRTL` ([a03780d279](https://github.com/facebook/react-native/commit/a03780d279d0944e0dcbbf5a93680775006598b0) by Kaining Zhong)
- **New Architecture:** Correctly account for insets on first render of Modals on New Arch ([2e76fc8e8e](https://github.com/facebook/react-native/commit/2e76fc8e8ea01fbce5bd131f675364e688f49088) by [@cortinico](https://github.com/cortinico))
- **Performance:** Fix mounting is very slow on Android by shipping native transform optimizations ([c557311ed8](https://github.com/facebook/react-native/commit/c557311ed836cded8548c5bca32f3eded0abc7ff) by [@cortinico](https://github.com/cortinico))
@@ -165,13 +529,18 @@
- **Build:** Non-UTF8 crashes Info.plist local frameworks ([91e69b5d4c](https://github.com/facebook/react-native/commit/91e69b5d4c768278680a8d9ae979bc267624ce98) by [@philipheinser](https://github.com/philipheinser))
- **Build:** Fixed variable naming error in `set_fast_float_config` method in `react_native_pods.rb` ([327057fad5](https://github.com/facebook/react-native/commit/327057fad5c78a95e6c039bfe380d78672e83a43) by [@eliotfallon213](https://github.com/eliotfallon213))
- **Build:** Fix pure cocoapods dynamic framework build ([aa4555eaf1](https://github.com/facebook/react-native/commit/aa4555eaf1b6aab83660c600e867fa6c2da4128e) by [@cipolleschi](https://github.com/cipolleschi))
+- **Codegen:** Fix regression that skips artifacts code generation ([f6f5ea0b2e](https://github.com/facebook/react-native/commit/f6f5ea0b2eed894725d8f6e8bd045c99c3182026) by [@kitten](https://github.com/kitten))
- **Native Modules:** Fix concurrent calls into resolve/reject inside native modules ([dc879950d1](https://github.com/facebook/react-native/commit/dc879950d196dfd429229f1c4c8e743ef1799d11) by [@RSNara](https://github.com/RSNara))
- **New Architecture:** Fix overriding (xc)framework Info.plist files with RCTNewArchEnabled field ([f84514a88b](https://github.com/facebook/react-native/commit/f84514a88be00f8dcae7972f84aa89d829392a58) by [@msynowski](https://github.com/msynowski))
+- **Prebuild:** Fix Node scripts related to prebuilt tarball extraction for paths containing whitespaces ([9731e8ebc5](https://github.com/facebook/react-native/commit/9731e8ebc5ea87526a91b9903172639e062cd920) by [@kitten](https://github.com/kitten))
+- **Prebuild:** Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source ([f170db412b](https://github.com/facebook/react-native/commit/f170db412b3ab46fd0894d5d66431d9c230cd3a8) by [@kitten](https://github.com/kitten))
+- **RCTAlertController:** Simplify RCTAlertController, don't create additional UIWindow ([05c4321b19](https://github.com/facebook/react-native/commit/05c4321b194c3d0e146b6085bcaccc75acd3fd67) by [@okwasniewski](https://github.com/okwasniewski))
- **RCTPullToRefreshViewComponentView:** Properly initialize the `RCTPullToRefreshViewComponentView` ([27217e8bd6](https://github.com/facebook/react-native/commit/27217e8bd601757b5db6efc022db428b552a2aa4) by [@cipolleschi](https://github.com/cipolleschi))
- **RCTReactNativeFactory:** Ask the delegate for `getModuleForClass` and `getModuleInstanceFromClass` ([85b47afb48](https://github.com/facebook/react-native/commit/85b47afb48e50b036d2c2c79a008f571d3bfcb43) by [@cipolleschi](https://github.com/cipolleschi))
- **ScrollView:** Correctly propagate `ScrollView` props to `RefreshControl` ([09daad27ea](https://github.com/facebook/react-native/commit/09daad27ea22b83fab65176ea3c7f5f1488ba408) by [@cipolleschi](https://github.com/cipolleschi))
- **ScrollView:** Make sure that `ScrollView` recycled refresh control have the right props setup. ([21b93d8d7d](https://github.com/facebook/react-native/commit/21b93d8d7d46a26f728df19764f85a8aebf318bb) by [@cipolleschi](https://github.com/cipolleschi))
- **Switch:** Fixed a crash when rendering the `Switch` component ([28275a0f7b](https://github.com/facebook/react-native/commit/28275a0f7b182a215010d47fb841d9c2c36bb24c) by [@cipolleschi](https://github.com/cipolleschi))
+- **Switch:** Fix Switch layout to work with iOS26 ([91d427fe52](https://github.com/facebook/react-native/commit/91d427fe52a307f9aa8579912ef956d61808dad2) by [@cipolleschi](https://github.com/cipolleschi))
- **Text:** Fix selectable prop not working correctly ([f004cd39bc](https://github.com/facebook/react-native/commit/f004cd39bc4b632006085cbcf61df52bc5d25242) by [@iamAbhi-916](https://github.com/iamAbhi-916))
- **TextInput:** Update TextInput recycling logic to clean up the `inputAccessoryView` dependency. ([eb08f54594](https://github.com/facebook/react-native/commit/eb08f545948de9e2eca91ab3cb7569670c553b15) by [@ArturKalach](https://github.com/ArturKalach))
- **TextInput:** Fixed TextInput behavior when `maxLength={null}` is passed ([56ad53cb14](https://github.com/facebook/react-native/commit/56ad53cb14b5c842714fcf976b6ba81f68c140f2) by [@cipolleschi](https://github.com/cipolleschi))
@@ -181,6 +550,53 @@
- **Network:** Fixed vulnerability on undici and on-headers ([dd00c9055a](https://github.com/facebook/react-native/commit/dd00c9055a8f0c9ceac1716385a8a9874f7a4c2e) by [@cipolleschi](https://github.com/cipolleschi))
+## v0.81.5
+
+### Fixed
+
+- Fixed switch ([4106d54a6d](https://github.com/facebook/react-native/commit/4106d54a6ddacbb784fc8335e9a82054f51a2d02) by [@cipolleschi](https://github.com/cipolleschi))
+
+#### Android specific
+
+- Fix request permission not always resolving in Android 16 ([39ede95921](https://github.com/facebook/react-native/commit/39ede959211e10032f147d2b0b7af783cba049c8) by [@lukmccall](https://github.com/lukmccall))
+
+#### iOS specific
+
+- Fix RCTDeviceInfo crash when application.delegate.window is nil in modern iOS app architectures ([968909488a](https://github.com/facebook/react-native/commit/968909488a844c695a92ce000497840e577190dd) by [@25harsh](https://github.com/25harsh))
+
+## v0.81.4
+
+### Fixed
+
+#### iOS specific
+
+- Fix regression that skips artifacts code generation ([f6f5ea0b2e](https://github.com/facebook/react-native/commit/f6f5ea0b2eed894725d8f6e8bd045c99c3182026) by [@kitten](https://github.com/kitten))
+- Reapplied "Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source" ([bb73315a3f](https://github.com/facebook/react-native/commit/bb73315a3fd8cd203c4ddb3ffa10bfec307c7e92) by [@kitten](https://github.com/kitten))
+
+## v0.81.3
+
+### Fixed
+
+#### iOS specific
+
+- Reverted "Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source" ([537e3ad930](https://github.com/facebook/react-native/commit/537e3ad93041c0cef959f0d20586fe97818900a6) by [@gabrieldonadel](https://github.com/gabrieldonadel))
+
+## v0.81.2
+
+### Added
+
+#### Android specific
+
+- Create a debugOptimized buildType for Android ([5e3edafec6](https://github.com/facebook/react-native/commit/5e3edafec6c69558521061dced7a6bcd046576b0) by [@cortinico](https://github.com/cortinico))
+- Add `useNativeEqualsInNativeReadableArrayAndroid` and `useNativeTransformHelperAndroid` feature flag to the experimental channel. This should alleviate some of the perf issue users are seeing on Android + Reanimated + NewArch on 0.81([a346096da8](https://github.com/facebook/react-native/commit/a346096da81fccf5fbc82d83bfc128695e6ec3a5) by [@cortinico](https://github.com/cortinico))
+
+### Fixed
+
+#### iOS specific
+
+- Fix Node scripts related to prebuilt tarball extraction for paths containing whitespaces ([366f2ad505](https://github.com/facebook/react-native/commit/366f2ad5057ffecc1f5b211f6aae29567ae6b7e5) by [@kitten](https://github.com/kitten))
+- Use autolinking-generated react-native-config output in second step of cocoapods linking that generates artifacts and generated source ([a2eb29e5e7](https://github.com/facebook/react-native/commit/a2eb29e5e7aef8bbdf4c647c8467b5292b013b20) by [@kitten](https://github.com/kitten))
+
## v0.81.1
### Added
@@ -195,7 +611,6 @@
- **Infra:** Add missing Babel dependencies ([bf2c3af93b](https://github.com/facebook/react-native/commit/bf2c3af93b146943cb35866fa9badcd188e63f5b) by [@tido64](https://github.com/tido64))
- **Accessibility:** fix `aria-label` on `TextInput` ([6965d57e75](https://github.com/facebook/react-native/commit/6965d57e75ed0cf9f265c6020d478ddb9af4bf10) by [@mdjastrzebski](https://github.com/mdjastrzebski))
-
#### iOS specific
- **TextInput:** Setting maxLength to 0 in TextInput now correctly blocks typing ([c5956da8c0](https://github.com/facebook/react-native/commit/c5956da8c0b735d47761af51019ed25b49001c00) by [@riteshshukla04](https://github.com/riteshshukla04))
@@ -209,7 +624,6 @@
- **Prebuild:** Fix "file exists" error in `ReactNativeDependencies.podspec` ([4c570b5d31](https://github.com/facebook/react-native/commit/4c570b5d31ef46e04e5fa26fa92d7f7090bf15e2) by [@vonovak](https://github.com/vonovak))
- **Prebuild:** added explicit handling of ReactCodegen ([6526a98d68](https://github.com/facebook/react-native/commit/6526a98d68dbc8578ea15cbf117c0a216c6e9af0) by [@cipolleschi](https://github.com/cipolleschi))
-
## v0.81.0
### Breaking
@@ -764,6 +1178,10 @@
- **Text:** Selection range not respected when changing text or selection when selection is forced ([d32ea66e6a](https://github.com/facebook/react-native/commit/d32ea66e6a945dd84092532401b265b12d482668) by Olivier Bouillet)
- **TextInput:** Fix TextInput `onContentSizeChange` event being dispatched only once on iOS on the new architecture ([5fd5188172](https://github.com/facebook/react-native/commit/5fd51881727b2d86f87abf04db032940ac0ec8c4) by [@j-piasecki](https://github.com/j-piasecki))
+## v0.79.7
+
+See [CHANGELOG-0.7x](./CHANGELOG-0.7x.md#v0797)
+
## v0.79.6
See [CHANGELOG-0.7x](./CHANGELOG-0.7x.md#v0796)
diff --git a/README.md b/README.md
index 502b38bcd2a4..b4280bb6abd8 100644
--- a/README.md
+++ b/README.md
@@ -17,10 +17,13 @@
-
+
-
+
+
+
+
diff --git a/build.gradle.kts b/build.gradle.kts
index 866560d63884..2154d20f22ed 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -104,39 +104,70 @@ tasks.register("build") {
tasks.register("publishAllToMavenTempLocal") {
description = "Publish all the artifacts to be available inside a Maven Local repository on /tmp."
dependsOn(":packages:react-native:ReactAndroid:publishAllPublicationsToMavenTempLocalRepository")
- // We don't publish the external-artifacts to Maven Local as ci is using it via workspace.
- dependsOn(
- ":packages:react-native:ReactAndroid:hermes-engine:publishAllPublicationsToMavenTempLocalRepository"
- )
}
tasks.register("publishAndroidToSonatype") {
description = "Publish the Android artifacts to Sonatype (Maven Central or Snapshot repository)"
dependsOn(":packages:react-native:ReactAndroid:publishToSonatype")
- dependsOn(":packages:react-native:ReactAndroid:hermes-engine:publishToSonatype")
}
-if (project.findProperty("react.internal.useHermesNightly")?.toString()?.toBoolean() == true) {
+var hermesSubstitution: Pair? = null
+
+if (project.findProperty("react.internal.useHermesStable")?.toString()?.toBoolean() == true) {
+ val hermesVersions = java.util.Properties()
+ val hermesVersionPropertiesFile =
+ File("./packages/react-native/sdks/hermes-engine/version.properties")
+ hermesVersionPropertiesFile.inputStream().use { hermesVersions.load(it) }
+ val selectedHermesVersion = hermesVersions["HERMES_V1_VERSION_NAME"] as String
+
+ hermesSubstitution = selectedHermesVersion to "Users opted to use stable hermes release"
+} else if (
+ project.findProperty("react.internal.useHermesNightly")?.toString()?.toBoolean() == true
+) {
+ val reactNativePackageJson = File("./packages/react-native/package.json")
+ val reactNativePackageJsonContent = reactNativePackageJson.readText()
+ val packageJson = groovy.json.JsonSlurper().parseText(reactNativePackageJsonContent) as Map<*, *>
+
+ val hermesCompilerVersion =
+ (packageJson["dependencies"] as Map<*, *>)["hermes-compiler"] as String
+
+ if (hermesCompilerVersion == "0.0.0") {
+ throw RuntimeException(
+ "Trying to use Hermes Nightly but hermes-compiler version is not specified"
+ )
+ }
+
+ hermesSubstitution = "$hermesCompilerVersion-SNAPSHOT" to "Users opted to use hermes nightly"
+} else {
logger.warn(
"""
********************************************************************************
- INFO: You're using Hermes from nightly as you set
+ INFO: You're building Hermes from source as you set
- react.internal.useHermesNightly=true
+ react.internal.useHermesStable=false
+ react.internal.useHermesNightly=false
in the ./gradle.properties file.
That's fine for local development, but you should not commit this change.
********************************************************************************
- """
+ """
.trimIndent()
)
+}
+
+if (hermesSubstitution != null) {
+ val (hermesVersion, reason) = hermesSubstitution!!
+ project(":packages:react-native:ReactAndroid:hermes-engine") {
+ tasks.configureEach { enabled = false }
+ }
+
allprojects {
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(project(":packages:react-native:ReactAndroid:hermes-engine"))
- .using(module("com.facebook.react:hermes-android:0.+"))
- .because("Users opted to use hermes from nightly")
+ .using(module("com.facebook.hermes:hermes-android:$hermesVersion"))
+ .because(reason)
}
}
}
diff --git a/flow-typed/environment/node.js b/flow-typed/environment/node.js
index 7969e444e116..47c30518aa42 100644
--- a/flow-typed/environment/node.js
+++ b/flow-typed/environment/node.js
@@ -21,6 +21,12 @@ interface ErrnoError extends Error {
syscall?: string;
}
+type Node$Conditional = T extends true
+ ? IfTrue
+ : T extends false
+ ? IfFalse
+ : IfTrue | IfFalse;
+
type buffer$NonBufferEncoding =
| 'hex'
| 'HEX'
@@ -192,18 +198,33 @@ declare type Node$Buffer = typeof Buffer;
declare module 'buffer' {
declare var kMaxLength: number;
declare var INSPECT_MAX_BYTES: number;
+
+ declare var constants: Readonly<{
+ MAX_LENGTH: number,
+ MAX_STRING_LENGTH: number,
+ }>;
+
declare function transcode(
source: Node$Buffer,
fromEnc: buffer$Encoding,
toEnc: buffer$Encoding,
): Node$Buffer;
+
+ declare function isUtf8(input: Buffer | ArrayBuffer | $TypedArray): boolean;
+
+ declare function isAscii(input: Buffer | ArrayBuffer | $TypedArray): boolean;
+
+ declare function resolveObjectURL(id: string): Blob | void;
+
declare var Buffer: Node$Buffer;
+ declare var Blob: typeof globalThis.Blob;
+ declare var File: typeof globalThis.File;
}
-type child_process$execOpts = {
+type child_process$execOpts = Readonly<{
cwd?: string,
- env?: Object,
- encoding?: string,
+ env?: Readonly<{[key: string]: string | number | void}>,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
shell?: string,
timeout?: number,
maxBuffer?: number,
@@ -211,8 +232,8 @@ type child_process$execOpts = {
uid?: number,
gid?: number,
windowsHide?: boolean,
- ...
-};
+ signal?: AbortSignal,
+}>;
declare class child_process$Error extends Error {
code: number | string | null;
@@ -225,32 +246,31 @@ declare class child_process$Error extends Error {
cmd: string;
}
-type child_process$execCallback = (
+type child_process$execCallback = (
error: ?child_process$Error,
- stdout: string | Buffer,
- stderr: string | Buffer,
+ stdout: T,
+ stderr: T,
) => void;
-type child_process$execSyncOpts = {
+type child_process$execSyncOpts = Readonly<{
cwd?: string,
input?: string | Buffer | $TypedArray | DataView,
stdio?: string | Array,
- env?: Object,
+ env?: Readonly<{[key: string]: string | number | void}>,
shell?: string,
uid?: number,
gid?: number,
timeout?: number,
killSignal?: string | number,
maxBuffer?: number,
- encoding?: string,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
windowsHide?: boolean,
- ...
-};
+}>;
-type child_process$execFileOpts = {
+type child_process$execFileOpts = Readonly<{
cwd?: string,
- env?: Object,
- encoding?: string,
+ env?: Readonly<{[key: string]: string | number | void}>,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
timeout?: number,
maxBuffer?: number,
killSignal?: string | number,
@@ -259,168 +279,414 @@ type child_process$execFileOpts = {
windowsHide?: boolean,
windowsVerbatimArguments?: boolean,
shell?: boolean | string,
- ...
-};
+ signal?: AbortSignal,
+}>;
-type child_process$execFileCallback = (
- error: ?child_process$Error,
- stdout: string | Buffer,
- stderr: string | Buffer,
-) => void;
+type child_process$execFileCallback =
+ child_process$execCallback;
-type child_process$execFileSyncOpts = {
+type child_process$execFileSyncOpts = Readonly<{
cwd?: string,
input?: string | Buffer | $TypedArray | DataView,
stdio?: string | Array,
- env?: Object,
+ env?: {[key: string]: string | number | void},
uid?: number,
gid?: number,
timeout?: number,
killSignal?: string | number,
maxBuffer?: number,
- encoding?: string,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
windowsHide?: boolean,
shell?: boolean | string,
- ...
-};
+}>;
-type child_process$forkOpts = {
+type child_process$forkOpts = Readonly<{
cwd?: string,
- env?: Object,
+ env?: Readonly<{[key: string]: string | number | void}>,
execPath?: string,
- execArgv?: Array,
+ execArgv?: ReadonlyArray,
silent?: boolean,
- stdio?: Array | string,
+ stdio?:
+ | child_process$StdioPipe
+ | string
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ string | number,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ string | number,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ string | number,
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<[child_process$StdioPipe, string | number, string | number, ...]>
+ | Readonly<[string | number, child_process$StdioPipe, string | number, ...]>
+ | Readonly<[string | number, string | number, child_process$StdioPipe, ...]>
+ | Readonly<[string | number, string | number, string | number, ...]>,
windowsVerbatimArguments?: boolean,
uid?: number,
gid?: number,
- ...
-};
+ serialization?: 'json' | 'advanced',
+ killSignal?: string | number,
+ timeout?: number,
+ signal?: AbortSignal,
+}>;
type child_process$Handle = any; // TODO
-type child_process$spawnOpts = {
+type child_process$StdioPipe = 'pipe' | 'overlapped';
+
+type child_process$spawnOpts = Readonly<{
cwd?: string,
- env?: Object,
+ env?: Readonly<{[key: string]: string | number | void}>,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
argv0?: string,
- stdio?: string | Array,
+ stdio?:
+ | child_process$StdioPipe
+ | string
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ string | number,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ child_process$StdioPipe,
+ string | number,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<
+ [
+ string | number,
+ child_process$StdioPipe,
+ child_process$StdioPipe,
+ ...
+ ],
+ >
+ | Readonly<[child_process$StdioPipe, string | number, string | number, ...]>
+ | Readonly<[string | number, child_process$StdioPipe, string | number, ...]>
+ | Readonly<[string | number, string | number, child_process$StdioPipe, ...]>
+ | Readonly<[string | number, string | number, string | number, ...]>,
detached?: boolean,
uid?: number,
gid?: number,
shell?: boolean | string,
windowsVerbatimArguments?: boolean,
windowsHide?: boolean,
- ...
-};
+ signal?: AbortSignal,
+ killSignal?: string | number,
+ timeout?: number,
+ serialization?: 'json' | 'advanced',
+}>;
-type child_process$spawnRet = {
+type child_process$spawnSyncRet = Readonly<{
pid: number,
output: Array,
- stdout: Buffer | string,
- stderr: Buffer | string,
+ // TODO: subprocess.stdout may be null in case of error
+ stdout: T,
+ // TODO: subprocess.stderr may be null in case of error
+ stderr: T,
+ // TODO: subprocess.status may be null in case of error or signal
status: number,
- signal: string,
- error: Error,
- ...
-};
+ signal: string | null,
+ error: Error | void,
+}>;
-type child_process$spawnSyncOpts = {
+type child_process$spawnSyncOpts = Readonly<{
cwd?: string,
input?: string | Buffer,
- stdio?: string | Array,
- env?: Object,
+ stdio?: string | ReadonlyArray,
+ env?: Readonly<{[key: string]: string | number | void}>,
uid?: number,
gid?: number,
timeout?: number,
- killSignal?: string,
+ killSignal?: string | number,
maxBuffer?: number,
- encoding?: string,
+ encoding?: buffer$NonBufferEncoding | 'buffer' | string,
shell?: boolean | string,
- ...
-};
-
-type child_process$spawnSyncRet = child_process$spawnRet;
-
-declare class child_process$ChildProcess extends events$EventEmitter {
- channel: Object;
- connected: boolean;
- killed: boolean;
- pid: number;
- exitCode: number | null;
- stderr: stream$Readable;
- stdin: stream$Writable;
- stdio: Array;
- stdout: stream$Readable;
+ windowsHide?: boolean,
+ windowsVerbatimArguments?: boolean,
+}>;
+type child_process$Serializable =
+ | string
+ | number
+ | boolean
+ | bigint
+ | {[key: string]: child_process$Serializable}
+ | Array;
+
+type child_process$SendHandle = net$Server | net$Socket;
+
+declare class child_process$ChildProcessTyped<
+ TStdin: stream$Writable | null,
+ TStdout: stream$Readable | null,
+ TStderr: stream$Readable | null,
+> extends events$EventEmitter
+{
+ +stdin: TStdin;
+ +stdout: TStdout;
+ +stderr: TStderr;
+ +channel: unknown;
+ +stdio: [TStdin, TStdout, TStderr, ...];
+ +killed: boolean;
+ +pid: number;
+ +connected: boolean;
+ +exitCode: number | null;
+ +signalCode: string | null;
+ +spawnargs: Array;
+ +spawnfile: string;
disconnect(): void;
- kill(signal?: string): void;
+ kill(signal?: string | number): boolean;
send(
- message: Object,
- sendHandleOrCallback?: child_process$Handle,
- optionsOrCallback?: Object | Function,
- callback?: Function,
+ message: child_process$Serializable,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ send(
+ message: child_process$Serializable,
+ sendHandle: child_process$SendHandle,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ send(
+ message: child_process$Serializable,
+ sendHandle: child_process$SendHandle,
+ options: Readonly<{keepOpen?: boolean}>,
+ callback?: (error: Error | null) => void,
): boolean;
unref(): void;
ref(): void;
}
+/**
+ * @deprecated - Unsafely assumes stdio is piped
+ */
+declare type child_process$ChildProcess = child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+>;
+
declare module 'child_process' {
- declare var ChildProcess: typeof child_process$ChildProcess;
+ declare type ExecOptions = child_process$execOpts;
+ declare type ExecFileOptions = child_process$execFileOpts;
+ declare type ExecSyncOptions = child_process$execSyncOpts;
+ declare type ForkOptions = child_process$forkOpts;
+ declare type SpawnOptions = child_process$spawnOpts;
+ declare type SpawnSyncOptions = child_process$spawnSyncOpts;
+
+ declare var ChildProcess: typeof child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ type StringOrBuffer =
+ Opts extends Readonly<{encoding: infer E, ...}>
+ ? E extends buffer$NonBufferEncoding
+ ? string
+ : E extends 'buffer'
+ ? Buffer
+ : string | Buffer
+ : Default;
+
+ type StreamForChannel = Channel extends 0
+ ? stream$Writable
+ : stream$Readable;
+
+ type MaybeStream =
+ Opts extends Readonly<{stdio: infer E, ...}>
+ ? E extends child_process$StdioPipe
+ ? StreamForChannel
+ : E extends string
+ ? null
+ : E[FD] extends child_process$StdioPipe
+ ? StreamForChannel
+ : E[FD] extends string | number
+ ? null
+ : null | StreamForChannel
+ : PipeByDefault extends true
+ ? StreamForChannel
+ : null;
declare function exec(
command: string,
- optionsOrCallback?: child_process$execOpts | child_process$execCallback,
- callback?: child_process$execCallback,
- ): child_process$ChildProcess;
-
- declare function execSync(
+ callback?: child_process$execCallback,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function exec(
command: string,
- options: {
- encoding: buffer$NonBufferEncoding,
- ...
- } & child_process$execSyncOpts,
- ): string;
-
- declare function execSync(
+ options: Opts,
+ callback?: child_process$execCallback>,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function execSync(
command: string,
- options?: child_process$execSyncOpts,
): Buffer;
+ declare function execSync(
+ command: string,
+ options: Opts,
+ ): StringOrBuffer;
+
declare function execFile(
file: string,
- argsOrOptionsOrCallback?:
- | Array
- | child_process$execFileOpts
- | child_process$execFileCallback,
- optionsOrCallback?:
- | child_process$execFileOpts
- | child_process$execFileCallback,
- callback?: child_process$execFileCallback,
- ): child_process$ChildProcess;
+ argsOrCallback?:
+ | ReadonlyArray
+ | child_process$execFileCallback,
+ callback?: child_process$execFileCallback,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function execFile(
+ file: string,
+ args: ReadonlyArray,
+ options: Opts,
+ callback?: child_process$execFileCallback>,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function execFile(
+ file: string,
+ options: Opts,
+ callback?: child_process$execFileCallback>,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
declare function execFileSync(
command: string,
- argsOrOptions?: Array | child_process$execFileSyncOpts,
- options?: child_process$execFileSyncOpts,
- ): Buffer | string;
+ args?: ReadonlyArray,
+ ): Buffer;
+
+ declare function execFileSync(
+ command: string,
+ args: ReadonlyArray,
+ options: Opts,
+ ): StringOrBuffer;
+
+ declare function execFileSync(
+ command: string,
+ options: Opts,
+ ): StringOrBuffer;
declare function fork(
modulePath: string,
- argsOrOptions?: Array | child_process$forkOpts,
- options?: child_process$forkOpts,
- ): child_process$ChildProcess;
+ args?: ReadonlyArray,
+ ): child_process$ChildProcessTyped;
+
+ declare function fork(
+ modulePath: string,
+ args: ReadonlyArray,
+ options: Opts,
+ ): child_process$ChildProcessTyped<
+ MaybeStream,
+ MaybeStream,
+ MaybeStream,
+ >;
+
+ declare function fork(
+ modulePath: string,
+ options: Opts,
+ ): child_process$ChildProcessTyped<
+ MaybeStream,
+ MaybeStream,
+ MaybeStream,
+ >;
declare function spawn(
command: string,
- argsOrOptions?: Array | child_process$spawnOpts,
- options?: child_process$spawnOpts,
- ): child_process$ChildProcess;
+ args?: ReadonlyArray,
+ ): child_process$ChildProcessTyped<
+ stream$Writable,
+ stream$Readable,
+ stream$Readable,
+ >;
+
+ declare function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: Opts,
+ ): child_process$ChildProcessTyped<
+ MaybeStream,
+ MaybeStream,
+ MaybeStream,
+ >;
+
+ declare function spawn(
+ command: string,
+ options: Opts,
+ ): child_process$ChildProcessTyped<
+ MaybeStream,
+ MaybeStream,
+ MaybeStream,
+ >;
declare function spawnSync(
command: string,
- argsOrOptions?: Array | child_process$spawnSyncOpts,
- options?: child_process$spawnSyncOpts,
- ): child_process$spawnSyncRet;
+ args?: ReadonlyArray,
+ ): child_process$spawnSyncRet;
+
+ declare function spawnSync(
+ command: string,
+ args: ReadonlyArray,
+ options: Opts,
+ ): child_process$spawnSyncRet>;
+
+ declare function spawnSync(
+ command: string,
+ options: Opts,
+ ): child_process$spawnSyncRet>;
}
declare module 'cluster' {
@@ -597,6 +863,7 @@ declare class crypto$Hash extends stream$Duplex {
data: string | Buffer,
input_encoding?: 'utf8' | 'ascii' | 'latin1' | 'binary',
): crypto$Hash;
+ copy(options?: unknown): crypto$Hash;
}
declare class crypto$Hmac extends stream$Duplex {
@@ -655,6 +922,83 @@ type crypto$key =
...
};
+declare class crypto$KeyObject {
+ +asymmetricKeyType?:
+ | 'rsa'
+ | 'rsa-pss'
+ | 'dsa'
+ | 'ec'
+ | 'ed25519'
+ | 'ed448'
+ | 'x25519'
+ | 'x448';
+ +asymmetricKeySize?: number;
+ +symmetricKeySize?: number;
+ +type: 'secret' | 'public' | 'private';
+
+ export(
+ options: Readonly<{
+ type: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1',
+ format: 'pem',
+ }>,
+ ): string;
+ export(
+ options: Readonly<{
+ type: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1',
+ format: 'der',
+ }>,
+ ): Buffer;
+ export(options: Readonly<{format: 'jwk'}>): unknown;
+ equals(otherKeyObject: crypto$KeyObject): boolean;
+}
+
+declare class crypto$X509Certificate {
+ constructor(buffer: string | Buffer | $TypedArray | DataView): void;
+
+ +ca: boolean;
+ +fingerprint: string;
+ +fingerprint256: string;
+ +fingerprint512: string;
+ +issuer: string;
+ +issuerCertificate?: crypto$X509Certificate;
+ +keyUsage: Array;
+ +publicKey: crypto$KeyObject;
+ +raw: Buffer;
+ +serialNumber: string;
+ +subject: string;
+ +subjectAltName: string;
+ +validFrom: string;
+ +validTo: string;
+ +validFromDate: Date;
+ +validToDate: Date;
+
+ checkEmail(
+ email: string,
+ options?: Readonly<{subject?: 'always' | 'default' | 'never'}>,
+ ): string | void;
+ checkHost(
+ name: string,
+ options?: Readonly<{subject?: 'always' | 'default' | 'never'}>,
+ ): string | void;
+ checkIP(ip: string): string | void;
+ checkIssued(otherCert: crypto$X509Certificate): boolean;
+ checkPrivateKey(privateKey: crypto$KeyObject): boolean;
+ toJSON(): string;
+ toLegacyObject(): unknown;
+ toString(): string;
+ verify(publicKey: crypto$KeyObject): boolean;
+}
+
+declare class crypto$Certificate {
+ static exportChallenge(
+ spkac: string | Buffer | $TypedArray | DataView,
+ ): Buffer;
+ static exportPublicKey(
+ spkac: string | Buffer | $TypedArray | DataView,
+ ): Buffer;
+ static verifySpkac(spkac: Buffer | $TypedArray | DataView): boolean;
+}
+
declare module 'crypto' {
declare var DEFAULT_ENCODING: string;
@@ -808,12 +1152,85 @@ declare module 'crypto' {
callback: (err: ?Error, buffer: Buffer) => void,
): void;
declare function randomUUID(
- options?: $ReadOnly<{|disableEntropyCache?: boolean|}>,
+ options?: Readonly<{disableEntropyCache?: boolean}>,
): string;
declare function timingSafeEqual(
a: Buffer | $TypedArray | DataView,
b: Buffer | $TypedArray | DataView,
): boolean;
+ declare function hash(
+ algorithm: string,
+ data: string | Buffer | $TypedArray | DataView,
+ ): Buffer;
+ declare function hash(
+ algorithm: string,
+ data: string | Buffer | $TypedArray | DataView,
+ outputEncoding: buffer$Encoding,
+ ): string;
+ declare function createSecretKey(
+ key: Buffer | $TypedArray | DataView,
+ ): crypto$KeyObject;
+ declare function createSecretKey(
+ key: string,
+ encoding: buffer$Encoding,
+ ): crypto$KeyObject;
+ declare function createPublicKey(
+ key: string | Buffer | crypto$KeyObject | unknown,
+ ): crypto$KeyObject;
+ declare function createPrivateKey(
+ key: string | Buffer | unknown,
+ ): crypto$KeyObject;
+ declare function generateKeyPair(
+ type:
+ | 'rsa'
+ | 'rsa-pss'
+ | 'dsa'
+ | 'ec'
+ | 'ed25519'
+ | 'ed448'
+ | 'x25519'
+ | 'x448',
+ options: unknown,
+ callback: (
+ err: ?Error,
+ publicKey: crypto$KeyObject,
+ privateKey: crypto$KeyObject,
+ ) => void,
+ ): void;
+ declare function generateKeyPairSync(
+ type:
+ | 'rsa'
+ | 'rsa-pss'
+ | 'dsa'
+ | 'ec'
+ | 'ed25519'
+ | 'ed448'
+ | 'x25519'
+ | 'x448',
+ options: unknown,
+ ): {publicKey: crypto$KeyObject, privateKey: crypto$KeyObject, ...};
+ declare function generateKey(
+ type: 'hmac' | 'aes',
+ options: Readonly<{length: number}>,
+ callback: (err: ?Error, key: crypto$KeyObject) => void,
+ ): void;
+ declare function generateKeySync(
+ type: 'hmac' | 'aes',
+ options: Readonly<{length: number}>,
+ ): crypto$KeyObject;
+ declare function checkPrime(
+ candidate: Buffer | $TypedArray | DataView | bigint,
+ options?: Readonly<{checks?: number}>,
+ callback: (err: ?Error, result: boolean) => void,
+ ): void;
+ declare function checkPrimeSync(
+ candidate: Buffer | $TypedArray | DataView | bigint,
+ options?: Readonly<{checks?: number}>,
+ ): boolean;
+ declare class Certificate extends crypto$Certificate {}
+ declare class X509Certificate extends crypto$X509Certificate {}
+ declare class KeyObject extends crypto$KeyObject {}
+ declare var webcrypto: unknown;
}
type net$Socket$address = {
@@ -841,7 +1258,7 @@ declare class dgram$Socket extends events$EventEmitter {
msg: Buffer,
port: number,
address: string,
- callback?: (err: ?Error, bytes: any) => mixed,
+ callback?: (err: ?Error, bytes: any) => unknown,
): void;
send(
msg: Buffer,
@@ -849,7 +1266,7 @@ declare class dgram$Socket extends events$EventEmitter {
length: number,
port: number,
address: string,
- callback?: (err: ?Error, bytes: any) => mixed,
+ callback?: (err: ?Error, bytes: any) => unknown,
): void;
setBroadcast(flag: boolean): void;
setMulticastLoopback(flag: boolean): void;
@@ -1044,6 +1461,8 @@ declare module 'fs' {
declare class FSWatcher extends events$EventEmitter {
close(): void;
+ ref(): this;
+ unref(): this;
}
declare class ReadStream extends stream$Readable {
@@ -1057,6 +1476,7 @@ declare module 'fs' {
declare class Dirent {
name: string | Buffer;
+ parentPath: string;
isBlockDevice(): boolean;
isCharacterDevice(): boolean;
@@ -1290,12 +1710,24 @@ declare module 'fs' {
declare function mkdtempSync(prefix: string): string;
declare function readdir(
path: string,
- options: string | {encoding?: string, withFileTypes?: false, ...},
+ options:
+ | string
+ | Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes?: false,
+ ...
+ }>,
callback: (err: ?ErrnoError, files: Array) => void,
): void;
declare function readdir(
path: string,
- options: {encoding?: string, withFileTypes: true, ...},
+ options: Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes: true,
+ ...
+ }>,
callback: (err: ?ErrnoError, files: Array) => void,
): void;
declare function readdir(
@@ -1304,11 +1736,23 @@ declare module 'fs' {
): void;
declare function readdirSync(
path: string,
- options?: string | {encoding?: string, withFileTypes?: false, ...},
+ options?:
+ | string
+ | Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes?: false,
+ }>,
): Array;
declare function readdirSync(
path: string,
- options?: string | {encoding?: string, withFileTypes: true, ...},
+ options?:
+ | string
+ | Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes: true,
+ }>,
): Array;
declare function close(
fd: number,
@@ -1326,6 +1770,29 @@ declare module 'fs' {
flags: string | number,
callback: (err: ?ErrnoError, fd: number) => void,
): void;
+ declare function openAsBlob(
+ path: string | Buffer | URL,
+ options?: Readonly<{
+ type?: string, // Optional MIME type hint
+ }>,
+ ): Promise;
+ declare function opendir(
+ path: string,
+ options?: Readonly<{
+ encoding?: string,
+ bufferSize?: number,
+ recursive?: boolean,
+ }>,
+ callback: (err: ?ErrnoError, dir: Dir) => void,
+ ): void;
+ declare function opendirSync(
+ path: string,
+ options?: Readonly<{
+ encoding?: string,
+ bufferSize?: number,
+ recursive?: boolean,
+ }>,
+ ): Dir;
declare function openSync(
path: string | Buffer,
flags: string | number,
@@ -1544,7 +2011,15 @@ declare module 'fs' {
): void;
declare function watchFile(
filename: string,
- options?: Object,
+ listener?: (curr: Stats, prev: Stats) => void,
+ ): void;
+ declare function watchFile(
+ filename: string,
+ options?: Readonly<{
+ bigint?: boolean,
+ persistent?: boolean,
+ interval?: number,
+ }>,
listener?: (curr: Stats, prev: Stats) => void,
): void;
declare function unwatchFile(
@@ -1553,7 +2028,16 @@ declare module 'fs' {
): void;
declare function watch(
filename: string,
- options?: Object,
+ listener?: (event: string, filename: string) => void,
+ ): FSWatcher;
+ declare function watch(
+ filename: string,
+ options?: Readonly<{
+ persistent?: boolean,
+ recursive?: boolean,
+ encoding?: string,
+ signal?: AbortSignal,
+ }>,
listener?: (event: string, filename: string) => void,
): FSWatcher;
declare function exists(
@@ -1593,6 +2077,105 @@ declare module 'fs' {
dest: string,
flags?: number,
): void;
+ declare function cp(
+ src: string | URL,
+ dest: string | URL,
+ options: Readonly<{
+ dereference?: boolean,
+ errorOnExist?: boolean,
+ filter?: (src: string, dest: string) => boolean | Promise,
+ force?: boolean,
+ mode?: number,
+ preserveTimestamps?: boolean,
+ recursive?: boolean,
+ verbatimSymlinks?: boolean,
+ }>,
+ callback: (err: ?Error) => void,
+ ): void;
+ declare function cp(
+ src: string | URL,
+ dest: string | URL,
+ callback: (err: ?Error) => void,
+ ): void;
+ declare function cpSync(
+ src: string | URL,
+ dest: string | URL,
+ options?: Readonly<{
+ dereference?: boolean,
+ errorOnExist?: boolean,
+ filter?: (src: string, dest: string) => boolean,
+ force?: boolean,
+ mode?: number,
+ preserveTimestamps?: boolean,
+ recursive?: boolean,
+ verbatimSymlinks?: boolean,
+ }>,
+ ): void;
+
+ declare type GlobOptions = Readonly<{
+ /**
+ * Current working directory.
+ * @default process.cwd()
+ */
+ cwd?: string | void,
+ /**
+ * `true` if the glob should return paths as `Dirent`s, `false` otherwise.
+ * @default false
+ * @since v22.2.0
+ */
+ withFileTypes?: WithFileTypes,
+ /**
+ * Function to filter out files/directories or a
+ * list of glob patterns to be excluded. If a function is provided, return
+ * `true` to exclude the item, `false` to include it.
+ * @default undefined
+ */
+ exclude?:
+ | ((fileName: Node$Conditional) => boolean)
+ | ReadonlyArray,
+ ...
+ }>;
+
+ /**
+ * Retrieves the files matching the specified pattern.
+ *
+ * ```js
+ * import { glob } from 'node:fs';
+ *
+ * glob('*.js', (err, matches) => {
+ * if (err) throw err;
+ * console.log(matches);
+ * });
+ * ```
+ * @since v22.0.0
+ */
+ declare function glob(
+ pattern: string | ReadonlyArray,
+ callback: (err: ?ErrnoError, matches: Array) => void,
+ ): void;
+
+ declare function glob(
+ pattern: string | ReadonlyArray,
+ options: GlobOptions,
+ callback: (
+ err: ?ErrnoError,
+ matches: Node$Conditional, Array>,
+ ) => void,
+ ): void;
+
+ /**
+ * ```js
+ * import { globSync } from 'node:fs';
+ *
+ * console.log(globSync('*.js'));
+ * ```
+ * @since v22.0.0
+ * @returns paths of files that match the pattern.
+ */
+ declare function globSync(
+ pattern: string | ReadonlyArray,
+ options?: GlobOptions,
+ ): Node$Conditional, Array>;
declare var F_OK: number;
declare var R_OK: number;
@@ -1658,14 +2241,52 @@ declare module 'fs' {
retryDelay?: number,
...
};
+ declare class Dir {
+ +path: string;
+ close(): Promise;
+ closeSync(): void;
+ read(): Promise;
+ read(cb: (err?: Error, dirent: ?Dirent) => void): void;
+ readSync(): ?Dirent;
+ @@asyncIterator(): AsyncIterator;
+ }
+ type AppendOrWriteToFileHandle = (
+ data:
+ | string
+ | Buffer
+ | Uint8Array
+ | DataView
+ | AsyncIterable
+ | Iterable
+ | stream$Readable,
+ options: WriteOptions | string,
+ ) => Promise;
declare class FileHandle {
- appendFile(
- data: string | Buffer,
- options: WriteOptions | string,
- ): Promise;
+ appendFile: AppendOrWriteToFileHandle;
chmod(mode: number): Promise;
chown(uid: number, guid: number): Promise;
close(): Promise;
+ createReadStream(
+ options?: Readonly<{
+ encoding?: string,
+ autoClose?: boolean,
+ emitClose?: boolean,
+ start?: number,
+ end?: number,
+ highWaterMark?: number,
+ signal?: AbortSignal,
+ }>,
+ ): ReadStream;
+ createWriteStream(
+ options?: Readonly<{
+ encoding?: string,
+ autoClose?: boolean,
+ emitClose?: boolean,
+ start?: number,
+ highWaterMark?: number,
+ flush?: boolean,
+ }>,
+ ): WriteStream;
datasync(): Promise;
fd: number;
read(
@@ -1678,8 +2299,25 @@ declare module 'fs' {
buffer: T,
...
}>;
+ readableWebStream(
+ options?: Readonly<{autoClose?: boolean}>,
+ ): ReadableStream;
readFile(options: EncodingFlag): Promise;
readFile(options: string): Promise;
+ readLines(
+ options?: Readonly<{
+ encoding?: string,
+ autoClose?: boolean,
+ emitClose?: boolean,
+ start?: number,
+ end?: number,
+ highWaterMark?: number,
+ }>,
+ ): readline$Interface;
+ readv | Array | Array>(
+ buffers: T,
+ position?: number | null,
+ ): Promise<{buffers: T, bytesRead: number}>;
stat(): Promise;
sync(): Promise;
truncate(len?: number): Promise;
@@ -1688,15 +2326,24 @@ declare module 'fs' {
mtime: number | string | Date,
): Promise;
write(
- buffer: Buffer | Uint8Array,
+ buffer: Buffer | Uint8Array | DataView,
offset: number,
length: number,
position: number,
): Promise;
- writeFile(
- data: string | Buffer | Uint8Array,
- options: WriteOptions | string,
+ write(
+ buffer: Buffer | Uint8Array | DataView,
+ options?: Readonly<{
+ offset?: number,
+ length?: number,
+ position?: number,
+ }>,
): Promise;
+ writeFile: AppendOrWriteToFileHandle;
+ writev | Array | Array>(
+ buffers: T,
+ position?: number | null,
+ ): Promise<{buffers: T, bytesWritten: number}>;
}
declare type FSPromisePath = string | Buffer | URL;
@@ -1714,6 +2361,20 @@ declare module 'fs' {
dest: FSPromisePath,
flags?: number,
): Promise,
+ cp(
+ src: string | URL,
+ dest: string | URL,
+ options?: Readonly<{
+ dereference?: boolean,
+ errorOnExist?: boolean,
+ filter?: (src: string, dest: string) => boolean | Promise,
+ force?: boolean,
+ mode?: number,
+ preserveTimestamps?: boolean,
+ recursive?: boolean,
+ verbatimSymlinks?: boolean,
+ }>,
+ ): Promise,
fchmod(filehandle: FileHandle, mode: number): Promise,
fchown(filehandle: FileHandle, uid: number, guid: number): Promise,
fdatasync(filehandle: FileHandle): Promise,
@@ -1725,6 +2386,14 @@ declare module 'fs' {
atime: number | string | Date,
mtime: number | string | Date,
): Promise,
+ glob(
+ pattern: string | ReadonlyArray,
+ options?: GlobOptions,
+ ): Node$Conditional<
+ WithFileTypes,
+ AsyncIterator,
+ AsyncIterator,
+ >,
lchmod(path: FSPromisePath, mode: number): Promise,
lchown(path: FSPromisePath, uid: number, guid: number): Promise,
link(existingPath: FSPromisePath, newPath: FSPromisePath): Promise,
@@ -1745,6 +2414,14 @@ declare module 'fs' {
flags?: string | number,
mode?: number,
): Promise,
+ opendir(
+ path: string,
+ options?: Readonly<{
+ encoding?: string,
+ bufferSize?: number,
+ recursive?: boolean,
+ }>,
+ ): Promise,
read(
filehandle: FileHandle,
buffer: T,
@@ -1758,11 +2435,21 @@ declare module 'fs' {
}>,
readdir: ((
path: FSPromisePath,
- options: string | {encoding?: string, withFileTypes?: false, ...},
+ options:
+ | string
+ | Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes?: false,
+ }>,
) => Promise>) &
((
path: FSPromisePath,
- options: {encoding?: string, withFileTypes: true, ...},
+ options: Readonly<{
+ encoding?: string,
+ recursive?: boolean,
+ withFileTypes: true,
+ }>,
) => Promise>) &
((path: FSPromisePath) => Promise>),
readFile: ((
@@ -1805,6 +2492,17 @@ declare module 'fs' {
atime: number | string | Date,
mtime: number | string | Date,
): Promise,
+ watch(
+ filename: FSPromisePath,
+ options?: Readonly<{
+ persistent?: boolean,
+ recursive?: boolean,
+ encoding?: string,
+ signal?: AbortSignal,
+ maxQueue?: number,
+ overflow?: 'ignore' | 'throw',
+ }>,
+ ): AsyncIterator<{eventType: string, filename: ?string}>,
write(
filehandle: FileHandle,
buffer: T,
@@ -1827,6 +2525,10 @@ declare module 'fs' {
declare var promises: FSPromise;
}
+declare module 'fs/promises' {
+ declare module.exports: $Exports<'fs'>['promises'];
+}
+
type http$agentOptions = {
keepAlive?: boolean,
keepAliveMsecs?: number,
@@ -1838,7 +2540,8 @@ type http$agentOptions = {
declare class http$Agent<+SocketT = net$Socket> {
constructor(options: http$agentOptions): void;
destroy(): void;
- freeSockets: {[name: string]: $ReadOnlyArray, ...};
+ // $FlowFixMe[incompatible-variance]
+ freeSockets: {[name: string]: ReadonlyArray, ...};
getName(options: {
host: string,
port: number,
@@ -1847,8 +2550,10 @@ declare class http$Agent<+SocketT = net$Socket> {
}): string;
maxFreeSockets: number;
maxSockets: number;
- requests: {[name: string]: $ReadOnlyArray>, ...};
- sockets: {[name: string]: $ReadOnlyArray, ...};
+ // $FlowFixMe[incompatible-variance]
+ requests: {[name: string]: ReadonlyArray>, ...};
+ // $FlowFixMe[incompatible-variance]
+ sockets: {[name: string]: ReadonlyArray, ...};
}
declare class http$IncomingMessage
@@ -1939,7 +2644,7 @@ declare class http$Server extends net$Server {
callback?: Function,
): this;
listening: boolean;
- close(callback?: (error: ?Error) => mixed): this;
+ close(callback?: (error: ?Error) => unknown): this;
closeAllConnections(): void;
closeIdleConnections(): void;
maxHeadersCount: number;
@@ -1975,7 +2680,7 @@ declare class https$Server extends tls$Server {
},
callback?: Function,
): this;
- close(callback?: (error: ?Error) => mixed): this;
+ close(callback?: (error: ?Error) => unknown): this;
closeAllConnections(): void;
closeIdleConnections(): void;
keepAliveTimeout: number;
@@ -1988,7 +2693,7 @@ type requestOptions = {|
auth?: string,
defaultPort?: number,
family?: number,
- headers?: {[key: string]: mixed, ...},
+ headers?: {[key: string]: unknown, ...},
host?: string,
hostname?: string,
localAddress?: string,
@@ -2126,14 +2831,14 @@ declare class net$Socket extends stream$Duplex {
bufferSize: number;
bytesRead: number;
bytesWritten: number;
- connect(path: string, connectListener?: () => mixed): net$Socket;
+ connect(path: string, connectListener?: () => unknown): net$Socket;
connect(
port: number,
host?: string,
- connectListener?: () => mixed,
+ connectListener?: () => unknown,
): net$Socket;
- connect(port: number, connectListener?: () => mixed): net$Socket;
- connect(options: Object, connectListener?: () => mixed): net$Socket;
+ connect(port: number, connectListener?: () => unknown): net$Socket;
+ connect(options: Object, connectListener?: () => unknown): net$Socket;
destroyed: boolean;
end(
chunkOrEncodingOrCallback?:
@@ -2193,7 +2898,7 @@ type net$connectOptions = {
domain: string,
options?: ?number | ?Object,
callback?: (err: ?Error, address: string, family: number) => void,
- ) => mixed,
+ ) => unknown,
path?: string,
...
};
@@ -2241,9 +2946,7 @@ type os$CPU = {
nice: number,
sys: number,
user: number,
- ...
},
- ...
};
type os$NetIFAddr = {
@@ -2252,7 +2955,8 @@ type os$NetIFAddr = {
internal: boolean,
mac: string,
netmask: string,
- ...
+ scopeid?: number,
+ cidr: ?string,
};
type os$UserInfo$buffer = {
@@ -2261,7 +2965,6 @@ type os$UserInfo$buffer = {
username: Buffer,
homedir: Buffer,
shell: ?Buffer,
- ...
};
type os$UserInfo$string = {
@@ -2270,43 +2973,117 @@ type os$UserInfo$string = {
username: string,
homedir: string,
shell: ?string,
- ...
};
declare module 'os' {
- declare function arch(): 'x64' | 'arm' | 'ia32';
+ declare function arch():
+ | 'arm'
+ | 'arm64'
+ | 'ia32'
+ | 'loong64'
+ | 'mips'
+ | 'mipsel'
+ | 'ppc64'
+ | 'riscv64'
+ | 's390x'
+ | 'x64';
declare function availableParallelism(): number;
declare function cpus(): Array;
declare function endianness(): 'BE' | 'LE';
declare function freemem(): number;
+ declare function getPriority(pid?: number): number;
declare function homedir(): string;
declare function hostname(): string;
declare function loadavg(): [number, number, number];
+ declare function machine(): string;
declare function networkInterfaces(): {
[ifName: string]: Array,
- ...
};
- declare function platform(): string;
+ declare function platform():
+ | 'aix'
+ | 'android'
+ | 'darwin'
+ | 'freebsd'
+ | 'haiku'
+ | 'linux'
+ | 'openbsd'
+ | 'sunos'
+ | 'win32'
+ | 'cygwin';
declare function release(): string;
+ declare function setPriority(priority: number): void;
+ declare function setPriority(pid: number, priority: number): void;
declare function tmpdir(): string;
declare function totalmem(): number;
declare function type(): string;
declare function uptime(): number;
- declare function userInfo(options: {
- encoding: 'buffer',
- ...
- }): os$UserInfo$buffer;
- declare function userInfo(options?: {
- encoding: 'utf8',
- ...
- }): os$UserInfo$string;
+ declare function userInfo(
+ options: Readonly<{
+ encoding: 'buffer',
+ }>,
+ ): os$UserInfo$buffer;
+ declare function userInfo(
+ options?: Readonly<{
+ encoding: 'utf8',
+ }>,
+ ): os$UserInfo$string;
+ declare function version(): string;
declare var EOL: string;
+ declare var devNull: string;
+ declare var constants: Readonly<{
+ signals: {[key: string]: number, ...},
+ errno: {[key: string]: number, ...},
+ priority: Readonly<{
+ PRIORITY_LOW: number,
+ PRIORITY_BELOW_NORMAL: number,
+ PRIORITY_NORMAL: number,
+ PRIORITY_ABOVE_NORMAL: number,
+ PRIORITY_HIGH: number,
+ PRIORITY_HIGHEST: number,
+ }>,
+ dlopen: {[key: string]: number, ...},
+ }>;
}
+type path$PlatformPath = {
+ normalize(path: string): string,
+ join(...parts: Array): string,
+ resolve(...parts: Array): string,
+ matchesGlob(path: string, pattern: string): boolean,
+ isAbsolute(path: string): boolean,
+ relative(from: string, to: string): string,
+ dirname(path: string): string,
+ basename(path: string, ext?: string): string,
+ extname(path: string): string,
+ sep: string,
+ delimiter: string,
+ parse(pathString: string): Readonly<{
+ root: string,
+ dir: string,
+ base: string,
+ ext: string,
+ name: string,
+ }>,
+ format(
+ pathObject: Readonly<{
+ root?: string,
+ dir?: string,
+ base?: string,
+ ext?: string,
+ name?: string,
+ }>,
+ ): string,
+ toNamespacedPath(path: string): string,
+ posix: path$PlatformPath,
+ win32: path$PlatformPath,
+ ...
+};
+
declare module 'path' {
declare function normalize(path: string): string;
declare function join(...parts: Array): string;
declare function resolve(...parts: Array): string;
+ declare function matchesGlob(path: string, pattern: string): boolean;
declare function isAbsolute(path: string): boolean;
declare function relative(from: string, to: string): string;
declare function dirname(path: string): string;
@@ -2320,18 +3097,221 @@ declare module 'path' {
base: string,
ext: string,
name: string,
- ...
};
- declare function format(pathObject: {
- root?: string,
- dir?: string,
- base?: string,
- ext?: string,
- name?: string,
- ...
- }): string;
- declare var posix: any;
- declare var win32: any;
+ declare function format(
+ pathObject: Readonly<{
+ root?: string,
+ dir?: string,
+ base?: string,
+ ext?: string,
+ name?: string,
+ }>,
+ ): string;
+ declare function toNamespacedPath(path: string): string;
+ declare var posix: path$PlatformPath;
+ declare var win32: path$PlatformPath;
+}
+
+declare module 'perf_hooks' {
+ declare export type EntryType =
+ | 'function'
+ | 'gc'
+ | 'http'
+ | 'http2'
+ | 'mark'
+ | 'measure'
+ | 'navigation'
+ | 'node'
+ | 'resource';
+
+ declare export interface Histogram {
+ +count: number;
+ +countBigInt: bigint;
+ +exceeds: number;
+ +exceedsBigInt: bigint;
+ +max: number;
+ +maxBigInt: bigint;
+ +mean: number;
+ +min: number;
+ +minBigInt: bigint;
+ +stddev: number;
+ +percentiles: Map;
+ +percentilesBigInt: Map;
+ percentile(percentile: number): number;
+ percentileBigInt(percentile: number): bigint;
+ reset(): void;
+ }
+
+ declare export interface IntervalHistogram extends Histogram {
+ enable(): boolean;
+ disable(): boolean;
+ }
+
+ declare export interface RecordableHistogram extends Histogram {
+ record(val: number | bigint): void;
+ recordDelta(): void;
+ }
+
+ declare export class PerformanceEntry {
+ +duration: number;
+ +entryType: EntryType;
+ +name: string;
+ +startTime: number;
+ +detail?: unknown;
+ toJSON(): unknown;
+ }
+
+ declare export class PerformanceMark extends PerformanceEntry {
+ +entryType: 'mark';
+ +duration: 0;
+ +detail?: T;
+ }
+
+ declare export class PerformanceMeasure
+ extends PerformanceEntry
+ {
+ +entryType: 'measure';
+ +detail?: T;
+ }
+
+ declare export class PerformanceNodeEntry extends PerformanceEntry {
+ +entryType: 'node';
+ }
+
+ declare export class PerformanceNodeTiming extends PerformanceEntry {
+ +entryType: 'node';
+ +bootstrapComplete: number;
+ +environment: number;
+ +idleTime: number;
+ +loopExit: number;
+ +loopStart: number;
+ +nodeStart: number;
+ +v8Start: number;
+ }
+
+ declare export class PerformanceResourceTiming extends PerformanceEntry {
+ +entryType: 'resource';
+ +connectEnd: number;
+ +connectStart: number;
+ +decodedBodySize: number;
+ +domainLookupEnd: number;
+ +domainLookupStart: number;
+ +encodedBodySize: number;
+ +fetchStart: number;
+ +redirectEnd: number;
+ +redirectStart: number;
+ +requestStart: number;
+ +responseEnd: number;
+ +secureConnectionStart: number;
+ +transferSize: number;
+ +workerStart: number;
+ }
+
+ declare export class PerformanceObserverEntryList {
+ getEntries(): Array;
+ getEntriesByName(name: string, type?: EntryType): Array;
+ getEntriesByType(type: EntryType): Array;
+ }
+
+ declare export type PerformanceObserverCallback = (
+ list: PerformanceObserverEntryList,
+ observer: PerformanceObserver,
+ ) => void;
+
+ declare export class PerformanceObserver {
+ static supportedEntryTypes: ReadonlyArray;
+ constructor(callback: PerformanceObserverCallback): this;
+ observe(
+ options: Readonly<{
+ entryTypes?: ReadonlyArray,
+ type?: EntryType,
+ buffered?: boolean,
+ }>,
+ ): void;
+ disconnect(): void;
+ takeRecords(): Array;
+ }
+
+ declare export type EventLoopUtilization = {
+ +utilization: number,
+ +idle: number,
+ +active: number,
+ };
+
+ declare export type PerformanceMarkOptions = Readonly<{
+ detail?: T,
+ startTime?: number,
+ }>;
+
+ declare export type PerformanceMeasureOptions = Readonly<{
+ detail?: T,
+ duration?: number,
+ end?: number | string,
+ start?: number | string,
+ }>;
+
+ declare class Performance {
+ clearMarks(name?: string): void;
+ clearMeasures(name?: string): void;
+ clearResourceTimings(name?: string): void;
+ eventLoopUtilization(
+ elu1?: EventLoopUtilization,
+ elu2?: EventLoopUtilization,
+ ): EventLoopUtilization;
+ getEntries(): Array;
+ getEntriesByName(name: string, type?: EntryType): Array;
+ getEntriesByType(type: EntryType): Array;
+ mark(
+ name: string,
+ options?: PerformanceMarkOptions,
+ ): PerformanceMark;
+ measure(
+ name: string,
+ startMarkOrOptions?: string | PerformanceMeasureOptions,
+ endMark?: string,
+ ): PerformanceMeasure;
+ +nodeTiming: PerformanceNodeTiming;
+ now(): number;
+ setResourceTimingBufferSize(maxSize: number): void;
+ +timeOrigin: number;
+ timerify, TReturn>(
+ fn: (...TArgs) => TReturn,
+ options?: Readonly<{histogram?: RecordableHistogram}>,
+ ): (...TArgs) => TReturn;
+ toJSON(): unknown;
+ }
+
+ declare export var performance: Performance;
+
+ declare export var constants: Readonly<{
+ NODE_PERFORMANCE_GC_MAJOR: number,
+ NODE_PERFORMANCE_GC_MINOR: number,
+ NODE_PERFORMANCE_GC_INCREMENTAL: number,
+ NODE_PERFORMANCE_GC_WEAKCB: number,
+ NODE_PERFORMANCE_GC_FLAGS_NO: number,
+ NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number,
+ NODE_PERFORMANCE_GC_FLAGS_FORCED: number,
+ NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number,
+ NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number,
+ NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number,
+ NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number,
+ }>;
+
+ declare export function monitorEventLoopDelay(
+ options?: Readonly<{resolution?: number}>,
+ ): IntervalHistogram;
+
+ declare export function createHistogram(
+ options?: Readonly<{
+ lowest?: number | bigint,
+ highest?: number | bigint,
+ figures?: number,
+ }>,
+ ): RecordableHistogram;
+}
+
+declare module 'process' {
+ declare module.exports: Process;
}
declare module 'punycode' {
@@ -2457,7 +3437,14 @@ declare class stream$Readable extends stream$Stream {
static from(
iterable: Iterable | AsyncIterable,
options?: readableStreamOptions,
- ): stream$Readable;
+ ): this;
+
+ static fromWeb(
+ readableStream: ReadableStream,
+ options?: readableStreamOptions,
+ ): this;
+
+ static toWeb(streamReadable: stream$Readable): ReadableStream;
constructor(options?: readableStreamOptions): void;
destroy(error?: Error): this;
@@ -2504,6 +3491,13 @@ type writableStreamOptions = {
...
};
declare class stream$Writable extends stream$Stream {
+ static fromWeb(
+ writableStream: WritableStream,
+ options?: writableStreamOptions,
+ ): this;
+
+ static toWeb(streamWritable: stream$Writable): WritableStream;
+
constructor(options?: writableStreamOptions): void;
cork(): void;
destroy(error?: Error): this;
@@ -2545,10 +3539,6 @@ declare class stream$Writable extends stream$Stream {
_final(callback: (error?: Error) => void): void;
}
-//According to the NodeJS docs:
-//"Since JavaScript doesn't have multiple prototypal inheritance, this class
-//prototypally inherits from Readable, and then parasitically from Writable."
-//Source: ,
+ options?: duplexStreamOptions,
+ ): this;
+
+ // $FlowFixMe[incompatible-type] See above
+ static toWeb(streamDuplex: stream$Duplex): {
+ readable: ReadableStream,
+ writable: WritableStream,
+ ...
+ };
+
constructor(options?: duplexStreamOptions): void;
}
type transformStreamOptions = duplexStreamOptions & {
@@ -2704,7 +3716,7 @@ declare module 'stream' {
options?: StreamPipelineOptions,
): Promise,
pipeline(
- streams: $ReadOnlyArray,
+ streams: ReadonlyArray,
options?: StreamPipelineOptions,
): Promise,
...
@@ -2811,7 +3823,7 @@ type tls$connectOptions = {
domain: string,
options?: ?number | ?Object,
callback?: (err: ?Error, address: string, family: number) => void,
- ) => mixed,
+ ) => unknown,
requestOCSP?: boolean,
...
};
@@ -2945,6 +3957,75 @@ type url$urlObject = {
...
};
+declare module 'timers' {
+ declare export class Timeout {
+ close(): this;
+ hasRef(): boolean;
+ ref(): this;
+ refresh(): this;
+ unref(): this;
+ [key: $SymbolToPrimitive]: () => number;
+ // [key: $SymbolDispose]: () => void;
+ }
+
+ declare export class Immediate {
+ hasRef(): boolean;
+ ref(): this;
+ unref(): this;
+ // [key: $SymbolDispose]: () => void;
+ }
+
+ declare export function setTimeout>(
+ callback: (...args: TArgs) => unknown,
+ delay?: number,
+ ...args: TArgs
+ ): Timeout;
+
+ declare export function setInterval>(
+ callback: (...args: TArgs) => unknown,
+ delay?: number,
+ ...args: TArgs
+ ): Timeout;
+
+ declare export function setImmediate>(
+ callback: (...args: TArgs) => unknown,
+ ...args: TArgs
+ ): Immediate;
+
+ declare export function clearTimeout(timeout?: Timeout | number): void;
+ declare export function clearInterval(timeout?: Timeout | number): void;
+ declare export function clearImmediate(immediate?: Immediate | number): void;
+}
+
+declare module 'timers/promises' {
+ declare export type TimerOptions = Readonly<{
+ ref?: boolean,
+ signal?: AbortSignal,
+ }>;
+
+ declare export function setTimeout(
+ delay?: number,
+ value?: T,
+ options?: TimerOptions,
+ ): Promise;
+
+ declare export function setImmediate(
+ value?: T,
+ options?: TimerOptions,
+ ): Promise;
+
+ declare export function setInterval(
+ delay?: number,
+ value?: T,
+ options?: TimerOptions,
+ ): AsyncIterator;
+
+ declare export var scheduler: Readonly<{
+ wait(delay: number, options?: TimerOptions): Promise,
+ yield(): Promise,
+ }>;
+}
+
declare module 'url' {
declare type Url = {|
protocol: string | null,
@@ -2990,8 +4071,16 @@ declare module 'url' {
declare function resolve(from: string, to: string): string;
declare function domainToASCII(domain: string): string;
declare function domainToUnicode(domain: string): string;
- declare function pathToFileURL(path: string): url$urlObject;
- declare function fileURLToPath(path: url$urlObject | string): string;
+
+ declare function pathToFileURL(
+ path: string,
+ options?: Readonly<{windows?: boolean}>,
+ ): url$urlObject;
+
+ declare function fileURLToPath(
+ path: url$urlObject | string,
+ options?: Readonly<{windows?: boolean}>,
+ ): string;
declare class URLSearchParams {
@@iterator(): Iterator<[string, string]>;
@@ -3013,7 +4102,7 @@ declare module 'url' {
value: string,
name: string,
searchParams: URLSearchParams,
- ) => mixed,
+ ) => unknown,
thisArg?: This,
): void;
get(name: string): string | null;
@@ -3027,6 +4116,7 @@ declare module 'url' {
}
declare class URL {
static canParse(url: string, base?: string): boolean;
+ static parse(input: string, base?: string): URL | null;
static createObjectURL(blob: Blob): string;
static createObjectURL(mediaSource: MediaSource): string;
static revokeObjectURL(url: string): void;
@@ -3046,6 +4136,63 @@ declare module 'url' {
toString(): string;
toJSON(): string;
}
+
+ declare type url$URLPatternInit = {
+ protocol?: string,
+ username?: string,
+ password?: string,
+ hostname?: string,
+ port?: string,
+ pathname?: string,
+ search?: string,
+ hash?: string,
+ baseURL?: string,
+ };
+
+ declare type url$URLPatternComponentResult = {
+ input: string,
+ groups: {[key: string]: string | void},
+ };
+
+ declare type url$URLPatternResult = {
+ inputs: ReadonlyArray,
+ protocol: url$URLPatternComponentResult,
+ username: url$URLPatternComponentResult,
+ password: url$URLPatternComponentResult,
+ hostname: url$URLPatternComponentResult,
+ port: url$URLPatternComponentResult,
+ pathname: url$URLPatternComponentResult,
+ search: url$URLPatternComponentResult,
+ hash: url$URLPatternComponentResult,
+ };
+
+ declare class URLPattern {
+ constructor(
+ input?: string | url$URLPatternInit,
+ options?: Readonly<{ignoreCase?: boolean}>,
+ ): void;
+ constructor(
+ input: string | url$URLPatternInit,
+ baseURL: string,
+ options?: Readonly<{ignoreCase?: boolean}>,
+ ): void;
+
+ +hasRegExpGroups: boolean;
+ +hash: string;
+ +hostname: string;
+ +password: string;
+ +pathname: string;
+ +port: string;
+ +protocol: string;
+ +search: string;
+ +username: string;
+
+ exec(
+ input?: string | url$URLPatternInit,
+ baseURL?: string,
+ ): url$URLPatternResult | null;
+ test(input?: string | url$URLPatternInit, baseURL?: string): boolean;
+ }
}
type util$InspectOptions = {
@@ -3057,30 +4204,30 @@ type util$InspectOptions = {
};
declare type util$ParseArgsOption =
- | {|
+ | Readonly<{
type: 'boolean',
multiple?: false,
short?: string,
default?: boolean,
- |}
- | {|
+ }>
+ | Readonly<{
type: 'boolean',
multiple: true,
short?: string,
default?: Array,
- |}
- | {|
+ }>
+ | Readonly<{
type: 'string',
multiple?: false,
short?: string,
default?: string,
- |}
- | {|
+ }>
+ | Readonly<{
type: 'string',
multiple: true,
short?: string,
default?: Array,
- |};
+ }>;
type util$ParseArgsOptionToValue = TOption['type'] extends 'boolean'
? TOption['multiple'] extends true
@@ -3137,31 +4284,33 @@ declare module 'util' {
declare function stripVTControlCharacters(str: string): string;
declare function parseArgs<
- TOptions: {[string]: util$ParseArgsOption} = {||},
- >(config: {|
+ TOptions: {+[string]: util$ParseArgsOption} = {},
+ >(config: {
args?: Array,
options?: TOptions,
strict?: boolean,
allowPositionals?: boolean,
+ allowNegative?: boolean,
tokens?: false,
- |}): {|
+ }): {
values: util$ParseArgsOptionsToValues,
positionals: Array,
- |};
+ };
declare function parseArgs<
- TOptions: {[string]: util$ParseArgsOption} = {||},
- >(config: {|
+ TOptions: {[string]: util$ParseArgsOption} = {},
+ >(config: {
args?: Array,
options?: TOptions,
strict?: boolean,
allowPositionals?: boolean,
+ allowNegative?: boolean,
tokens: true,
- |}): {|
+ }): {
values: util$ParseArgsOptionsToValues,
positionals: Array,
tokens: Array,
- |};
+ };
declare class TextDecoder {
constructor(
@@ -3187,46 +4336,87 @@ declare module 'util' {
encoding: string;
}
+ declare class MIMEType {
+ constructor(input: string): void;
+ type: string;
+ subtype: string;
+ +essence: string;
+ +params: MIMEParams;
+ toString(): string;
+ }
+
+ declare class MIMEParams {
+ delete(name: string): void;
+ get(name: string): ?string;
+ has(name: string): boolean;
+ set(name: string, value: string): void;
+ entries(): Iterator<[string, string]>;
+ keys(): Iterator;
+ values(): Iterator;
+ }
+
+ declare function parseEnv(content: string): {[key: string]: string, ...};
+
+ declare type util$DiffEntry = [operation: -1 | 0 | 1, value: string];
+ declare function diff(
+ actual: string | ReadonlyArray,
+ expected: string | ReadonlyArray,
+ ): Array;
+
+ declare function getSystemErrorMessage(err: number): string;
+
+ declare type util$CallSiteObject = {
+ functionName: string,
+ scriptName: string,
+ scriptId: string,
+ lineNumber: number,
+ columnNumber: number,
+ };
+ declare function getCallSites(
+ frameCountOrOptions?: number | Readonly<{frameCount?: number}>,
+ ): Array;
+
declare var types: {
- isAnyArrayBuffer: (value: mixed) => boolean,
- isArgumentsObject: (value: mixed) => boolean,
- isArrayBuffer: (value: mixed) => boolean,
- isAsyncFunction: (value: mixed) => boolean,
- isBigInt64Array: (value: mixed) => boolean,
- isBigUint64Array: (value: mixed) => boolean,
- isBooleanObject: (value: mixed) => boolean,
- isBoxedPrimitive: (value: mixed) => boolean,
- isDataView: (value: mixed) => boolean,
- isDate: (value: mixed) => boolean,
- isExternal: (value: mixed) => boolean,
- isFloat32Array: (value: mixed) => boolean,
- isFloat64Array: (value: mixed) => boolean,
- isGeneratorFunction: (value: mixed) => boolean,
- isGeneratorObject: (value: mixed) => boolean,
- isInt8Array: (value: mixed) => boolean,
- isInt16Array: (value: mixed) => boolean,
- isInt32Array: (value: mixed) => boolean,
- isMap: (value: mixed) => boolean,
- isMapIterator: (value: mixed) => boolean,
- isModuleNamespaceObject: (value: mixed) => boolean,
- isNativeError: (value: mixed) => boolean,
- isNumberObject: (value: mixed) => boolean,
- isPromise: (value: mixed) => boolean,
- isProxy: (value: mixed) => boolean,
- isRegExp: (value: mixed) => boolean,
- isSet: (value: mixed) => boolean,
- isSetIterator: (value: mixed) => boolean,
- isSharedArrayBuffer: (value: mixed) => boolean,
- isStringObject: (value: mixed) => boolean,
- isSymbolObject: (value: mixed) => boolean,
- isTypedArray: (value: mixed) => boolean,
- isUint8Array: (value: mixed) => boolean,
- isUint8ClampedArray: (value: mixed) => boolean,
- isUint16Array: (value: mixed) => boolean,
- isUint32Array: (value: mixed) => boolean,
- isWeakMap: (value: mixed) => boolean,
- isWeakSet: (value: mixed) => boolean,
- isWebAssemblyCompiledModule: (value: mixed) => boolean,
+ isAnyArrayBuffer: (value: unknown) => boolean,
+ isArgumentsObject: (value: unknown) => boolean,
+ isArrayBuffer: (value: unknown) => boolean,
+ isAsyncFunction: (value: unknown) => boolean,
+ isBigInt64Array: (value: unknown) => boolean,
+ isBigUint64Array: (value: unknown) => boolean,
+ isBooleanObject: (value: unknown) => boolean,
+ isBoxedPrimitive: (value: unknown) => boolean,
+ isDataView: (value: unknown) => boolean,
+ isDate: (value: unknown) => boolean,
+ isExternal: (value: unknown) => boolean,
+ isFloat16Array: (value: unknown) => boolean,
+ isFloat32Array: (value: unknown) => boolean,
+ isFloat64Array: (value: unknown) => boolean,
+ isGeneratorFunction: (value: unknown) => boolean,
+ isGeneratorObject: (value: unknown) => boolean,
+ isInt8Array: (value: unknown) => boolean,
+ isInt16Array: (value: unknown) => boolean,
+ isInt32Array: (value: unknown) => boolean,
+ isMap: (value: unknown) => boolean,
+ isMapIterator: (value: unknown) => boolean,
+ isModuleNamespaceObject: (value: unknown) => boolean,
+ isNativeError: (value: unknown) => boolean,
+ isNumberObject: (value: unknown) => boolean,
+ isPromise: (value: unknown) => boolean,
+ isProxy: (value: unknown) => boolean,
+ isRegExp: (value: unknown) => boolean,
+ isSet: (value: unknown) => boolean,
+ isSetIterator: (value: unknown) => boolean,
+ isSharedArrayBuffer: (value: unknown) => boolean,
+ isStringObject: (value: unknown) => boolean,
+ isSymbolObject: (value: unknown) => boolean,
+ isTypedArray: (value: unknown) => boolean,
+ isUint8Array: (value: unknown) => boolean,
+ isUint8ClampedArray: (value: unknown) => boolean,
+ isUint16Array: (value: unknown) => boolean,
+ isUint32Array: (value: unknown) => boolean,
+ isWeakMap: (value: unknown) => boolean,
+ isWeakSet: (value: unknown) => boolean,
+ isWebAssemblyCompiledModule: (value: unknown) => boolean,
...
};
@@ -3289,11 +4479,11 @@ declare module 'util' {
| ForegroundColors
| BackgroundColors
| Modifiers
- | $ReadOnlyArray,
+ | ReadonlyArray,
text: string,
- options?: $ReadOnly<{
+ options?: Readonly<{
stream?: ?stream$Stream,
- validStream?: ?boolean,
+ validateStream?: ?boolean,
}>,
): string;
}
@@ -3402,6 +4592,20 @@ type zlib$brotliOptions = {
...
};
+type zlib$zstdOptions = {
+ flush?: number,
+ finishFlush?: number,
+ chunkSize?: number,
+ params?: {
+ [number]: boolean | number,
+ ...
+ },
+ maxOutputLength?: number,
+ info?: boolean,
+ dictionary?: Buffer,
+ ...
+};
+
type zlib$syncFn = (
buffer: Buffer | $TypedArray | DataView | ArrayBuffer | string,
options?: zlib$options,
@@ -3579,6 +4783,79 @@ declare module 'zlib' {
BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: number,
BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: number,
BROTLI_DECODER_ERROR_UNREACHABL: number,
+
+ ZSTD_COMPRESS: number,
+ ZSTD_DECOMPRESS: number,
+
+ // Default compression level for zstd streams
+ ZSTD_CLEVEL_DEFAULT: number,
+
+ // Keys for zlib$zstdOptions['params']
+ ZSTD_c_compressionLevel: number,
+ ZSTD_c_windowLog: number,
+ ZSTD_c_hashLog: number,
+ ZSTD_c_chainLog: number,
+ ZSTD_c_searchLog: number,
+ ZSTD_c_minMatch: number,
+ ZSTD_c_targetLength: number,
+ ZSTD_c_strategy: number,
+ ZSTD_c_enableLongDistanceMatching: number,
+ ZSTD_c_ldmHashLog: number,
+ ZSTD_c_ldmMinMatch: number,
+ ZSTD_c_ldmBucketSizeLog: number,
+ ZSTD_c_ldmHashRateLog: number,
+ ZSTD_c_contentSizeFlag: number,
+ ZSTD_c_checksumFlag: number,
+ ZSTD_c_dictIDFlag: number,
+ ZSTD_c_nbWorkers: number,
+ ZSTD_c_jobSize: number,
+ ZSTD_c_overlapLog: number,
+
+ // Flush operations
+ ZSTD_e_continue: number,
+ ZSTD_e_flush: number,
+ ZSTD_e_end: number,
+
+ // Values for the ZSTD_c_strategy parameter
+ ZSTD_fast: number,
+ ZSTD_dfast: number,
+ ZSTD_greedy: number,
+ ZSTD_lazy: number,
+ ZSTD_lazy2: number,
+ ZSTD_btlazy2: number,
+ ZSTD_btopt: number,
+ ZSTD_btultra: number,
+ ZSTD_btultra2: number,
+
+ // Error codes
+ ZSTD_error_no_error: number,
+ ZSTD_error_GENERIC: number,
+ ZSTD_error_prefix_unknown: number,
+ ZSTD_error_version_unsupported: number,
+ ZSTD_error_frameParameter_unsupported: number,
+ ZSTD_error_frameParameter_windowTooLarge: number,
+ ZSTD_error_corruption_detected: number,
+ ZSTD_error_checksum_wrong: number,
+ ZSTD_error_literals_headerWrong: number,
+ ZSTD_error_dictionary_corrupted: number,
+ ZSTD_error_dictionary_wrong: number,
+ ZSTD_error_dictionaryCreation_failed: number,
+ ZSTD_error_parameter_unsupported: number,
+ ZSTD_error_parameter_combination_unsupported: number,
+ ZSTD_error_parameter_outOfBound: number,
+ ZSTD_error_tableLog_tooLarge: number,
+ ZSTD_error_maxSymbolValue_tooLarge: number,
+ ZSTD_error_maxSymbolValue_tooSmall: number,
+ ZSTD_error_stabilityCondition_notRespected: number,
+ ZSTD_error_stage_wrong: number,
+ ZSTD_error_init_missing: number,
+ ZSTD_error_memory_allocation: number,
+ ZSTD_error_workSpace_tooSmall: number,
+ ZSTD_error_dstSize_tooSmall: number,
+ ZSTD_error_srcSize_wrong: number,
+ ZSTD_error_dstBuffer_null: number,
+ ZSTD_error_noForwardProgress_destFull: number,
+ ZSTD_error_noForwardProgress_inputEmpty: number,
...
};
declare var codes: {
@@ -3598,6 +4875,8 @@ declare module 'zlib' {
}
declare class BrotliCompress extends Zlib {}
declare class BrotliDecompress extends Zlib {}
+ declare class ZstdCompress extends Zlib {}
+ declare class ZstdDecompress extends Zlib {}
declare class Deflate extends Zlib {}
declare class Inflate extends Zlib {}
declare class Gzip extends Zlib {}
@@ -3618,6 +4897,10 @@ declare module 'zlib' {
declare function createGzip(options?: zlib$options): Gzip;
declare function createGunzip(options?: zlib$options): Gunzip;
declare function createUnzip(options?: zlib$options): Unzip;
+ declare function createZstdCompress(options?: zlib$zstdOptions): ZstdCompress;
+ declare function createZstdDecompress(
+ options?: zlib$zstdOptions,
+ ): ZstdDecompress;
declare var brotliCompress: zlib$brotliAsyncFn;
declare var brotliCompressSync: zlib$brotliSyncFn;
declare var brotliDeompress: zlib$brotliAsyncFn;
@@ -3688,6 +4971,10 @@ declare module 'assert' {
};
}
+declare module 'assert/strict' {
+ declare module.exports: $Exports<'assert'>['strict'];
+}
+
type HeapCodeStatistics = {
code_and_metadata_size: number,
bytecode_and_metadata_size: number,
@@ -3965,18 +5252,18 @@ declare class Process extends events$EventEmitter {
emitWarning(warning: string | Error): void;
emitWarning(
warning: string,
- typeOrCtor: string | ((...empty) => mixed),
+ typeOrCtor: string | ((...empty) => unknown),
): void;
emitWarning(
warning: string,
type: string,
- codeOrCtor: string | ((...empty) => mixed),
+ codeOrCtor: string | ((...empty) => unknown),
): void;
emitWarning(
warning: string,
type: string,
code: string,
- ctor?: (...empty) => mixed,
+ ctor?: (...empty) => unknown,
): void;
execArgv: Array;
execPath: string;
@@ -3995,15 +5282,18 @@ declare class Process extends events$EventEmitter {
initgroups?: (user: number | string, extra_group: number | string) => void;
kill(pid: number, signal?: string | number): void;
mainModule: Object;
- memoryUsage(): {
- arrayBuffers: number,
- rss: number,
- heapTotal: number,
- heapUsed: number,
- external: number,
- ...
+ memoryUsage: {
+ (): {
+ arrayBuffers: number,
+ rss: number,
+ heapTotal: number,
+ heapUsed: number,
+ external: number,
+ ...
+ },
+ rss: () => number,
};
- nextTick: (cb: (...T) => mixed, ...T) => void;
+ nextTick: (cb: (...T) => unknown, ...T) => void;
pid: number;
platform: string;
release: {
@@ -4044,61 +5334,11 @@ declare var __filename: string;
declare var __dirname: string;
declare function setImmediate(
- callback: (...args: Array) => mixed,
+ callback: (...args: Array) => unknown,
...args: Array
): Object;
declare function clearImmediate(immediateObject: any): Object;
-// https://nodejs.org/api/esm.html#node-imports
-
-declare module 'node:assert' {
- declare module.exports: $Exports<'assert'>;
-}
-
-declare module 'node:assert/strict' {
- declare module.exports: $Exports<'assert'>['strict'];
-}
-
-declare module 'node:events' {
- declare module.exports: $Exports<'events'>;
-}
-
-declare module 'node:fs' {
- declare module.exports: $Exports<'fs'>;
-}
-
-declare module 'node:os' {
- declare module.exports: $Exports<'os'>;
-}
-
-declare module 'fs/promises' {
- declare module.exports: $Exports<'fs'>['promises'];
-}
-
-declare module 'node:fs/promises' {
- declare module.exports: $Exports<'fs'>['promises'];
-}
-
-declare module 'node:path' {
- declare module.exports: $Exports<'path'>;
-}
-
-declare module 'process' {
- declare module.exports: Process;
-}
-
-declare module 'node:process' {
- declare module.exports: $Exports<'process'>;
-}
-
-declare module 'node:util' {
- declare module.exports: $Exports<'util'>;
-}
-
-declare module 'node:url' {
- declare module.exports: $Exports<'url'>;
-}
-
declare module 'worker_threads' {
declare var isMainThread: boolean;
declare var parentPort: null | MessagePort;
@@ -4274,6 +5514,93 @@ declare module 'worker_threads' {
}
}
+// https://nodejs.org/api/esm.html#node-imports
+
+declare module 'node:assert' {
+ export type * from 'assert';
+ declare module.exports: $Exports<'assert'>;
+}
+
+declare module 'node:assert/strict' {
+ export type * from 'assert/strict';
+ declare module.exports: $Exports<'assert'>['strict'];
+}
+
+declare module 'node:child_process' {
+ export type * from 'child_process';
+ declare module.exports: $Exports<'child_process'>;
+}
+
+declare module 'node:cluster' {
+ export type * from 'cluster';
+ declare module.exports: $Exports<'cluster'>;
+}
+
+declare module 'node:crypto' {
+ export type * from 'crypto';
+ declare module.exports: $Exports<'crypto'>;
+}
+
+declare module 'node:dns' {
+ export type * from 'dns';
+ declare module.exports: $Exports<'dns'>;
+}
+
+declare module 'node:events' {
+ export type * from 'events';
+ declare module.exports: $Exports<'events'>;
+}
+
+declare module 'node:fs' {
+ export type * from 'fs';
+ declare module.exports: $Exports<'fs'>;
+}
+
+declare module 'node:fs/promises' {
+ export type * from 'fs/promises';
+ declare module.exports: $Exports<'fs'>['promises'];
+}
+
+declare module 'node:os' {
+ export type * from 'os';
+ declare module.exports: $Exports<'os'>;
+}
+
+declare module 'node:path' {
+ export type * from 'path';
+ declare module.exports: $Exports<'path'>;
+}
+
+declare module 'node:perf_hooks' {
+ export type * from 'perf_hooks';
+ declare module.exports: $Exports<'perf_hooks'>;
+}
+
+declare module 'node:process' {
+ export type * from 'process';
+ declare module.exports: $Exports<'process'>;
+}
+
+declare module 'node:timers' {
+ export type * from 'timers';
+ declare module.exports: $Exports<'timers'>;
+}
+
+declare module 'node:timers/promises' {
+ export type * from 'timers/promises';
+ declare module.exports: $Exports<'timers/promises'>;
+}
+
+declare module 'node:url' {
+ declare module.exports: $Exports<'url'>;
+}
+
+declare module 'node:util' {
+ export type * from 'util';
+ declare module.exports: $Exports<'util'>;
+}
+
declare module 'node:worker_threads' {
+ export type * from 'worker_threads';
declare module.exports: $Exports<'worker_threads'>;
}
diff --git a/flow-typed/npm/@expo/spawn-async_v1.x.x.js b/flow-typed/npm/@expo/spawn-async_v1.x.x.js
new file mode 100644
index 000000000000..1e60d38129da
--- /dev/null
+++ b/flow-typed/npm/@expo/spawn-async_v1.x.x.js
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @flow strict-local
+ * @format
+ */
+
+declare module '@expo/spawn-async' {
+ type SpawnOptions = {
+ cwd?: string,
+ env?: Object,
+ argv0?: string,
+ stdio?: string | Array,
+ detached?: boolean,
+ uid?: number,
+ gid?: number,
+ shell?: boolean | string,
+ windowsVerbatimArguments?: boolean,
+ windowsHide?: boolean,
+ encoding?: string,
+ ignoreStdio?: boolean,
+ };
+
+ declare class SpawnPromise extends Promise {
+ child: child_process$ChildProcess;
+ }
+ type SpawnResult = {
+ pid?: number,
+ output: string[],
+ stdout: string,
+ stderr: string,
+ status: number | null,
+ signal: string | null,
+ };
+
+ declare function spawnAsync(
+ command: string,
+ args?: ReadonlyArray,
+ options?: SpawnOptions,
+ ): SpawnPromise;
+
+ declare module.exports: typeof spawnAsync;
+}
diff --git a/flow-typed/npm/@octokit/rest_v22.x.x.js b/flow-typed/npm/@octokit/rest_v22.x.x.js
new file mode 100644
index 000000000000..4d3fbfccb4d2
--- /dev/null
+++ b/flow-typed/npm/@octokit/rest_v22.x.x.js
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @flow strict-local
+ * @format
+ */
+
+// Partial types for Octokit based on the usage in react-native-github
+declare module '@octokit/rest' {
+ declare class Octokit {
+ constructor(options?: {auth?: string, ...}): this;
+
+ repos: Readonly<{
+ listReleaseAssets: (
+ params: Readonly<{
+ owner: string,
+ repo: string,
+ release_id: string,
+ }>,
+ ) => Promise<{
+ data: Array<{
+ id: string,
+ name: string,
+ ...
+ }>,
+ ...
+ }>,
+ uploadReleaseAsset: (
+ params: Readonly<{
+ owner: string,
+ repo: string,
+ release_id: string,
+ name: string,
+ data: Buffer,
+ headers: Readonly<{
+ 'content-type': string,
+ ...
+ }>,
+ ...
+ }>,
+ ) => Promise<{
+ data: {
+ browser_download_url: string,
+ ...
+ },
+ ...
+ }>,
+ deleteReleaseAsset: (params: {
+ owner: string,
+ repo: string,
+ asset_id: string,
+ ...
+ }) => Promise,
+ }>;
+ }
+
+ declare export {Octokit};
+}
diff --git a/flow-typed/npm/@react-native-community/cli-server-api_v19.x.x.js b/flow-typed/npm/@react-native-community/cli-server-api_v19.x.x.js
index b8bcc3c40931..33f2f7d9fbad 100644
--- a/flow-typed/npm/@react-native-community/cli-server-api_v19.x.x.js
+++ b/flow-typed/npm/@react-native-community/cli-server-api_v19.x.x.js
@@ -13,7 +13,7 @@ declare module '@react-native-community/cli-server-api' {
declare type MiddlewareOptions = {
host?: string,
- watchFolders: $ReadOnlyArray,
+ watchFolders: ReadonlyArray,
port: number,
};
@@ -32,7 +32,7 @@ declare module '@react-native-community/cli-server-api' {
server: ws$WebSocketServer,
broadcast: (
method: string,
- params?: Record | null,
+ params?: Record | null,
) => void,
},
eventsSocketEndpoint: {
diff --git a/flow-typed/npm/babel-traverse_v7.x.x.js b/flow-typed/npm/babel-traverse_v7.x.x.js
index 1cd8df07b182..bbebfb8332bd 100644
--- a/flow-typed/npm/babel-traverse_v7.x.x.js
+++ b/flow-typed/npm/babel-traverse_v7.x.x.js
@@ -53,7 +53,7 @@ declare module '@babel/traverse' {
constructor(
scope: Scope,
- opts: TraverseOptions,
+ opts: TraverseOptions,
state: any,
parentPath: NodePath<>,
): TraversalContext;
@@ -97,7 +97,7 @@ declare module '@babel/traverse' {
/** Traverse node with current scope and path. */
traverse(
node: BabelNode | Array,
- opts: $ReadOnly>,
+ opts: Readonly>,
state: S,
): void;
@@ -298,12 +298,12 @@ declare module '@babel/traverse' {
parent: BabelNode;
hub: HubInterface;
contexts: Array;
- data: {[key: string]: mixed} | null;
+ data: {[key: string]: unknown} | null;
shouldSkip: boolean;
shouldStop: boolean;
removed: boolean;
- state: mixed;
- +opts: $ReadOnly> | null;
+ state: unknown;
+ +opts: Readonly> | null;
skipKeys: null | {[key: string]: boolean};
parentPath: ?NodePath<>;
context: TraversalContext;
@@ -338,7 +338,7 @@ declare module '@babel/traverse' {
getScope(scope: Scope): Scope;
setData(key: string, val: TVal): TVal;
- getData(key: string, def?: TVal): TVal;
+ getData(key: string, def?: TVal): TVal;
buildCodeFrameError(
msg: string,
@@ -346,7 +346,7 @@ declare module '@babel/traverse' {
): TError;
traverse(
- visitor: $ReadOnly>,
+ visitor: Readonly>,
state: TState,
): void;
@@ -390,9 +390,7 @@ declare module '@babel/traverse' {
* Earliest is defined as being "before" all the other nodes in terms of list container
* position and visiting key.
*/
- getEarliestCommonAncestorFrom(
- paths: $ReadOnlyArray>,
- ): NodePath<>;
+ getEarliestCommonAncestorFrom(paths: ReadonlyArray