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/.flowconfig b/.flowconfig index 657d6552e2b5..9ccb6588a52f 100644 --- a/.flowconfig +++ b/.flowconfig @@ -69,7 +69,7 @@ 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\|ktx\)$' -> '/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# @@ -98,4 +98,4 @@ untyped-import untyped-type-import [version] -^0.289.0 +^0.297.0 diff --git a/.github/actions/build-android/action.yml b/.github/actions/build-android/action.yml index fe6753af80ee..89ca4c49b284 100644 --- a/.github/actions/build-android/action.yml +++ b/.github/actions/build-android/action.yml @@ -16,10 +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. - if: ${{ !endsWith(github.ref_name, '-stable') }} + # 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 @@ -28,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') }} @@ -45,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') }} @@ -65,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 @@ -81,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-npm-package/action.yml b/.github/actions/build-npm-package/action.yml index 808916f8b29c..6bacb3d29dde 100644 --- a/.github/actions/build-npm-package/action.yml +++ b/.github/actions/build-npm-package/action.yml @@ -18,13 +18,13 @@ runs: shell: bash run: git config --global --add safe.directory '*' - 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 @@ -65,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 @@ -80,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/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 801c4750085a..19e3f3e6f06e 100644 --- a/.github/actions/setup-xcode/action.yml +++ b/.github/actions/setup-xcode/action.yml @@ -4,11 +4,7 @@ inputs: xcode-version: description: 'The xcode version to use' required: false - default: '16.2.0' - platform: - description: 'The platform to use. Valid values are: ios, ios-simulator, macos, mac-catalyst, tvos, tvos-simulator, xros, xros-simulator' - required: false - default: 'macos' + default: '16.4.0' runs: using: "composite" steps: @@ -16,21 +12,3 @@ runs: uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd with: xcode-version: ${{ inputs.xcode-version }} - - name: Setup Platform ${{ inputs.platform }} - if: ${{ inputs.platform != 'macos' && inputs.platform != 'mac-catalyst' }} - shell: bash - run: | - # https://github.com/actions/runner-images/issues/12541 - sudo xcodebuild -runFirstLaunch - sudo xcrun simctl list - - # Install platform based on the platform - if [[ "${{ inputs.platform }}" == "xros" || "${{ inputs.platform }}" == "xros-simulator" ]]; then - sudo xcodebuild -downloadPlatform visionOS - elif [[ "${{ inputs.platform }}" == "tvos" || "${{ inputs.platform }}" == "tvos-simulator" ]]; then - sudo xcodebuild -downloadPlatform tvOS - else - sudo xcodebuild -downloadPlatform iOS - fi - - sudo xcodebuild -runFirstLaunch diff --git a/.github/actions/test-ios-helloworld/action.yml b/.github/actions/test-ios-helloworld/action.yml index 98bcc860f278..66d4ee84791b 100644 --- a/.github/actions/test-ios-helloworld/action.yml +++ b/.github/actions/test-ios-helloworld/action.yml @@ -15,8 +15,6 @@ runs: steps: - name: Setup xcode uses: ./.github/actions/setup-xcode - with: - platform: ios - name: Setup node.js uses: ./.github/actions/setup-node - name: Run yarn install @@ -32,7 +30,7 @@ runs: - 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 @@ -40,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 diff --git a/.github/actions/test-ios-rntester/action.yml b/.github/actions/test-ios-rntester/action.yml index d014e428699d..3d6d83b3b6e7 100644 --- a/.github/actions/test-ios-rntester/action.yml +++ b/.github/actions/test-ios-rntester/action.yml @@ -1,15 +1,12 @@ 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" + default: false flavor: description: The flavor of the build. Must be one of "Debug", "Release". default: Debug @@ -17,14 +14,16 @@ inputs: 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 steps: - name: Setup xcode uses: ./.github/actions/setup-xcode - with: - platform: ios - name: Setup node.js uses: ./.github/actions/setup-node - name: Run yarn @@ -43,29 +42,34 @@ runs: if: ${{ inputs.run-unit-tests == 'true' }} uses: ./.github/actions/prepare-ios-tests - 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 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 @@ -98,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/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/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/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 8bd70421f273..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: - platform: 'ios' - 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 9ddb724b8935..ca947dc267c1 100644 --- a/.github/workflows/create-draft-release.yml +++ b/.github/workflows/create-draft-release.yml @@ -17,8 +17,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 @@ -29,17 +30,17 @@ 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'); - return (await createDraftRelease(version, isLatest(), '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}', ${{ inputs.hermesVersion }}, ${{ inputs.hermesV1Version }})).id; + 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@v6 + uses: actions/github-script@v8 env: RELEASE_ID: ${{ steps.create-draft-release.outputs.result }} with: diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 19608358a5e1..464e9eb3f86c 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -23,7 +23,7 @@ jobs: 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 e9ce8cc2d913..420439705e14 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -49,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: @@ -80,7 +80,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 and Publish NPM Package uses: ./.github/actions/build-npm-package with: 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 5e234961fc53..ce2f6b88c30b 100644 --- a/.github/workflows/prebuild-ios-core.yml +++ b/.github/workflows/prebuild-ios-core.yml @@ -28,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/ @@ -41,8 +41,6 @@ jobs: - name: Setup xcode if: steps.restore-ios-slice.outputs.cache-hit != 'true' uses: ./.github/actions/setup-xcode - with: - platform: ${{ matrix.slice }} - name: Yarn Install if: steps.restore-ios-slice.outputs.cache-hit != 'true' uses: ./.github/actions/yarn-install @@ -50,9 +48,11 @@ jobs: shell: bash run: | if [ "${{ inputs.use-hermes-nightly }}" == "true" ]; then - HERMES_VERSION="nightly" + # 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_VERSION_NAME=//p' packages/react-native/sdks/hermes-engine/version.properties) + HERMES_VERSION=$(sed -n 's/^HERMES_V1_VERSION_NAME=//p' packages/react-native/sdks/hermes-engine/version.properties) fi echo "Using Hermes version: $HERMES_VERSION" echo "HERMES_VERSION=$HERMES_VERSION" >> $GITHUB_ENV @@ -63,7 +63,7 @@ jobs: node ./scripts/releases/set-rn-artifacts-version.js --build-type "${{ inputs.version-type }}" fi - 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/ @@ -99,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/**/*') }} @@ -131,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/**/*') }} @@ -144,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 @@ -190,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 212c2a522df9..73cf9870c66c 100644 --- a/.github/workflows/prebuild-ios-dependencies.yml +++ b/.github/workflows/prebuild-ios-dependencies.yml @@ -10,12 +10,12 @@ jobs: 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: v3-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }} @@ -32,12 +32,12 @@ 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: v3-ios-dependencies-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }} @@ -62,26 +62,24 @@ jobs: 'xros-simulator'] steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup node.js uses: ./.github/actions/setup-node - 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: 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 - with: - platform: ${{ matrix.slice }} - 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/ @@ -92,13 +90,13 @@ jobs: 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: v3-ios-dependencies-slice-folder-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashfiles('scripts/releases/ios-prebuild/configuration.js') }} @@ -119,16 +117,14 @@ 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/ @@ -139,13 +135,13 @@ jobs: 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 @@ -177,19 +173,19 @@ 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 diff --git a/.github/workflows/publish-bumped-packages.yml b/.github/workflows/publish-bumped-packages.yml index ea8bc40a122e..cf0b69b8c354 100644 --- a/.github/workflows/publish-bumped-packages.yml +++ b/.github/workflows/publish-bumped-packages.yml @@ -14,7 +14,7 @@ jobs: 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 19a511452179..99e3b94fc9b4 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -27,7 +27,7 @@ jobs: HERMES_V1_VERSION: ${{ steps.set_hermes_versions.outputs.HERMES_V1_VERSION }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - id: set_hermes_versions run: | echo "Setting hermes versions to latest" @@ -75,7 +75,7 @@ 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 @@ -87,7 +87,7 @@ jobs: 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: | @@ -97,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: | @@ -112,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: | @@ -121,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'); 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 7114dbef8298..5a59c493f41e 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -51,13 +51,29 @@ jobs: [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" 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-15-large needs: @@ -67,10 +83,10 @@ jobs: 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: @@ -87,11 +103,11 @@ 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: Download App - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: RNTesterApp-NewArch-${{ matrix.flavor }} path: /tmp/RNTesterBuild/RNTester.app @@ -99,8 +115,6 @@ jobs: run: ls -lR /tmp/RNTesterBuild - name: Setup xcode uses: ./.github/actions/setup-xcode - with: - platform: ios - name: Run E2E Tests uses: ./.github/actions/maestro-ios with: @@ -118,11 +132,9 @@ jobs: flavor: [Debug, Release] steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup xcode uses: ./.github/actions/setup-xcode - with: - platform: ios - name: Setup node.js uses: ./.github/actions/setup-node - name: Run yarn @@ -132,14 +144,14 @@ jobs: with: ruby-version: 2.6.10 - 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 @@ -147,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 @@ -179,7 +191,7 @@ jobs: 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" + export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ matrix.flavor }}.xcframework.tar.gz" RCT_NEW_ARCH_ENABLED=$NEW_ARCH_ENABLED bundle exec pod install xcodebuild \ @@ -207,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 @@ -278,7 +290,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 and Test Fantom uses: ./.github/actions/run-fantom-tests with: @@ -297,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: @@ -313,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 }}/ @@ -350,7 +362,7 @@ jobs: GRADLE_OPTS: "-Dorg.gradle.daemon=false" steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Build NPM Package uses: ./.github/actions/build-npm-package with: @@ -377,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 @@ -415,7 +427,7 @@ 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/ @@ -429,7 +441,7 @@ jobs: 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 @@ -441,7 +453,7 @@ jobs: 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 @@ -451,7 +463,7 @@ jobs: 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 }} @@ -463,10 +475,10 @@ jobs: 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: @@ -479,7 +491,7 @@ jobs: 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: @@ -496,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 }} @@ -514,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 index 9463dacde97e..c1baac14097d 100644 --- a/.github/workflows/validate-dotslash-artifacts.yml +++ b/.github/workflows/validate-dotslash-artifacts.yml @@ -30,10 +30,12 @@ jobs: if: github.repository == 'facebook/react-native' steps: - name: Checkout repository - uses: actions/checkout@v4 + 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 @@ -42,7 +44,7 @@ jobs: git config --local user.email "bot@reactnative.dev" git config --local user.name "React Native Bot" - name: Validate DotSlash artifacts - uses: actions/github-script@v6 + uses: actions/github-script@v8 with: script: | const {validateDotSlashArtifacts} = require('./scripts/releases/validate-dotslash-artifacts.js'); diff --git a/.gitignore b/.gitignore index 2dbadbcccf4e..dd5a1d4431db 100644 --- a/.gitignore +++ b/.gitignore @@ -176,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.md b/CHANGELOG.md index fd0109a8ce91..c55b794917d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,345 @@ # Changelog +## 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 @@ -210,6 +550,20 @@ - **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 diff --git a/build.gradle.kts b/build.gradle.kts index 40846ef4e82d..2154d20f22ed 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -109,16 +109,43 @@ tasks.register("publishAllToMavenTempLocal") { 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. @@ -127,12 +154,20 @@ if (project.findProperty("react.internal.useHermesNightly")?.toString()?.toBoole """ .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.hermes: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 eecaceb1f405..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<{| + | Readonly<{ type: 'boolean', multiple?: false, short?: string, default?: boolean, - |}> - | $ReadOnly<{| + }> + | Readonly<{ type: 'boolean', multiple: true, short?: string, default?: Array, - |}> - | $ReadOnly<{| + }> + | Readonly<{ type: 'string', multiple?: false, short?: string, default?: string, - |}> - | $ReadOnly<{| + }> + | 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; @@ -4006,7 +5293,7 @@ declare class Process extends events$EventEmitter { }, rss: () => number, }; - nextTick: (cb: (...T) => mixed, ...T) => void; + nextTick: (cb: (...T) => unknown, ...T) => void; pid: number; platform: string; release: { @@ -4047,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; @@ -4277,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 index 45c6187c9aac..1e60d38129da 100644 --- a/flow-typed/npm/@expo/spawn-async_v1.x.x.js +++ b/flow-typed/npm/@expo/spawn-async_v1.x.x.js @@ -38,7 +38,7 @@ declare module '@expo/spawn-async' { declare function spawnAsync( command: string, - args?: $ReadOnlyArray, + args?: ReadonlyArray, options?: SpawnOptions, ): SpawnPromise; diff --git a/flow-typed/npm/@octokit/rest_v22.x.x.js b/flow-typed/npm/@octokit/rest_v22.x.x.js index 9c193173e2cb..4d3fbfccb4d2 100644 --- a/flow-typed/npm/@octokit/rest_v22.x.x.js +++ b/flow-typed/npm/@octokit/rest_v22.x.x.js @@ -13,9 +13,9 @@ declare module '@octokit/rest' { declare class Octokit { constructor(options?: {auth?: string, ...}): this; - repos: $ReadOnly<{ + repos: Readonly<{ listReleaseAssets: ( - params: $ReadOnly<{ + params: Readonly<{ owner: string, repo: string, release_id: string, @@ -29,13 +29,13 @@ declare module '@octokit/rest' { ... }>, uploadReleaseAsset: ( - params: $ReadOnly<{ + params: Readonly<{ owner: string, repo: string, release_id: string, name: string, data: Buffer, - headers: $ReadOnly<{ + headers: Readonly<{ 'content-type': string, ... }>, @@ -53,7 +53,7 @@ declare module '@octokit/rest' { repo: string, asset_id: string, ... - }) => Promise, + }) => Promise, }>; } 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>): NodePath<>; /** * Get the earliest path in the tree where the provided `paths` intersect. @@ -400,7 +398,7 @@ declare module '@babel/traverse' { * TODO: Possible optimisation target. */ getDeepestCommonAncestorFrom( - paths: $ReadOnlyArray>, + paths: ReadonlyArray>, filter?: ( lastCommon: BabelNode, lastCommonIndex: number, @@ -558,24 +556,24 @@ declare module '@babel/traverse' { * Check whether we have the input `key`. If the `key` references an array then we check * if the array has any items, otherwise we just check if it's falsy. */ - has(key: $Keys): boolean; + has(key: keyof TNode): boolean; isStatic(): boolean; /** * Alias of `has`. */ - is(key: $Keys): boolean; + is(key: keyof TNode): boolean; /** * Opposite of `has`. */ - isnt(key: $Keys): boolean; + isnt(key: keyof TNode): boolean; /** * Check whether the path node `key` strict equals `value`. */ - equals(key: $Keys, value: any): boolean; + equals(key: keyof TNode, value: any): boolean; /** * Check the type against our stored internal type of the node. This is handy when a node has @@ -726,7 +724,7 @@ declare module '@babel/traverse' { getAllPrevSiblings(): Array>; - get>( + get( key: TKey, context?: boolean | TraversalContext, ): TNode[TKey] extends BabelNode ? NodePath<> : Array>; @@ -1444,7 +1442,7 @@ declare module '@babel/traverse' { | VisitNodeFunction | VisitNodeObject; - declare export type Visitor = $ReadOnly<{ + declare export type Visitor = Readonly<{ enter?: VisitNodeFunction, exit?: VisitNodeFunction, @@ -1872,7 +1870,7 @@ declare module '@babel/traverse' { explode(visitor: Visitor): Visitor, verify(visitor: Visitor): void, merge( - visitors: Array<$ReadOnly>>, + visitors: Array>>, states: Array, wrapper?: ?Function, ): Array>, @@ -1881,8 +1879,8 @@ declare module '@babel/traverse' { declare export var visitors: Visitors; declare export type Cache = { - path: $ReadOnlyWeakMap, - scope: $ReadOnlyWeakMap, + path: $ReadOnlyWeakMap, + scope: $ReadOnlyWeakMap, clear(): void, clearPath(): void, clearScope(): void, @@ -1891,7 +1889,7 @@ declare module '@babel/traverse' { declare export type Traverse = { ( parent?: BabelNode | Array, - opts?: $ReadOnly>, + opts?: Readonly>, scope?: ?Scope, state: TState, parentPath?: ?NodePath, @@ -1909,7 +1907,7 @@ declare module '@babel/traverse' { node( node: BabelNode, - opts: $ReadOnly>, + opts: Readonly>, scope: Scope, state: TState, parentPath: NodePath<>, diff --git a/flow-typed/npm/babel-types_v7.x.x.js b/flow-typed/npm/babel-types_v7.x.x.js index 61072e5245bd..d8d791a6bb9b 100644 --- a/flow-typed/npm/babel-types_v7.x.x.js +++ b/flow-typed/npm/babel-types_v7.x.x.js @@ -3846,7 +3846,7 @@ declare module "@babel/types" { enter?: TraversalHandler, exit?: TraversalHandler, }; - declare export function traverse(n: BabelNode, TraversalHandler | TraversalHandlers, state?: T): void; + declare export function traverse(n: BabelNode, handler: TraversalHandler | TraversalHandlers, state?: T): void; declare export function traverseFast(n: Node, h: TraversalHandler, state?: T): void; declare export function shallowEqual(actual: Object, expected: Object): boolean declare export function buildMatchMemberExpression(match: string, allowPartial?: boolean): (?BabelNode) => boolean diff --git a/flow-typed/npm/babel_v7.x.x.js b/flow-typed/npm/babel_v7.x.x.js index 53953323b240..f9d293c16c15 100644 --- a/flow-typed/npm/babel_v7.x.x.js +++ b/flow-typed/npm/babel_v7.x.x.js @@ -10,7 +10,7 @@ 'use strict'; -type _BabelSourceMap = $ReadOnly<{ +type _BabelSourceMap = Readonly<{ file?: string, mappings: string, names: Array, @@ -28,9 +28,9 @@ type _BabelSourceMapSegment = { ... }; -export type BabelSourceLocation = $ReadOnly<{ - start: $ReadOnly<{line: number, column: number}>, - end: $ReadOnly<{line: number, column: number}>, +export type BabelSourceLocation = Readonly<{ + start: Readonly<{line: number, column: number}>, + end: Readonly<{line: number, column: number}>, }>; declare module '@babel/parser' { @@ -304,9 +304,9 @@ declare module '@babel/core' { declare class Store { constructor(): Store; - setDynamic(key: string, fn: () => mixed): void; - set(key: string, val: mixed): void; - get(key: string): mixed; + setDynamic(key: string, fn: () => unknown): void; + set(key: string, val: unknown): void; + get(key: string): unknown; } declare export class File extends Store { @@ -330,7 +330,7 @@ declare module '@babel/core' { constructor( options: BabelCoreOptions, - input: $ReadOnly<{ast: BabelNode, code: string, inputMap: any}>, + input: Readonly<{ast: BabelNode, code: string, inputMap: any}>, ): File; getMetadata(): void; @@ -367,7 +367,7 @@ declare module '@babel/core' { transform(): TransformResult<>; - wrap(code: string, callback: () => mixed): TransformResult<>; + wrap(code: string, callback: () => unknown): TransformResult<>; addCode(code: string): void; @@ -394,7 +394,7 @@ declare module '@babel/core' { declare export type PluginObj = { name?: string, - inherits?: mixed, + inherits?: unknown, maniuplateOptions?: ( opts: BabelCoreOptions, parserOpts: ParserOptions, @@ -411,7 +411,7 @@ declare module '@babel/core' { // but have not yet been executed to call functions with options. declare export type UnloadedDescriptor = { name: string | void, - value: PluginObj | (() => PluginObj), + value: PluginObj | (() => PluginObj), options: EntryOptions, dirname: string, alias: string, @@ -423,7 +423,7 @@ declare module '@babel/core' { }; declare export class ConfigItem { - +value: PluginObj | (() => PluginObj); + +value: PluginObj | (() => PluginObj); +options: EntryOptions; +dirname: string; +name: string | void; @@ -924,8 +924,8 @@ declare module '@babel/core' { |}; declare type TransformCallback = - | ((Error, null) => mixed) - | ((null, TransformResult | null) => mixed); + | ((Error, null) => unknown) + | ((null, TransformResult | null) => unknown); /** * Transforms the passed in code. Calling a callback with an object with the generated code, source map, and AST. @@ -1027,7 +1027,7 @@ declare module '@babel/core' { declare export var template: Template; declare export var traverse: Traverse; declare export var types: Types; - declare export var DEFAULT_EXTENSIONS: $ReadOnlyArray; + declare export var DEFAULT_EXTENSIONS: ReadonlyArray; declare export function buildExternalHelpers( whitelist?: Array, @@ -1059,27 +1059,27 @@ declare module '@babel/core' { declare export type ResolvedConfig = { options: BabelCoreOptions, - passes: Array | (() => PluginObj)>>, + passes: Array | (() => PluginObj)>>, }; declare export function loadOptions( - options?: mixed, + options?: unknown, callback: - | ((error: Error, null) => mixed) - | ((null, config: ResolvedConfig | null) => mixed), + | ((error: Error, null) => unknown) + | ((null, config: ResolvedConfig | null) => unknown), ): void; declare export function loadOptionsSync( - options?: mixed, + options?: unknown, ): ResolvedConfig | null; declare export function loadOptionsAsync( - options?: mixed, + options?: unknown, ): Promise; // For now declare type ValidatedOptions = BabelCoreOptions; declare class PartialConfig { - +options: $ReadOnly; + +options: Readonly; +babelrc: string | void; +babelignore: string | void; +config: string | void; @@ -1090,16 +1090,16 @@ declare module '@babel/core' { } declare export function loadPartialConfig( - options?: mixed, + options?: unknown, callback: - | ((error: Error, null) => mixed) - | ((null, config: PartialConfig | null) => mixed), + | ((error: Error, null) => unknown) + | ((null, config: PartialConfig | null) => unknown), ): void; declare export function loadPartialConfigSync( - options?: mixed, + options?: unknown, ): PartialConfig | null; declare export function loadPartialConfigAsync( - options?: mixed, + options?: unknown, ): Promise; } @@ -1189,7 +1189,7 @@ declare module '@babel/generator' { jsecsOption?: {...}, decoratorsBeforeExport?: boolean, - recordAndTupleSyntaxType?: mixed, + recordAndTupleSyntaxType?: unknown, /** * Enable generating source maps @@ -1283,13 +1283,13 @@ declare module '@babel/template' { (tpl: string, opts: ?PublicOpts): (?PublicReplacements) => T, // Building from a template literal produces an AST builder function by default. - (tpl: Array, ...args: Array): (?PublicReplacements) => T, + (tpl: Array, ...args: Array): (?PublicReplacements) => T, // Allow users to explicitly create templates that produce ASTs, skipping // the need for an intermediate function. ast: { (tpl: string, opts: ?PublicOpts): T, - (tpl: Array, ...args: Array): T, + (tpl: Array, ...args: Array): T, }, }; @@ -1321,14 +1321,17 @@ declare module '@babel/template' { // Building from a template literal produces an AST builder function by default. ( tpl: Array, - ...args: Array + ...args: Array ): (?PublicReplacements) => Statement | Array, // Allow users to explicitly create templates that produce ASTs, skipping // the need for an intermediate function. ast: { (tpl: string, opts: ?PublicOpts): Statement | Array, - (tpl: Array, ...args: Array): Statement | Array, + ( + tpl: Array, + ...args: Array + ): Statement | Array, }, }; diff --git a/flow-typed/npm/chrome-launcher_v0.15.x.js b/flow-typed/npm/chrome-launcher_v0.15.x.js index b72a756ab929..4f7a3fef11a2 100644 --- a/flow-typed/npm/chrome-launcher_v0.15.x.js +++ b/flow-typed/npm/chrome-launcher_v0.15.x.js @@ -16,7 +16,7 @@ declare module 'chrome-launcher' { declare export type Options = { startingUrl?: string, chromeFlags?: Array, - prefs?: mixed, + prefs?: unknown, port?: number, handleSIGINT?: boolean, chromePath?: string, diff --git a/flow-typed/npm/chromium-edge-launcher_v0.2.x.js b/flow-typed/npm/chromium-edge-launcher_v0.2.x.js index ab8d7e0313ba..0b74594465da 100644 --- a/flow-typed/npm/chromium-edge-launcher_v0.2.x.js +++ b/flow-typed/npm/chromium-edge-launcher_v0.2.x.js @@ -16,7 +16,7 @@ declare module 'chromium-edge-launcher' { declare export type Options = { startingUrl?: string, edgeFlags?: Array, - prefs?: mixed, + prefs?: unknown, port?: number, handleSIGINT?: boolean, edgePath?: string, diff --git a/flow-typed/npm/connect_v3.x.x.js b/flow-typed/npm/connect_v3.x.x.js index 0195559e06ff..b76ac5582952 100644 --- a/flow-typed/npm/connect_v3.x.x.js +++ b/flow-typed/npm/connect_v3.x.x.js @@ -13,7 +13,7 @@ declare module 'connect' { declare export type ServerHandle = HandleFunction | http.Server; - declare type NextFunction = (err?: mixed) => void; + declare type NextFunction = (err?: unknown) => void; declare export type NextHandleFunction = ( req: IncomingMessage, diff --git a/flow-typed/npm/debug_v4.4.x.js b/flow-typed/npm/debug_v4.4.x.js index fea4ad05c4d5..bc1ef24062b3 100644 --- a/flow-typed/npm/debug_v4.4.x.js +++ b/flow-typed/npm/debug_v4.4.x.js @@ -12,15 +12,15 @@ declare module 'debug' { declare interface Formatters { - [formatter: string]: (v: mixed) => string; + [formatter: string]: (v: unknown) => string; } declare type Debugger = {| - (format: mixed, ...args: Array): void, + (format: unknown, ...args: Array): void, color: string, diff: number, enabled: boolean, - log: (format: mixed, ...args: Array) => mixed, + log: (format: unknown, ...args: Array) => unknown, namespace: string, destroy: () => boolean, extend: (namespace: string, delimiter?: string) => Debugger, @@ -28,12 +28,12 @@ declare module 'debug' { declare type Debug = {| (namespace: string): Debugger, - coerce: (val: mixed) => mixed, + coerce: (val: unknown) => unknown, disable: () => string, enable: (namespaces: string) => void, enabled: (namespaces: string) => boolean, - formatArgs: (args: Array) => void, - log: (format: mixed, ...args: Array) => mixed, + formatArgs: (args: Array) => void, + log: (format: unknown, ...args: Array) => unknown, selectColor: (namespace: string) => string | number, // this should be of type require('ms') but it doesn't play nicely with eslint // unless we add ms to dependencies, which we don't want to do diff --git a/flow-typed/npm/deep-equal_v1.x.x.js b/flow-typed/npm/deep-equal_v1.x.x.js index 215eb356778f..bcb809abed34 100644 --- a/flow-typed/npm/deep-equal_v1.x.x.js +++ b/flow-typed/npm/deep-equal_v1.x.x.js @@ -10,8 +10,8 @@ declare module 'deep-equal' { declare module.exports: ( - actual: mixed, - expected: mixed, + actual: unknown, + expected: unknown, options?: {strict: boolean}, ) => boolean; } diff --git a/flow-typed/npm/electron-packager_v18.x.x.js b/flow-typed/npm/electron-packager_v18.x.x.js index f77d694e7aca..4ac8b158eb5c 100644 --- a/flow-typed/npm/electron-packager_v18.x.x.js +++ b/flow-typed/npm/electron-packager_v18.x.x.js @@ -46,7 +46,7 @@ declare module '@electron/packager' { declare export type OsxUniversalOptions = $FlowFixMe; - declare export type Win32MetadataOptions = $ReadOnly<{ + declare export type Win32MetadataOptions = Readonly<{ CompanyName?: string, FileDescription?: string, OriginalFilename?: string, diff --git a/flow-typed/npm/execa_v5.x.x.js b/flow-typed/npm/execa_v5.x.x.js index 65e2ef8c9d3d..c54a07291e94 100644 --- a/flow-typed/npm/execa_v5.x.x.js +++ b/flow-typed/npm/execa_v5.x.x.js @@ -37,7 +37,7 @@ declare module 'execa' { shell?: boolean | string, stderr?: ?StdIoOption, stdin?: ?StdIoOption, - stdio?: 'pipe' | 'ignore' | 'inherit' | $ReadOnlyArray, + stdio?: 'pipe' | 'ignore' | 'inherit' | ReadonlyArray, stdout?: ?StdIoOption, stripEof?: boolean, timeout?: number, @@ -90,26 +90,26 @@ declare module 'execa' { declare interface Execa { ( file: string, - args?: $ReadOnlyArray, - options?: $ReadOnly, + args?: ReadonlyArray, + options?: Readonly, ): ExecaPromise; - (file: string, options?: $ReadOnly): ExecaPromise; + (file: string, options?: Readonly): ExecaPromise; - command(command: string, options?: $ReadOnly): ExecaPromise; - commandSync(command: string, options?: $ReadOnly): ExecaPromise; + command(command: string, options?: Readonly): ExecaPromise; + commandSync(command: string, options?: Readonly): ExecaPromise; node( path: string, - args?: $ReadOnlyArray, - options?: $ReadOnly, + args?: ReadonlyArray, + options?: Readonly, ): void; sync( file: string, - args?: $ReadOnlyArray, - options?: $ReadOnly, + args?: ReadonlyArray, + options?: Readonly, ): SyncResult; - sync(file: string, options?: $ReadOnly): SyncResult; + sync(file: string, options?: Readonly): SyncResult; } declare module.exports: Execa; diff --git a/flow-typed/npm/glob_v7.x.x.js b/flow-typed/npm/glob_v7.x.x.js deleted file mode 100644 index 4bd3df6cb984..000000000000 --- a/flow-typed/npm/glob_v7.x.x.js +++ /dev/null @@ -1,79 +0,0 @@ -// flow-typed signature: d2a519d7d007e9ba3e5bf2ac3ff76eca -// flow-typed version: f243e51ed7/glob_v7.x.x/flow_>=v0.104.x - -declare module "glob" { - declare type MinimatchOptions = {| - debug?: boolean, - nobrace?: boolean, - noglobstar?: boolean, - dot?: boolean, - noext?: boolean, - nocase?: boolean, - nonull?: boolean, - matchBase?: boolean, - nocomment?: boolean, - nonegate?: boolean, - flipNegate?: boolean - |}; - - declare type Options = {| - ...MinimatchOptions, - cwd?: string, - root?: string, - nomount?: boolean, - mark?: boolean, - nosort?: boolean, - stat?: boolean, - silent?: boolean, - strict?: boolean, - cache?: { [path: string]: boolean | "DIR" | "FILE" | $ReadOnlyArray, ... }, - statCache?: { [path: string]: boolean | { isDirectory(): boolean, ... } | void, ... }, - symlinks?: { [path: string]: boolean | void, ... }, - realpathCache?: { [path: string]: string, ... }, - sync?: boolean, - nounique?: boolean, - nodir?: boolean, - ignore?: string | $ReadOnlyArray, - follow?: boolean, - realpath?: boolean, - absolute?: boolean - |}; - - /** - * Called when an error occurs, or matches are found - * err - * matches: filenames found matching the pattern - */ - declare type CallBack = (err: ?Error, matches: Array) => void; - - declare class Glob extends events$EventEmitter { - constructor(pattern: string): this; - constructor(pattern: string, callback: CallBack): this; - constructor(pattern: string, options: Options, callback: CallBack): this; - - minimatch: {...}; - options: Options; - aborted: boolean; - cache: { [path: string]: boolean | "DIR" | "FILE" | $ReadOnlyArray, ... }; - statCache: { [path: string]: boolean | { isDirectory(): boolean, ... } | void, ... }; - symlinks: { [path: string]: boolean | void, ... }; - realpathCache: { [path: string]: string, ... }; - found: Array; - - pause(): void; - resume(): void; - abort(): void; - } - - declare class GlobModule { - Glob: Class; - - (pattern: string, callback: CallBack): void; - (pattern: string, options: Options, callback: CallBack): void; - - hasMagic(pattern: string, options?: Options): boolean; - sync(pattern: string, options?: Options): Array; - } - - declare module.exports: GlobModule; -} diff --git a/flow-typed/npm/jest-diff_v29.x.x.js b/flow-typed/npm/jest-diff_v29.x.x.js index d1cdce568656..a3cc9d9130be 100644 --- a/flow-typed/npm/jest-diff_v29.x.x.js +++ b/flow-typed/npm/jest-diff_v29.x.x.js @@ -32,8 +32,8 @@ declare module 'jest-diff' { }; declare export function diff( - a: mixed, - b: mixed, + a: unknown, + b: unknown, options?: DiffOptions, ): string | null; } diff --git a/flow-typed/npm/jest-snapshot_v29.x.x.js b/flow-typed/npm/jest-snapshot_v29.x.x.js index fbae1235a572..58fa3fef7c8c 100644 --- a/flow-typed/npm/jest-snapshot_v29.x.x.js +++ b/flow-typed/npm/jest-snapshot_v29.x.x.js @@ -33,7 +33,7 @@ declare module 'jest-snapshot' { declare export function isSnapshotPath(path: string): boolean; - type LocalRequire = (module: string) => mixed; + type LocalRequire = (module: string) => unknown; declare export function buildSnapshotResolver( config: ProjectConfig, diff --git a/flow-typed/npm/jest.js b/flow-typed/npm/jest.js index 29974483804f..ae645e711e83 100644 --- a/flow-typed/npm/jest.js +++ b/flow-typed/npm/jest.js @@ -13,7 +13,7 @@ // MODIFIED: Added ESLint suppression comment - no-unused-vars doesn't understand declaration files -type JestMockFn, TReturn> = { +type JestMockFn, TReturn> = { (...args: TArguments): TReturn, /** * An object for introspecting mock calls @@ -39,7 +39,7 @@ type JestMockFn, TReturn> = { /** * An array that contains the contexts for all calls of the mock function. */ - contexts: Array, + contexts: Array, /** * An array that contains all the object results that have been * returned by this mock function call @@ -129,17 +129,17 @@ type JestAsymmetricEqualityType = { /** * A custom Jasmine equality tester */ - asymmetricMatch(value: mixed): boolean, + asymmetricMatch(value: unknown): boolean, ... }; type JestCallsType = { - allArgs(): mixed, - all(): mixed, + allArgs(): unknown, + all(): unknown, any(): boolean, count(): number, - first(): mixed, - mostRecent(): mixed, + first(): unknown, + mostRecent(): unknown, reset(): void, ... }; @@ -768,7 +768,7 @@ interface JestExpectType { /** * */ - toHaveProperty(propPath: string | $ReadOnlyArray, value?: any): void; + toHaveProperty(propPath: string | ReadonlyArray, value?: any): void; /** * Use .toMatch to check that a string matches a regular expression or string. */ @@ -881,7 +881,7 @@ type JestObjectType = { * implementation. */ // MODIFIED: Added defaults to type arguments. - fn = $ReadOnlyArray, TReturn = any>( + fn = ReadonlyArray, TReturn = any>( implementation?: (...args: TArguments) => TReturn, ): JestMockFn, /** @@ -1005,22 +1005,22 @@ type JestDoneFn = { /** Runs this function after every test inside this context */ declare function afterEach( - fn: (done: JestDoneFn) => ?Promise, + fn: (done: JestDoneFn) => ?Promise, timeout?: number, ): void; /** Runs this function before every test inside this context */ declare function beforeEach( - fn: (done: JestDoneFn) => ?Promise, + fn: (done: JestDoneFn) => ?Promise, timeout?: number, ): void; /** Runs this function after all tests have finished inside this context */ declare function afterAll( - fn: (done: JestDoneFn) => ?Promise, + fn: (done: JestDoneFn) => ?Promise, timeout?: number, ): void; /** Runs this function before any tests have started inside this context */ declare function beforeAll( - fn: (done: JestDoneFn) => ?Promise, + fn: (done: JestDoneFn) => ?Promise, timeout?: number, ): void; @@ -1045,11 +1045,11 @@ declare var describe: { */ each( ...table: - | $ReadOnlyArray<$ReadOnlyArray | mixed> - | [$ReadOnlyArray, string] + | ReadonlyArray | unknown> + | [ReadonlyArray, string] ): ( name: JestTestName, - fn?: (...args: $ReadOnlyArray) => ?Promise, + fn?: (...args: ReadonlyArray) => ?Promise, timeout?: number, ) => void, ... @@ -1066,7 +1066,7 @@ declare var it: { */ ( name: JestTestName, - fn?: (done: JestDoneFn) => ?Promise, + fn?: (done: JestDoneFn) => ?Promise, timeout?: number, ): void, /** @@ -1079,14 +1079,14 @@ declare var it: { only: { ( name: JestTestName, - fn?: (done: JestDoneFn) => ?Promise, + fn?: (done: JestDoneFn) => ?Promise, timeout?: number, ): void, each( - ...table: Array | mixed> | [Array, string] + ...table: Array | unknown> | [Array, string] ): ( name: JestTestName, - fn?: (...args: Array) => ?Promise, + fn?: (...args: Array) => ?Promise, timeout?: number, ) => void, }, @@ -1100,14 +1100,14 @@ declare var it: { skip: { ( name: JestTestName, - fn?: (done: JestDoneFn) => ?Promise, + fn?: (done: JestDoneFn) => ?Promise, timeout?: number, ): void, each( - ...table: Array | mixed> | [Array, string] + ...table: Array | unknown> | [Array, string] ): ( name: JestTestName, - fn?: (...args: Array) => ?Promise, + fn?: (...args: Array) => ?Promise, timeout?: number, ) => void, }, @@ -1126,7 +1126,7 @@ declare var it: { */ concurrent( name: JestTestName, - fn?: (done: JestDoneFn) => ?Promise, + fn?: (done: JestDoneFn) => ?Promise, timeout?: number, ): void, /** @@ -1136,11 +1136,11 @@ declare var it: { */ each( ...table: - | $ReadOnlyArray<$ReadOnlyArray | mixed> - | [$ReadOnlyArray, string] + | ReadonlyArray | unknown> + | [ReadonlyArray, string] ): ( name: JestTestName, - fn?: (...args: Array) => ?Promise, + fn?: (...args: Array) => ?Promise, timeout?: number, ) => void, ... @@ -1148,7 +1148,7 @@ declare var it: { declare function fit( name: JestTestName, - fn: (done: JestDoneFn) => ?Promise, + fn: (done: JestDoneFn) => ?Promise, timeout?: number, ): void; /** An individual test unit */ @@ -1249,16 +1249,16 @@ declare var expect: { addSnapshotSerializer(pluginModule: JestPrettyFormatPlugin): void, assertions(expectedAssertions: number): void, hasAssertions(): void, - any(value: mixed): JestAsymmetricEqualityType, + any(value: unknown): JestAsymmetricEqualityType, anything(): any, // MODIFIED: Array -> $ReadOnlyArray - arrayContaining(value: $ReadOnlyArray): Array, + arrayContaining(value: ReadonlyArray): Array, objectContaining(value: Object): Object, /** Matches any received string that contains the exact expected string. */ stringContaining(value: string): string, stringMatching(value: string | RegExp): string, not: { - arrayContaining: (value: $ReadOnlyArray) => Array, + arrayContaining: (value: ReadonlyArray) => Array, objectContaining: (value: {...}) => Object, stringContaining: (value: string) => string, stringMatching: (value: string | RegExp) => string, @@ -1269,7 +1269,7 @@ declare var expect: { // TODO handle return type // http://jasmine.github.io/2.4/introduction.html#section-Spies -declare function spyOn(value: mixed, method: string): Object; +declare function spyOn(value: unknown, method: string): Object; /** Holds all functions related to manipulating test runner */ declare var jest: JestObjectType; @@ -1280,9 +1280,9 @@ declare var jest: JestObjectType; */ declare var jasmine: { DEFAULT_TIMEOUT_INTERVAL: number, - any(value: mixed): JestAsymmetricEqualityType, + any(value: unknown): JestAsymmetricEqualityType, anything(): any, - arrayContaining(value: Array): Array, + arrayContaining(value: Array): Array, clock(): JestClockType, createSpy(name: string): JestSpyType, createSpyObj( diff --git a/flow-typed/npm/jsonc-parser_v2.2.x.js b/flow-typed/npm/jsonc-parser_v2.2.x.js index 50316cb13e91..51eadf91b48a 100644 --- a/flow-typed/npm/jsonc-parser_v2.2.x.js +++ b/flow-typed/npm/jsonc-parser_v2.2.x.js @@ -22,7 +22,7 @@ declare module 'jsonc-parser' { /** * The scanner object, representing a JSON scanner at a position in the input string. */ - export type JSONScanner = $ReadOnly<{ + export type JSONScanner = Readonly<{ /** * Sets the scan position to a new offset. A call to 'scan' is needed to get the first token. */ @@ -351,7 +351,7 @@ declare module 'jsonc-parser' { /** * Options used by {@linkcode format} when computing the formatting edit operations */ - export type FormattingOptions = $ReadOnly<{ + export type FormattingOptions = Readonly<{ /** * If indentation is based on spaces (`insertSpaces` = true), the number of spaces that make an indent. */ diff --git a/flow-typed/npm/listr2_v8.x.x.js b/flow-typed/npm/listr2_v8.x.x.js index 02ec1761408f..b072831f66ed 100644 --- a/flow-typed/npm/listr2_v8.x.x.js +++ b/flow-typed/npm/listr2_v8.x.x.js @@ -8,7 +8,7 @@ declare module 'listr2' { declare export type TaskResult< ContextT = {__proto__: null}, - ReturnT = mixed, + ReturnT = unknown, > = | ReturnT | Promise @@ -35,7 +35,7 @@ declare module 'listr2' { declare export type TaskSpec< ContextT = {__proto__: null}, - ReturnT = mixed, + ReturnT = unknown, > = { title: string, task: TaskFn, @@ -55,7 +55,7 @@ declare module 'listr2' { options?: Options, ): void; add(task: TaskSpec): this; - add(tasks: $ReadOnlyArray>): this; + add(tasks: ReadonlyArray>): this; run(ctx?: ContextT): Promise; } } diff --git a/flow-typed/npm/listr_v14.x.x.js b/flow-typed/npm/listr_v14.x.x.js index 2e8e52ac6d52..8372dc9caf38 100644 --- a/flow-typed/npm/listr_v14.x.x.js +++ b/flow-typed/npm/listr_v14.x.x.js @@ -8,7 +8,7 @@ declare module 'listr' { declare export type TaskResult< ContextT = {__proto__: null}, - ReturnT = mixed, + ReturnT = unknown, > = | ReturnT | Promise @@ -35,7 +35,7 @@ declare module 'listr' { declare export type TaskSpec< ContextT = {__proto__: null}, - ReturnT = mixed, + ReturnT = unknown, > = { title: string, task: TaskFn, @@ -55,7 +55,7 @@ declare module 'listr' { options?: Options, ): void; add(task: TaskSpec): this; - add(tasks: $ReadOnlyArray>): this; + add(tasks: ReadonlyArray>): this; run(ctx?: ContextT): Promise; } } diff --git a/flow-typed/npm/node-fetch_v2.x.x.js b/flow-typed/npm/node-fetch_v2.x.x.js index 81441ccd0bc3..5b6b9cc51b46 100644 --- a/flow-typed/npm/node-fetch_v2.x.x.js +++ b/flow-typed/npm/node-fetch_v2.x.x.js @@ -20,8 +20,8 @@ declare module 'node-fetch' { +aborted: boolean, +onabort: (event?: {...}) => void, - +addEventListener: (name: string, cb: () => mixed) => void, - +removeEventListener: (name: string, cb: () => mixed) => void, + +addEventListener: (name: string, cb: () => unknown) => void, + +removeEventListener: (name: string, cb: () => unknown) => void, +dispatchEvent: (event: {...}) => void, ... }; diff --git a/flow-typed/npm/open_v7.x.x.js b/flow-typed/npm/open_v7.x.x.js index 19629e3c4f30..25f62fae2179 100644 --- a/flow-typed/npm/open_v7.x.x.js +++ b/flow-typed/npm/open_v7.x.x.js @@ -11,7 +11,7 @@ declare module 'open' { import type {ChildProcess} from 'child_process'; - declare export type Options = $ReadOnly<{ + declare export type Options = Readonly<{ wait?: boolean, background?: boolean, newInstance?: boolean, diff --git a/flow-typed/npm/pretty-format_v29.x.x.js b/flow-typed/npm/pretty-format_v29.x.x.js index 1fd2dfe577f0..a13951717f0f 100644 --- a/flow-typed/npm/pretty-format_v29.x.x.js +++ b/flow-typed/npm/pretty-format_v29.x.x.js @@ -4,7 +4,7 @@ * @flow strict * @format */ -declare type Print = (value: mixed) => string; +declare type Print = (value: unknown) => string; declare type Indent = (value: string) => string; declare type PluginOptions = { edgeSpacing: string, @@ -22,17 +22,17 @@ declare type Colors = { declare type PrettyFormatPlugin = | { print: ( - value: mixed, + value: unknown, print?: ?Print, indent?: ?Indent, options?: ?PluginOptions, colors?: ?Colors, ) => string, - test: (value: mixed) => boolean, + test: (value: unknown) => boolean, } | { - serialize: (value: mixed) => string, - test: (value: mixed) => boolean, + serialize: (value: unknown) => string, + test: (value: unknown) => boolean, }; declare module 'pretty-format' { @@ -41,7 +41,7 @@ declare module 'pretty-format' { | null | void; declare export function format( - value: mixed, + value: unknown, options?: ?{ callToJSON?: ?boolean, compareKeys?: CompareKeys, diff --git a/flow-typed/npm/promise_v8.x.x.js b/flow-typed/npm/promise_v8.x.x.js index f7eb92e4d12d..7358622e3bea 100644 --- a/flow-typed/npm/promise_v8.x.x.js +++ b/flow-typed/npm/promise_v8.x.x.js @@ -19,10 +19,10 @@ declare module 'promise/setimmediate/rejection-tracking' { declare module.exports: { enable: ( options?: ?{ - whitelist?: ?Array, + whitelist?: ?Array, allRejections?: ?boolean, - onUnhandled?: ?(number, mixed) => void, - onHandled?: ?(number, mixed) => void, + onUnhandled?: ?(number, unknown) => void, + onHandled?: ?(number, unknown) => void, }, ) => void, disable: () => void, diff --git a/flow-typed/npm/react-dom_v17.x.x.js b/flow-typed/npm/react-dom_v17.x.x.js index cc2f334626fe..2aa09e1b8871 100644 --- a/flow-typed/npm/react-dom_v17.x.x.js +++ b/flow-typed/npm/react-dom_v17.x.x.js @@ -4,44 +4,44 @@ declare module 'react-dom' { declare var version: string; declare function findDOMNode( - componentOrElement: Element | ?Component + componentOrElement: Element | ?Component, ): null | Element | Text; declare function render( element: ExactReactElement_DEPRECATED, container: Element, - callback?: () => void + callback?: () => void, ): React.ElementRef; declare function hydrate( element: ExactReactElement_DEPRECATED, container: Element, - callback?: () => void + callback?: () => void, ): React.ElementRef; declare function createPortal( node: React.Node, - container: Element + container: Element, ): React.Portal; declare function unmountComponentAtNode(container: any): boolean; declare function unstable_batchedUpdates( - callback: (a: A, b: B, c: C, d: D, e: E) => mixed, + callback: (a: A, b: B, c: C, d: D, e: E) => unknown, a: A, b: B, c: C, d: D, - e: E + e: E, ): void; declare function unstable_renderSubtreeIntoContainer< - ElementType: React.ElementType + ElementType: React.ElementType, >( parentComponent: Component, nextElement: ExactReactElement_DEPRECATED, container: any, - callback?: () => void + callback?: () => void, ): React.ElementRef; } @@ -55,7 +55,7 @@ declare module 'react-dom/server' { declare function renderToNodeStream(element: React.Node): stream$Readable; declare function renderToStaticNodeStream( - element: React.Node + element: React.Node, ): stream$Readable; } @@ -63,77 +63,75 @@ declare module 'react-dom/test-utils' { import type {Component} from 'react'; declare interface Thenable { - then(resolve: () => mixed, reject?: () => mixed): mixed, + then(resolve: () => unknown, reject?: () => unknown): unknown; } declare var Simulate: { [eventName: string]: ( element: Element, - eventData?: { [key: string]: mixed, ... } + eventData?: {[key: string]: unknown, ...}, ) => void, ... }; declare function renderIntoDocument( - instance: React.MixedElement + instance: React.MixedElement, ): Component; declare function mockComponent( componentClass: React.ElementType, - mockTagName?: string - ): { [key: string]: mixed, ... }; + mockTagName?: string, + ): {[key: string]: unknown, ...}; declare function isElement(element: React.MixedElement): boolean; declare function isElementOfType( element: React.MixedElement, - componentClass: React.ElementType + componentClass: React.ElementType, ): boolean; declare function isDOMComponent(instance: any): boolean; - declare function isCompositeComponent( - instance: Component - ): boolean; + declare function isCompositeComponent(instance: Component): boolean; declare function isCompositeComponentWithType( instance: Component, - componentClass: React.ElementType + componentClass: React.ElementType, ): boolean; declare function findAllInRenderedTree( tree: Component, - test: (child: Component) => boolean + test: (child: Component) => boolean, ): Array>; declare function scryRenderedDOMComponentsWithClass( tree: Component, - className: string + className: string, ): Array; declare function findRenderedDOMComponentWithClass( tree: Component, - className: string + className: string, ): ?Element; declare function scryRenderedDOMComponentsWithTag( tree: Component, - tagName: string + tagName: string, ): Array; declare function findRenderedDOMComponentWithTag( tree: Component, - tagName: string + tagName: string, ): ?Element; declare function scryRenderedComponentsWithType( tree: Component, - componentClass: React.ElementType + componentClass: React.ElementType, ): Array>; declare function findRenderedComponentWithType( tree: Component, - componentClass: React.ElementType + componentClass: React.ElementType, ): ?Component; declare function act(callback: () => void | Thenable): Thenable; diff --git a/flow-typed/npm/react-test-renderer_v16.x.x.js b/flow-typed/npm/react-test-renderer_v16.x.x.js index e27d1a6d2114..067a36f54747 100644 --- a/flow-typed/npm/react-test-renderer_v16.x.x.js +++ b/flow-typed/npm/react-test-renderer_v16.x.x.js @@ -1,22 +1,25 @@ // Type definitions for react-test-renderer 16.x.x // Ported from: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react-test-renderer -type TestRendererOptions = { createNodeMock(element: React.MixedElement): any, ... }; +type TestRendererOptions = { + createNodeMock(element: React.MixedElement): any, + ... +}; -declare module "react-test-renderer" { +declare module 'react-test-renderer' { import type {Component as ReactComponent} from 'react'; type ReactComponentInstance = ReactComponent; export type ReactTestRendererJSON = { type: string, - props: { [propName: string]: any, ... }, + props: {[propName: string]: any, ...}, children: null | ReactTestRendererJSON[], ... }; export type ReactTestRendererTree = ReactTestRendererJSON & { - nodeType: "component" | "host", + nodeType: 'component' | 'host', instance: ?ReactComponentInstance, rendered: null | ReactTestRendererTree, ... @@ -25,23 +28,23 @@ declare module "react-test-renderer" { export type ReactTestInstance = { instance: ?ReactComponentInstance, type: string, - props: { [propName: string]: any, ... }, + props: {[propName: string]: any, ...}, parent: null | ReactTestInstance, children: Array, find(predicate: (node: ReactTestInstance) => boolean): ReactTestInstance, findByType(type: React.ElementType): ReactTestInstance, - findByProps(props: { [propName: string]: any, ... }): ReactTestInstance, + findByProps(props: {[propName: string]: any, ...}): ReactTestInstance, findAll( predicate: (node: ReactTestInstance) => boolean, - options?: { deep: boolean, ... } + options?: {deep: boolean, ...}, ): ReactTestInstance[], findAllByType( type: React.ElementType, - options?: { deep: boolean, ... } + options?: {deep: boolean, ...}, ): ReactTestInstance[], findAllByProps( - props: { [propName: string]: any, ... }, - options?: { deep: boolean, ... } + props: {[propName: string]: any, ...}, + options?: {deep: boolean, ...}, ): ReactTestInstance[], ... }; @@ -56,17 +59,20 @@ declare module "react-test-renderer" { ... }; - declare type Thenable = { then(resolve: () => mixed, reject?: () => mixed): mixed, ... }; + declare type Thenable = { + then(resolve: () => unknown, reject?: () => unknown): unknown, + ... + }; declare function create( nextElement: React.MixedElement, - options?: TestRendererOptions + options?: TestRendererOptions, ): ReactTestRenderer; declare function act(callback: () => void | Promise): Thenable; } -declare module "react-test-renderer/shallow" { +declare module 'react-test-renderer/shallow' { import type {ReactTestInstance} from 'react-test-renderer'; declare export default class ShallowRenderer { diff --git a/flow-typed/npm/rxjs_v6.x.x.js b/flow-typed/npm/rxjs_v6.x.x.js index 8963f46bf1fd..a8c085b8a548 100644 --- a/flow-typed/npm/rxjs_v6.x.x.js +++ b/flow-typed/npm/rxjs_v6.x.x.js @@ -52,7 +52,7 @@ declare type rxjs$ObservableInput = | Iterable; declare type rxjs$InteropObservable = { - [string | mixed]: () => rxjs$Subscribable, + [string | unknown]: () => rxjs$Subscribable, ... }; /** OBSERVER INTERFACES */ @@ -371,7 +371,7 @@ declare module 'rxjs' { iif: typeof rxjs$iif, ConnectableObservable: typeof rxjs$ConnectableObservable, GroupedObservable: typeof rxjs$GroupedObservable, - observable: string | mixed, + observable: string | unknown, Subject: typeof rxjs$Subject, BehaviorSubject: typeof BehaviorSubject, ReplaySubject: typeof ReplaySubject, @@ -598,7 +598,7 @@ declare module 'rxjs' { UnsubscriptionError: UnsubscriptionError, TimeoutError: TimeoutError, fromEvent: ( - target: mixed, + target: unknown, eventName: string, options?: rxjs$EventListenerOptions | ((...args: any[]) => T), // @deprecated resultSelector no longer supported, pipe to map instead @@ -971,7 +971,7 @@ declare module 'rxjs' { ) => any, ) => any, scheduler?: rxjs$SchedulerLike, - ) => () => rxjs$Observable) & + ) => () => rxjs$Observable) & (( callbackFunc: (callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: rxjs$SchedulerLike, @@ -1000,7 +1000,7 @@ declare module 'rxjs' { ) => any, ) => any, scheduler?: rxjs$SchedulerLike, - ) => (arg1: A1) => rxjs$Observable) & + ) => (arg1: A1) => rxjs$Observable) & (( callbackFunc: ( arg1: A1, @@ -1033,7 +1033,7 @@ declare module 'rxjs' { ) => any, ) => any, scheduler?: rxjs$SchedulerLike, - ) => (arg1: A1, arg2: A2) => rxjs$Observable) & + ) => (arg1: A1, arg2: A2) => rxjs$Observable) & (( callbackFunc: ( arg1: A1, @@ -1072,7 +1072,7 @@ declare module 'rxjs' { ) => any, ) => any, scheduler?: rxjs$SchedulerLike, - ) => (arg1: A1, arg2: A2, arg3: A3) => rxjs$Observable) & + ) => (arg1: A1, arg2: A2, arg3: A3) => rxjs$Observable) & (( callbackFunc: ( arg1: A1, @@ -1129,7 +1129,7 @@ declare module 'rxjs' { arg2: A2, arg3: A3, arg4: A4, - ) => rxjs$Observable) & + ) => rxjs$Observable) & (( callbackFunc: ( arg1: A1, @@ -1202,7 +1202,7 @@ declare module 'rxjs' { arg3: A3, arg4: A4, arg5: A5, - ) => rxjs$Observable) & + ) => rxjs$Observable) & (( callbackFunc: ( arg1: A1, @@ -1301,7 +1301,7 @@ declare module 'rxjs' { ) => any, ) => any, scheduler?: rxjs$SchedulerLike, - ) => (...args: any[]) => rxjs$Observable) & + ) => (...args: any[]) => rxjs$Observable) & (( callbackFunc: ( callback: (err: any, res1: R1, res2: R2, res3: R3) => any, @@ -1370,7 +1370,7 @@ declare module 'rxjs' { ) => any, ) => any, scheduler?: rxjs$SchedulerLike, - ) => (...args: any[]) => rxjs$Observable) & + ) => (...args: any[]) => rxjs$Observable) & (( callbackFunc: ( arg1: A1, @@ -1467,7 +1467,7 @@ declare module 'rxjs' { ) => any, ) => any, scheduler?: rxjs$SchedulerLike, - ) => (...args: any[]) => rxjs$Observable) & + ) => (...args: any[]) => rxjs$Observable) & (( callbackFunc: ( arg1: A1, @@ -1535,7 +1535,7 @@ declare module 'rxjs' { ) => any, ) => any, scheduler?: rxjs$SchedulerLike, - ) => (...args: any[]) => rxjs$Observable) & + ) => (...args: any[]) => rxjs$Observable) & (( callbackFunc: ( arg1: A1, @@ -1607,7 +1607,7 @@ declare module 'rxjs' { (( callbackFunc: Function, scheduler?: rxjs$SchedulerLike, - ) => (...args: any[]) => rxjs$Observable), + ) => (...args: any[]) => rxjs$Observable), // @deprecated resultSelector no longer supported, pipe to map instead combineLatest: (( v1: rxjs$ObservableInput, @@ -1833,12 +1833,12 @@ declare module 'rxjs' { } declare class AsapScheduler extends AsyncScheduler { - flush(action?: AsyncAction): void; + flush(action?: AsyncAction): void; } declare class AsyncScheduler extends Scheduler { static delegate: Scheduler; - actions: Array>; + actions: Array>; // @deprecated internal use only active: boolean; // @deprecated internal use only @@ -1849,26 +1849,30 @@ declare module 'rxjs' { delay?: number, state?: T, ): rxjs$Subscription; - flush(action: AsyncAction): void; + flush(action: AsyncAction): void; } declare class QueueScheduler extends AsyncScheduler {} declare class AnimationFrameScheduler extends AsyncScheduler { - flush(action?: AsyncAction): void; + flush(action?: AsyncAction): void; } declare class AsyncAction extends Action { scheduler: AsyncScheduler; work: (state?: T) => void; - id: mixed; + id: unknown; state: T; delay: number; pending: boolean; constructor(scheduler: AsyncScheduler, work: (state?: T) => void): void; schedule(state?: T, delay?: number): rxjs$Subscription; - requestAsyncId(scheduler: AsyncScheduler, id?: mixed, delay?: number): any; - recycleAsyncId(scheduler: AsyncScheduler, id: mixed, delay?: number): any; + requestAsyncId( + scheduler: AsyncScheduler, + id?: unknown, + delay?: number, + ): any; + recycleAsyncId(scheduler: AsyncScheduler, id: unknown, delay?: number): any; execute(state: T, delay: number): any; _execute(state: T, delay: number): any; // @deprecated This is an internal implementation detail, do not use. @@ -1883,7 +1887,7 @@ declare module 'rxjs' { declare module 'rxjs/operators' { declare export function audit( - durationSelector: (value: T) => rxjs$SubscribableOrPromise, + durationSelector: (value: T) => rxjs$SubscribableOrPromise, ): rxjs$MonoTypeOperatorFunction; declare export function auditTime( @@ -1920,11 +1924,11 @@ declare module 'rxjs/operators' { declare export function bufferToggle( openings: rxjs$SubscribableOrPromise, - closingSelector: (value: O) => rxjs$SubscribableOrPromise, + closingSelector: (value: O) => rxjs$SubscribableOrPromise, ): rxjs$OperatorFunction; declare export function bufferWhen( - closingSelector: () => rxjs$Observable, + closingSelector: () => rxjs$Observable, ): rxjs$OperatorFunction; // declare export function catchError(selector: (err: any, caught: rxjs$Observable) => empty): rxjs$MonoTypeOperatorFunction; @@ -1938,15 +1942,15 @@ declare module 'rxjs/operators' { T[], >; - declare export function combineAll(): rxjs$OperatorFunction; + declare export function combineAll(): rxjs$OperatorFunction; declare export function combineAll( project: (...values: T[]) => R, ): rxjs$OperatorFunction, R>; declare export function combineAll( - project: (...values: Array) => R, - ): rxjs$OperatorFunction; + project: (...values: Array) => R, + ): rxjs$OperatorFunction; // @deprecated Deprecated in favor of static combineLatest. declare export function combineLatest( @@ -2095,7 +2099,7 @@ declare module 'rxjs/operators' { ): rxjs$MonoTypeOperatorFunction; // @deprecated Deprecated in favor of static concat. declare export function concat( - ...observables: Array | rxjs$SchedulerLike> + ...observables: Array | rxjs$SchedulerLike> ): rxjs$OperatorFunction; declare export function concatAll(): rxjs$OperatorFunction< @@ -2103,7 +2107,7 @@ declare module 'rxjs/operators' { T, >; - declare export function concatAll(): rxjs$OperatorFunction; + declare export function concatAll(): rxjs$OperatorFunction; declare export function concatMap( project: (value: T, index: number) => rxjs$ObservableInput, @@ -2117,13 +2121,13 @@ declare module 'rxjs/operators' { declare export function concatMapTo( observable: rxjs$ObservableInput, - ): rxjs$OperatorFunction; + ): rxjs$OperatorFunction; // @deprecated declare export function concatMapTo( observable: rxjs$ObservableInput, resultSelector: void, - ): rxjs$OperatorFunction; + ): rxjs$OperatorFunction; // @deprecated declare export function concatMapTo( observable: rxjs$ObservableInput, @@ -2144,7 +2148,7 @@ declare module 'rxjs/operators' { ): rxjs$OperatorFunction; declare export function debounce( - durationSelector: (value: T) => rxjs$SubscribableOrPromise, + durationSelector: (value: T) => rxjs$SubscribableOrPromise, ): rxjs$MonoTypeOperatorFunction; declare export function debounceTime( @@ -2162,8 +2166,11 @@ declare module 'rxjs/operators' { ): rxjs$MonoTypeOperatorFunction; declare export function delayWhen( - delayDurationSelector: (value: T, index: number) => rxjs$Observable, - subscriptionDelay?: rxjs$Observable, + delayDurationSelector: ( + value: T, + index: number, + ) => rxjs$Observable, + subscriptionDelay?: rxjs$Observable, ): rxjs$MonoTypeOperatorFunction; declare export function dematerialize(): rxjs$OperatorFunction< @@ -2173,7 +2180,7 @@ declare module 'rxjs/operators' { declare export function distinct( keySelector?: (value: T) => K, - flushes?: rxjs$Observable, + flushes?: rxjs$Observable, ): rxjs$MonoTypeOperatorFunction; declare export function distinctUntilChanged( @@ -2186,12 +2193,12 @@ declare module 'rxjs/operators' { ): rxjs$MonoTypeOperatorFunction; declare export function distinctUntilKeyChanged( - key: $Keys, + key: keyof T, ): rxjs$MonoTypeOperatorFunction; - declare export function distinctUntilKeyChanged>( + declare export function distinctUntilKeyChanged( key: K, - compare: (x: mixed, y: mixed) => boolean, + compare: (x: unknown, y: unknown) => boolean, ): rxjs$MonoTypeOperatorFunction; declare export function elementAt( @@ -2259,7 +2266,7 @@ declare module 'rxjs/operators' { T, >; - declare export function exhaust(): rxjs$OperatorFunction; + declare export function exhaust(): rxjs$OperatorFunction; declare export function exhaustMap( project: (value: T, index: number) => rxjs$ObservableInput, @@ -2334,7 +2341,7 @@ declare module 'rxjs/operators' { elementSelector: void, durationSelector: ( grouped: rxjs$GroupedObservable, - ) => rxjs$Observable, + ) => rxjs$Observable, ): rxjs$OperatorFunction>; declare export function groupBy( @@ -2342,7 +2349,7 @@ declare module 'rxjs/operators' { elementSelector?: (value: T) => R, durationSelector?: ( grouped: rxjs$GroupedObservable, - ) => rxjs$Observable, + ) => rxjs$Observable, subjectSelector?: () => rxjs$Subject, ): rxjs$OperatorFunction>; @@ -2487,7 +2494,7 @@ declare module 'rxjs/operators' { // @deprecated Deprecated in favor of static merge. declare export function merge( ...observables: Array< - rxjs$ObservableInput | rxjs$SchedulerLike | number, + rxjs$ObservableInput | rxjs$SchedulerLike | number, > ): rxjs$OperatorFunction; @@ -2517,7 +2524,7 @@ declare module 'rxjs/operators' { declare export function mergeMapTo( innerObservable: rxjs$ObservableInput, concurrent?: number, - ): rxjs$OperatorFunction; + ): rxjs$OperatorFunction; // @deprecated declare export function mergeMapTo( @@ -2600,12 +2607,12 @@ declare module 'rxjs/operators' { declare export function onErrorResumeNext( ...observables: Array< - rxjs$ObservableInput | ((...values: Array) => R), + rxjs$ObservableInput | ((...values: Array) => R), > ): rxjs$OperatorFunction; declare export function onErrorResumeNext( - array: rxjs$ObservableInput[], + array: rxjs$ObservableInput[], ): rxjs$OperatorFunction; declare export function onErrorResumeNextStatic( @@ -2640,12 +2647,12 @@ declare module 'rxjs/operators' { declare export function onErrorResumeNextStatic( ...observables: Array< - rxjs$ObservableInput | ((...values: Array) => R), + rxjs$ObservableInput | ((...values: Array) => R), > ): rxjs$Observable; declare export function onErrorResumeNextStatic( - array: rxjs$ObservableInput[], + array: rxjs$ObservableInput[], ): rxjs$Observable; declare export function pairwise(): rxjs$OperatorFunction; @@ -2722,7 +2729,7 @@ declare module 'rxjs/operators' { // @deprecated Deprecated in favor of static race. declare export function race( ...observables: Array< - rxjs$Observable | Array>, + rxjs$Observable | Array>, > ): rxjs$OperatorFunction; @@ -2745,7 +2752,7 @@ declare module 'rxjs/operators' { ): rxjs$MonoTypeOperatorFunction; declare export function repeatWhen( - notifier: (notifications: rxjs$Observable) => rxjs$Observable, + notifier: (notifications: rxjs$Observable) => rxjs$Observable, ): rxjs$MonoTypeOperatorFunction; declare export function retry( @@ -2753,7 +2760,7 @@ declare module 'rxjs/operators' { ): rxjs$MonoTypeOperatorFunction; declare export function retryWhen( - notifier: (errors: rxjs$Observable) => rxjs$Observable, + notifier: (errors: rxjs$Observable) => rxjs$Observable, ): rxjs$MonoTypeOperatorFunction; // @todo - find out why this used to return: (rxjs$Observable) => rxjs$Observable @@ -2900,7 +2907,7 @@ declare module 'rxjs/operators' { declare export function switchMapTo( observable: rxjs$ObservableInput, - ): rxjs$OperatorFunction; + ): rxjs$OperatorFunction; // @deprecated resultSelector is no longer supported. Switch to using switchMap with an inner map declare export function switchMapTo( @@ -2942,9 +2949,9 @@ declare module 'rxjs/operators' { ): rxjs$MonoTypeOperatorFunction; declare export function tap( - next?: (x: T) => mixed, - error?: (e: any) => mixed, - complete?: () => mixed, + next?: (x: T) => unknown, + error?: (e: any) => unknown, + complete?: () => unknown, ): rxjs$MonoTypeOperatorFunction; declare export function tap( @@ -2957,7 +2964,7 @@ declare module 'rxjs/operators' { } declare export function throttle( - durationSelector: (value: T) => rxjs$SubscribableOrPromise, + durationSelector: (value: T) => rxjs$SubscribableOrPromise, config?: ThrottleConfig, ): rxjs$MonoTypeOperatorFunction; @@ -2993,7 +3000,7 @@ declare module 'rxjs/operators' { declare export function toArray(): rxjs$OperatorFunction; declare export function window( - windowBoundaries: rxjs$Observable, + windowBoundaries: rxjs$Observable, ): rxjs$OperatorFunction>; declare export function windowCount( @@ -3021,11 +3028,11 @@ declare module 'rxjs/operators' { declare export function windowToggle( openings: rxjs$Observable, - closingSelector: (openValue: O) => rxjs$Observable, + closingSelector: (openValue: O) => rxjs$Observable, ): rxjs$OperatorFunction>; declare export function windowWhen( - closingSelector: () => rxjs$Observable, + closingSelector: () => rxjs$Observable, ): rxjs$OperatorFunction>; declare export function withLatestFrom( @@ -3099,16 +3106,16 @@ declare module 'rxjs/operators' { declare export function withLatestFrom( ...observables: Array< - rxjs$ObservableInput | ((...values: Array) => R), + rxjs$ObservableInput | ((...values: Array) => R), > ): rxjs$OperatorFunction; declare export function withLatestFrom( - array: rxjs$ObservableInput[], + array: rxjs$ObservableInput[], ): rxjs$OperatorFunction; declare export function withLatestFrom( - array: rxjs$ObservableInput[], + array: rxjs$ObservableInput[], project: (...values: Array) => R, ): rxjs$OperatorFunction; @@ -3215,7 +3222,7 @@ declare module 'rxjs/operators' { T[], >; - declare export function zipAll(): rxjs$OperatorFunction; + declare export function zipAll(): rxjs$OperatorFunction; declare export function zipAll( project: (...values: T[]) => R, @@ -3223,7 +3230,7 @@ declare module 'rxjs/operators' { declare export function zipAll( project: (...values: Array) => R, - ): rxjs$OperatorFunction; + ): rxjs$OperatorFunction; declare export function iif( condition: () => boolean, @@ -3234,7 +3241,7 @@ declare module 'rxjs/operators' { declare export function throwError( error: any, scheduler?: rxjs$SchedulerLike, - ): rxjs$Observable; + ): rxjs$Observable; } declare module 'rxjs/ajax' { @@ -3251,7 +3258,7 @@ declare module 'rxjs/ajax' { crossDomain?: boolean; withCredentials?: boolean; createXHR?: () => XMLHttpRequest; - progressSubscriber?: rxjs$Subscriber; + progressSubscriber?: rxjs$Subscriber; responseType?: string; } @@ -3352,7 +3359,7 @@ declare module 'rxjs/webSocket' { subMsg: () => any, unsubMsg: () => any, messageFilter: (value: T) => boolean, - ): rxjs$Observable; + ): rxjs$Observable; // @deprecated This is an internal implementation detail, do not use. _subscribe(subscriber: rxjs$Subscriber): rxjs$Subscription; unsubscribe(): void; diff --git a/flow-typed/npm/selfsigned_v2.x.x.js b/flow-typed/npm/selfsigned_v2.x.x.js index 4e41a70fe7c8..1bff6cb3e4a9 100644 --- a/flow-typed/npm/selfsigned_v2.x.x.js +++ b/flow-typed/npm/selfsigned_v2.x.x.js @@ -30,7 +30,7 @@ declare module 'selfsigned' { /** * additional extensions for the certificate */ - extensions?: mixed[]; + extensions?: unknown[]; /** * The signature algorithm sha256 or sha1 * @default "sha1" @@ -74,7 +74,7 @@ declare module 'selfsigned' { attrs?: pki$CertificateField[], opts?: SelfsignedOptions, /** Optional callback, if not provided the generation is synchronous */ - done?: (err: void | Error, result: GenerateResult) => mixed, + done?: (err: void | Error, result: GenerateResult) => unknown, ): void; // definitions from node-forge's `pki` and `asn1` namespaces @@ -94,7 +94,7 @@ declare module 'selfsigned' { declare interface pki$CertificateField extends pki$CertificateFieldOptions { valueConstructed?: boolean | void; valueTagClass?: asn1$Class | void; - value?: mixed[] | string | void; - extensions?: mixed[] | void; + value?: unknown[] | string | void; + extensions?: unknown[] | void; } } diff --git a/flow-typed/npm/serve-static_v1.x.x.js b/flow-typed/npm/serve-static_v1.x.x.js index 5ea71ddda7e3..d04a56fe4a84 100644 --- a/flow-typed/npm/serve-static_v1.x.x.js +++ b/flow-typed/npm/serve-static_v1.x.x.js @@ -12,7 +12,7 @@ declare module 'serve-static' { import type {NextHandleFunction} from 'connect'; import type http from 'http'; - declare export type Options = $ReadOnly<{ + declare export type Options = Readonly<{ /** * Enable or disable accepting ranged requests, defaults to true. Disabling * this will not send `Accept-Ranges` and ignore the contents of the diff --git a/flow-typed/npm/shelljs_v0.x.x.js b/flow-typed/npm/shelljs_v0.x.x.js index 9e1ca8fe8055..51567de3d7dc 100644 --- a/flow-typed/npm/shelljs_v0.x.x.js +++ b/flow-typed/npm/shelljs_v0.x.x.js @@ -34,7 +34,8 @@ declare type $npm$shelljs$OptionsPoly = { declare interface $npm$shelljs$ExecThen { (code: number, stdout: string, stderr: string): void; } -declare type $npm$shelljs$ExecOptionsPoly = T & { +declare type $npm$shelljs$ExecOptionsPoly = { + ...T, async?: boolean, silent?: boolean, ... diff --git a/flow-typed/npm/signedsource_v1.x.x.js b/flow-typed/npm/signedsource_v1.x.x.js index d82725250c11..6adbdb25d0c5 100644 --- a/flow-typed/npm/signedsource_v1.x.x.js +++ b/flow-typed/npm/signedsource_v1.x.x.js @@ -12,7 +12,7 @@ declare module 'signedsource' { isSigned(data: string): boolean, signFile(data: string): string, verifySignature(data: string): boolean, - [key: string]: mixed, + [key: string]: unknown, }; declare module.exports: SignedSource; diff --git a/flow-typed/npm/tinybench_v4.1.x.js b/flow-typed/npm/tinybench_v4.1.x.js index 56412034a9d6..2b6bbba9bafa 100644 --- a/flow-typed/npm/tinybench_v4.1.x.js +++ b/flow-typed/npm/tinybench_v4.1.x.js @@ -11,7 +11,7 @@ declare module 'tinybench' { declare export class Task extends EventTarget { name: string; - result: void | $ReadOnly; + result: void | Readonly; runs: number; reset(): void; @@ -108,13 +108,13 @@ declare module 'tinybench' { declare export class Bench extends EventTarget { concurrency: null | 'task' | 'bench'; name?: string; - opts: $ReadOnly; + opts: Readonly; threshold: number; constructor(options?: BenchOptions): this; // $FlowExpectedError[unsafe-getters-setters] - get results(): Array<$ReadOnly>; + get results(): Array>; // $FlowExpectedError[unsafe-getters-setters] get tasks(): Array; diff --git a/flow-typed/npm/tinyglobby_v0.2.x.js b/flow-typed/npm/tinyglobby_v0.2.x.js new file mode 100644 index 000000000000..96e77c27eb00 --- /dev/null +++ b/flow-typed/npm/tinyglobby_v0.2.x.js @@ -0,0 +1,43 @@ +declare module 'tinyglobby' { + import typeof FSModule from 'fs'; + + declare type FileSystemAdapter = Partial; + + declare type GlobOptions = { + absolute?: boolean, + braceExpansion?: boolean, + caseSensitiveMatch?: boolean, + cwd?: string | URL, + debug?: boolean, + deep?: number, + dot?: boolean, + expandDirectories?: boolean, + extglob?: boolean, + followSymbolicLinks?: boolean, + fs?: FileSystemAdapter, + globstar?: boolean, + ignore?: string | ReadonlyArray, + onlyDirectories?: boolean, + onlyFiles?: boolean, + signal?: AbortSignal, + }; + + declare type GlobModule = { + convertPathToPattern(path: string): string, + escapePath(path: string): string, + isDynamicPattern( + pattern: string, + options?: {caseSensitiveMatch: boolean}, + ): boolean, + glob( + patterns: string | ReadonlyArray, + options?: GlobOptions, + ): Promise, + globSync( + patterns: string | ReadonlyArray, + options?: GlobOptions, + ): string[], + }; + + declare module.exports: GlobModule; +} diff --git a/flow-typed/npm/typescript_v5.x.x.js b/flow-typed/npm/typescript_v5.x.x.js index 3e5efa0afc62..c89c7a5141e1 100644 --- a/flow-typed/npm/typescript_v5.x.x.js +++ b/flow-typed/npm/typescript_v5.x.x.js @@ -18,25 +18,25 @@ declare module 'typescript' { Bundler = 'Bundler', } - declare type SourceFile = $ReadOnly<{ + declare type SourceFile = Readonly<{ fileName: string, text: string, ... }>; - declare type Diagnostic = $ReadOnly<{ + declare type Diagnostic = Readonly<{ file?: SourceFile, start?: number, messageText: string, ... }>; - declare type EmitResult = $ReadOnly<{ + declare type EmitResult = Readonly<{ diagnostics: Array, ... }>; - declare type Program = $ReadOnly<{ + declare type Program = Readonly<{ emit: () => EmitResult, ... }>; @@ -47,7 +47,7 @@ declare module 'typescript' { getLineAndCharacterOfPosition( file: SourceFile, start?: number, - ): $ReadOnly<{line: number, character: number}>, + ): Readonly<{line: number, character: number}>, convertCompilerOptionsFromJson( jsonOptions: any, basePath: string, diff --git a/flow-typed/npm/undici_v5.x.x.js b/flow-typed/npm/undici_v5.x.x.js index 89a4a42fb5d4..9076fb91bee3 100644 --- a/flow-typed/npm/undici_v5.x.x.js +++ b/flow-typed/npm/undici_v5.x.x.js @@ -15,7 +15,7 @@ declare interface undici$Agent$Options { } declare module 'undici' { - declare export type RequestOptions = $ReadOnly<{ + declare export type RequestOptions = Readonly<{ dispatcher?: Dispatcher, method?: string, headers?: HeadersInit, diff --git a/flow-typed/npm/ws_v7.x.x.js b/flow-typed/npm/ws_v7.x.x.js index 151be0d2699e..7057bdd72712 100644 --- a/flow-typed/npm/ws_v7.x.x.js +++ b/flow-typed/npm/ws_v7.x.x.js @@ -31,7 +31,7 @@ declare class ws$WebSocketServer extends events$EventEmitter { options: { backlog?: number, clientTracking?: boolean, - handleProtocols?: () => mixed, + handleProtocols?: () => unknown, host?: string, maxPayload?: number, noServer?: boolean, @@ -39,28 +39,28 @@ declare class ws$WebSocketServer extends events$EventEmitter { perMessageDeflate?: boolean | ws$PerMessageDeflateOptions, port?: number, server?: http$Server | https$Server, - verifyClient?: () => mixed, + verifyClient?: () => unknown, }, - callback?: () => mixed, + callback?: () => unknown, ): this; /** * Emitted when the server closes. */ - on(event: 'close', () => mixed): this; + on(event: 'close', () => unknown): this; /** * Emitted when the handshake is complete. */ on( event: 'connection', - (socket: ws$WebSocket, request: http$IncomingMessage<>) => mixed, + (socket: ws$WebSocket, request: http$IncomingMessage<>) => unknown, ): this; /** * Emitted when an error occurs on the underlying server. */ - on(event: 'error', (error: Error) => mixed): this; + on(event: 'error', (error: Error) => unknown): this; /** * Emitted before the response headers are written to the socket as part of @@ -68,13 +68,13 @@ declare class ws$WebSocketServer extends events$EventEmitter { */ on( event: 'headers', - (headers: Array, request: http$IncomingMessage<>) => mixed, + (headers: Array, request: http$IncomingMessage<>) => unknown, ): this; /** * Emitted when the underlying server has been bound. */ - on(event: 'listening', () => mixed): this; + on(event: 'listening', () => unknown): this; /** * Returns the bound address, the address family name, and port of the server @@ -93,7 +93,7 @@ declare class ws$WebSocketServer extends events$EventEmitter { /** * Close the server. */ - close(callback?: () => mixed): void; + close(callback?: () => unknown): void; /** * Handle a HTTP Upgrade request. @@ -102,7 +102,7 @@ declare class ws$WebSocketServer extends events$EventEmitter { request: http$IncomingMessage<>, socket: net$Socket, head: Buffer, - callback: (?ws$WebSocket) => mixed, + callback: (?ws$WebSocket) => unknown, ): void; /** @@ -122,24 +122,28 @@ declare type ws$WebSocketOptions = { ...requestOptions, agent?: boolean | http$Agent<> | http$Agent, createConnection?: - | ((options: net$connectOptions, callback?: () => mixed) => net$Socket) - | ((options: tls$connectOptions, callback?: () => mixed) => tls$TLSSocket), + | ((options: net$connectOptions, callback?: () => unknown) => net$Socket) + | (( + options: tls$connectOptions, + callback?: () => unknown, + ) => tls$TLSSocket), rejectUnauthorized?: boolean, }; -declare type ws$CloseListener = (code: number, reason: string) => mixed; -declare type ws$ErrorListener = (error: Error) => mixed; +declare type ws$CloseListener = (code: number, reason: string) => unknown; +declare type ws$ErrorListener = (error: Error) => unknown; declare type ws$MessageListener = ( data: string | Buffer | ArrayBuffer | Array, -) => mixed; -declare type ws$OpenListener = () => mixed; -declare type ws$PingListener = (Buffer) => mixed; -declare type ws$PongListener = (Buffer) => mixed; + isBinary: boolean, +) => unknown; +declare type ws$OpenListener = () => unknown; +declare type ws$PingListener = (Buffer) => unknown; +declare type ws$PongListener = (Buffer) => unknown; declare type ws$UnexpectedResponseListener = ( request: http$ClientRequest<>, response: http$IncomingMessage<>, -) => mixed; -declare type ws$UpgradeListener = (response: http$IncomingMessage<>) => mixed; +) => unknown; +declare type ws$UpgradeListener = (response: http$IncomingMessage<>) => unknown; /* $FlowFixMe[incompatible-type] - Found with Flow v0.143.1 upgrade * "on" definition failing with string is incompatible with string literal */ @@ -277,16 +281,16 @@ declare class ws$WebSocket extends events$EventEmitter { /** * Send a ping. */ - ping(data?: any, mask?: boolean, callback?: () => mixed): void; - ping(data: any, callback: () => mixed): void; - ping(callback: () => mixed): void; + ping(data?: any, mask?: boolean, callback?: () => unknown): void; + ping(data: any, callback: () => unknown): void; + ping(callback: () => unknown): void; /** * Send a pong. */ - pong(data?: any, mask?: boolean, callback?: () => mixed): void; - pong(data: any, callback: () => mixed): void; - pong(callback: () => mixed): void; + pong(data?: any, mask?: boolean, callback?: () => unknown): void; + pong(data: any, callback: () => unknown): void; + pong(callback: () => unknown): void; /** * The subprotocol selected by the server. @@ -324,9 +328,9 @@ declare class ws$WebSocket extends events$EventEmitter { mask?: boolean, fin?: boolean, }, - callback?: () => mixed, + callback?: () => unknown, ): void; - send(data: any, callback: () => mixed): void; + send(data: any, callback: () => unknown): void; /** * Forcibly close the connection. diff --git a/flow-typed/npm/yargs_v17.x.x.js b/flow-typed/npm/yargs_v17.x.x.js index 9f614e41f16f..6d0dcf8f6ae4 100644 --- a/flow-typed/npm/yargs_v17.x.x.js +++ b/flow-typed/npm/yargs_v17.x.x.js @@ -1,6 +1,6 @@ // flow-typed version: f7c859e705/yargs_v17.x.x/flow_>=v0.104.x -declare module "yargs" { +declare module 'yargs' { declare type Argv = { [key: string]: any, _: Array, @@ -12,13 +12,13 @@ declare module "yargs" { alias: string | Array, array: boolean, boolean: boolean, - choices: Array, - coerce: (arg: {[key: string]: any, ...} | any) => mixed, + choices: Array, + coerce: (arg: {[key: string]: any, ...} | any) => unknown, config: boolean, - configParser: (configPath: string) => { [key: string]: mixed, ... }, - conflicts: string | Array | { [key: string]: string, ... }, + configParser: (configPath: string) => {[key: string]: unknown, ...}, + conflicts: string | Array | {[key: string]: string, ...}, count: boolean, - default: mixed, + default: unknown, defaultDescription: string, demandOption: boolean | string, desc: string, @@ -27,7 +27,7 @@ declare module "yargs" { global: boolean, group: string, hidden: boolean, - implies: string | { [key: string]: string, ... }, + implies: string | {[key: string]: string, ...}, nargs: number, normalize: boolean, number: boolean, @@ -35,30 +35,32 @@ declare module "yargs" { requiresArg: boolean, skipValidation: boolean, string: boolean, - type: "array" | "boolean" | "count" | "number" | "string", + type: 'array' | 'boolean' | 'count' | 'number' | 'string', ... }>; declare type CommonModuleObject = {| command?: string | Array, aliases?: Array | string, - builder?: { [key: string]: Options, ... } | ((yargsInstance: Yargs) => mixed), - handler?: ((argv: Argv) => void) | ((argv: Argv) => Promise) + builder?: + | {[key: string]: Options, ...} + | ((yargsInstance: Yargs) => unknown), + handler?: ((argv: Argv) => void) | ((argv: Argv) => Promise), |}; declare type ModuleObjectDesc = {| ...CommonModuleObject, - desc?: string | false + desc?: string | false, |}; declare type ModuleObjectDescribe = {| ...CommonModuleObject, - describe?: string | false + describe?: string | false, |}; declare type ModuleObjectDescription = {| ...CommonModuleObject, - description?: string | false + description?: string | false, |}; declare type ModuleObject = @@ -66,9 +68,10 @@ declare module "yargs" { | ModuleObjectDescribe | ModuleObjectDescription; - declare type MiddleWareCallback = - | (argv: Argv, yargsInstance?: Yargs) => void - | (argv: Argv, yargsInstance?: Yargs) => Promise; + declare type MiddleWareCallback = ( + argv: Argv, + yargsInstance?: Yargs, + ) => void | ((argv: Argv, yargsInstance?: Yargs) => Promise); declare type Middleware = MiddleWareCallback | Array; @@ -76,29 +79,29 @@ declare module "yargs" { (args: Array): Yargs; alias(key: string, alias: string): this; - alias(alias: { [key: string]: string | Array, ... }): this; + alias(alias: {[key: string]: string | Array, ...}): this; argv: Argv | Promise; array(key: string | Array): this; boolean(parameter: string | Array): this; - check(fn: (argv: Argv, options: Array) => mixed): this; + check(fn: (argv: Argv, options: Array) => unknown): this; choices(key: string, allowed: Array): this; - choices(allowed: { [key: string]: Array, ... }): this; - coerce(key: string, fn: (value: any) => mixed): this; - coerce(object: { [key: string]: (value: any) => mixed, ... }): this; - coerce(keys: Array, fn: (value: any) => mixed): this; + choices(allowed: {[key: string]: Array, ...}): this; + coerce(key: string, fn: (value: any) => unknown): this; + coerce(object: {[key: string]: (value: any) => unknown, ...}): this; + coerce(keys: Array, fn: (value: any) => unknown): this; command( cmd: string | Array, desc: string | false, builder?: - | { [key: string]: Options, ... } - | ((yargsInstance: Yargs) => mixed), - handler?: Function + | {[key: string]: Options, ...} + | ((yargsInstance: Yargs) => unknown), + handler?: Function, ): this; command( cmd: string | Array, desc: string | false, - module: ModuleObject + module: ModuleObject, ): this; command(module: ModuleObject): this; @@ -106,14 +109,14 @@ declare module "yargs" { cmd: string | Array, desc: string | false, builder?: - | { [key: string]: Options, ... } - | ((yargsInstance: Yargs) => mixed), - handler?: Function + | {[key: string]: Options, ...} + | ((yargsInstance: Yargs) => unknown), + handler?: Function, ): this; commands( cmd: string | Array, desc: string | false, - module: ModuleObject + module: ModuleObject, ): this; commands(module: ModuleObject): this; @@ -131,36 +134,39 @@ declare module "yargs" { completion( cmd?: string, - description?: string | false | ( - current: string, - argv: Argv, - done: (compeltion: Array) => void - ) => ?(Array | Promise>), + description?: + | string + | false + | (( + current: string, + argv: Argv, + done: (compeltion: Array) => void, + ) => ?(Array | Promise>)), fn?: ( current: string, argv: Argv, - done: (completion: Array) => void - ) => ?(Array | Promise>) + done: (completion: Array) => void, + ) => ?(Array | Promise>), ): this; config( key?: string, description?: string, - parseFn?: (configPath: string) => { [key: string]: mixed, ... } + parseFn?: (configPath: string) => {[key: string]: unknown, ...}, ): this; config( key: string, - parseFn?: (configPath: string) => { [key: string]: mixed, ... } + parseFn?: (configPath: string) => {[key: string]: unknown, ...}, ): this; - config(config: { [key: string]: mixed, ... }): this; + config(config: {[key: string]: unknown, ...}): this; conflicts(key: string, value: string | Array): this; - conflicts(keys: { [key: string]: string | Array, ... }): this; + conflicts(keys: {[key: string]: string | Array, ...}): this; count(name: string): this; - default(key: string, value: mixed, description?: string): this; - default(defaults: { [key: string]: mixed, ... }): this; + default(key: string, value: unknown, description?: string): this; + default(defaults: {[key: string]: unknown, ...}): this; // Deprecated: use demandOption() and demandCommand() instead. demand(key: string, msg?: string | boolean): this; @@ -174,11 +180,11 @@ declare module "yargs" { min: number, max: number, minMsg?: string, - maxMsg?: string + maxMsg?: string, ): this; describe(key: string, description: string): this; - describe(describeObject: { [key: string]: string, ... }): this; + describe(describeObject: {[key: string]: string, ...}): this; detectLocale(shouldDetect: boolean): this; @@ -191,11 +197,15 @@ declare module "yargs" { exitProcess(enable: boolean): this; - fail(fn: false | (failureMessage: string, err: Error, yargs: Yargs) => mixed): this; + fail( + fn: + | false + | ((failureMessage: string, err: Error, yargs: Yargs) => unknown), + ): this; getCompletion( args: Array, - fn: (err: Error | null, completions: Array | void) => void + fn: (err: Error | null, completions: Array | void) => void, ): Promise | void>; global(globals: string | Array, isGlobal?: boolean): this; @@ -209,28 +219,29 @@ declare module "yargs" { hide(key: string): this; implies(key: string, value: string | Array): this; - implies(keys: { [key: string]: string | Array, ... }): this; + implies(keys: {[key: string]: string | Array, ...}): this; locale( - locale: | "de" - | "en" - | "es" - | "fr" - | "hi" - | "hu" - | "id" - | "it" - | "ja" - | "ko" - | "nb" - | "pirate" - | "pl" - | "pt" - | "pt_BR" - | "ru" - | "th" - | "tr" - | "zh_CN" + locale: + | 'de' + | 'en' + | 'es' + | 'fr' + | 'hi' + | 'hu' + | 'id' + | 'it' + | 'ja' + | 'ko' + | 'nb' + | 'pirate' + | 'pl' + | 'pt' + | 'pt_BR' + | 'ru' + | 'th' + | 'tr' + | 'zh_CN', ): this; locale(): string; @@ -246,39 +257,39 @@ declare module "yargs" { number(key: string | Array): this; option(key: string, options?: Options): this; - option(optionMap: { [key: string]: Options, ... }): this; + option(optionMap: {[key: string]: Options, ...}): this; options(key: string, options?: Options): this; - options(optionMap: { [key: string]: Options, ... }): this; + options(optionMap: {[key: string]: Options, ...}): this; parse( args?: string | Array, - context?: { [key: string]: any, ... }, - parseCallback?: (err: Error, argv: Argv, output?: string) => void + context?: {[key: string]: any, ...}, + parseCallback?: (err: Error, argv: Argv, output?: string) => void, ): Argv | Promise; parse( args?: string | Array, - parseCallback?: (err: Error, argv: Argv, output?: string) => void + parseCallback?: (err: Error, argv: Argv, output?: string) => void, ): Argv | Promise; parseAsync( args?: string | Array, - context?: { [key: string]: any, ... }, - parseCallback?: (err: Error, argv: Argv, output?: string) => void + context?: {[key: string]: any, ...}, + parseCallback?: (err: Error, argv: Argv, output?: string) => void, ): Promise; parseAsync( args?: string | Array, - parseCallback?: (err: Error, argv: Argv, output?: string) => void + parseCallback?: (err: Error, argv: Argv, output?: string) => void, ): Promise; parseSync( args?: string | Array, - context?: { [key: string]: any, ... }, - parseCallback?: (err: Error, argv: Argv, output?: string) => void + context?: {[key: string]: any, ...}, + parseCallback?: (err: Error, argv: Argv, output?: string) => void, ): Argv; parseSync( args?: string | Array, - parseCallback?: (err: Error, argv: Argv, output?: string) => void + parseCallback?: (err: Error, argv: Argv, output?: string) => void, ): Argv; parserConfiguration(configuration: {[key: string]: any, ...}): this; @@ -299,14 +310,14 @@ declare module "yargs" { showCompletionScript(): this; - showHelp(consoleLevel?: "error" | "warn" | "log"): this; + showHelp(consoleLevel?: 'error' | 'warn' | 'log'): this; showHelp(printCallback: (usageData: string) => void): this; showHelpOnFail(enable: boolean, message?: string): this; skipValidation(key: string): this; - showVersion(consoleLevel?: "error" | "warn" | "log"): this; + showVersion(consoleLevel?: 'error' | 'warn' | 'log'): this; showVersion(printCallback: (usageData: string) => void): this; strict(enabled?: boolean): this; @@ -319,11 +330,16 @@ declare module "yargs" { terminalWidth(): number; - updateLocale(obj: { [key: string]: string, ... }): this; - updateStrings(obj: { [key: string]: string, ... }): this; + updateLocale(obj: {[key: string]: string, ...}): this; + updateStrings(obj: {[key: string]: string, ...}): this; - usage(message: string, opts?: { [key: string]: Options, ... }): this; - usage(message: string, desc?: string, builder: CommonModuleObject["builder"], handler: CommonModuleObject["handler"]): this; + usage(message: string, opts?: {[key: string]: Options, ...}): this; + usage( + message: string, + desc?: string, + builder: CommonModuleObject['builder'], + handler: CommonModuleObject['handler'], + ): this; version(): this; version(version: string | false): this; @@ -331,7 +347,7 @@ declare module "yargs" { version( option: string | (() => string), description: string | (() => string), - version: string + version: string, ): this; wrap(columns: number | null): this; diff --git a/gradle.properties b/gradle.properties index 0a91ef0f755c..d7c39175371a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,9 +16,14 @@ android.newDsl=false # ./gradlew -PreactNativeArchitectures=x86_64 reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 +# Controls whether to use Hermes from stable builds. This will force hermes version +# set in the sdks/hermes-engine/version.properties file to be used. This has a higher +# priority than react.internal.useHermesNightly. +react.internal.useHermesStable=false + # Controls whether to use Hermes from nightly builds. This will speed up builds # but should NOT be turned on for CI or release builds. -react.internal.useHermesNightly=false +react.internal.useHermesNightly=true # Controls whether to use Hermes 1.0. Clean and rebuild when changing. -hermesV1Enabled=false +hermesV1Enabled=true diff --git a/package.json b/package.json index 72a8e8ea2d75..b143f341f624 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,6 @@ "build-types": "node ./scripts/js-api/build-types", "clang-format": "clang-format -i --glob=*/**/*.{h,cpp,m,mm}", "clean": "node ./scripts/build/clean.js", - "cxx-api-build": "node ./scripts/cxx-api/public-api.js", "flow-check": "flow check", "flow": "flow", "format-check": "prettier --list-different \"./**/*.{js,md,yml,ts,tsx}\"", @@ -23,8 +22,8 @@ "lint-kotlin": "./gradlew ktfmtFormat", "lint-markdown": "markdownlint-cli2 2>&1", "lint": "eslint --max-warnings 0 .", + "preinstall": "node ./scripts/try-set-nightly-hermes-compiler.js", "prettier": "prettier --write \"./**/*.{js,md,yml,ts,tsx}\"", - "print-packages": "node ./scripts/monorepo/print", "shellcheck": "./.github/workflow-scripts/analyze_scripts.sh", "start": "yarn --cwd packages/rn-tester start", "set-version": "node ./scripts/releases/set-version.js", @@ -58,15 +57,15 @@ "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", "@octokit/rest": "^22.0.0", - "@react-native/metro-babel-transformer": "0.83.0-main", - "@react-native/metro-config": "0.83.0-main", + "@react-native/metro-babel-transformer": "0.85.0-main", + "@react-native/metro-config": "0.85.0-main", "@tsconfig/node22": "22.0.2", "@types/react": "^19.1.0", "@typescript-eslint/parser": "^8.36.0", "ansi-regex": "^5.0.0", "ansi-styles": "^4.2.1", "babel-plugin-minify-dead-code-elimination": "^0.5.2", - "babel-plugin-syntax-hermes-parser": "0.32.0", + "babel-plugin-syntax-hermes-parser": "0.33.3", "babel-plugin-transform-define": "^2.1.4", "babel-plugin-transform-flow-enums": "^0.0.2", "clang-format": "^1.8.0", @@ -80,16 +79,15 @@ "eslint-plugin-ft-flow": "^2.0.1", "eslint-plugin-jest": "^29.0.1", "eslint-plugin-jsx-a11y": "^6.6.0", - "eslint-plugin-react": "^7.30.1", - "eslint-plugin-react-native": "^4.0.0", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-native": "^5.0.0", "eslint-plugin-redundant-undefined": "^0.4.0", "eslint-plugin-relay": "^1.8.3", "fb-dotslash": "0.5.8", - "flow-api-translator": "0.32.0", - "flow-bin": "^0.289.0", - "glob": "^7.1.1", - "hermes-eslint": "0.32.0", - "hermes-transform": "0.32.0", + "flow-api-translator": "0.33.3", + "flow-bin": "^0.297.0", + "hermes-eslint": "0.33.3", + "hermes-transform": "0.33.3", "ini": "^5.0.0", "inquirer": "^7.1.0", "jest": "^29.7.0", @@ -107,20 +105,21 @@ "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", "prettier": "3.6.2", - "prettier-plugin-hermes-parser": "0.32.0", - "react": "19.2.0", - "react-test-renderer": "19.2.0", + "prettier-plugin-hermes-parser": "0.33.2", + "react": "19.2.3", + "react-test-renderer": "19.2.3", "rimraf": "^3.0.2", "shelljs": "^0.8.5", "signedsource": "^2.0.0", "supports-color": "^7.1.0", "temp-dir": "^2.0.0", "tinybench": "^4.1.0", + "tinyglobby": "^0.2.15", "typescript": "5.8.3", "ws": "^7.5.10" }, "resolutions": { - "react-is": "19.2.0", + "react-is": "19.2.3", "on-headers": "1.1.0", "compression": "1.8.1" } diff --git a/packages/assets/package.json b/packages/assets/package.json index 5b0184e5f3b1..fefd1afaec4d 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/assets-registry", - "version": "0.83.0-main", + "version": "0.85.0-main", "description": "Asset support code for React Native.", "license": "MIT", "repository": { @@ -17,7 +17,7 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" }, "files": [ "path-support.js", diff --git a/packages/assets/path-support.js b/packages/assets/path-support.js index bdf2acc3491b..c73a2e2bbf2e 100644 --- a/packages/assets/path-support.js +++ b/packages/assets/path-support.js @@ -43,6 +43,8 @@ function getAndroidAssetSuffix(scale /*: number */) /*: string */ { // See https://developer.android.com/guide/topics/resources/drawable-resource.html const drawableFileTypes = new Set([ 'gif', + 'heic', + 'heif', 'jpeg', 'jpg', 'ktx', diff --git a/packages/babel-plugin-codegen/package.json b/packages/babel-plugin-codegen/package.json index 1c7f152f3d11..144b0a62f557 100644 --- a/packages/babel-plugin-codegen/package.json +++ b/packages/babel-plugin-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/babel-plugin-codegen", - "version": "0.83.0-main", + "version": "0.85.0-main", "description": "Babel plugin to generate native module and view manager code for React Native.", "license": "MIT", "repository": { @@ -19,14 +19,14 @@ ], "bugs": "https://github.com/facebook/react-native/issues", "engines": { - "node": ">= 20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" }, "files": [ "index.js" ], "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.83.0-main" + "@react-native/codegen": "0.85.0-main" }, "devDependencies": { "@babel/core": "^7.25.2" diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index fb39160bb1e0..7714aaced800 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/community-cli-plugin", - "version": "0.83.0-main", + "version": "0.85.0-main", "description": "Core CLI commands for React Native", "keywords": [ "react-native", @@ -18,11 +18,20 @@ ".": "./src/index.js", "./package.json": "./package.json" }, + "publishConfig": { + "exports": { + ".": "./dist/index.js", + "./package.json": "./package.json" + } + }, "files": [ "dist" ], + "scripts": { + "prepack": "node ../../scripts/build/prepack.js" + }, "dependencies": { - "@react-native/dev-middleware": "0.83.0-main", + "@react-native/dev-middleware": "0.85.0-main", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.3", @@ -46,6 +55,6 @@ } }, "engines": { - "node": ">= 20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } } diff --git a/packages/community-cli-plugin/src/commands/bundle/assetCatalogIOS.js b/packages/community-cli-plugin/src/commands/bundle/assetCatalogIOS.js index 33f013741a9f..eefc3c6d5ad9 100644 --- a/packages/community-cli-plugin/src/commands/bundle/assetCatalogIOS.js +++ b/packages/community-cli-plugin/src/commands/bundle/assetCatalogIOS.js @@ -31,7 +31,7 @@ type ImageSet = { export function getImageSet( catalogDir: string, asset: AssetData, - scales: $ReadOnlyArray, + scales: ReadonlyArray, ): ImageSet { const fileName = assetPathUtils.getResourceIdentifier(asset); return { diff --git a/packages/community-cli-plugin/src/commands/bundle/assetPathUtils.js b/packages/community-cli-plugin/src/commands/bundle/assetPathUtils.js index 6f1aaf532d97..1ac88c6c01ec 100644 --- a/packages/community-cli-plugin/src/commands/bundle/assetPathUtils.js +++ b/packages/community-cli-plugin/src/commands/bundle/assetPathUtils.js @@ -8,7 +8,7 @@ * @format */ -export type PackagerAsset = $ReadOnly<{ +export type PackagerAsset = Readonly<{ httpServerLocation: string, name: string, type: string, @@ -41,6 +41,8 @@ function getAndroidAssetSuffix(scale: number): string { // See https://developer.android.com/guide/topics/resources/drawable-resource.html const drawableFileTypes: Set = new Set([ 'gif', + 'heic', + 'heif', 'jpeg', 'jpg', 'png', @@ -73,7 +75,7 @@ function getResourceIdentifier(asset: PackagerAsset): string { .toLowerCase() .replace(/\//g, '_') // Encode folder structure in file name .replace(/([^a-z0-9_])/g, '') // Remove illegal chars - .replace(/^assets_/, ''); // Remove "assets_" prefix + .replace(/^(?:assets|assetsunstable_path)_/, ''); // Remove "assets_" or "assetsunstable_path_" prefix } function getBasePath(asset: PackagerAsset): string { diff --git a/packages/community-cli-plugin/src/commands/bundle/createKeepFileAsync.js b/packages/community-cli-plugin/src/commands/bundle/createKeepFileAsync.js index 405df8a46050..479c1bdf0143 100644 --- a/packages/community-cli-plugin/src/commands/bundle/createKeepFileAsync.js +++ b/packages/community-cli-plugin/src/commands/bundle/createKeepFileAsync.js @@ -15,7 +15,7 @@ import fs from 'fs'; import path from 'path'; async function createKeepFileAsync( - assets: $ReadOnlyArray, + assets: ReadonlyArray, outputDirectory: string, ): Promise { if (!assets.length) { diff --git a/packages/community-cli-plugin/src/commands/bundle/filterPlatformAssetScales.js b/packages/community-cli-plugin/src/commands/bundle/filterPlatformAssetScales.js index 139fa4ff61b6..0c78dd87e3cc 100644 --- a/packages/community-cli-plugin/src/commands/bundle/filterPlatformAssetScales.js +++ b/packages/community-cli-plugin/src/commands/bundle/filterPlatformAssetScales.js @@ -14,8 +14,8 @@ const ALLOWED_SCALES: {[key: string]: number[]} = { function filterPlatformAssetScales( platform: string, - scales: $ReadOnlyArray, -): $ReadOnlyArray { + scales: ReadonlyArray, +): ReadonlyArray { const whitelist: number[] = ALLOWED_SCALES[platform]; if (!whitelist) { return scales; diff --git a/packages/community-cli-plugin/src/commands/bundle/saveAssets.js b/packages/community-cli-plugin/src/commands/bundle/saveAssets.js index 2a759a0540f0..83a8e139cb2a 100644 --- a/packages/community-cli-plugin/src/commands/bundle/saveAssets.js +++ b/packages/community-cli-plugin/src/commands/bundle/saveAssets.js @@ -29,7 +29,7 @@ type CopiedFiles = { }; async function saveAssets( - assets: $ReadOnlyArray, + assets: ReadonlyArray, platform: string, assetsDest?: string, assetCatalogDest?: string, diff --git a/packages/community-cli-plugin/src/commands/start/OpenDebuggerKeyboardHandler.js b/packages/community-cli-plugin/src/commands/start/OpenDebuggerKeyboardHandler.js index bee5295cf1b1..75afc25ce13f 100644 --- a/packages/community-cli-plugin/src/commands/start/OpenDebuggerKeyboardHandler.js +++ b/packages/community-cli-plugin/src/commands/start/OpenDebuggerKeyboardHandler.js @@ -12,7 +12,7 @@ import type {TerminalReporter} from 'metro'; import {styleText} from 'util'; -type PageDescription = $ReadOnly<{ +type PageDescription = Readonly<{ id: string, title: string, description: string, @@ -22,7 +22,7 @@ type PageDescription = $ReadOnly<{ export default class OpenDebuggerKeyboardHandler { #devServerUrl: string; #reporter: TerminalReporter; - #targetsShownForSelection: ?$ReadOnlyArray = null; + #targetsShownForSelection: ?ReadonlyArray = null; constructor({ devServerUrl, @@ -82,7 +82,7 @@ export default class OpenDebuggerKeyboardHandler { if (res.status !== 200) { throw new Error(`Unexpected status code: ${res.status}`); } - const targets = (await res.json()) as $ReadOnlyArray; + const targets = (await res.json()) as ReadonlyArray; if (!Array.isArray(targets)) { throw new Error('Expected array.'); } @@ -94,22 +94,26 @@ export default class OpenDebuggerKeyboardHandler { const target = targets[0]; void this.#tryOpenDebuggerForTarget(target); } else { - this.#targetsShownForSelection = targets; - if (targets.length > 9) { this.#log( 'warn', '10 or more debug targets available, showing the first 9.', ); } + const targetsShown = targets.slice(0, 9); + const hasDuplicateTitles = + new Set(targetsShown.map(target => target.title)).size < + targetsShown.length; + this.#targetsShownForSelection = targetsShown; this.#setTerminalMenu( - `Multiple debug targets available, please select:\n ${targets - .slice(0, 9) - .map( - ({title}, i) => - `${styleText(['white', 'inverse'], ` ${i + 1} `)} - "${title}"`, - ) + `Multiple debug targets available, please select:\n ${targetsShown + .map(({title, description}, i) => { + const descriptionSuffix = hasDuplicateTitles + ? ` (${description})` + : ''; + return `${styleText(['white', 'inverse'], ` ${i + 1} `)} - "${title}${descriptionSuffix}"`; + }) .join('\n ')}`, ); } @@ -149,7 +153,7 @@ export default class OpenDebuggerKeyboardHandler { this.#targetsShownForSelection = null; } - #log(level: 'info' | 'warn' | 'error', ...data: Array): void { + #log(level: 'info' | 'warn' | 'error', ...data: Array): void { this.#reporter.update({ type: 'unstable_server_log', level, diff --git a/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js b/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js index 76f83acf94ca..fd43a0e8e011 100644 --- a/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js +++ b/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js @@ -45,8 +45,8 @@ export default function attachKeyHandlers({ reporter, }: { devServerUrl: string, - messageSocket: $ReadOnly<{ - broadcast: (type: string, params?: Record | null) => void, + messageSocket: Readonly<{ + broadcast: (type: string, params?: Record | null) => void, ... }>, reporter: TerminalReporter, diff --git a/packages/community-cli-plugin/src/commands/start/middleware.js b/packages/community-cli-plugin/src/commands/start/middleware.js index 919cc834ecc6..806d8c393537 100644 --- a/packages/community-cli-plugin/src/commands/start/middleware.js +++ b/packages/community-cli-plugin/src/commands/start/middleware.js @@ -22,7 +22,10 @@ type MiddlewareReturn = { }, messageSocketEndpoint: { server: ws$WebSocketServer, - broadcast: (method: string, params?: Record | null) => void, + broadcast: ( + method: string, + params?: Record | null, + ) => void, }, eventsSocketEndpoint: { server: ws$WebSocketServer, @@ -40,7 +43,7 @@ const communityMiddlewareFallback = { createDevServerMiddleware: (params: { host?: string, port: number, - watchFolders: $ReadOnlyArray, + watchFolders: ReadonlyArray, }): MiddlewareReturn => ({ // FIXME: Several features will break without community middleware and // should be migrated into core. @@ -54,7 +57,7 @@ const communityMiddlewareFallback = { server: unusedStubWSServer, broadcast: ( method: string, - _params?: Record | null, + _params?: Record | null, ): void => {}, }, eventsSocketEndpoint: { diff --git a/packages/community-cli-plugin/src/utils/createDevMiddlewareLogger.js b/packages/community-cli-plugin/src/utils/createDevMiddlewareLogger.js index 006fed8187fc..6975b9f925bd 100644 --- a/packages/community-cli-plugin/src/utils/createDevMiddlewareLogger.js +++ b/packages/community-cli-plugin/src/utils/createDevMiddlewareLogger.js @@ -10,7 +10,7 @@ import type {TerminalReporter} from 'metro'; -type LoggerFn = (...message: $ReadOnlyArray) => void; +type LoggerFn = (...message: ReadonlyArray) => void; /** * Create a dev-middleware logger object that will emit logs via Metro's @@ -18,7 +18,7 @@ type LoggerFn = (...message: $ReadOnlyArray) => void; */ export default function createDevMiddlewareLogger( reporter: TerminalReporter, -): $ReadOnly<{ +): Readonly<{ info: LoggerFn, error: LoggerFn, warn: LoggerFn, @@ -34,7 +34,7 @@ function makeLogger( reporter: TerminalReporter, level: 'info' | 'warn' | 'error', ): LoggerFn { - return (...data: Array) => + return (...data: Array) => reporter.update({ type: 'unstable_server_log', level, diff --git a/packages/community-cli-plugin/src/utils/loadMetroConfig.js b/packages/community-cli-plugin/src/utils/loadMetroConfig.js index 36d11175f632..8b5883a3148a 100644 --- a/packages/community-cli-plugin/src/utils/loadMetroConfig.js +++ b/packages/community-cli-plugin/src/utils/loadMetroConfig.js @@ -20,7 +20,7 @@ const debug = require('debug')('ReactNative:CommunityCliPlugin'); export type {Config}; -export type ConfigLoadingContext = $ReadOnly<{ +export type ConfigLoadingContext = Readonly<{ root: Config['root'], reactNativePath: Config['reactNativePath'], platforms: Config['platforms'], diff --git a/packages/community-cli-plugin/src/utils/parseKeyValueParamArray.js b/packages/community-cli-plugin/src/utils/parseKeyValueParamArray.js index cc2b94822f67..92356a6bba16 100644 --- a/packages/community-cli-plugin/src/utils/parseKeyValueParamArray.js +++ b/packages/community-cli-plugin/src/utils/parseKeyValueParamArray.js @@ -9,7 +9,7 @@ */ export default function parseKeyValueParamArray( - keyValueArray: $ReadOnlyArray, + keyValueArray: ReadonlyArray, ): Record { const result = {}; diff --git a/packages/core-cli-utils/package.json b/packages/core-cli-utils/package.json index 4d97e3516c35..9f178299ca52 100644 --- a/packages/core-cli-utils/package.json +++ b/packages/core-cli-utils/package.json @@ -1,31 +1,42 @@ { "name": "@react-native/core-cli-utils", - "version": "0.83.0-main", + "version": "0.85.0-main", "description": "React Native CLI library for Frameworks to build on", "license": "MIT", - "main": "./src/index.flow.js", + "keywords": [ + "cli-utils", + "react-native" + ], + "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/core-cli-utils#readme", + "bugs": "https://github.com/facebook/react-native/issues", "repository": { "type": "git", "url": "git+https://github.com/facebook/react-native.git", "directory": "packages/core-cli-utils" }, + "main": "./src/index.flow.js", "exports": { ".": "./src/index.js", "./package.json": "./package.json", "./version.js": "./src/public/version.js" }, - "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/core-cli-utils#readme", - "keywords": [ - "cli-utils", - "react-native" - ], - "bugs": "https://github.com/facebook/react-native/issues", - "engines": { - "node": ">= 20.19.4" + "publishConfig": { + "main": "./dist/index.js", + "exports": { + ".": "./dist/index.js", + "./package.json": "./package.json", + "./version.js": "./dist/public/version.js" + } }, "files": [ "dist" ], + "scripts": { + "prepack": "node ../../scripts/build/prepack.js" + }, "dependencies": {}, - "devDependencies": {} + "devDependencies": {}, + "engines": { + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + } } diff --git a/packages/core-cli-utils/src/private/android.js b/packages/core-cli-utils/src/private/android.js index 6ef6c1be4b66..c9ea7a7e59ed 100644 --- a/packages/core-cli-utils/src/private/android.js +++ b/packages/core-cli-utils/src/private/android.js @@ -17,7 +17,7 @@ import execa from 'execa'; type AndroidBuildMode = 'Debug' | 'Release'; type Path = string; -type Args = $ReadOnlyArray; +type Args = ReadonlyArray; type Config = { cwd: Path, diff --git a/packages/core-cli-utils/src/private/app.js b/packages/core-cli-utils/src/private/app.js index 990f76a94410..0491ae577cd6 100644 --- a/packages/core-cli-utils/src/private/app.js +++ b/packages/core-cli-utils/src/private/app.js @@ -75,16 +75,13 @@ function getNodePackagePath(packageName: string): string { return require.resolve(packageName, {cwd: [process.cwd(), ...module.paths]}); } -function metro(...args: $ReadOnlyArray): ExecaPromise { +function metro(...args: ReadonlyArray): ExecaPromise { log(`🚇 metro ${args.join(' ')} `); return execa('npx', ['--offline', 'metro', ...args]); } export const tasks = { - bundle: ( - options: BundlerOptions, - ...args: $ReadOnlyArray - ): Bundle => { + bundle: (options: BundlerOptions, ...args: ReadonlyArray): Bundle => { const steps: Bundle = { /* eslint-disable sort-keys */ validate: task(FIRST, 'Check if Metro is available', () => { @@ -117,7 +114,7 @@ type Bundle = { const bundleApp = ( options: BundlerOptions, - ...metroArgs: $ReadOnlyArray + ...metroArgs: ReadonlyArray ) => { if (options.outputJsBundle === options.outputBundle) { throw new Error('outputJsBundle and outputBundle cannot be the same.'); diff --git a/packages/core-cli-utils/src/private/apple.js b/packages/core-cli-utils/src/private/apple.js index 317b60fbe610..691a6147ba13 100644 --- a/packages/core-cli-utils/src/private/apple.js +++ b/packages/core-cli-utils/src/private/apple.js @@ -144,7 +144,7 @@ export const tasks = { // 2. Build the iOS app using a setup environment build: ( options: AppleBuildOptions, - ...args: $ReadOnlyArray + ...args: ReadonlyArray ): { validate: Task, hasPodsInstalled: Task, diff --git a/packages/core-cli-utils/src/private/types.js b/packages/core-cli-utils/src/private/types.js index a7740c7ef149..2c2987e1d306 100644 --- a/packages/core-cli-utils/src/private/types.js +++ b/packages/core-cli-utils/src/private/types.js @@ -8,7 +8,7 @@ * @format */ -export type Task = { +export type Task = { order: number, label: string, action: () => R, diff --git a/packages/core-cli-utils/src/private/utils.js b/packages/core-cli-utils/src/private/utils.js index f41bbb8a8d21..78cadf5ebaae 100644 --- a/packages/core-cli-utils/src/private/utils.js +++ b/packages/core-cli-utils/src/private/utils.js @@ -55,7 +55,7 @@ export function isOnPath(dep: string, description: string): PathCheckResult { } export function assertDependencies( - ...deps: $ReadOnlyArray> + ...deps: ReadonlyArray> ) { for (const {found, dep, description} of deps) { if (!found) { diff --git a/packages/debugger-frontend/BUILD_INFO b/packages/debugger-frontend/BUILD_INFO index b846dec3d961..331cfcfb3533 100644 --- a/packages/debugger-frontend/BUILD_INFO +++ b/packages/debugger-frontend/BUILD_INFO @@ -1,5 +1,5 @@ -@generated SignedSource<<4bb67766e15e25a481c4c38873260a7a>> -Git revision: 7aa57d13e50ce9d74a91c9315c9b0ded00fbc19f +@generated SignedSource<<900cc7078a764597498aecf717759e15>> +Git revision: d65c7f769b312cde3ecd7db20200141dbe729079 Built with --nohooks: false Is local checkout: false Remote URL: https://github.com/facebook/react-native-devtools-frontend diff --git a/packages/debugger-frontend/dist/third-party/front_end/Images/Images.js b/packages/debugger-frontend/dist/third-party/front_end/Images/Images.js index 604a36749f17..8163f3813b42 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/Images/Images.js +++ b/packages/debugger-frontend/dist/third-party/front_end/Images/Images.js @@ -20,6 +20,7 @@ style.setProperty('--image-file-nodeIcon', 'url(\"' + new URL('./nodeIcon.avif', style.setProperty('--image-file-popoverArrows', 'url(\"' + new URL('./popoverArrows.png', import.meta.url).toString() + '\")'); style.setProperty('--image-file-react_native/learn-debugging-basics', 'url(\"' + new URL('./react_native/learn-debugging-basics.jpg', import.meta.url).toString() + '\")'); style.setProperty('--image-file-react_native/learn-native-debugging', 'url(\"' + new URL('./react_native/learn-native-debugging.jpg', import.meta.url).toString() + '\")'); +style.setProperty('--image-file-react_native/whats-new-083', 'url(\"' + new URL('./react_native/whats-new-083.jpg', import.meta.url).toString() + '\")'); style.setProperty('--image-file-react_native/learn-react-native-devtools', 'url(\"' + new URL('./react_native/learn-react-native-devtools.jpg', import.meta.url).toString() + '\")'); style.setProperty('--image-file-react_native/welcomeIcon', 'url(\"' + new URL('./react_native/welcomeIcon.png', import.meta.url).toString() + '\")'); style.setProperty('--image-file-toolbarResizerVertical', 'url(\"' + new URL('./toolbarResizerVertical.png', import.meta.url).toString() + '\")'); diff --git a/packages/debugger-frontend/dist/third-party/front_end/Images/react_native/whats-new-083.jpg b/packages/debugger-frontend/dist/third-party/front_end/Images/react_native/whats-new-083.jpg new file mode 100644 index 000000000000..969df54a3038 Binary files /dev/null and b/packages/debugger-frontend/dist/third-party/front_end/Images/react_native/whats-new-083.jpg differ diff --git a/packages/debugger-frontend/dist/third-party/front_end/core/host/host.js b/packages/debugger-frontend/dist/third-party/front_end/core/host/host.js index 2bd6d58f614e..98fae274f241 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/core/host/host.js +++ b/packages/debugger-frontend/dist/third-party/front_end/core/host/host.js @@ -1 +1 @@ -import*as e from"../common/common.js";import*as r from"../root/root.js";import*as t from"../i18n/i18n.js";import*as n from"../platform/platform.js";var o;!function(e){e.AppendedToURL="appendedToURL",e.CanceledSaveURL="canceledSaveURL",e.ColorThemeChanged="colorThemeChanged",e.ContextMenuCleared="contextMenuCleared",e.ContextMenuItemSelected="contextMenuItemSelected",e.DeviceCountUpdated="deviceCountUpdated",e.DevicesDiscoveryConfigChanged="devicesDiscoveryConfigChanged",e.DevicesPortForwardingStatusChanged="devicesPortForwardingStatusChanged",e.DevicesUpdated="devicesUpdated",e.DispatchMessage="dispatchMessage",e.DispatchMessageChunk="dispatchMessageChunk",e.EnterInspectElementMode="enterInspectElementMode",e.EyeDropperPickedColor="eyeDropperPickedColor",e.FileSystemsLoaded="fileSystemsLoaded",e.FileSystemRemoved="fileSystemRemoved",e.FileSystemAdded="fileSystemAdded",e.FileSystemFilesChangedAddedRemoved="FileSystemFilesChangedAddedRemoved",e.IndexingTotalWorkCalculated="indexingTotalWorkCalculated",e.IndexingWorked="indexingWorked",e.IndexingDone="indexingDone",e.KeyEventUnhandled="keyEventUnhandled",e.ReloadInspectedPage="reloadInspectedPage",e.RevealSourceLine="revealSourceLine",e.SavedURL="savedURL",e.SearchCompleted="searchCompleted",e.SetInspectedTabId="setInspectedTabId",e.SetUseSoftMenu="setUseSoftMenu",e.ShowPanel="showPanel"}(o||(o={}));const s=[[o.AppendedToURL,"appendedToURL",["url"]],[o.CanceledSaveURL,"canceledSaveURL",["url"]],[o.ColorThemeChanged,"colorThemeChanged",[]],[o.ContextMenuCleared,"contextMenuCleared",[]],[o.ContextMenuItemSelected,"contextMenuItemSelected",["id"]],[o.DeviceCountUpdated,"deviceCountUpdated",["count"]],[o.DevicesDiscoveryConfigChanged,"devicesDiscoveryConfigChanged",["config"]],[o.DevicesPortForwardingStatusChanged,"devicesPortForwardingStatusChanged",["status"]],[o.DevicesUpdated,"devicesUpdated",["devices"]],[o.DispatchMessage,"dispatchMessage",["messageObject"]],[o.DispatchMessageChunk,"dispatchMessageChunk",["messageChunk","messageSize"]],[o.EnterInspectElementMode,"enterInspectElementMode",[]],[o.EyeDropperPickedColor,"eyeDropperPickedColor",["color"]],[o.FileSystemsLoaded,"fileSystemsLoaded",["fileSystems"]],[o.FileSystemRemoved,"fileSystemRemoved",["fileSystemPath"]],[o.FileSystemAdded,"fileSystemAdded",["errorMessage","fileSystem"]],[o.FileSystemFilesChangedAddedRemoved,"fileSystemFilesChangedAddedRemoved",["changed","added","removed"]],[o.IndexingTotalWorkCalculated,"indexingTotalWorkCalculated",["requestId","fileSystemPath","totalWork"]],[o.IndexingWorked,"indexingWorked",["requestId","fileSystemPath","worked"]],[o.IndexingDone,"indexingDone",["requestId","fileSystemPath"]],[o.KeyEventUnhandled,"keyEventUnhandled",["event"]],[o.ReloadInspectedPage,"reloadInspectedPage",["hard"]],[o.RevealSourceLine,"revealSourceLine",["url","lineNumber","columnNumber"]],[o.SavedURL,"savedURL",["url","fileSystemPath"]],[o.SearchCompleted,"searchCompleted",["requestId","fileSystemPath","files"]],[o.SetInspectedTabId,"setInspectedTabId",["tabId"]],[o.SetUseSoftMenu,"setUseSoftMenu",["useSoftMenu"]],[o.ShowPanel,"showPanel",["panelName"]]];var i=Object.freeze({__proto__:null,EventDescriptors:s,get Events(){return o}});const a={systemError:"System error",connectionError:"Connection error",certificateError:"Certificate error",httpError:"HTTP error",cacheError:"Cache error",signedExchangeError:"Signed Exchange error",ftpError:"FTP error",certificateManagerError:"Certificate manager error",dnsResolverError:"DNS resolver error",unknownError:"Unknown error",httpErrorStatusCodeSS:"HTTP error: status code {PH1}, {PH2}",invalidUrl:"Invalid URL",decodingDataUrlFailed:"Decoding Data URL failed"},d=t.i18n.registerUIStrings("core/host/ResourceLoader.ts",a),c=t.i18n.getLocalizedString.bind(void 0,d);let l=0;const u={},m=function(e){return u[++l]=e,l},g=function(e){u[e].close(),delete u[e]},p=function(e,r){u[e].write(r)};function h(e,r,t){if(void 0===e||void 0===t)return null;if(0!==e){if(function(e){return e<=-300&&e>-400}(e))return c(a.httpErrorStatusCodeSS,{PH1:String(r),PH2:t});const n=function(e){return c(e>-100?a.systemError:e>-200?a.connectionError:e>-300?a.certificateError:e>-400?a.httpError:e>-500?a.cacheError:e>-600?a.signedExchangeError:e>-700?a.ftpError:e>-800?a.certificateManagerError:e>-900?a.dnsResolverError:a.unknownError)}(e);return`${n}: ${t}`}return null}const S=function(r,t,n,o,s){const i=m(n);if(new e.ParsedURL.ParsedURL(r).isDataURL())return void(e=>new Promise(((r,t)=>{const n=new XMLHttpRequest;n.withCredentials=!1,n.open("GET",e,!0),n.onreadystatechange=function(){if(n.readyState===XMLHttpRequest.DONE){if(200!==n.status)return n.onreadystatechange=null,void t(new Error(String(n.status)));n.onreadystatechange=null,r(n.responseText)}},n.send(null)})))(r).then((function(e){p(i,e),l({statusCode:200})})).catch((function(e){l({statusCode:404,messageOverride:c(a.decodingDataUrlFailed)})}));if(!s&&function(e){try{const r=new URL(e);return"file:"===r.protocol&&""!==r.host}catch{return!1}}(r))return void(o&&o(!1,{},{statusCode:400,netError:-20,netErrorName:"net::BLOCKED_BY_CLIENT",message:"Loading from a remote file path is prohibited for security reasons."}));const d=[];if(t)for(const e in t)d.push(e+": "+t[e]);function l(e){if(o){const{success:r,description:t}=function(e){const{statusCode:r,netError:t,netErrorName:n,urlValid:o,messageOverride:s}=e;let i="";const d=r>=200&&r<300;if("string"==typeof s)i=s;else if(!d)if(void 0===t)i=c(!1===o?a.invalidUrl:a.unknownError);else{const e=h(t,r,n);e&&(i=e)}return console.assert(d===(0===i.length)),{success:d,description:{statusCode:r,netError:t,netErrorName:n,urlValid:o,message:i}}}(e);o(r,e.headers||{},t)}g(i)}f.loadNetworkResource(r,d.join("\r\n"),i,l)};var v=Object.freeze({__proto__:null,ResourceLoader:{},bindOutputStream:m,discardOutputStream:g,load:function(r,t,n,o){const s=new e.StringOutputStream.StringOutputStream;S(r,t,s,(function(e,r,t){n(e,r,s.data(),t)}),o)},loadAsStream:S,netErrorToMessage:h,streamWrite:p});const C={devtoolsS:"DevTools - {PH1}"},I=t.i18n.registerUIStrings("core/host/InspectorFrontendHost.ts",C),w=t.i18n.getLocalizedString.bind(void 0,I),k="/overrides";class E{#e=new Map;events;#r=null;recordedCountHistograms=[];recordedEnumeratedHistograms=[];recordedPerformanceHistograms=[];constructor(){function e(e){!("mac"===this.platform()?e.metaKey:e.ctrlKey)||"+"!==e.key&&"-"!==e.key||e.stopPropagation()}"undefined"!=typeof document&&document.addEventListener("keydown",(r=>{e.call(this,r)}),!0)}platform(){const e=navigator.userAgent;return e.includes("Windows NT")?"windows":e.includes("Mac OS X")?"mac":"linux"}loadCompleted(){}bringToFront(){}closeWindow(){}setIsDocked(e,r){window.setTimeout(r,0)}showSurvey(e,r){window.setTimeout((()=>r({surveyShown:!1})),0)}canShowSurvey(e,r){window.setTimeout((()=>r({canShowSurvey:!1})),0)}setInspectedPageBounds(e){}inspectElementCompleted(){}setInjectedScriptForOrigin(e,r){}inspectedURLChanged(e){document.title=w(C.devtoolsS,{PH1:e.replace(/^https?:\/\//,"")})}copyText(e){null!=e&&navigator.clipboard.writeText(e)}openInNewTab(r){e.ParsedURL.schemeIs(r,"javascript:")||window.open(r,"_blank")}openSearchResultsInNewTab(r){e.Console.Console.instance().error("Search is not enabled in hosted mode. Please inspect using chrome://inspect")}showItemInFolder(r){e.Console.Console.instance().error("Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect")}save(e,r,t,n){let s=this.#e.get(e);s||(s=[],this.#e.set(e,s)),s.push(r),this.events.dispatchEventToListeners(o.SavedURL,{url:e,fileSystemPath:e})}append(e,r){const t=this.#e.get(e);t&&(t.push(r),this.events.dispatchEventToListeners(o.AppendedToURL,e))}close(e){const r=this.#e.get(e)||[];this.#e.delete(e);let t="";if(e)try{const r=n.StringUtilities.trimURL(e);t=n.StringUtilities.removeURLFragment(r)}catch(r){t=e}const o=document.createElement("a");o.download=t;const s=new Blob([r.join("")],{type:"text/plain"}),i=URL.createObjectURL(s);o.href=i,o.click(),URL.revokeObjectURL(i)}sendMessageToBackend(e){}recordCountHistogram(e,r,t,n,o){this.recordedCountHistograms.length>=100&&this.recordedCountHistograms.shift(),this.recordedCountHistograms.push({histogramName:e,sample:r,min:t,exclusiveMax:n,bucketSize:o})}recordEnumeratedHistogram(e,r,t){this.recordedEnumeratedHistograms.length>=100&&this.recordedEnumeratedHistograms.shift(),this.recordedEnumeratedHistograms.push({actionName:e,actionCode:r})}recordPerformanceHistogram(e,r){this.recordedPerformanceHistograms.length>=100&&this.recordedPerformanceHistograms.shift(),this.recordedPerformanceHistograms.push({histogramName:e,duration:r})}recordUserMetricsAction(e){}connectAutomaticFileSystem(e,r,t,n){queueMicrotask((()=>n({success:!1})))}disconnectAutomaticFileSystem(e){}requestFileSystems(){this.events.dispatchEventToListeners(o.FileSystemsLoaded,[])}addFileSystem(e){window.webkitRequestFileSystem(window.TEMPORARY,1048576,(e=>{this.#r=e;const r={fileSystemName:"sandboxedRequestedFileSystem",fileSystemPath:k,rootURL:"filesystem:devtools://devtools/isolated/",type:"overrides"};this.events.dispatchEventToListeners(o.FileSystemAdded,{fileSystem:r})}))}removeFileSystem(e){const r=e=>{e.forEach((e=>{e.isDirectory?e.removeRecursively((()=>{})):e.isFile&&e.remove((()=>{}))}))};this.#r&&this.#r.root.createReader().readEntries(r),this.#r=null,this.events.dispatchEventToListeners(o.FileSystemRemoved,k)}isolatedFileSystem(e,r){return this.#r}loadNetworkResource(e,r,t,n){fetch(e).then((async e=>{const r=await e.arrayBuffer();let t=r;if(function(e){const r=new Uint8Array(e);return!(!r||r.length<3)&&31===r[0]&&139===r[1]&&8===r[2]}(r)){const e=new DecompressionStream("gzip"),n=e.writable.getWriter();n.write(r),n.close(),t=e.readable}return await new Response(t).text()})).then((function(e){p(t,e),n({statusCode:200,headers:void 0,messageOverride:void 0,netError:void 0,netErrorName:void 0,urlValid:void 0})})).catch((function(){n({statusCode:404,headers:void 0,messageOverride:void 0,netError:void 0,netErrorName:void 0,urlValid:void 0})}))}registerPreference(e,r){}getPreferences(e){const r={};for(const e in window.localStorage)r[e]=window.localStorage[e];e(r)}getPreference(e,r){r(window.localStorage[e])}setPreference(e,r){window.localStorage[e]=r}removePreference(e){delete window.localStorage[e]}clearPreferences(){window.localStorage.clear()}getSyncInformation(e){if("getSyncInformationForTesting"in globalThis)return e(globalThis.getSyncInformationForTesting());e({isSyncActive:!1,arePreferencesSynced:!1})}getHostConfig(e){const r={devToolsVeLogging:{enabled:!0},thirdPartyCookieControls:{thirdPartyCookieMetadataEnabled:!0,thirdPartyCookieHeuristicsEnabled:!0,managedBlockThirdPartyCookies:"Unset"}};if("hostConfigForTesting"in globalThis){const{hostConfigForTesting:e}=globalThis;for(const t of Object.keys(e)){const n=t=>{"object"==typeof r[t]&&"object"==typeof e[t]?r[t]={...r[t],...e[t]}:r[t]=e[t]??r[t]};n(t)}}e(r)}upgradeDraggedFileSystemPermissions(e){}indexPath(e,r,t){}stopIndexing(e){}searchInPath(e,r,t){}zoomFactor(){return 1}zoomIn(){}zoomOut(){}resetZoom(){}setWhitelistedShortcuts(e){}setEyeDropperActive(e){}showCertificateViewer(e){}reattach(e){e()}readyForTest(){}connectionReady(){}setOpenNewWindowForPopups(e){}setDevicesDiscoveryConfig(e){}setDevicesUpdatesEnabled(e){}openRemotePage(e,r){}openNodeFrontend(){}showContextMenuAtPoint(e,r,t,n){throw new Error("Soft context menu should be used")}isHostedMode(){return!0}setAddExtensionCallback(e){}async initialTargetId(){return null}doAidaConversation(e,r,t){t({error:"Not implemented"})}registerAidaClientEvent(e,r){r({error:"Not implemented"})}recordImpression(e){}recordResize(e){}recordClick(e){}recordHover(e){}recordDrag(e){}recordChange(e){}recordKeyDown(e){}recordSettingAccess(e){}}let f=globalThis.InspectorFrontendHost;class y{constructor(){for(const e of s)this[e[1]]=this.dispatch.bind(this,e[0],e[2],e[3])}dispatch(e,r,t,...n){if(r.length<2){try{f.events.dispatchEventToListeners(e,n[0])}catch(e){console.error(e+" "+e.stack)}return}const o={};for(let e=0;e=0&&(o.options??={},o.options.temperature=i),s&&(o.options??={},o.options.model_id=s),o}static async checkAccessPreconditions(){if(!navigator.onLine)return"no-internet";const e=await new Promise((e=>f.getSyncInformation((r=>e(r)))));return e.accountEmail?e.isSyncPaused?"sync-is-paused":"available":"no-account-email"}async*fetch(e,r){if(!f.doAidaConversation)throw new Error("doAidaConversation is not available");const t=(()=>{let{promise:e,resolve:t,reject:n}=Promise.withResolvers();return r?.signal?.addEventListener("abort",(()=>{n(new O)}),{once:!0}),{write:async r=>{t(r),({promise:e,resolve:t,reject:n}=Promise.withResolvers())},close:async()=>{t(null)},read:()=>e,fail:e=>n(e)}})(),n=m(t);let o;f.doAidaConversation(JSON.stringify(e),n,(e=>{403===e.statusCode?t.fail(new Error("Server responded: permission denied")):e.error?t.fail(new Error(`Cannot send request: ${e.error} ${e.detail||""}`)):"net::ERR_TIMED_OUT"===e.netErrorName?t.fail(new Error("doAidaConversation timed out")):200!==e.statusCode?t.fail(new Error(`Request failed: ${JSON.stringify(e)}`)):t.close()}));const s=[];let i=!1;const a=[];let d={rpcGlobalId:0};for(;o=await t.read();){let e,r=!1;if(o.length){o.startsWith(",")&&(o=o.slice(1)),o.startsWith("[")||(o="["+o),o.endsWith("]")||(o+="]");try{e=JSON.parse(o)}catch(e){throw new Error("Cannot parse chunk: "+o,{cause:e})}for(const t of e){if("metadata"in t&&(d=t.metadata,d?.attributionMetadata?.attributionAction===T.BLOCK))throw new N;if("textChunk"in t)i&&(s.push(_),i=!1),s.push(t.textChunk.text),r=!0;else if("codeChunk"in t)i||(s.push(_),i=!0),s.push(t.codeChunk.code),r=!0;else{if(!("functionCallChunk"in t))throw"error"in t?new Error(`Server responded: ${JSON.stringify(t)}`):new Error("Unknown chunk result");a.push({name:t.functionCallChunk.functionCall.name,args:t.functionCallChunk.functionCall.args})}}r&&(yield{explanation:s.join("")+(i?_:""),metadata:d,completed:!1})}}yield{explanation:s.join("")+(i?_:""),metadata:d,functionCalls:a.length?a:void 0,completed:!0}}registerClientEvent(e){const{promise:r,resolve:t}=Promise.withResolvers();return f.registerAidaClientEvent(JSON.stringify({client:M,event_time:(new Date).toISOString(),...e}),t),r}}let D;class H extends e.ObjectWrapper.ObjectWrapper{#t;#n;constructor(){super()}static instance(){return D||(D=new H),D}addEventListener(e,r){const t=!this.hasEventListeners(e),n=super.addEventListener(e,r);return t&&(window.clearTimeout(this.#t),this.pollAidaAvailability()),n}removeEventListener(e,r){super.removeEventListener(e,r),this.hasEventListeners(e)||window.clearTimeout(this.#t)}async pollAidaAvailability(){this.#t=window.setTimeout((()=>this.pollAidaAvailability()),2e3);const e=await L.checkAccessPreconditions();if(e!==this.#n){this.#n=e;const t=await new Promise((e=>f.getHostConfig(e)));Object.assign(r.Runtime.hostConfig,t),this.dispatchEventToListeners("aidaAvailabilityChanged")}}}var U=Object.freeze({__proto__:null,AidaAbortError:O,AidaBlockError:N,AidaClient:L,CLIENT_NAME:M,get CitationSourceType(){return x},get ClientFeature(){return P},get FunctionalityType(){return A},HostConfigTracker:H,get RecitationAction(){return T},get Role(){return b},get UserTier(){return R},convertToUserTierEnum:function(e){if(e)switch(e){case"TESTERS":return R.TESTERS;case"BETA":return R.BETA;case"PUBLIC":return R.PUBLIC}return R.BETA}});let W,B,V,G,j;function q(){return W||(W=f.platform()),W}var X=Object.freeze({__proto__:null,fontFamily:function(){if(j)return j;switch(q()){case"linux":j="Roboto, Ubuntu, Arial, sans-serif";break;case"mac":j="'Lucida Grande', sans-serif";break;case"windows":j="'Segoe UI', Tahoma, sans-serif"}return j},isCustomDevtoolsFrontend:function(){return void 0===G&&(G=window.location.toString().startsWith("devtools://devtools/custom/")),G},isMac:function(){return void 0===B&&(B="mac"===q()),B},isWin:function(){return void 0===V&&(V="windows"===q()),V},platform:q,setPlatformForTests:function(e){W=e,B=void 0,V=void 0}});let z=null;function K(){return null===z&&(z=new $),z}class ${#o="error";#s=new Set;#i=null;#a=null;#d="rn_inspector";#c={};#l=new Map;isEnabled(){return!0===globalThis.enableReactNativePerfMetrics}addEventListener(e){this.#s.add(e);return()=>{this.#s.delete(e)}}removeAllEventListeners(){this.#s.clear()}sendEvent(e){if(!0!==globalThis.enableReactNativePerfMetrics)return;const r=this.#u(e),t=[];for(const e of this.#s)try{e(r)}catch(e){t.push(e)}if(t.length>0){const e=new AggregateError(t);console.error("Error occurred when calling event listeners",e)}}registerPerfMetricsGlobalPostMessageHandler(){!0===globalThis.enableReactNativePerfMetrics&&!0===globalThis.enableReactNativePerfMetricsGlobalPostMessage&&this.addEventListener((e=>{window.postMessage({event:e,tag:"react-native-chrome-devtools-perf-metrics"},window.location.origin)}))}registerGlobalErrorReporting(){window.addEventListener("error",(e=>{const[r,t]=Y(`[RNPerfMetrics] uncaught error: ${e.message}`,e.error);this.sendEvent({eventName:"Browser.Error",params:{type:"error",message:r,error:t}})}),{passive:!0}),window.addEventListener("unhandledrejection",(e=>{const[r,t]=Y("[RNPerfMetrics] unhandled promise rejection",e.reason);this.sendEvent({eventName:"Browser.Error",params:{type:"rejectedPromise",message:r,error:t}})}),{passive:!0});const e=globalThis.console,r=e[this.#o];e[this.#o]=(...t)=>{try{const e=t[0],[r,n]=Y("[RNPerfMetrics] console.error",e);this.sendEvent({eventName:"Browser.Error",params:{message:r,error:n,type:"consoleError"}})}catch(e){const[r,t]=Y("[RNPerfMetrics] Error handling console.error",e);this.sendEvent({eventName:"Browser.Error",params:{message:r,error:t,type:"consoleError"}})}finally{r.apply(e,t)}}}setLaunchId(e){this.#i=e}setAppId(e){this.#a=e}setTelemetryInfo(e){this.#c=e}entryPointLoadingStarted(e){this.#d=e,this.sendEvent({eventName:"Entrypoint.LoadingStarted",entryPoint:e})}entryPointLoadingFinished(e){this.sendEvent({eventName:"Entrypoint.LoadingFinished",entryPoint:e})}browserVisibilityChanged(e){this.sendEvent({eventName:"Browser.VisibilityChange",params:{visibilityState:e}})}remoteDebuggingTerminated(e={}){this.sendEvent({eventName:"Connection.DebuggingTerminated",params:e})}developerResourceLoadingStarted(e,r){const t=Q(e);this.sendEvent({eventName:"DeveloperResource.LoadingStarted",params:{url:t,loadingMethod:r}})}developerResourceLoadingFinished(e,r,t){const n=Q(e);this.sendEvent({eventName:"DeveloperResource.LoadingFinished",params:{url:n,loadingMethod:r,success:t.success,errorMessage:t.errorDescription?.message}})}developerResourcesStartupLoadingFinishedEvent(e,r){this.sendEvent({eventName:"DeveloperResources.StartupLoadingFinished",params:{numResources:e,timeSinceLaunch:r}})}fuseboxSetClientMetadataStarted(){this.sendEvent({eventName:"FuseboxSetClientMetadataStarted"})}fuseboxSetClientMetadataFinished(e,r){if(e)this.sendEvent({eventName:"FuseboxSetClientMetadataFinished",params:{success:!0}});else{const[e,t]=Y("[RNPerfMetrics] Fusebox setClientMetadata failed",r);this.sendEvent({eventName:"FuseboxSetClientMetadataFinished",params:{success:!1,error:t,errorMessage:e}})}}heapSnapshotStarted(){this.sendEvent({eventName:"MemoryPanelActionStarted",params:{action:"snapshot"}})}heapSnapshotFinished(e){this.sendEvent({eventName:"MemoryPanelActionFinished",params:{action:"snapshot",success:e}})}heapProfilingStarted(){this.sendEvent({eventName:"MemoryPanelActionStarted",params:{action:"profiling"}})}heapProfilingFinished(e){this.sendEvent({eventName:"MemoryPanelActionFinished",params:{action:"profiling",success:e}})}heapSamplingStarted(){this.sendEvent({eventName:"MemoryPanelActionStarted",params:{action:"sampling"}})}heapSamplingFinished(e){this.sendEvent({eventName:"MemoryPanelActionFinished",params:{action:"sampling",success:e}})}stackTraceSymbolicationSucceeded(e){this.sendEvent({eventName:"StackTraceSymbolicationSucceeded",params:{specialHermesFrameTypes:e}})}stackTraceSymbolicationFailed(e,r,t){this.sendEvent({eventName:"StackTraceSymbolicationFailed",params:{stackTrace:e,line:r,reason:t}})}stackTraceFrameUrlResolutionSucceeded(){this.sendEvent({eventName:"StackTraceFrameUrlResolutionSucceeded"})}stackTraceFrameUrlResolutionFailed(e){this.sendEvent({eventName:"StackTraceFrameUrlResolutionFailed",params:{uniqueUrls:e}})}manualBreakpointSetSucceeded(e){this.sendEvent({eventName:"ManualBreakpointSetSucceeded",params:{bpSettingDuration:e}})}stackTraceFrameClicked(e){this.sendEvent({eventName:"StackTraceFrameClicked",params:{isLinkified:e}})}panelShown(e,r){}panelShownInLocation(e,r){this.sendEvent({eventName:"PanelShown",params:{location:r,newPanelName:e}}),this.#l.set(r,e)}#u(e){return{...e,...{timestamp:performance.timeOrigin+performance.now(),launchId:this.#i,appId:this.#a,entryPoint:this.#d,telemetryInfo:this.#c,currentPanels:this.#l}}}}function Q(e){const{url:r}=e;return"http"===e.scheme||"https"===e.scheme?r:`${r.slice(0,100)} …(omitted ${r.length-100} characters)`}function Y(e,r){if(r instanceof Error){return[`${e}: ${r.message}`,r]}const t=`${e}: ${String(r)}`;return[t,new Error(t,{cause:r})]}var J,Z,ee,re,te,ne,oe,se,ie,ae,de,ce,le,ue=Object.freeze({__proto__:null,getInstance:K});class me{#m;#g;#p;constructor(){this.#m=!1,this.#g=!1,this.#p=""}panelShown(e,r){const t=Z[e]||0;f.recordEnumeratedHistogram("DevTools.PanelShown",t,Z.MAX_VALUE),f.recordUserMetricsAction("DevTools_PanelShown_"+e),r||(this.#m=!0),K().panelShown(e,r)}panelShownInLocation(e,r){const t=ee[`${e}-${r}`]||0;f.recordEnumeratedHistogram("DevTools.PanelShownInLocation",t,ee.MAX_VALUE),K().panelShownInLocation(e,r)}settingsPanelShown(e){this.panelShown("settings-"+e)}sourcesPanelFileDebugged(e){const r=e&&te[e]||te.Unknown;f.recordEnumeratedHistogram("DevTools.SourcesPanelFileDebugged",r,te.MAX_VALUE)}sourcesPanelFileOpened(e){const r=e&&te[e]||te.Unknown;f.recordEnumeratedHistogram("DevTools.SourcesPanelFileOpened",r,te.MAX_VALUE)}networkPanelResponsePreviewOpened(e){const r=e&&te[e]||te.Unknown;f.recordEnumeratedHistogram("DevTools.NetworkPanelResponsePreviewOpened",r,te.MAX_VALUE)}actionTaken(e){f.recordEnumeratedHistogram("DevTools.ActionTaken",e,J.MAX_VALUE)}panelLoaded(e,r){this.#g||e!==this.#p||(this.#g=!0,requestAnimationFrame((()=>{window.setTimeout((()=>{performance.mark(r),this.#m||f.recordPerformanceHistogram(r,performance.now())}),0)})))}setLaunchPanel(e){this.#p=e}performanceTraceLoad(e){f.recordPerformanceHistogram("DevTools.TraceLoad",e.duration)}keybindSetSettingChanged(e){const r=ne[e]||0;f.recordEnumeratedHistogram("DevTools.KeybindSetSettingChanged",r,ne.MAX_VALUE)}keyboardShortcutFired(e){const r=oe[e]||oe.OtherShortcut;f.recordEnumeratedHistogram("DevTools.KeyboardShortcutFired",r,oe.MAX_VALUE)}issuesPanelOpenedFrom(e){f.recordEnumeratedHistogram("DevTools.IssuesPanelOpenedFrom",e,6)}issuesPanelIssueExpanded(e){if(void 0===e)return;const r=ie[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.IssuesPanelIssueExpanded",r,ie.MAX_VALUE)}issuesPanelResourceOpened(e,r){const t=ae[e+r];void 0!==t&&f.recordEnumeratedHistogram("DevTools.IssuesPanelResourceOpened",t,ae.MAX_VALUE)}issueCreated(e){const r=de[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.IssueCreated",r,de.MAX_VALUE)}experimentEnabledAtLaunch(e){const r=se[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.ExperimentEnabledAtLaunch",r,se.MAX_VALUE)}navigationSettingAtFirstTimelineLoad(e){f.recordEnumeratedHistogram("DevTools.TimelineNavigationSettingState",e,4)}experimentDisabledAtLaunch(e){const r=se[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.ExperimentDisabledAtLaunch",r,se.MAX_VALUE)}experimentChanged(e,r){const t=se[e];if(void 0===t)return;const n=r?"DevTools.ExperimentEnabled":"DevTools.ExperimentDisabled";f.recordEnumeratedHistogram(n,t,se.MAX_VALUE)}developerResourceLoaded(e){e>=8||f.recordEnumeratedHistogram("DevTools.DeveloperResourceLoaded",e,8)}developerResourceScheme(e){e>=9||f.recordEnumeratedHistogram("DevTools.DeveloperResourceScheme",e,9)}language(e){const r=ce[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.Language",r,ce.MAX_VALUE)}syncSetting(e){f.getSyncInformation((r=>{let t=1;r.isSyncActive&&!r.arePreferencesSynced?t=2:r.isSyncActive&&r.arePreferencesSynced&&(t=e?4:3),f.recordEnumeratedHistogram("DevTools.SyncSetting",t,5)}))}recordingAssertion(e){f.recordEnumeratedHistogram("DevTools.RecordingAssertion",e,4)}recordingToggled(e){f.recordEnumeratedHistogram("DevTools.RecordingToggled",e,3)}recordingReplayFinished(e){f.recordEnumeratedHistogram("DevTools.RecordingReplayFinished",e,5)}recordingReplaySpeed(e){f.recordEnumeratedHistogram("DevTools.RecordingReplaySpeed",e,5)}recordingReplayStarted(e){f.recordEnumeratedHistogram("DevTools.RecordingReplayStarted",e,4)}recordingEdited(e){f.recordEnumeratedHistogram("DevTools.RecordingEdited",e,11)}recordingExported(e){f.recordEnumeratedHistogram("DevTools.RecordingExported",e,6)}recordingCodeToggled(e){f.recordEnumeratedHistogram("DevTools.RecordingCodeToggled",e,3)}recordingCopiedToClipboard(e){f.recordEnumeratedHistogram("DevTools.RecordingCopiedToClipboard",e,9)}cssHintShown(e){f.recordEnumeratedHistogram("DevTools.CSSHintShown",e,14)}lighthouseModeRun(e){f.recordEnumeratedHistogram("DevTools.LighthouseModeRun",e,4)}lighthouseCategoryUsed(e){f.recordEnumeratedHistogram("DevTools.LighthouseCategoryUsed",e,6)}swatchActivated(e){f.recordEnumeratedHistogram("DevTools.SwatchActivated",e,11)}animationPlaybackRateChanged(e){f.recordEnumeratedHistogram("DevTools.AnimationPlaybackRateChanged",e,4)}animationPointDragged(e){f.recordEnumeratedHistogram("DevTools.AnimationPointDragged",e,5)}workspacesPopulated(e){f.recordPerformanceHistogram("DevTools.Workspaces.PopulateWallClocktime",e)}visualLoggingProcessingDone(e){f.recordPerformanceHistogram("DevTools.VisualLogging.ProcessingTime",e)}freestylerQueryLength(e){f.recordCountHistogram("DevTools.Freestyler.QueryLength",e,0,1e5,100)}freestylerEvalResponseSize(e){f.recordCountHistogram("DevTools.Freestyler.EvalResponseSize",e,0,1e5,100)}}!function(e){e[e.WindowDocked=1]="WindowDocked",e[e.WindowUndocked=2]="WindowUndocked",e[e.ScriptsBreakpointSet=3]="ScriptsBreakpointSet",e[e.TimelineStarted=4]="TimelineStarted",e[e.ProfilesCPUProfileTaken=5]="ProfilesCPUProfileTaken",e[e.ProfilesHeapProfileTaken=6]="ProfilesHeapProfileTaken",e[e.ConsoleEvaluated=8]="ConsoleEvaluated",e[e.FileSavedInWorkspace=9]="FileSavedInWorkspace",e[e.DeviceModeEnabled=10]="DeviceModeEnabled",e[e.AnimationsPlaybackRateChanged=11]="AnimationsPlaybackRateChanged",e[e.RevisionApplied=12]="RevisionApplied",e[e.FileSystemDirectoryContentReceived=13]="FileSystemDirectoryContentReceived",e[e.StyleRuleEdited=14]="StyleRuleEdited",e[e.CommandEvaluatedInConsolePanel=15]="CommandEvaluatedInConsolePanel",e[e.DOMPropertiesExpanded=16]="DOMPropertiesExpanded",e[e.ResizedViewInResponsiveMode=17]="ResizedViewInResponsiveMode",e[e.TimelinePageReloadStarted=18]="TimelinePageReloadStarted",e[e.ConnectToNodeJSFromFrontend=19]="ConnectToNodeJSFromFrontend",e[e.ConnectToNodeJSDirectly=20]="ConnectToNodeJSDirectly",e[e.CpuThrottlingEnabled=21]="CpuThrottlingEnabled",e[e.CpuProfileNodeFocused=22]="CpuProfileNodeFocused",e[e.CpuProfileNodeExcluded=23]="CpuProfileNodeExcluded",e[e.SelectFileFromFilePicker=24]="SelectFileFromFilePicker",e[e.SelectCommandFromCommandMenu=25]="SelectCommandFromCommandMenu",e[e.ChangeInspectedNodeInElementsPanel=26]="ChangeInspectedNodeInElementsPanel",e[e.StyleRuleCopied=27]="StyleRuleCopied",e[e.CoverageStarted=28]="CoverageStarted",e[e.LighthouseStarted=29]="LighthouseStarted",e[e.LighthouseFinished=30]="LighthouseFinished",e[e.ShowedThirdPartyBadges=31]="ShowedThirdPartyBadges",e[e.LighthouseViewTrace=32]="LighthouseViewTrace",e[e.FilmStripStartedRecording=33]="FilmStripStartedRecording",e[e.CoverageReportFiltered=34]="CoverageReportFiltered",e[e.CoverageStartedPerBlock=35]="CoverageStartedPerBlock",e[e["SettingsOpenedFromGear-deprecated"]=36]="SettingsOpenedFromGear-deprecated",e[e["SettingsOpenedFromMenu-deprecated"]=37]="SettingsOpenedFromMenu-deprecated",e[e["SettingsOpenedFromCommandMenu-deprecated"]=38]="SettingsOpenedFromCommandMenu-deprecated",e[e.TabMovedToDrawer=39]="TabMovedToDrawer",e[e.TabMovedToMainPanel=40]="TabMovedToMainPanel",e[e.CaptureCssOverviewClicked=41]="CaptureCssOverviewClicked",e[e.VirtualAuthenticatorEnvironmentEnabled=42]="VirtualAuthenticatorEnvironmentEnabled",e[e.SourceOrderViewActivated=43]="SourceOrderViewActivated",e[e.UserShortcutAdded=44]="UserShortcutAdded",e[e.ShortcutRemoved=45]="ShortcutRemoved",e[e.ShortcutModified=46]="ShortcutModified",e[e.CustomPropertyLinkClicked=47]="CustomPropertyLinkClicked",e[e.CustomPropertyEdited=48]="CustomPropertyEdited",e[e.ServiceWorkerNetworkRequestClicked=49]="ServiceWorkerNetworkRequestClicked",e[e.ServiceWorkerNetworkRequestClosedQuickly=50]="ServiceWorkerNetworkRequestClosedQuickly",e[e.NetworkPanelServiceWorkerRespondWith=51]="NetworkPanelServiceWorkerRespondWith",e[e.NetworkPanelCopyValue=52]="NetworkPanelCopyValue",e[e.ConsoleSidebarOpened=53]="ConsoleSidebarOpened",e[e.PerfPanelTraceImported=54]="PerfPanelTraceImported",e[e.PerfPanelTraceExported=55]="PerfPanelTraceExported",e[e.StackFrameRestarted=56]="StackFrameRestarted",e[e.CaptureTestProtocolClicked=57]="CaptureTestProtocolClicked",e[e.BreakpointRemovedFromRemoveButton=58]="BreakpointRemovedFromRemoveButton",e[e.BreakpointGroupExpandedStateChanged=59]="BreakpointGroupExpandedStateChanged",e[e.HeaderOverrideFileCreated=60]="HeaderOverrideFileCreated",e[e.HeaderOverrideEnableEditingClicked=61]="HeaderOverrideEnableEditingClicked",e[e.HeaderOverrideHeaderAdded=62]="HeaderOverrideHeaderAdded",e[e.HeaderOverrideHeaderEdited=63]="HeaderOverrideHeaderEdited",e[e.HeaderOverrideHeaderRemoved=64]="HeaderOverrideHeaderRemoved",e[e.HeaderOverrideHeadersFileEdited=65]="HeaderOverrideHeadersFileEdited",e[e.PersistenceNetworkOverridesEnabled=66]="PersistenceNetworkOverridesEnabled",e[e.PersistenceNetworkOverridesDisabled=67]="PersistenceNetworkOverridesDisabled",e[e.BreakpointRemovedFromContextMenu=68]="BreakpointRemovedFromContextMenu",e[e.BreakpointsInFileRemovedFromRemoveButton=69]="BreakpointsInFileRemovedFromRemoveButton",e[e.BreakpointsInFileRemovedFromContextMenu=70]="BreakpointsInFileRemovedFromContextMenu",e[e.BreakpointsInFileCheckboxToggled=71]="BreakpointsInFileCheckboxToggled",e[e.BreakpointsInFileEnabledDisabledFromContextMenu=72]="BreakpointsInFileEnabledDisabledFromContextMenu",e[e.BreakpointConditionEditedFromSidebar=73]="BreakpointConditionEditedFromSidebar",e[e.WorkspaceTabAddFolder=74]="WorkspaceTabAddFolder",e[e.WorkspaceTabRemoveFolder=75]="WorkspaceTabRemoveFolder",e[e.OverrideTabAddFolder=76]="OverrideTabAddFolder",e[e.OverrideTabRemoveFolder=77]="OverrideTabRemoveFolder",e[e.WorkspaceSourceSelected=78]="WorkspaceSourceSelected",e[e.OverridesSourceSelected=79]="OverridesSourceSelected",e[e.StyleSheetInitiatorLinkClicked=80]="StyleSheetInitiatorLinkClicked",e[e.BreakpointRemovedFromGutterContextMenu=81]="BreakpointRemovedFromGutterContextMenu",e[e.BreakpointRemovedFromGutterToggle=82]="BreakpointRemovedFromGutterToggle",e[e.StylePropertyInsideKeyframeEdited=83]="StylePropertyInsideKeyframeEdited",e[e.OverrideContentFromSourcesContextMenu=84]="OverrideContentFromSourcesContextMenu",e[e.OverrideContentFromNetworkContextMenu=85]="OverrideContentFromNetworkContextMenu",e[e.OverrideScript=86]="OverrideScript",e[e.OverrideStyleSheet=87]="OverrideStyleSheet",e[e.OverrideDocument=88]="OverrideDocument",e[e.OverrideFetchXHR=89]="OverrideFetchXHR",e[e.OverrideImage=90]="OverrideImage",e[e.OverrideFont=91]="OverrideFont",e[e.OverrideContentContextMenuSetup=92]="OverrideContentContextMenuSetup",e[e.OverrideContentContextMenuAbandonSetup=93]="OverrideContentContextMenuAbandonSetup",e[e.OverrideContentContextMenuActivateDisabled=94]="OverrideContentContextMenuActivateDisabled",e[e.OverrideContentContextMenuOpenExistingFile=95]="OverrideContentContextMenuOpenExistingFile",e[e.OverrideContentContextMenuSaveNewFile=96]="OverrideContentContextMenuSaveNewFile",e[e.ShowAllOverridesFromSourcesContextMenu=97]="ShowAllOverridesFromSourcesContextMenu",e[e.ShowAllOverridesFromNetworkContextMenu=98]="ShowAllOverridesFromNetworkContextMenu",e[e.AnimationGroupsCleared=99]="AnimationGroupsCleared",e[e.AnimationsPaused=100]="AnimationsPaused",e[e.AnimationsResumed=101]="AnimationsResumed",e[e.AnimatedNodeDescriptionClicked=102]="AnimatedNodeDescriptionClicked",e[e.AnimationGroupScrubbed=103]="AnimationGroupScrubbed",e[e.AnimationGroupReplayed=104]="AnimationGroupReplayed",e[e.OverrideTabDeleteFolderContextMenu=105]="OverrideTabDeleteFolderContextMenu",e[e.WorkspaceDropFolder=107]="WorkspaceDropFolder",e[e.WorkspaceSelectFolder=108]="WorkspaceSelectFolder",e[e.OverrideContentContextMenuSourceMappedWarning=109]="OverrideContentContextMenuSourceMappedWarning",e[e.OverrideContentContextMenuRedirectToDeployed=110]="OverrideContentContextMenuRedirectToDeployed",e[e.NewStyleRuleAdded=111]="NewStyleRuleAdded",e[e.TraceExpanded=112]="TraceExpanded",e[e.InsightConsoleMessageShown=113]="InsightConsoleMessageShown",e[e.InsightRequestedViaContextMenu=114]="InsightRequestedViaContextMenu",e[e.InsightRequestedViaHoverButton=115]="InsightRequestedViaHoverButton",e[e.InsightRatedPositive=117]="InsightRatedPositive",e[e.InsightRatedNegative=118]="InsightRatedNegative",e[e.InsightClosed=119]="InsightClosed",e[e.InsightErrored=120]="InsightErrored",e[e.InsightHoverButtonShown=121]="InsightHoverButtonShown",e[e.SelfXssWarningConsoleMessageShown=122]="SelfXssWarningConsoleMessageShown",e[e.SelfXssWarningDialogShown=123]="SelfXssWarningDialogShown",e[e.SelfXssAllowPastingInConsole=124]="SelfXssAllowPastingInConsole",e[e.SelfXssAllowPastingInDialog=125]="SelfXssAllowPastingInDialog",e[e.ToggleEmulateFocusedPageFromStylesPaneOn=126]="ToggleEmulateFocusedPageFromStylesPaneOn",e[e.ToggleEmulateFocusedPageFromStylesPaneOff=127]="ToggleEmulateFocusedPageFromStylesPaneOff",e[e.ToggleEmulateFocusedPageFromRenderingTab=128]="ToggleEmulateFocusedPageFromRenderingTab",e[e.ToggleEmulateFocusedPageFromCommandMenu=129]="ToggleEmulateFocusedPageFromCommandMenu",e[e.InsightGenerated=130]="InsightGenerated",e[e.InsightErroredApi=131]="InsightErroredApi",e[e.InsightErroredMarkdown=132]="InsightErroredMarkdown",e[e.ToggleShowWebVitals=133]="ToggleShowWebVitals",e[e.InsightErroredPermissionDenied=134]="InsightErroredPermissionDenied",e[e.InsightErroredCannotSend=135]="InsightErroredCannotSend",e[e.InsightErroredRequestFailed=136]="InsightErroredRequestFailed",e[e.InsightErroredCannotParseChunk=137]="InsightErroredCannotParseChunk",e[e.InsightErroredUnknownChunk=138]="InsightErroredUnknownChunk",e[e.InsightErroredOther=139]="InsightErroredOther",e[e.AutofillReceived=140]="AutofillReceived",e[e.AutofillReceivedAndTabAutoOpened=141]="AutofillReceivedAndTabAutoOpened",e[e.AnimationGroupSelected=142]="AnimationGroupSelected",e[e.ScrollDrivenAnimationGroupSelected=143]="ScrollDrivenAnimationGroupSelected",e[e.ScrollDrivenAnimationGroupScrubbed=144]="ScrollDrivenAnimationGroupScrubbed",e[e.AiAssistanceOpenedFromElementsPanel=145]="AiAssistanceOpenedFromElementsPanel",e[e.AiAssistanceOpenedFromStylesTab=146]="AiAssistanceOpenedFromStylesTab",e[e.ConsoleFilterByContext=147]="ConsoleFilterByContext",e[e.ConsoleFilterBySource=148]="ConsoleFilterBySource",e[e.ConsoleFilterByUrl=149]="ConsoleFilterByUrl",e[e.InsightConsentReminderShown=150]="InsightConsentReminderShown",e[e.InsightConsentReminderCanceled=151]="InsightConsentReminderCanceled",e[e.InsightConsentReminderConfirmed=152]="InsightConsentReminderConfirmed",e[e.InsightsOnboardingShown=153]="InsightsOnboardingShown",e[e.InsightsOnboardingCanceledOnPage1=154]="InsightsOnboardingCanceledOnPage1",e[e.InsightsOnboardingCanceledOnPage2=155]="InsightsOnboardingCanceledOnPage2",e[e.InsightsOnboardingConfirmed=156]="InsightsOnboardingConfirmed",e[e.InsightsOnboardingNextPage=157]="InsightsOnboardingNextPage",e[e.InsightsOnboardingPrevPage=158]="InsightsOnboardingPrevPage",e[e.InsightsOnboardingFeatureDisabled=159]="InsightsOnboardingFeatureDisabled",e[e.InsightsOptInTeaserShown=160]="InsightsOptInTeaserShown",e[e.InsightsOptInTeaserSettingsLinkClicked=161]="InsightsOptInTeaserSettingsLinkClicked",e[e.InsightsOptInTeaserConfirmedInSettings=162]="InsightsOptInTeaserConfirmedInSettings",e[e.InsightsReminderTeaserShown=163]="InsightsReminderTeaserShown",e[e.InsightsReminderTeaserConfirmed=164]="InsightsReminderTeaserConfirmed",e[e.InsightsReminderTeaserCanceled=165]="InsightsReminderTeaserCanceled",e[e.InsightsReminderTeaserSettingsLinkClicked=166]="InsightsReminderTeaserSettingsLinkClicked",e[e.InsightsReminderTeaserAbortedInSettings=167]="InsightsReminderTeaserAbortedInSettings",e[e.GeneratingInsightWithoutDisclaimer=168]="GeneratingInsightWithoutDisclaimer",e[e.AiAssistanceOpenedFromElementsPanelFloatingButton=169]="AiAssistanceOpenedFromElementsPanelFloatingButton",e[e.AiAssistanceOpenedFromNetworkPanel=170]="AiAssistanceOpenedFromNetworkPanel",e[e.AiAssistanceOpenedFromSourcesPanel=171]="AiAssistanceOpenedFromSourcesPanel",e[e.AiAssistanceOpenedFromSourcesPanelFloatingButton=172]="AiAssistanceOpenedFromSourcesPanelFloatingButton",e[e.AiAssistanceOpenedFromPerformancePanel=173]="AiAssistanceOpenedFromPerformancePanel",e[e.AiAssistanceOpenedFromNetworkPanelFloatingButton=174]="AiAssistanceOpenedFromNetworkPanelFloatingButton",e[e.AiAssistancePanelOpened=175]="AiAssistancePanelOpened",e[e.AiAssistanceQuerySubmitted=176]="AiAssistanceQuerySubmitted",e[e.AiAssistanceAnswerReceived=177]="AiAssistanceAnswerReceived",e[e.AiAssistanceDynamicSuggestionClicked=178]="AiAssistanceDynamicSuggestionClicked",e[e.AiAssistanceSideEffectConfirmed=179]="AiAssistanceSideEffectConfirmed",e[e.AiAssistanceSideEffectRejected=180]="AiAssistanceSideEffectRejected",e[e.AiAssistanceError=181]="AiAssistanceError",e[e.AiAssistanceOpenedFromPerformanceInsight=182]="AiAssistanceOpenedFromPerformanceInsight",e[e.MAX_VALUE=183]="MAX_VALUE"}(J||(J={})),function(e){e[e.elements=1]="elements",e[e.resources=2]="resources",e[e.network=3]="network",e[e.sources=4]="sources",e[e.timeline=5]="timeline",e[e["heap-profiler"]=6]="heap-profiler",e[e.console=8]="console",e[e.layers=9]="layers",e[e["console-view"]=10]="console-view",e[e.animations=11]="animations",e[e["network.config"]=12]="network.config",e[e.rendering=13]="rendering",e[e.sensors=14]="sensors",e[e["sources.search"]=15]="sources.search",e[e.security=16]="security",e[e["js-profiler"]=17]="js-profiler",e[e.lighthouse=18]="lighthouse",e[e.coverage=19]="coverage",e[e["protocol-monitor"]=20]="protocol-monitor",e[e["remote-devices"]=21]="remote-devices",e[e["web-audio"]=22]="web-audio",e[e["changes.changes"]=23]="changes.changes",e[e["performance.monitor"]=24]="performance.monitor",e[e["release-note"]=25]="release-note",e[e["live-heap-profile"]=26]="live-heap-profile",e[e["sources.quick"]=27]="sources.quick",e[e["network.blocked-urls"]=28]="network.blocked-urls",e[e["settings-preferences"]=29]="settings-preferences",e[e["settings-workspace"]=30]="settings-workspace",e[e["settings-experiments"]=31]="settings-experiments",e[e["settings-blackbox"]=32]="settings-blackbox",e[e["settings-devices"]=33]="settings-devices",e[e["settings-throttling-conditions"]=34]="settings-throttling-conditions",e[e["settings-emulation-locations"]=35]="settings-emulation-locations",e[e["settings-shortcuts"]=36]="settings-shortcuts",e[e["issues-pane"]=37]="issues-pane",e[e["settings-keybinds"]=38]="settings-keybinds",e[e.cssoverview=39]="cssoverview",e[e["chrome-recorder"]=40]="chrome-recorder",e[e["trust-tokens"]=41]="trust-tokens",e[e["reporting-api"]=42]="reporting-api",e[e["interest-groups"]=43]="interest-groups",e[e["back-forward-cache"]=44]="back-forward-cache",e[e["service-worker-cache"]=45]="service-worker-cache",e[e["background-service-background-fetch"]=46]="background-service-background-fetch",e[e["background-service-background-sync"]=47]="background-service-background-sync",e[e["background-service-push-messaging"]=48]="background-service-push-messaging",e[e["background-service-notifications"]=49]="background-service-notifications",e[e["background-service-payment-handler"]=50]="background-service-payment-handler",e[e["background-service-periodic-background-sync"]=51]="background-service-periodic-background-sync",e[e["service-workers"]=52]="service-workers",e[e["app-manifest"]=53]="app-manifest",e[e.storage=54]="storage",e[e.cookies=55]="cookies",e[e["frame-details"]=56]="frame-details",e[e["frame-resource"]=57]="frame-resource",e[e["frame-window"]=58]="frame-window",e[e["frame-worker"]=59]="frame-worker",e[e["dom-storage"]=60]="dom-storage",e[e["indexed-db"]=61]="indexed-db",e[e["web-sql"]=62]="web-sql",e[e["performance-insights"]=63]="performance-insights",e[e.preloading=64]="preloading",e[e["bounce-tracking-mitigations"]=65]="bounce-tracking-mitigations",e[e["developer-resources"]=66]="developer-resources",e[e["autofill-view"]=67]="autofill-view",e[e.MAX_VALUE=68]="MAX_VALUE"}(Z||(Z={})),function(e){e[e["elements-main"]=1]="elements-main",e[e["elements-drawer"]=2]="elements-drawer",e[e["resources-main"]=3]="resources-main",e[e["resources-drawer"]=4]="resources-drawer",e[e["network-main"]=5]="network-main",e[e["network-drawer"]=6]="network-drawer",e[e["sources-main"]=7]="sources-main",e[e["sources-drawer"]=8]="sources-drawer",e[e["timeline-main"]=9]="timeline-main",e[e["timeline-drawer"]=10]="timeline-drawer",e[e["heap_profiler-main"]=11]="heap_profiler-main",e[e["heap_profiler-drawer"]=12]="heap_profiler-drawer",e[e["console-main"]=13]="console-main",e[e["console-drawer"]=14]="console-drawer",e[e["layers-main"]=15]="layers-main",e[e["layers-drawer"]=16]="layers-drawer",e[e["console-view-main"]=17]="console-view-main",e[e["console-view-drawer"]=18]="console-view-drawer",e[e["animations-main"]=19]="animations-main",e[e["animations-drawer"]=20]="animations-drawer",e[e["network.config-main"]=21]="network.config-main",e[e["network.config-drawer"]=22]="network.config-drawer",e[e["rendering-main"]=23]="rendering-main",e[e["rendering-drawer"]=24]="rendering-drawer",e[e["sensors-main"]=25]="sensors-main",e[e["sensors-drawer"]=26]="sensors-drawer",e[e["sources.search-main"]=27]="sources.search-main",e[e["sources.search-drawer"]=28]="sources.search-drawer",e[e["security-main"]=29]="security-main",e[e["security-drawer"]=30]="security-drawer",e[e["lighthouse-main"]=33]="lighthouse-main",e[e["lighthouse-drawer"]=34]="lighthouse-drawer",e[e["coverage-main"]=35]="coverage-main",e[e["coverage-drawer"]=36]="coverage-drawer",e[e["protocol-monitor-main"]=37]="protocol-monitor-main",e[e["protocol-monitor-drawer"]=38]="protocol-monitor-drawer",e[e["remote-devices-main"]=39]="remote-devices-main",e[e["remote-devices-drawer"]=40]="remote-devices-drawer",e[e["web-audio-main"]=41]="web-audio-main",e[e["web-audio-drawer"]=42]="web-audio-drawer",e[e["changes.changes-main"]=43]="changes.changes-main",e[e["changes.changes-drawer"]=44]="changes.changes-drawer",e[e["performance.monitor-main"]=45]="performance.monitor-main",e[e["performance.monitor-drawer"]=46]="performance.monitor-drawer",e[e["release-note-main"]=47]="release-note-main",e[e["release-note-drawer"]=48]="release-note-drawer",e[e["live_heap_profile-main"]=49]="live_heap_profile-main",e[e["live_heap_profile-drawer"]=50]="live_heap_profile-drawer",e[e["sources.quick-main"]=51]="sources.quick-main",e[e["sources.quick-drawer"]=52]="sources.quick-drawer",e[e["network.blocked-urls-main"]=53]="network.blocked-urls-main",e[e["network.blocked-urls-drawer"]=54]="network.blocked-urls-drawer",e[e["settings-preferences-main"]=55]="settings-preferences-main",e[e["settings-preferences-drawer"]=56]="settings-preferences-drawer",e[e["settings-workspace-main"]=57]="settings-workspace-main",e[e["settings-workspace-drawer"]=58]="settings-workspace-drawer",e[e["settings-experiments-main"]=59]="settings-experiments-main",e[e["settings-experiments-drawer"]=60]="settings-experiments-drawer",e[e["settings-blackbox-main"]=61]="settings-blackbox-main",e[e["settings-blackbox-drawer"]=62]="settings-blackbox-drawer",e[e["settings-devices-main"]=63]="settings-devices-main",e[e["settings-devices-drawer"]=64]="settings-devices-drawer",e[e["settings-throttling-conditions-main"]=65]="settings-throttling-conditions-main",e[e["settings-throttling-conditions-drawer"]=66]="settings-throttling-conditions-drawer",e[e["settings-emulation-locations-main"]=67]="settings-emulation-locations-main",e[e["settings-emulation-locations-drawer"]=68]="settings-emulation-locations-drawer",e[e["settings-shortcuts-main"]=69]="settings-shortcuts-main",e[e["settings-shortcuts-drawer"]=70]="settings-shortcuts-drawer",e[e["issues-pane-main"]=71]="issues-pane-main",e[e["issues-pane-drawer"]=72]="issues-pane-drawer",e[e["settings-keybinds-main"]=73]="settings-keybinds-main",e[e["settings-keybinds-drawer"]=74]="settings-keybinds-drawer",e[e["cssoverview-main"]=75]="cssoverview-main",e[e["cssoverview-drawer"]=76]="cssoverview-drawer",e[e["chrome_recorder-main"]=77]="chrome_recorder-main",e[e["chrome_recorder-drawer"]=78]="chrome_recorder-drawer",e[e["trust_tokens-main"]=79]="trust_tokens-main",e[e["trust_tokens-drawer"]=80]="trust_tokens-drawer",e[e["reporting_api-main"]=81]="reporting_api-main",e[e["reporting_api-drawer"]=82]="reporting_api-drawer",e[e["interest_groups-main"]=83]="interest_groups-main",e[e["interest_groups-drawer"]=84]="interest_groups-drawer",e[e["back_forward_cache-main"]=85]="back_forward_cache-main",e[e["back_forward_cache-drawer"]=86]="back_forward_cache-drawer",e[e["service_worker_cache-main"]=87]="service_worker_cache-main",e[e["service_worker_cache-drawer"]=88]="service_worker_cache-drawer",e[e["background_service_backgroundFetch-main"]=89]="background_service_backgroundFetch-main",e[e["background_service_backgroundFetch-drawer"]=90]="background_service_backgroundFetch-drawer",e[e["background_service_backgroundSync-main"]=91]="background_service_backgroundSync-main",e[e["background_service_backgroundSync-drawer"]=92]="background_service_backgroundSync-drawer",e[e["background_service_pushMessaging-main"]=93]="background_service_pushMessaging-main",e[e["background_service_pushMessaging-drawer"]=94]="background_service_pushMessaging-drawer",e[e["background_service_notifications-main"]=95]="background_service_notifications-main",e[e["background_service_notifications-drawer"]=96]="background_service_notifications-drawer",e[e["background_service_paymentHandler-main"]=97]="background_service_paymentHandler-main",e[e["background_service_paymentHandler-drawer"]=98]="background_service_paymentHandler-drawer",e[e["background_service_periodicBackgroundSync-main"]=99]="background_service_periodicBackgroundSync-main",e[e["background_service_periodicBackgroundSync-drawer"]=100]="background_service_periodicBackgroundSync-drawer",e[e["service_workers-main"]=101]="service_workers-main",e[e["service_workers-drawer"]=102]="service_workers-drawer",e[e["app_manifest-main"]=103]="app_manifest-main",e[e["app_manifest-drawer"]=104]="app_manifest-drawer",e[e["storage-main"]=105]="storage-main",e[e["storage-drawer"]=106]="storage-drawer",e[e["cookies-main"]=107]="cookies-main",e[e["cookies-drawer"]=108]="cookies-drawer",e[e["frame_details-main"]=109]="frame_details-main",e[e["frame_details-drawer"]=110]="frame_details-drawer",e[e["frame_resource-main"]=111]="frame_resource-main",e[e["frame_resource-drawer"]=112]="frame_resource-drawer",e[e["frame_window-main"]=113]="frame_window-main",e[e["frame_window-drawer"]=114]="frame_window-drawer",e[e["frame_worker-main"]=115]="frame_worker-main",e[e["frame_worker-drawer"]=116]="frame_worker-drawer",e[e["dom_storage-main"]=117]="dom_storage-main",e[e["dom_storage-drawer"]=118]="dom_storage-drawer",e[e["indexed_db-main"]=119]="indexed_db-main",e[e["indexed_db-drawer"]=120]="indexed_db-drawer",e[e["web_sql-main"]=121]="web_sql-main",e[e["web_sql-drawer"]=122]="web_sql-drawer",e[e["performance_insights-main"]=123]="performance_insights-main",e[e["performance_insights-drawer"]=124]="performance_insights-drawer",e[e["preloading-main"]=125]="preloading-main",e[e["preloading-drawer"]=126]="preloading-drawer",e[e["bounce_tracking_mitigations-main"]=127]="bounce_tracking_mitigations-main",e[e["bounce_tracking_mitigations-drawer"]=128]="bounce_tracking_mitigations-drawer",e[e["developer-resources-main"]=129]="developer-resources-main",e[e["developer-resources-drawer"]=130]="developer-resources-drawer",e[e["autofill-view-main"]=131]="autofill-view-main",e[e["autofill-view-drawer"]=132]="autofill-view-drawer",e[e.MAX_VALUE=133]="MAX_VALUE"}(ee||(ee={})),function(e){e[e.OtherSidebarPane=0]="OtherSidebarPane",e[e.styles=1]="styles",e[e.computed=2]="computed",e[e["elements.layout"]=3]="elements.layout",e[e["elements.event-listeners"]=4]="elements.event-listeners",e[e["elements.dom-breakpoints"]=5]="elements.dom-breakpoints",e[e["elements.dom-properties"]=6]="elements.dom-properties",e[e["accessibility.view"]=7]="accessibility.view",e[e.MAX_VALUE=8]="MAX_VALUE"}(re||(re={})),function(e){e[e.Unknown=0]="Unknown",e[e["text/css"]=2]="text/css",e[e["text/html"]=3]="text/html",e[e["application/xml"]=4]="application/xml",e[e["application/wasm"]=5]="application/wasm",e[e["application/manifest+json"]=6]="application/manifest+json",e[e["application/x-aspx"]=7]="application/x-aspx",e[e["application/jsp"]=8]="application/jsp",e[e["text/x-c++src"]=9]="text/x-c++src",e[e["text/x-coffeescript"]=10]="text/x-coffeescript",e[e["application/vnd.dart"]=11]="application/vnd.dart",e[e["text/typescript"]=12]="text/typescript",e[e["text/typescript-jsx"]=13]="text/typescript-jsx",e[e["application/json"]=14]="application/json",e[e["text/x-csharp"]=15]="text/x-csharp",e[e["text/x-java"]=16]="text/x-java",e[e["text/x-less"]=17]="text/x-less",e[e["application/x-httpd-php"]=18]="application/x-httpd-php",e[e["text/x-python"]=19]="text/x-python",e[e["text/x-sh"]=20]="text/x-sh",e[e["text/x-gss"]=21]="text/x-gss",e[e["text/x-sass"]=22]="text/x-sass",e[e["text/x-scss"]=23]="text/x-scss",e[e["text/markdown"]=24]="text/markdown",e[e["text/x-clojure"]=25]="text/x-clojure",e[e["text/jsx"]=26]="text/jsx",e[e["text/x-go"]=27]="text/x-go",e[e["text/x-kotlin"]=28]="text/x-kotlin",e[e["text/x-scala"]=29]="text/x-scala",e[e["text/x.svelte"]=30]="text/x.svelte",e[e["text/javascript+plain"]=31]="text/javascript+plain",e[e["text/javascript+minified"]=32]="text/javascript+minified",e[e["text/javascript+sourcemapped"]=33]="text/javascript+sourcemapped",e[e["text/x.angular"]=34]="text/x.angular",e[e["text/x.vue"]=35]="text/x.vue",e[e["text/javascript+snippet"]=36]="text/javascript+snippet",e[e["text/javascript+eval"]=37]="text/javascript+eval",e[e.MAX_VALUE=38]="MAX_VALUE"}(te||(te={})),function(e){e[e.devToolsDefault=0]="devToolsDefault",e[e.vsCode=1]="vsCode",e[e.MAX_VALUE=2]="MAX_VALUE"}(ne||(ne={})),function(e){e[e.OtherShortcut=0]="OtherShortcut",e[e["quick-open.show-command-menu"]=1]="quick-open.show-command-menu",e[e["console.clear"]=2]="console.clear",e[e["console.toggle"]=3]="console.toggle",e[e["debugger.step"]=4]="debugger.step",e[e["debugger.step-into"]=5]="debugger.step-into",e[e["debugger.step-out"]=6]="debugger.step-out",e[e["debugger.step-over"]=7]="debugger.step-over",e[e["debugger.toggle-breakpoint"]=8]="debugger.toggle-breakpoint",e[e["debugger.toggle-breakpoint-enabled"]=9]="debugger.toggle-breakpoint-enabled",e[e["debugger.toggle-pause"]=10]="debugger.toggle-pause",e[e["elements.edit-as-html"]=11]="elements.edit-as-html",e[e["elements.hide-element"]=12]="elements.hide-element",e[e["elements.redo"]=13]="elements.redo",e[e["elements.toggle-element-search"]=14]="elements.toggle-element-search",e[e["elements.undo"]=15]="elements.undo",e[e["main.search-in-panel.find"]=16]="main.search-in-panel.find",e[e["main.toggle-drawer"]=17]="main.toggle-drawer",e[e["network.hide-request-details"]=18]="network.hide-request-details",e[e["network.search"]=19]="network.search",e[e["network.toggle-recording"]=20]="network.toggle-recording",e[e["quick-open.show"]=21]="quick-open.show",e[e["settings.show"]=22]="settings.show",e[e["sources.search"]=23]="sources.search",e[e["background-service.toggle-recording"]=24]="background-service.toggle-recording",e[e["components.collect-garbage"]=25]="components.collect-garbage",e[e["console.clear.history"]=26]="console.clear.history",e[e["console.create-pin"]=27]="console.create-pin",e[e["coverage.start-with-reload"]=28]="coverage.start-with-reload",e[e["coverage.toggle-recording"]=29]="coverage.toggle-recording",e[e["debugger.breakpoint-input-window"]=30]="debugger.breakpoint-input-window",e[e["debugger.evaluate-selection"]=31]="debugger.evaluate-selection",e[e["debugger.next-call-frame"]=32]="debugger.next-call-frame",e[e["debugger.previous-call-frame"]=33]="debugger.previous-call-frame",e[e["debugger.run-snippet"]=34]="debugger.run-snippet",e[e["debugger.toggle-breakpoints-active"]=35]="debugger.toggle-breakpoints-active",e[e["elements.capture-area-screenshot"]=36]="elements.capture-area-screenshot",e[e["emulation.capture-full-height-screenshot"]=37]="emulation.capture-full-height-screenshot",e[e["emulation.capture-node-screenshot"]=38]="emulation.capture-node-screenshot",e[e["emulation.capture-screenshot"]=39]="emulation.capture-screenshot",e[e["emulation.show-sensors"]=40]="emulation.show-sensors",e[e["emulation.toggle-device-mode"]=41]="emulation.toggle-device-mode",e[e["help.release-notes"]=42]="help.release-notes",e[e["help.report-issue"]=43]="help.report-issue",e[e["input.start-replaying"]=44]="input.start-replaying",e[e["input.toggle-pause"]=45]="input.toggle-pause",e[e["input.toggle-recording"]=46]="input.toggle-recording",e[e["inspector-main.focus-debuggee"]=47]="inspector-main.focus-debuggee",e[e["inspector-main.hard-reload"]=48]="inspector-main.hard-reload",e[e["inspector-main.reload"]=49]="inspector-main.reload",e[e["live-heap-profile.start-with-reload"]=50]="live-heap-profile.start-with-reload",e[e["live-heap-profile.toggle-recording"]=51]="live-heap-profile.toggle-recording",e[e["main.debug-reload"]=52]="main.debug-reload",e[e["main.next-tab"]=53]="main.next-tab",e[e["main.previous-tab"]=54]="main.previous-tab",e[e["main.search-in-panel.cancel"]=55]="main.search-in-panel.cancel",e[e["main.search-in-panel.find-next"]=56]="main.search-in-panel.find-next",e[e["main.search-in-panel.find-previous"]=57]="main.search-in-panel.find-previous",e[e["main.toggle-dock"]=58]="main.toggle-dock",e[e["main.zoom-in"]=59]="main.zoom-in",e[e["main.zoom-out"]=60]="main.zoom-out",e[e["main.zoom-reset"]=61]="main.zoom-reset",e[e["network-conditions.network-low-end-mobile"]=62]="network-conditions.network-low-end-mobile",e[e["network-conditions.network-mid-tier-mobile"]=63]="network-conditions.network-mid-tier-mobile",e[e["network-conditions.network-offline"]=64]="network-conditions.network-offline",e[e["network-conditions.network-online"]=65]="network-conditions.network-online",e[e["profiler.heap-toggle-recording"]=66]="profiler.heap-toggle-recording",e[e["profiler.js-toggle-recording"]=67]="profiler.js-toggle-recording",e[e["resources.clear"]=68]="resources.clear",e[e["settings.documentation"]=69]="settings.documentation",e[e["settings.shortcuts"]=70]="settings.shortcuts",e[e["sources.add-folder-to-workspace"]=71]="sources.add-folder-to-workspace",e[e["sources.add-to-watch"]=72]="sources.add-to-watch",e[e["sources.close-all"]=73]="sources.close-all",e[e["sources.close-editor-tab"]=74]="sources.close-editor-tab",e[e["sources.create-snippet"]=75]="sources.create-snippet",e[e["sources.go-to-line"]=76]="sources.go-to-line",e[e["sources.go-to-member"]=77]="sources.go-to-member",e[e["sources.jump-to-next-location"]=78]="sources.jump-to-next-location",e[e["sources.jump-to-previous-location"]=79]="sources.jump-to-previous-location",e[e["sources.rename"]=80]="sources.rename",e[e["sources.save"]=81]="sources.save",e[e["sources.save-all"]=82]="sources.save-all",e[e["sources.switch-file"]=83]="sources.switch-file",e[e["timeline.jump-to-next-frame"]=84]="timeline.jump-to-next-frame",e[e["timeline.jump-to-previous-frame"]=85]="timeline.jump-to-previous-frame",e[e["timeline.load-from-file"]=86]="timeline.load-from-file",e[e["timeline.next-recording"]=87]="timeline.next-recording",e[e["timeline.previous-recording"]=88]="timeline.previous-recording",e[e["timeline.record-reload"]=89]="timeline.record-reload",e[e["timeline.save-to-file"]=90]="timeline.save-to-file",e[e["timeline.show-history"]=91]="timeline.show-history",e[e["timeline.toggle-recording"]=92]="timeline.toggle-recording",e[e["sources.increment-css"]=93]="sources.increment-css",e[e["sources.increment-css-by-ten"]=94]="sources.increment-css-by-ten",e[e["sources.decrement-css"]=95]="sources.decrement-css",e[e["sources.decrement-css-by-ten"]=96]="sources.decrement-css-by-ten",e[e["layers.reset-view"]=97]="layers.reset-view",e[e["layers.pan-mode"]=98]="layers.pan-mode",e[e["layers.rotate-mode"]=99]="layers.rotate-mode",e[e["layers.zoom-in"]=100]="layers.zoom-in",e[e["layers.zoom-out"]=101]="layers.zoom-out",e[e["layers.up"]=102]="layers.up",e[e["layers.down"]=103]="layers.down",e[e["layers.left"]=104]="layers.left",e[e["layers.right"]=105]="layers.right",e[e["help.report-translation-issue"]=106]="help.report-translation-issue",e[e["rendering.toggle-prefers-color-scheme"]=107]="rendering.toggle-prefers-color-scheme",e[e["chrome-recorder.start-recording"]=108]="chrome-recorder.start-recording",e[e["chrome-recorder.replay-recording"]=109]="chrome-recorder.replay-recording",e[e["chrome-recorder.toggle-code-view"]=110]="chrome-recorder.toggle-code-view",e[e["chrome-recorder.copy-recording-or-step"]=111]="chrome-recorder.copy-recording-or-step",e[e["changes.revert"]=112]="changes.revert",e[e["changes.copy"]=113]="changes.copy",e[e["elements.new-style-rule"]=114]="elements.new-style-rule",e[e["elements.refresh-event-listeners"]=115]="elements.refresh-event-listeners",e[e["coverage.clear"]=116]="coverage.clear",e[e["coverage.export"]=117]="coverage.export",e[e["timeline.dim-third-parties"]=118]="timeline.dim-third-parties",e[e.MAX_VALUE=119]="MAX_VALUE"}(oe||(oe={})),function(e){e[e["capture-node-creation-stacks"]=1]="capture-node-creation-stacks",e[e["live-heap-profile"]=11]="live-heap-profile",e[e["protocol-monitor"]=13]="protocol-monitor",e[e["sampling-heap-profiler-timeline"]=17]="sampling-heap-profiler-timeline",e[e["show-option-tp-expose-internals-in-heap-snapshot"]=18]="show-option-tp-expose-internals-in-heap-snapshot",e[e["timeline-invalidation-tracking"]=26]="timeline-invalidation-tracking",e[e["timeline-show-all-events"]=27]="timeline-show-all-events",e[e["timeline-v8-runtime-call-stats"]=28]="timeline-v8-runtime-call-stats",e[e.apca=39]="apca",e[e["font-editor"]=41]="font-editor",e[e["full-accessibility-tree"]=42]="full-accessibility-tree",e[e["contrast-issues"]=44]="contrast-issues",e[e["experimental-cookie-features"]=45]="experimental-cookie-features",e[e["instrumentation-breakpoints"]=61]="instrumentation-breakpoints",e[e["authored-deployed-grouping"]=63]="authored-deployed-grouping",e[e["just-my-code"]=65]="just-my-code",e[e["highlight-errors-elements-panel"]=73]="highlight-errors-elements-panel",e[e["use-source-map-scopes"]=76]="use-source-map-scopes",e[e["network-panel-filter-bar-redesign"]=79]="network-panel-filter-bar-redesign",e[e["timeline-show-postmessage-events"]=86]="timeline-show-postmessage-events",e[e["timeline-enhanced-traces"]=90]="timeline-enhanced-traces",e[e["timeline-compiled-sources"]=91]="timeline-compiled-sources",e[e["timeline-debug-mode"]=93]="timeline-debug-mode",e[e["timeline-experimental-insights"]=102]="timeline-experimental-insights",e[e["timeline-dim-unrelated-events"]=103]="timeline-dim-unrelated-events",e[e["timeline-alternative-navigation"]=104]="timeline-alternative-navigation",e[e.MAX_VALUE=106]="MAX_VALUE"}(se||(se={})),function(e){e[e.CrossOriginEmbedderPolicy=0]="CrossOriginEmbedderPolicy",e[e.MixedContent=1]="MixedContent",e[e.SameSiteCookie=2]="SameSiteCookie",e[e.HeavyAd=3]="HeavyAd",e[e.ContentSecurityPolicy=4]="ContentSecurityPolicy",e[e.Other=5]="Other",e[e.Generic=6]="Generic",e[e.ThirdPartyPhaseoutCookie=7]="ThirdPartyPhaseoutCookie",e[e.GenericCookie=8]="GenericCookie",e[e.MAX_VALUE=9]="MAX_VALUE"}(ie||(ie={})),function(e){e[e.CrossOriginEmbedderPolicyRequest=0]="CrossOriginEmbedderPolicyRequest",e[e.CrossOriginEmbedderPolicyElement=1]="CrossOriginEmbedderPolicyElement",e[e.MixedContentRequest=2]="MixedContentRequest",e[e.SameSiteCookieCookie=3]="SameSiteCookieCookie",e[e.SameSiteCookieRequest=4]="SameSiteCookieRequest",e[e.HeavyAdElement=5]="HeavyAdElement",e[e.ContentSecurityPolicyDirective=6]="ContentSecurityPolicyDirective",e[e.ContentSecurityPolicyElement=7]="ContentSecurityPolicyElement",e[e.MAX_VALUE=13]="MAX_VALUE"}(ae||(ae={})),function(e){e[e.MixedContentIssue=0]="MixedContentIssue",e[e["ContentSecurityPolicyIssue::kInlineViolation"]=1]="ContentSecurityPolicyIssue::kInlineViolation",e[e["ContentSecurityPolicyIssue::kEvalViolation"]=2]="ContentSecurityPolicyIssue::kEvalViolation",e[e["ContentSecurityPolicyIssue::kURLViolation"]=3]="ContentSecurityPolicyIssue::kURLViolation",e[e["ContentSecurityPolicyIssue::kTrustedTypesSinkViolation"]=4]="ContentSecurityPolicyIssue::kTrustedTypesSinkViolation",e[e["ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation"]=5]="ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation",e[e["HeavyAdIssue::NetworkTotalLimit"]=6]="HeavyAdIssue::NetworkTotalLimit",e[e["HeavyAdIssue::CpuTotalLimit"]=7]="HeavyAdIssue::CpuTotalLimit",e[e["HeavyAdIssue::CpuPeakLimit"]=8]="HeavyAdIssue::CpuPeakLimit",e[e["CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader"]=9]="CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader",e[e["CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage"]=10]="CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage",e[e["CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin"]=11]="CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin",e[e["CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep"]=12]="CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep",e[e["CrossOriginEmbedderPolicyIssue::CorpNotSameSite"]=13]="CrossOriginEmbedderPolicyIssue::CorpNotSameSite",e[e["CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie"]=14]="CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie",e[e["CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie"]=15]="CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie",e[e["CookieIssue::WarnSameSiteNoneInsecure::ReadCookie"]=16]="CookieIssue::WarnSameSiteNoneInsecure::ReadCookie",e[e["CookieIssue::WarnSameSiteNoneInsecure::SetCookie"]=17]="CookieIssue::WarnSameSiteNoneInsecure::SetCookie",e[e["CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure"]=18]="CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure",e[e["CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure"]=19]="CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure",e[e["CookieIssue::WarnCrossDowngrade::ReadCookie::Secure"]=20]="CookieIssue::WarnCrossDowngrade::ReadCookie::Secure",e[e["CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure"]=21]="CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure",e[e["CookieIssue::WarnCrossDowngrade::SetCookie::Secure"]=22]="CookieIssue::WarnCrossDowngrade::SetCookie::Secure",e[e["CookieIssue::WarnCrossDowngrade::SetCookie::Insecure"]=23]="CookieIssue::WarnCrossDowngrade::SetCookie::Insecure",e[e["CookieIssue::ExcludeNavigationContextDowngrade::Secure"]=24]="CookieIssue::ExcludeNavigationContextDowngrade::Secure",e[e["CookieIssue::ExcludeNavigationContextDowngrade::Insecure"]=25]="CookieIssue::ExcludeNavigationContextDowngrade::Insecure",e[e["CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure"]=26]="CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure",e[e["CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure"]=27]="CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure",e[e["CookieIssue::ExcludeContextDowngrade::SetCookie::Secure"]=28]="CookieIssue::ExcludeContextDowngrade::SetCookie::Secure",e[e["CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure"]=29]="CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure",e[e["CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie"]=30]="CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie",e[e["CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie"]=31]="CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie",e[e["CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie"]=32]="CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie",e[e["CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie"]=33]="CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie",e[e["CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie"]=34]="CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie",e[e["CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie"]=35]="CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie",e[e["SharedArrayBufferIssue::TransferIssue"]=36]="SharedArrayBufferIssue::TransferIssue",e[e["SharedArrayBufferIssue::CreationIssue"]=37]="SharedArrayBufferIssue::CreationIssue",e[e.LowTextContrastIssue=41]="LowTextContrastIssue",e[e["CorsIssue::InsecurePrivateNetwork"]=42]="CorsIssue::InsecurePrivateNetwork",e[e["CorsIssue::InvalidHeaders"]=44]="CorsIssue::InvalidHeaders",e[e["CorsIssue::WildcardOriginWithCredentials"]=45]="CorsIssue::WildcardOriginWithCredentials",e[e["CorsIssue::PreflightResponseInvalid"]=46]="CorsIssue::PreflightResponseInvalid",e[e["CorsIssue::OriginMismatch"]=47]="CorsIssue::OriginMismatch",e[e["CorsIssue::AllowCredentialsRequired"]=48]="CorsIssue::AllowCredentialsRequired",e[e["CorsIssue::MethodDisallowedByPreflightResponse"]=49]="CorsIssue::MethodDisallowedByPreflightResponse",e[e["CorsIssue::HeaderDisallowedByPreflightResponse"]=50]="CorsIssue::HeaderDisallowedByPreflightResponse",e[e["CorsIssue::RedirectContainsCredentials"]=51]="CorsIssue::RedirectContainsCredentials",e[e["CorsIssue::DisallowedByMode"]=52]="CorsIssue::DisallowedByMode",e[e["CorsIssue::CorsDisabledScheme"]=53]="CorsIssue::CorsDisabledScheme",e[e["CorsIssue::PreflightMissingAllowExternal"]=54]="CorsIssue::PreflightMissingAllowExternal",e[e["CorsIssue::PreflightInvalidAllowExternal"]=55]="CorsIssue::PreflightInvalidAllowExternal",e[e["CorsIssue::NoCorsRedirectModeNotFollow"]=57]="CorsIssue::NoCorsRedirectModeNotFollow",e[e["QuirksModeIssue::QuirksMode"]=58]="QuirksModeIssue::QuirksMode",e[e["QuirksModeIssue::LimitedQuirksMode"]=59]="QuirksModeIssue::LimitedQuirksMode",e[e.DeprecationIssue=60]="DeprecationIssue",e[e["ClientHintIssue::MetaTagAllowListInvalidOrigin"]=61]="ClientHintIssue::MetaTagAllowListInvalidOrigin",e[e["ClientHintIssue::MetaTagModifiedHTML"]=62]="ClientHintIssue::MetaTagModifiedHTML",e[e["CorsIssue::PreflightAllowPrivateNetworkError"]=63]="CorsIssue::PreflightAllowPrivateNetworkError",e[e["GenericIssue::CrossOriginPortalPostMessageError"]=64]="GenericIssue::CrossOriginPortalPostMessageError",e[e["GenericIssue::FormLabelForNameError"]=65]="GenericIssue::FormLabelForNameError",e[e["GenericIssue::FormDuplicateIdForInputError"]=66]="GenericIssue::FormDuplicateIdForInputError",e[e["GenericIssue::FormInputWithNoLabelError"]=67]="GenericIssue::FormInputWithNoLabelError",e[e["GenericIssue::FormAutocompleteAttributeEmptyError"]=68]="GenericIssue::FormAutocompleteAttributeEmptyError",e[e["GenericIssue::FormEmptyIdAndNameAttributesForInputError"]=69]="GenericIssue::FormEmptyIdAndNameAttributesForInputError",e[e["GenericIssue::FormAriaLabelledByToNonExistingId"]=70]="GenericIssue::FormAriaLabelledByToNonExistingId",e[e["GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError"]=71]="GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError",e[e["GenericIssue::FormLabelHasNeitherForNorNestedInput"]=72]="GenericIssue::FormLabelHasNeitherForNorNestedInput",e[e["GenericIssue::FormLabelForMatchesNonExistingIdError"]=73]="GenericIssue::FormLabelForMatchesNonExistingIdError",e[e["GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError"]=74]="GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError",e[e["GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError"]=75]="GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError",e[e["StylesheetLoadingIssue::LateImportRule"]=76]="StylesheetLoadingIssue::LateImportRule",e[e["StylesheetLoadingIssue::RequestFailed"]=77]="StylesheetLoadingIssue::RequestFailed",e[e["CorsIssue::PreflightMissingPrivateNetworkAccessId"]=78]="CorsIssue::PreflightMissingPrivateNetworkAccessId",e[e["CorsIssue::PreflightMissingPrivateNetworkAccessName"]=79]="CorsIssue::PreflightMissingPrivateNetworkAccessName",e[e["CorsIssue::PrivateNetworkAccessPermissionUnavailable"]=80]="CorsIssue::PrivateNetworkAccessPermissionUnavailable",e[e["CorsIssue::PrivateNetworkAccessPermissionDenied"]=81]="CorsIssue::PrivateNetworkAccessPermissionDenied",e[e["CookieIssue::WarnThirdPartyPhaseout::ReadCookie"]=82]="CookieIssue::WarnThirdPartyPhaseout::ReadCookie",e[e["CookieIssue::WarnThirdPartyPhaseout::SetCookie"]=83]="CookieIssue::WarnThirdPartyPhaseout::SetCookie",e[e["CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie"]=84]="CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie",e[e["CookieIssue::ExcludeThirdPartyPhaseout::SetCookie"]=85]="CookieIssue::ExcludeThirdPartyPhaseout::SetCookie",e[e["SelectElementAccessibilityIssue::DisallowedSelectChild"]=86]="SelectElementAccessibilityIssue::DisallowedSelectChild",e[e["SelectElementAccessibilityIssue::DisallowedOptGroupChild"]=87]="SelectElementAccessibilityIssue::DisallowedOptGroupChild",e[e["SelectElementAccessibilityIssue::NonPhrasingContentOptionChild"]=88]="SelectElementAccessibilityIssue::NonPhrasingContentOptionChild",e[e["SelectElementAccessibilityIssue::InteractiveContentOptionChild"]=89]="SelectElementAccessibilityIssue::InteractiveContentOptionChild",e[e["SelectElementAccessibilityIssue::InteractiveContentLegendChild"]=90]="SelectElementAccessibilityIssue::InteractiveContentLegendChild",e[e["SRIMessageSignatureIssue::MissingSignatureHeader"]=91]="SRIMessageSignatureIssue::MissingSignatureHeader",e[e["SRIMessageSignatureIssue::MissingSignatureInputHeader"]=92]="SRIMessageSignatureIssue::MissingSignatureInputHeader",e[e["SRIMessageSignatureIssue::InvalidSignatureHeader"]=93]="SRIMessageSignatureIssue::InvalidSignatureHeader",e[e["SRIMessageSignatureIssue::InvalidSignatureInputHeader"]=94]="SRIMessageSignatureIssue::InvalidSignatureInputHeader",e[e["SRIMessageSignatureIssue::SignatureHeaderValueIsNotByteSequence"]=95]="SRIMessageSignatureIssue::SignatureHeaderValueIsNotByteSequence",e[e["SRIMessageSignatureIssue::SignatureHeaderValueIsParameterized"]=96]="SRIMessageSignatureIssue::SignatureHeaderValueIsParameterized",e[e["SRIMessageSignatureIssue::SignatureHeaderValueIsIncorrectLength"]=97]="SRIMessageSignatureIssue::SignatureHeaderValueIsIncorrectLength",e[e["SRIMessageSignatureIssue::SignatureInputHeaderMissingLabel"]=98]="SRIMessageSignatureIssue::SignatureInputHeaderMissingLabel",e[e["SRIMessageSignatureIssue::SignatureInputHeaderValueNotInnerList"]=99]="SRIMessageSignatureIssue::SignatureInputHeaderValueNotInnerList",e[e["SRIMessageSignatureIssue::SignatureInputHeaderValueMissingComponents"]=100]="SRIMessageSignatureIssue::SignatureInputHeaderValueMissingComponents",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentType"]=101]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentType",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentName"]=102]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentName",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidHeaderComponentParameter"]=103]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidHeaderComponentParameter",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidDerivedComponentParameter"]=104]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidDerivedComponentParameter",e[e["SRIMessageSignatureIssue::SignatureInputHeaderKeyIdLength"]=105]="SRIMessageSignatureIssue::SignatureInputHeaderKeyIdLength",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidParameter"]=106]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidParameter",e[e["SRIMessageSignatureIssue::SignatureInputHeaderMissingRequiredParameters"]=107]="SRIMessageSignatureIssue::SignatureInputHeaderMissingRequiredParameters",e[e["SRIMessageSignatureIssue::ValidationFailedSignatureExpired"]=108]="SRIMessageSignatureIssue::ValidationFailedSignatureExpired",e[e["SRIMessageSignatureIssue::ValidationFailedInvalidLength"]=109]="SRIMessageSignatureIssue::ValidationFailedInvalidLength",e[e["SRIMessageSignatureIssue::ValidationFailedSignatureMismatch"]=110]="SRIMessageSignatureIssue::ValidationFailedSignatureMismatch",e[e["CorsIssue::LocalNetworkAccessPermissionDenied"]=111]="CorsIssue::LocalNetworkAccessPermissionDenied",e[e["SRIMessageSignatureIssue::ValidationFailedIntegrityMismatch"]=112]="SRIMessageSignatureIssue::ValidationFailedIntegrityMismatch",e[e.MAX_VALUE=113]="MAX_VALUE"}(de||(de={})),function(e){e[e.af=1]="af",e[e.am=2]="am",e[e.ar=3]="ar",e[e.as=4]="as",e[e.az=5]="az",e[e.be=6]="be",e[e.bg=7]="bg",e[e.bn=8]="bn",e[e.bs=9]="bs",e[e.ca=10]="ca",e[e.cs=11]="cs",e[e.cy=12]="cy",e[e.da=13]="da",e[e.de=14]="de",e[e.el=15]="el",e[e["en-GB"]=16]="en-GB",e[e["en-US"]=17]="en-US",e[e["es-419"]=18]="es-419",e[e.es=19]="es",e[e.et=20]="et",e[e.eu=21]="eu",e[e.fa=22]="fa",e[e.fi=23]="fi",e[e.fil=24]="fil",e[e["fr-CA"]=25]="fr-CA",e[e.fr=26]="fr",e[e.gl=27]="gl",e[e.gu=28]="gu",e[e.he=29]="he",e[e.hi=30]="hi",e[e.hr=31]="hr",e[e.hu=32]="hu",e[e.hy=33]="hy",e[e.id=34]="id",e[e.is=35]="is",e[e.it=36]="it",e[e.ja=37]="ja",e[e.ka=38]="ka",e[e.kk=39]="kk",e[e.km=40]="km",e[e.kn=41]="kn",e[e.ko=42]="ko",e[e.ky=43]="ky",e[e.lo=44]="lo",e[e.lt=45]="lt",e[e.lv=46]="lv",e[e.mk=47]="mk",e[e.ml=48]="ml",e[e.mn=49]="mn",e[e.mr=50]="mr",e[e.ms=51]="ms",e[e.my=52]="my",e[e.ne=53]="ne",e[e.nl=54]="nl",e[e.no=55]="no",e[e.or=56]="or",e[e.pa=57]="pa",e[e.pl=58]="pl",e[e["pt-PT"]=59]="pt-PT",e[e.pt=60]="pt",e[e.ro=61]="ro",e[e.ru=62]="ru",e[e.si=63]="si",e[e.sk=64]="sk",e[e.sl=65]="sl",e[e.sq=66]="sq",e[e["sr-Latn"]=67]="sr-Latn",e[e.sr=68]="sr",e[e.sv=69]="sv",e[e.sw=70]="sw",e[e.ta=71]="ta",e[e.te=72]="te",e[e.th=73]="th",e[e.tr=74]="tr",e[e.uk=75]="uk",e[e.ur=76]="ur",e[e.uz=77]="uz",e[e.vi=78]="vi",e[e.zh=79]="zh",e[e["zh-HK"]=80]="zh-HK",e[e["zh-TW"]=81]="zh-TW",e[e.zu=82]="zu",e[e.MAX_VALUE=83]="MAX_VALUE"}(ce||(ce={})),function(e){e[e.OtherSection=0]="OtherSection",e[e.Identity=1]="Identity",e[e.Presentation=2]="Presentation",e[e["Protocol Handlers"]=3]="Protocol Handlers",e[e.Icons=4]="Icons",e[e["Window Controls Overlay"]=5]="Window Controls Overlay",e[e.MAX_VALUE=6]="MAX_VALUE"}(le||(le={}));var ge=Object.freeze({__proto__:null,get Action(){return J},get DevtoolsExperiments(){return se},get ElementsSidebarTabCodes(){return re},get IssueCreated(){return de},get IssueExpanded(){return ie},get IssueResourceOpened(){return ae},get KeybindSetSettings(){return ne},get KeyboardShortcutAction(){return oe},get Language(){return ce},get ManifestSectionCodes(){return le},get MediaTypes(){return te},get PanelCodes(){return Z},get PanelWithLocation(){return ee},UserMetrics:me});const pe=new me,he=K();export{U as AidaClient,F as InspectorFrontendHost,i as InspectorFrontendHostAPI,X as Platform,ue as RNPerfMetrics,v as ResourceLoader,ge as UserMetrics,he as rnPerfMetrics,pe as userMetrics}; +import*as e from"../common/common.js";import*as r from"../root/root.js";import*as t from"../i18n/i18n.js";import*as n from"../platform/platform.js";var o;!function(e){e.AppendedToURL="appendedToURL",e.CanceledSaveURL="canceledSaveURL",e.ColorThemeChanged="colorThemeChanged",e.ContextMenuCleared="contextMenuCleared",e.ContextMenuItemSelected="contextMenuItemSelected",e.DeviceCountUpdated="deviceCountUpdated",e.DevicesDiscoveryConfigChanged="devicesDiscoveryConfigChanged",e.DevicesPortForwardingStatusChanged="devicesPortForwardingStatusChanged",e.DevicesUpdated="devicesUpdated",e.DispatchMessage="dispatchMessage",e.DispatchMessageChunk="dispatchMessageChunk",e.EnterInspectElementMode="enterInspectElementMode",e.EyeDropperPickedColor="eyeDropperPickedColor",e.FileSystemsLoaded="fileSystemsLoaded",e.FileSystemRemoved="fileSystemRemoved",e.FileSystemAdded="fileSystemAdded",e.FileSystemFilesChangedAddedRemoved="FileSystemFilesChangedAddedRemoved",e.IndexingTotalWorkCalculated="indexingTotalWorkCalculated",e.IndexingWorked="indexingWorked",e.IndexingDone="indexingDone",e.KeyEventUnhandled="keyEventUnhandled",e.ReloadInspectedPage="reloadInspectedPage",e.RevealSourceLine="revealSourceLine",e.SavedURL="savedURL",e.SearchCompleted="searchCompleted",e.SetInspectedTabId="setInspectedTabId",e.SetUseSoftMenu="setUseSoftMenu",e.ShowPanel="showPanel"}(o||(o={}));const s=[[o.AppendedToURL,"appendedToURL",["url"]],[o.CanceledSaveURL,"canceledSaveURL",["url"]],[o.ColorThemeChanged,"colorThemeChanged",[]],[o.ContextMenuCleared,"contextMenuCleared",[]],[o.ContextMenuItemSelected,"contextMenuItemSelected",["id"]],[o.DeviceCountUpdated,"deviceCountUpdated",["count"]],[o.DevicesDiscoveryConfigChanged,"devicesDiscoveryConfigChanged",["config"]],[o.DevicesPortForwardingStatusChanged,"devicesPortForwardingStatusChanged",["status"]],[o.DevicesUpdated,"devicesUpdated",["devices"]],[o.DispatchMessage,"dispatchMessage",["messageObject"]],[o.DispatchMessageChunk,"dispatchMessageChunk",["messageChunk","messageSize"]],[o.EnterInspectElementMode,"enterInspectElementMode",[]],[o.EyeDropperPickedColor,"eyeDropperPickedColor",["color"]],[o.FileSystemsLoaded,"fileSystemsLoaded",["fileSystems"]],[o.FileSystemRemoved,"fileSystemRemoved",["fileSystemPath"]],[o.FileSystemAdded,"fileSystemAdded",["errorMessage","fileSystem"]],[o.FileSystemFilesChangedAddedRemoved,"fileSystemFilesChangedAddedRemoved",["changed","added","removed"]],[o.IndexingTotalWorkCalculated,"indexingTotalWorkCalculated",["requestId","fileSystemPath","totalWork"]],[o.IndexingWorked,"indexingWorked",["requestId","fileSystemPath","worked"]],[o.IndexingDone,"indexingDone",["requestId","fileSystemPath"]],[o.KeyEventUnhandled,"keyEventUnhandled",["event"]],[o.ReloadInspectedPage,"reloadInspectedPage",["hard"]],[o.RevealSourceLine,"revealSourceLine",["url","lineNumber","columnNumber"]],[o.SavedURL,"savedURL",["url","fileSystemPath"]],[o.SearchCompleted,"searchCompleted",["requestId","fileSystemPath","files"]],[o.SetInspectedTabId,"setInspectedTabId",["tabId"]],[o.SetUseSoftMenu,"setUseSoftMenu",["useSoftMenu"]],[o.ShowPanel,"showPanel",["panelName"]]];var i=Object.freeze({__proto__:null,EventDescriptors:s,get Events(){return o}});const a={systemError:"System error",connectionError:"Connection error",certificateError:"Certificate error",httpError:"HTTP error",cacheError:"Cache error",signedExchangeError:"Signed Exchange error",ftpError:"FTP error",certificateManagerError:"Certificate manager error",dnsResolverError:"DNS resolver error",unknownError:"Unknown error",httpErrorStatusCodeSS:"HTTP error: status code {PH1}, {PH2}",invalidUrl:"Invalid URL",decodingDataUrlFailed:"Decoding Data URL failed"},d=t.i18n.registerUIStrings("core/host/ResourceLoader.ts",a),c=t.i18n.getLocalizedString.bind(void 0,d);let l=0;const u={},m=function(e){return u[++l]=e,l},g=function(e){u[e].close(),delete u[e]},p=function(e,r){u[e].write(r)};function h(e,r,t){if(void 0===e||void 0===t)return null;if(0!==e){if(function(e){return e<=-300&&e>-400}(e))return c(a.httpErrorStatusCodeSS,{PH1:String(r),PH2:t});const n=function(e){return c(e>-100?a.systemError:e>-200?a.connectionError:e>-300?a.certificateError:e>-400?a.httpError:e>-500?a.cacheError:e>-600?a.signedExchangeError:e>-700?a.ftpError:e>-800?a.certificateManagerError:e>-900?a.dnsResolverError:a.unknownError)}(e);return`${n}: ${t}`}return null}const S=function(r,t,n,o,s){const i=m(n);if(new e.ParsedURL.ParsedURL(r).isDataURL())return void(e=>new Promise(((r,t)=>{const n=new XMLHttpRequest;n.withCredentials=!1,n.open("GET",e,!0),n.onreadystatechange=function(){if(n.readyState===XMLHttpRequest.DONE){if(200!==n.status)return n.onreadystatechange=null,void t(new Error(String(n.status)));n.onreadystatechange=null,r(n.responseText)}},n.send(null)})))(r).then((function(e){p(i,e),l({statusCode:200})})).catch((function(e){l({statusCode:404,messageOverride:c(a.decodingDataUrlFailed)})}));if(!s&&function(e){try{const r=new URL(e);return"file:"===r.protocol&&""!==r.host}catch{return!1}}(r))return void(o&&o(!1,{},{statusCode:400,netError:-20,netErrorName:"net::BLOCKED_BY_CLIENT",message:"Loading from a remote file path is prohibited for security reasons."}));const d=[];if(t)for(const e in t)d.push(e+": "+t[e]);function l(e){if(o){const{success:r,description:t}=function(e){const{statusCode:r,netError:t,netErrorName:n,urlValid:o,messageOverride:s}=e;let i="";const d=r>=200&&r<300;if("string"==typeof s)i=s;else if(!d)if(void 0===t)i=c(!1===o?a.invalidUrl:a.unknownError);else{const e=h(t,r,n);e&&(i=e)}return console.assert(d===(0===i.length)),{success:d,description:{statusCode:r,netError:t,netErrorName:n,urlValid:o,message:i}}}(e);o(r,e.headers||{},t)}g(i)}f.loadNetworkResource(r,d.join("\r\n"),i,l)};var v=Object.freeze({__proto__:null,ResourceLoader:{},bindOutputStream:m,discardOutputStream:g,load:function(r,t,n,o){const s=new e.StringOutputStream.StringOutputStream;S(r,t,s,(function(e,r,t){n(e,r,s.data(),t)}),o)},loadAsStream:S,netErrorToMessage:h,streamWrite:p});const C={devtoolsS:"DevTools - {PH1}"},I=t.i18n.registerUIStrings("core/host/InspectorFrontendHost.ts",C),w=t.i18n.getLocalizedString.bind(void 0,I),k="/overrides";class E{#e=new Map;events;#r=null;recordedCountHistograms=[];recordedEnumeratedHistograms=[];recordedPerformanceHistograms=[];constructor(){function e(e){!("mac"===this.platform()?e.metaKey:e.ctrlKey)||"+"!==e.key&&"-"!==e.key||e.stopPropagation()}"undefined"!=typeof document&&document.addEventListener("keydown",(r=>{e.call(this,r)}),!0)}platform(){const e=navigator.userAgent;return e.includes("Windows NT")?"windows":e.includes("Mac OS X")?"mac":"linux"}loadCompleted(){}bringToFront(){}closeWindow(){}setIsDocked(e,r){window.setTimeout(r,0)}showSurvey(e,r){window.setTimeout((()=>r({surveyShown:!1})),0)}canShowSurvey(e,r){window.setTimeout((()=>r({canShowSurvey:!1})),0)}setInspectedPageBounds(e){}inspectElementCompleted(){}setInjectedScriptForOrigin(e,r){}inspectedURLChanged(e){document.title=w(C.devtoolsS,{PH1:e.replace(/^https?:\/\//,"")})}copyText(e){null!=e&&navigator.clipboard.writeText(e)}openInNewTab(r){e.ParsedURL.schemeIs(r,"javascript:")||window.open(r,"_blank")}openSearchResultsInNewTab(r){e.Console.Console.instance().error("Search is not enabled in hosted mode. Please inspect using chrome://inspect")}showItemInFolder(r){e.Console.Console.instance().error("Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect")}save(e,r,t,n){let s=this.#e.get(e);s||(s=[],this.#e.set(e,s)),s.push(r),this.events.dispatchEventToListeners(o.SavedURL,{url:e,fileSystemPath:e})}append(e,r){const t=this.#e.get(e);t&&(t.push(r),this.events.dispatchEventToListeners(o.AppendedToURL,e))}close(e){const r=this.#e.get(e)||[];this.#e.delete(e);let t="";if(e)try{const r=n.StringUtilities.trimURL(e);t=n.StringUtilities.removeURLFragment(r)}catch(r){t=e}const o=document.createElement("a");o.download=t;const s=new Blob([r.join("")],{type:"text/plain"}),i=URL.createObjectURL(s);o.href=i,o.click(),URL.revokeObjectURL(i)}sendMessageToBackend(e){}recordCountHistogram(e,r,t,n,o){this.recordedCountHistograms.length>=100&&this.recordedCountHistograms.shift(),this.recordedCountHistograms.push({histogramName:e,sample:r,min:t,exclusiveMax:n,bucketSize:o})}recordEnumeratedHistogram(e,r,t){this.recordedEnumeratedHistograms.length>=100&&this.recordedEnumeratedHistograms.shift(),this.recordedEnumeratedHistograms.push({actionName:e,actionCode:r})}recordPerformanceHistogram(e,r){this.recordedPerformanceHistograms.length>=100&&this.recordedPerformanceHistograms.shift(),this.recordedPerformanceHistograms.push({histogramName:e,duration:r})}recordUserMetricsAction(e){}connectAutomaticFileSystem(e,r,t,n){queueMicrotask((()=>n({success:!1})))}disconnectAutomaticFileSystem(e){}requestFileSystems(){this.events.dispatchEventToListeners(o.FileSystemsLoaded,[])}addFileSystem(e){window.webkitRequestFileSystem(window.TEMPORARY,1048576,(e=>{this.#r=e;const r={fileSystemName:"sandboxedRequestedFileSystem",fileSystemPath:k,rootURL:"filesystem:devtools://devtools/isolated/",type:"overrides"};this.events.dispatchEventToListeners(o.FileSystemAdded,{fileSystem:r})}))}removeFileSystem(e){const r=e=>{e.forEach((e=>{e.isDirectory?e.removeRecursively((()=>{})):e.isFile&&e.remove((()=>{}))}))};this.#r&&this.#r.root.createReader().readEntries(r),this.#r=null,this.events.dispatchEventToListeners(o.FileSystemRemoved,k)}isolatedFileSystem(e,r){return this.#r}loadNetworkResource(e,r,t,n){fetch(e).then((async e=>{const r=await e.arrayBuffer();let t=r;if(function(e){const r=new Uint8Array(e);return!(!r||r.length<3)&&31===r[0]&&139===r[1]&&8===r[2]}(r)){const e=new DecompressionStream("gzip"),n=e.writable.getWriter();n.write(r),n.close(),t=e.readable}return await new Response(t).text()})).then((function(e){p(t,e),n({statusCode:200,headers:void 0,messageOverride:void 0,netError:void 0,netErrorName:void 0,urlValid:void 0})})).catch((function(){n({statusCode:404,headers:void 0,messageOverride:void 0,netError:void 0,netErrorName:void 0,urlValid:void 0})}))}registerPreference(e,r){}getPreferences(e){const r={};for(const e in window.localStorage)r[e]=window.localStorage[e];e(r)}getPreference(e,r){r(window.localStorage[e])}setPreference(e,r){window.localStorage[e]=r}removePreference(e){delete window.localStorage[e]}clearPreferences(){window.localStorage.clear()}getSyncInformation(e){if("getSyncInformationForTesting"in globalThis)return e(globalThis.getSyncInformationForTesting());e({isSyncActive:!1,arePreferencesSynced:!1})}getHostConfig(e){const r={devToolsVeLogging:{enabled:!0},thirdPartyCookieControls:{thirdPartyCookieMetadataEnabled:!0,thirdPartyCookieHeuristicsEnabled:!0,managedBlockThirdPartyCookies:"Unset"}};if("hostConfigForTesting"in globalThis){const{hostConfigForTesting:e}=globalThis;for(const t of Object.keys(e)){const n=t=>{"object"==typeof r[t]&&"object"==typeof e[t]?r[t]={...r[t],...e[t]}:r[t]=e[t]??r[t]};n(t)}}e(r)}upgradeDraggedFileSystemPermissions(e){}indexPath(e,r,t){}stopIndexing(e){}searchInPath(e,r,t){}zoomFactor(){return 1}zoomIn(){}zoomOut(){}resetZoom(){}setWhitelistedShortcuts(e){}setEyeDropperActive(e){}showCertificateViewer(e){}reattach(e){e()}readyForTest(){}connectionReady(){}setOpenNewWindowForPopups(e){}setDevicesDiscoveryConfig(e){}setDevicesUpdatesEnabled(e){}openRemotePage(e,r){}openNodeFrontend(){}showContextMenuAtPoint(e,r,t,n){throw new Error("Soft context menu should be used")}isHostedMode(){return!0}setAddExtensionCallback(e){}async initialTargetId(){return null}doAidaConversation(e,r,t){t({error:"Not implemented"})}registerAidaClientEvent(e,r){r({error:"Not implemented"})}recordImpression(e){}recordResize(e){}recordClick(e){}recordHover(e){}recordDrag(e){}recordChange(e){}recordKeyDown(e){}recordSettingAccess(e){}}let f=globalThis.InspectorFrontendHost;class y{constructor(){for(const e of s)this[e[1]]=this.dispatch.bind(this,e[0],e[2],e[3])}dispatch(e,r,t,...n){if(r.length<2){try{f.events.dispatchEventToListeners(e,n[0])}catch(e){console.error(e+" "+e.stack)}return}const o={};for(let e=0;e=0&&(o.options??={},o.options.temperature=i),s&&(o.options??={},o.options.model_id=s),o}static async checkAccessPreconditions(){if(!navigator.onLine)return"no-internet";const e=await new Promise((e=>f.getSyncInformation((r=>e(r)))));return e.accountEmail?e.isSyncPaused?"sync-is-paused":"available":"no-account-email"}async*fetch(e,r){if(!f.doAidaConversation)throw new Error("doAidaConversation is not available");const t=(()=>{let{promise:e,resolve:t,reject:n}=Promise.withResolvers();return r?.signal?.addEventListener("abort",(()=>{n(new O)}),{once:!0}),{write:async r=>{t(r),({promise:e,resolve:t,reject:n}=Promise.withResolvers())},close:async()=>{t(null)},read:()=>e,fail:e=>n(e)}})(),n=m(t);let o;f.doAidaConversation(JSON.stringify(e),n,(e=>{403===e.statusCode?t.fail(new Error("Server responded: permission denied")):e.error?t.fail(new Error(`Cannot send request: ${e.error} ${e.detail||""}`)):"net::ERR_TIMED_OUT"===e.netErrorName?t.fail(new Error("doAidaConversation timed out")):200!==e.statusCode?t.fail(new Error(`Request failed: ${JSON.stringify(e)}`)):t.close()}));const s=[];let i=!1;const a=[];let d={rpcGlobalId:0};for(;o=await t.read();){let e,r=!1;if(o.length){o.startsWith(",")&&(o=o.slice(1)),o.startsWith("[")||(o="["+o),o.endsWith("]")||(o+="]");try{e=JSON.parse(o)}catch(e){throw new Error("Cannot parse chunk: "+o,{cause:e})}for(const t of e){if("metadata"in t&&(d=t.metadata,d?.attributionMetadata?.attributionAction===T.BLOCK))throw new N;if("textChunk"in t)i&&(s.push(_),i=!1),s.push(t.textChunk.text),r=!0;else if("codeChunk"in t)i||(s.push(_),i=!0),s.push(t.codeChunk.code),r=!0;else{if(!("functionCallChunk"in t))throw"error"in t?new Error(`Server responded: ${JSON.stringify(t)}`):new Error("Unknown chunk result");a.push({name:t.functionCallChunk.functionCall.name,args:t.functionCallChunk.functionCall.args})}}r&&(yield{explanation:s.join("")+(i?_:""),metadata:d,completed:!1})}}yield{explanation:s.join("")+(i?_:""),metadata:d,functionCalls:a.length?a:void 0,completed:!0}}registerClientEvent(e){const{promise:r,resolve:t}=Promise.withResolvers();return f.registerAidaClientEvent(JSON.stringify({client:M,event_time:(new Date).toISOString(),...e}),t),r}}let D;class H extends e.ObjectWrapper.ObjectWrapper{#t;#n;constructor(){super()}static instance(){return D||(D=new H),D}addEventListener(e,r){const t=!this.hasEventListeners(e),n=super.addEventListener(e,r);return t&&(window.clearTimeout(this.#t),this.pollAidaAvailability()),n}removeEventListener(e,r){super.removeEventListener(e,r),this.hasEventListeners(e)||window.clearTimeout(this.#t)}async pollAidaAvailability(){this.#t=window.setTimeout((()=>this.pollAidaAvailability()),2e3);const e=await L.checkAccessPreconditions();if(e!==this.#n){this.#n=e;const t=await new Promise((e=>f.getHostConfig(e)));Object.assign(r.Runtime.hostConfig,t),this.dispatchEventToListeners("aidaAvailabilityChanged")}}}var U=Object.freeze({__proto__:null,AidaAbortError:O,AidaBlockError:N,AidaClient:L,CLIENT_NAME:M,get CitationSourceType(){return x},get ClientFeature(){return P},get FunctionalityType(){return A},HostConfigTracker:H,get RecitationAction(){return T},get Role(){return b},get UserTier(){return R},convertToUserTierEnum:function(e){if(e)switch(e){case"TESTERS":return R.TESTERS;case"BETA":return R.BETA;case"PUBLIC":return R.PUBLIC}return R.BETA}});let W,B,V,G,j;function q(){return W||(W=f.platform()),W}var X=Object.freeze({__proto__:null,fontFamily:function(){if(j)return j;switch(q()){case"linux":j="Roboto, Ubuntu, Arial, sans-serif";break;case"mac":j="'Lucida Grande', sans-serif";break;case"windows":j="'Segoe UI', Tahoma, sans-serif"}return j},isCustomDevtoolsFrontend:function(){return void 0===G&&(G=window.location.toString().startsWith("devtools://devtools/custom/")),G},isMac:function(){return void 0===B&&(B="mac"===q()),B},isWin:function(){return void 0===V&&(V="windows"===q()),V},platform:q,setPlatformForTests:function(e){W=e,B=void 0,V=void 0}});let z=null;function K(){return null===z&&(z=new $),z}class ${#o="error";#s=new Set;#i=null;#a=null;#d="rn_inspector";#c={};#l=new Map;isEnabled(){return!0===globalThis.enableReactNativePerfMetrics}addEventListener(e){this.#s.add(e);return()=>{this.#s.delete(e)}}removeAllEventListeners(){this.#s.clear()}sendEvent(e){if(!0!==globalThis.enableReactNativePerfMetrics)return;const r=this.#u(e),t=[];for(const e of this.#s)try{e(r)}catch(e){t.push(e)}if(t.length>0){const e=new AggregateError(t);console.error("Error occurred when calling event listeners",e)}}registerPerfMetricsGlobalPostMessageHandler(){!0===globalThis.enableReactNativePerfMetrics&&!0===globalThis.enableReactNativePerfMetricsGlobalPostMessage&&this.addEventListener((e=>{window.postMessage({event:e,tag:"react-native-chrome-devtools-perf-metrics"},window.location.origin)}))}registerGlobalErrorReporting(){window.addEventListener("error",(e=>{const[r,t]=Y(`[RNPerfMetrics] uncaught error: ${e.message}`,e.error);this.sendEvent({eventName:"Browser.Error",params:{type:"error",message:r,error:t}})}),{passive:!0}),window.addEventListener("unhandledrejection",(e=>{const[r,t]=Y("[RNPerfMetrics] unhandled promise rejection",e.reason);this.sendEvent({eventName:"Browser.Error",params:{type:"rejectedPromise",message:r,error:t}})}),{passive:!0});const e=globalThis.console,r=e[this.#o];e[this.#o]=(...t)=>{try{const e=t[0],[r,n]=Y("[RNPerfMetrics] console.error",e);this.sendEvent({eventName:"Browser.Error",params:{message:r,error:n,type:"consoleError"}})}catch(e){const[r,t]=Y("[RNPerfMetrics] Error handling console.error",e);this.sendEvent({eventName:"Browser.Error",params:{message:r,error:t,type:"consoleError"}})}finally{r.apply(e,t)}}}setLaunchId(e){this.#i=e}setAppId(e){this.#a=e}setTelemetryInfo(e){this.#c=e}entryPointLoadingStarted(e){this.#d=e,this.sendEvent({eventName:"Entrypoint.LoadingStarted",entryPoint:e})}entryPointLoadingFinished(e){this.sendEvent({eventName:"Entrypoint.LoadingFinished",entryPoint:e})}browserVisibilityChanged(e){this.sendEvent({eventName:"Browser.VisibilityChange",params:{visibilityState:e}})}remoteDebuggingTerminated(e={}){this.sendEvent({eventName:"Connection.DebuggingTerminated",params:e})}developerResourceLoadingStarted(e,r){const t=Q(e);this.sendEvent({eventName:"DeveloperResource.LoadingStarted",params:{url:t,loadingMethod:r}})}developerResourceLoadingFinished(e,r,t){const n=Q(e);this.sendEvent({eventName:"DeveloperResource.LoadingFinished",params:{url:n,loadingMethod:r,success:t.success,errorMessage:t.errorDescription?.message}})}developerResourcesStartupLoadingFinishedEvent(e,r){this.sendEvent({eventName:"DeveloperResources.StartupLoadingFinished",params:{numResources:e,timeSinceLaunch:r}})}fuseboxSetClientMetadataStarted(){this.sendEvent({eventName:"FuseboxSetClientMetadataStarted"})}fuseboxSetClientMetadataFinished(e,r){if(e)this.sendEvent({eventName:"FuseboxSetClientMetadataFinished",params:{success:!0}});else{const[e,t]=Y("[RNPerfMetrics] Fusebox setClientMetadata failed",r);this.sendEvent({eventName:"FuseboxSetClientMetadataFinished",params:{success:!1,error:t,errorMessage:e}})}}traceRequested(){this.sendEvent({eventName:"Tracing.TraceRequested"})}heapSnapshotStarted(){this.sendEvent({eventName:"MemoryPanelActionStarted",params:{action:"snapshot"}})}heapSnapshotFinished(e){this.sendEvent({eventName:"MemoryPanelActionFinished",params:{action:"snapshot",success:e}})}heapProfilingStarted(){this.sendEvent({eventName:"MemoryPanelActionStarted",params:{action:"profiling"}})}heapProfilingFinished(e){this.sendEvent({eventName:"MemoryPanelActionFinished",params:{action:"profiling",success:e}})}heapSamplingStarted(){this.sendEvent({eventName:"MemoryPanelActionStarted",params:{action:"sampling"}})}heapSamplingFinished(e){this.sendEvent({eventName:"MemoryPanelActionFinished",params:{action:"sampling",success:e}})}stackTraceSymbolicationSucceeded(e){this.sendEvent({eventName:"StackTraceSymbolicationSucceeded",params:{specialHermesFrameTypes:e}})}stackTraceSymbolicationFailed(e,r,t){this.sendEvent({eventName:"StackTraceSymbolicationFailed",params:{stackTrace:e,line:r,reason:t}})}stackTraceFrameUrlResolutionSucceeded(){this.sendEvent({eventName:"StackTraceFrameUrlResolutionSucceeded"})}stackTraceFrameUrlResolutionFailed(e){this.sendEvent({eventName:"StackTraceFrameUrlResolutionFailed",params:{uniqueUrls:e}})}manualBreakpointSetSucceeded(e){this.sendEvent({eventName:"ManualBreakpointSetSucceeded",params:{bpSettingDuration:e}})}stackTraceFrameClicked(e){this.sendEvent({eventName:"StackTraceFrameClicked",params:{isLinkified:e}})}panelShown(e,r){}panelShownInLocation(e,r){this.sendEvent({eventName:"PanelShown",params:{location:r,newPanelName:e}}),this.#l.set(r,e)}#u(e){return{...e,...{timestamp:performance.timeOrigin+performance.now(),launchId:this.#i,appId:this.#a,entryPoint:this.#d,telemetryInfo:this.#c,currentPanels:this.#l}}}}function Q(e){const{url:r}=e;return"http"===e.scheme||"https"===e.scheme?r:`${r.slice(0,100)} …(omitted ${r.length-100} characters)`}function Y(e,r){if(r instanceof Error){return[`${e}: ${r.message}`,r]}const t=`${e}: ${String(r)}`;return[t,new Error(t,{cause:r})]}var J,Z,ee,re,te,ne,oe,se,ie,ae,de,ce,le,ue=Object.freeze({__proto__:null,getInstance:K});class me{#m;#g;#p;constructor(){this.#m=!1,this.#g=!1,this.#p=""}panelShown(e,r){const t=Z[e]||0;f.recordEnumeratedHistogram("DevTools.PanelShown",t,Z.MAX_VALUE),f.recordUserMetricsAction("DevTools_PanelShown_"+e),r||(this.#m=!0),K().panelShown(e,r)}panelShownInLocation(e,r){const t=ee[`${e}-${r}`]||0;f.recordEnumeratedHistogram("DevTools.PanelShownInLocation",t,ee.MAX_VALUE),K().panelShownInLocation(e,r)}settingsPanelShown(e){this.panelShown("settings-"+e)}sourcesPanelFileDebugged(e){const r=e&&te[e]||te.Unknown;f.recordEnumeratedHistogram("DevTools.SourcesPanelFileDebugged",r,te.MAX_VALUE)}sourcesPanelFileOpened(e){const r=e&&te[e]||te.Unknown;f.recordEnumeratedHistogram("DevTools.SourcesPanelFileOpened",r,te.MAX_VALUE)}networkPanelResponsePreviewOpened(e){const r=e&&te[e]||te.Unknown;f.recordEnumeratedHistogram("DevTools.NetworkPanelResponsePreviewOpened",r,te.MAX_VALUE)}actionTaken(e){f.recordEnumeratedHistogram("DevTools.ActionTaken",e,J.MAX_VALUE)}panelLoaded(e,r){this.#g||e!==this.#p||(this.#g=!0,requestAnimationFrame((()=>{window.setTimeout((()=>{performance.mark(r),this.#m||f.recordPerformanceHistogram(r,performance.now())}),0)})))}setLaunchPanel(e){this.#p=e}performanceTraceLoad(e){f.recordPerformanceHistogram("DevTools.TraceLoad",e.duration)}keybindSetSettingChanged(e){const r=ne[e]||0;f.recordEnumeratedHistogram("DevTools.KeybindSetSettingChanged",r,ne.MAX_VALUE)}keyboardShortcutFired(e){const r=oe[e]||oe.OtherShortcut;f.recordEnumeratedHistogram("DevTools.KeyboardShortcutFired",r,oe.MAX_VALUE)}issuesPanelOpenedFrom(e){f.recordEnumeratedHistogram("DevTools.IssuesPanelOpenedFrom",e,6)}issuesPanelIssueExpanded(e){if(void 0===e)return;const r=ie[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.IssuesPanelIssueExpanded",r,ie.MAX_VALUE)}issuesPanelResourceOpened(e,r){const t=ae[e+r];void 0!==t&&f.recordEnumeratedHistogram("DevTools.IssuesPanelResourceOpened",t,ae.MAX_VALUE)}issueCreated(e){const r=de[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.IssueCreated",r,de.MAX_VALUE)}experimentEnabledAtLaunch(e){const r=se[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.ExperimentEnabledAtLaunch",r,se.MAX_VALUE)}navigationSettingAtFirstTimelineLoad(e){f.recordEnumeratedHistogram("DevTools.TimelineNavigationSettingState",e,4)}experimentDisabledAtLaunch(e){const r=se[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.ExperimentDisabledAtLaunch",r,se.MAX_VALUE)}experimentChanged(e,r){const t=se[e];if(void 0===t)return;const n=r?"DevTools.ExperimentEnabled":"DevTools.ExperimentDisabled";f.recordEnumeratedHistogram(n,t,se.MAX_VALUE)}developerResourceLoaded(e){e>=8||f.recordEnumeratedHistogram("DevTools.DeveloperResourceLoaded",e,8)}developerResourceScheme(e){e>=9||f.recordEnumeratedHistogram("DevTools.DeveloperResourceScheme",e,9)}language(e){const r=ce[e];void 0!==r&&f.recordEnumeratedHistogram("DevTools.Language",r,ce.MAX_VALUE)}syncSetting(e){f.getSyncInformation((r=>{let t=1;r.isSyncActive&&!r.arePreferencesSynced?t=2:r.isSyncActive&&r.arePreferencesSynced&&(t=e?4:3),f.recordEnumeratedHistogram("DevTools.SyncSetting",t,5)}))}recordingAssertion(e){f.recordEnumeratedHistogram("DevTools.RecordingAssertion",e,4)}recordingToggled(e){f.recordEnumeratedHistogram("DevTools.RecordingToggled",e,3)}recordingReplayFinished(e){f.recordEnumeratedHistogram("DevTools.RecordingReplayFinished",e,5)}recordingReplaySpeed(e){f.recordEnumeratedHistogram("DevTools.RecordingReplaySpeed",e,5)}recordingReplayStarted(e){f.recordEnumeratedHistogram("DevTools.RecordingReplayStarted",e,4)}recordingEdited(e){f.recordEnumeratedHistogram("DevTools.RecordingEdited",e,11)}recordingExported(e){f.recordEnumeratedHistogram("DevTools.RecordingExported",e,6)}recordingCodeToggled(e){f.recordEnumeratedHistogram("DevTools.RecordingCodeToggled",e,3)}recordingCopiedToClipboard(e){f.recordEnumeratedHistogram("DevTools.RecordingCopiedToClipboard",e,9)}cssHintShown(e){f.recordEnumeratedHistogram("DevTools.CSSHintShown",e,14)}lighthouseModeRun(e){f.recordEnumeratedHistogram("DevTools.LighthouseModeRun",e,4)}lighthouseCategoryUsed(e){f.recordEnumeratedHistogram("DevTools.LighthouseCategoryUsed",e,6)}swatchActivated(e){f.recordEnumeratedHistogram("DevTools.SwatchActivated",e,11)}animationPlaybackRateChanged(e){f.recordEnumeratedHistogram("DevTools.AnimationPlaybackRateChanged",e,4)}animationPointDragged(e){f.recordEnumeratedHistogram("DevTools.AnimationPointDragged",e,5)}workspacesPopulated(e){f.recordPerformanceHistogram("DevTools.Workspaces.PopulateWallClocktime",e)}visualLoggingProcessingDone(e){f.recordPerformanceHistogram("DevTools.VisualLogging.ProcessingTime",e)}freestylerQueryLength(e){f.recordCountHistogram("DevTools.Freestyler.QueryLength",e,0,1e5,100)}freestylerEvalResponseSize(e){f.recordCountHistogram("DevTools.Freestyler.EvalResponseSize",e,0,1e5,100)}}!function(e){e[e.WindowDocked=1]="WindowDocked",e[e.WindowUndocked=2]="WindowUndocked",e[e.ScriptsBreakpointSet=3]="ScriptsBreakpointSet",e[e.TimelineStarted=4]="TimelineStarted",e[e.ProfilesCPUProfileTaken=5]="ProfilesCPUProfileTaken",e[e.ProfilesHeapProfileTaken=6]="ProfilesHeapProfileTaken",e[e.ConsoleEvaluated=8]="ConsoleEvaluated",e[e.FileSavedInWorkspace=9]="FileSavedInWorkspace",e[e.DeviceModeEnabled=10]="DeviceModeEnabled",e[e.AnimationsPlaybackRateChanged=11]="AnimationsPlaybackRateChanged",e[e.RevisionApplied=12]="RevisionApplied",e[e.FileSystemDirectoryContentReceived=13]="FileSystemDirectoryContentReceived",e[e.StyleRuleEdited=14]="StyleRuleEdited",e[e.CommandEvaluatedInConsolePanel=15]="CommandEvaluatedInConsolePanel",e[e.DOMPropertiesExpanded=16]="DOMPropertiesExpanded",e[e.ResizedViewInResponsiveMode=17]="ResizedViewInResponsiveMode",e[e.TimelinePageReloadStarted=18]="TimelinePageReloadStarted",e[e.ConnectToNodeJSFromFrontend=19]="ConnectToNodeJSFromFrontend",e[e.ConnectToNodeJSDirectly=20]="ConnectToNodeJSDirectly",e[e.CpuThrottlingEnabled=21]="CpuThrottlingEnabled",e[e.CpuProfileNodeFocused=22]="CpuProfileNodeFocused",e[e.CpuProfileNodeExcluded=23]="CpuProfileNodeExcluded",e[e.SelectFileFromFilePicker=24]="SelectFileFromFilePicker",e[e.SelectCommandFromCommandMenu=25]="SelectCommandFromCommandMenu",e[e.ChangeInspectedNodeInElementsPanel=26]="ChangeInspectedNodeInElementsPanel",e[e.StyleRuleCopied=27]="StyleRuleCopied",e[e.CoverageStarted=28]="CoverageStarted",e[e.LighthouseStarted=29]="LighthouseStarted",e[e.LighthouseFinished=30]="LighthouseFinished",e[e.ShowedThirdPartyBadges=31]="ShowedThirdPartyBadges",e[e.LighthouseViewTrace=32]="LighthouseViewTrace",e[e.FilmStripStartedRecording=33]="FilmStripStartedRecording",e[e.CoverageReportFiltered=34]="CoverageReportFiltered",e[e.CoverageStartedPerBlock=35]="CoverageStartedPerBlock",e[e["SettingsOpenedFromGear-deprecated"]=36]="SettingsOpenedFromGear-deprecated",e[e["SettingsOpenedFromMenu-deprecated"]=37]="SettingsOpenedFromMenu-deprecated",e[e["SettingsOpenedFromCommandMenu-deprecated"]=38]="SettingsOpenedFromCommandMenu-deprecated",e[e.TabMovedToDrawer=39]="TabMovedToDrawer",e[e.TabMovedToMainPanel=40]="TabMovedToMainPanel",e[e.CaptureCssOverviewClicked=41]="CaptureCssOverviewClicked",e[e.VirtualAuthenticatorEnvironmentEnabled=42]="VirtualAuthenticatorEnvironmentEnabled",e[e.SourceOrderViewActivated=43]="SourceOrderViewActivated",e[e.UserShortcutAdded=44]="UserShortcutAdded",e[e.ShortcutRemoved=45]="ShortcutRemoved",e[e.ShortcutModified=46]="ShortcutModified",e[e.CustomPropertyLinkClicked=47]="CustomPropertyLinkClicked",e[e.CustomPropertyEdited=48]="CustomPropertyEdited",e[e.ServiceWorkerNetworkRequestClicked=49]="ServiceWorkerNetworkRequestClicked",e[e.ServiceWorkerNetworkRequestClosedQuickly=50]="ServiceWorkerNetworkRequestClosedQuickly",e[e.NetworkPanelServiceWorkerRespondWith=51]="NetworkPanelServiceWorkerRespondWith",e[e.NetworkPanelCopyValue=52]="NetworkPanelCopyValue",e[e.ConsoleSidebarOpened=53]="ConsoleSidebarOpened",e[e.PerfPanelTraceImported=54]="PerfPanelTraceImported",e[e.PerfPanelTraceExported=55]="PerfPanelTraceExported",e[e.StackFrameRestarted=56]="StackFrameRestarted",e[e.CaptureTestProtocolClicked=57]="CaptureTestProtocolClicked",e[e.BreakpointRemovedFromRemoveButton=58]="BreakpointRemovedFromRemoveButton",e[e.BreakpointGroupExpandedStateChanged=59]="BreakpointGroupExpandedStateChanged",e[e.HeaderOverrideFileCreated=60]="HeaderOverrideFileCreated",e[e.HeaderOverrideEnableEditingClicked=61]="HeaderOverrideEnableEditingClicked",e[e.HeaderOverrideHeaderAdded=62]="HeaderOverrideHeaderAdded",e[e.HeaderOverrideHeaderEdited=63]="HeaderOverrideHeaderEdited",e[e.HeaderOverrideHeaderRemoved=64]="HeaderOverrideHeaderRemoved",e[e.HeaderOverrideHeadersFileEdited=65]="HeaderOverrideHeadersFileEdited",e[e.PersistenceNetworkOverridesEnabled=66]="PersistenceNetworkOverridesEnabled",e[e.PersistenceNetworkOverridesDisabled=67]="PersistenceNetworkOverridesDisabled",e[e.BreakpointRemovedFromContextMenu=68]="BreakpointRemovedFromContextMenu",e[e.BreakpointsInFileRemovedFromRemoveButton=69]="BreakpointsInFileRemovedFromRemoveButton",e[e.BreakpointsInFileRemovedFromContextMenu=70]="BreakpointsInFileRemovedFromContextMenu",e[e.BreakpointsInFileCheckboxToggled=71]="BreakpointsInFileCheckboxToggled",e[e.BreakpointsInFileEnabledDisabledFromContextMenu=72]="BreakpointsInFileEnabledDisabledFromContextMenu",e[e.BreakpointConditionEditedFromSidebar=73]="BreakpointConditionEditedFromSidebar",e[e.WorkspaceTabAddFolder=74]="WorkspaceTabAddFolder",e[e.WorkspaceTabRemoveFolder=75]="WorkspaceTabRemoveFolder",e[e.OverrideTabAddFolder=76]="OverrideTabAddFolder",e[e.OverrideTabRemoveFolder=77]="OverrideTabRemoveFolder",e[e.WorkspaceSourceSelected=78]="WorkspaceSourceSelected",e[e.OverridesSourceSelected=79]="OverridesSourceSelected",e[e.StyleSheetInitiatorLinkClicked=80]="StyleSheetInitiatorLinkClicked",e[e.BreakpointRemovedFromGutterContextMenu=81]="BreakpointRemovedFromGutterContextMenu",e[e.BreakpointRemovedFromGutterToggle=82]="BreakpointRemovedFromGutterToggle",e[e.StylePropertyInsideKeyframeEdited=83]="StylePropertyInsideKeyframeEdited",e[e.OverrideContentFromSourcesContextMenu=84]="OverrideContentFromSourcesContextMenu",e[e.OverrideContentFromNetworkContextMenu=85]="OverrideContentFromNetworkContextMenu",e[e.OverrideScript=86]="OverrideScript",e[e.OverrideStyleSheet=87]="OverrideStyleSheet",e[e.OverrideDocument=88]="OverrideDocument",e[e.OverrideFetchXHR=89]="OverrideFetchXHR",e[e.OverrideImage=90]="OverrideImage",e[e.OverrideFont=91]="OverrideFont",e[e.OverrideContentContextMenuSetup=92]="OverrideContentContextMenuSetup",e[e.OverrideContentContextMenuAbandonSetup=93]="OverrideContentContextMenuAbandonSetup",e[e.OverrideContentContextMenuActivateDisabled=94]="OverrideContentContextMenuActivateDisabled",e[e.OverrideContentContextMenuOpenExistingFile=95]="OverrideContentContextMenuOpenExistingFile",e[e.OverrideContentContextMenuSaveNewFile=96]="OverrideContentContextMenuSaveNewFile",e[e.ShowAllOverridesFromSourcesContextMenu=97]="ShowAllOverridesFromSourcesContextMenu",e[e.ShowAllOverridesFromNetworkContextMenu=98]="ShowAllOverridesFromNetworkContextMenu",e[e.AnimationGroupsCleared=99]="AnimationGroupsCleared",e[e.AnimationsPaused=100]="AnimationsPaused",e[e.AnimationsResumed=101]="AnimationsResumed",e[e.AnimatedNodeDescriptionClicked=102]="AnimatedNodeDescriptionClicked",e[e.AnimationGroupScrubbed=103]="AnimationGroupScrubbed",e[e.AnimationGroupReplayed=104]="AnimationGroupReplayed",e[e.OverrideTabDeleteFolderContextMenu=105]="OverrideTabDeleteFolderContextMenu",e[e.WorkspaceDropFolder=107]="WorkspaceDropFolder",e[e.WorkspaceSelectFolder=108]="WorkspaceSelectFolder",e[e.OverrideContentContextMenuSourceMappedWarning=109]="OverrideContentContextMenuSourceMappedWarning",e[e.OverrideContentContextMenuRedirectToDeployed=110]="OverrideContentContextMenuRedirectToDeployed",e[e.NewStyleRuleAdded=111]="NewStyleRuleAdded",e[e.TraceExpanded=112]="TraceExpanded",e[e.InsightConsoleMessageShown=113]="InsightConsoleMessageShown",e[e.InsightRequestedViaContextMenu=114]="InsightRequestedViaContextMenu",e[e.InsightRequestedViaHoverButton=115]="InsightRequestedViaHoverButton",e[e.InsightRatedPositive=117]="InsightRatedPositive",e[e.InsightRatedNegative=118]="InsightRatedNegative",e[e.InsightClosed=119]="InsightClosed",e[e.InsightErrored=120]="InsightErrored",e[e.InsightHoverButtonShown=121]="InsightHoverButtonShown",e[e.SelfXssWarningConsoleMessageShown=122]="SelfXssWarningConsoleMessageShown",e[e.SelfXssWarningDialogShown=123]="SelfXssWarningDialogShown",e[e.SelfXssAllowPastingInConsole=124]="SelfXssAllowPastingInConsole",e[e.SelfXssAllowPastingInDialog=125]="SelfXssAllowPastingInDialog",e[e.ToggleEmulateFocusedPageFromStylesPaneOn=126]="ToggleEmulateFocusedPageFromStylesPaneOn",e[e.ToggleEmulateFocusedPageFromStylesPaneOff=127]="ToggleEmulateFocusedPageFromStylesPaneOff",e[e.ToggleEmulateFocusedPageFromRenderingTab=128]="ToggleEmulateFocusedPageFromRenderingTab",e[e.ToggleEmulateFocusedPageFromCommandMenu=129]="ToggleEmulateFocusedPageFromCommandMenu",e[e.InsightGenerated=130]="InsightGenerated",e[e.InsightErroredApi=131]="InsightErroredApi",e[e.InsightErroredMarkdown=132]="InsightErroredMarkdown",e[e.ToggleShowWebVitals=133]="ToggleShowWebVitals",e[e.InsightErroredPermissionDenied=134]="InsightErroredPermissionDenied",e[e.InsightErroredCannotSend=135]="InsightErroredCannotSend",e[e.InsightErroredRequestFailed=136]="InsightErroredRequestFailed",e[e.InsightErroredCannotParseChunk=137]="InsightErroredCannotParseChunk",e[e.InsightErroredUnknownChunk=138]="InsightErroredUnknownChunk",e[e.InsightErroredOther=139]="InsightErroredOther",e[e.AutofillReceived=140]="AutofillReceived",e[e.AutofillReceivedAndTabAutoOpened=141]="AutofillReceivedAndTabAutoOpened",e[e.AnimationGroupSelected=142]="AnimationGroupSelected",e[e.ScrollDrivenAnimationGroupSelected=143]="ScrollDrivenAnimationGroupSelected",e[e.ScrollDrivenAnimationGroupScrubbed=144]="ScrollDrivenAnimationGroupScrubbed",e[e.AiAssistanceOpenedFromElementsPanel=145]="AiAssistanceOpenedFromElementsPanel",e[e.AiAssistanceOpenedFromStylesTab=146]="AiAssistanceOpenedFromStylesTab",e[e.ConsoleFilterByContext=147]="ConsoleFilterByContext",e[e.ConsoleFilterBySource=148]="ConsoleFilterBySource",e[e.ConsoleFilterByUrl=149]="ConsoleFilterByUrl",e[e.InsightConsentReminderShown=150]="InsightConsentReminderShown",e[e.InsightConsentReminderCanceled=151]="InsightConsentReminderCanceled",e[e.InsightConsentReminderConfirmed=152]="InsightConsentReminderConfirmed",e[e.InsightsOnboardingShown=153]="InsightsOnboardingShown",e[e.InsightsOnboardingCanceledOnPage1=154]="InsightsOnboardingCanceledOnPage1",e[e.InsightsOnboardingCanceledOnPage2=155]="InsightsOnboardingCanceledOnPage2",e[e.InsightsOnboardingConfirmed=156]="InsightsOnboardingConfirmed",e[e.InsightsOnboardingNextPage=157]="InsightsOnboardingNextPage",e[e.InsightsOnboardingPrevPage=158]="InsightsOnboardingPrevPage",e[e.InsightsOnboardingFeatureDisabled=159]="InsightsOnboardingFeatureDisabled",e[e.InsightsOptInTeaserShown=160]="InsightsOptInTeaserShown",e[e.InsightsOptInTeaserSettingsLinkClicked=161]="InsightsOptInTeaserSettingsLinkClicked",e[e.InsightsOptInTeaserConfirmedInSettings=162]="InsightsOptInTeaserConfirmedInSettings",e[e.InsightsReminderTeaserShown=163]="InsightsReminderTeaserShown",e[e.InsightsReminderTeaserConfirmed=164]="InsightsReminderTeaserConfirmed",e[e.InsightsReminderTeaserCanceled=165]="InsightsReminderTeaserCanceled",e[e.InsightsReminderTeaserSettingsLinkClicked=166]="InsightsReminderTeaserSettingsLinkClicked",e[e.InsightsReminderTeaserAbortedInSettings=167]="InsightsReminderTeaserAbortedInSettings",e[e.GeneratingInsightWithoutDisclaimer=168]="GeneratingInsightWithoutDisclaimer",e[e.AiAssistanceOpenedFromElementsPanelFloatingButton=169]="AiAssistanceOpenedFromElementsPanelFloatingButton",e[e.AiAssistanceOpenedFromNetworkPanel=170]="AiAssistanceOpenedFromNetworkPanel",e[e.AiAssistanceOpenedFromSourcesPanel=171]="AiAssistanceOpenedFromSourcesPanel",e[e.AiAssistanceOpenedFromSourcesPanelFloatingButton=172]="AiAssistanceOpenedFromSourcesPanelFloatingButton",e[e.AiAssistanceOpenedFromPerformancePanel=173]="AiAssistanceOpenedFromPerformancePanel",e[e.AiAssistanceOpenedFromNetworkPanelFloatingButton=174]="AiAssistanceOpenedFromNetworkPanelFloatingButton",e[e.AiAssistancePanelOpened=175]="AiAssistancePanelOpened",e[e.AiAssistanceQuerySubmitted=176]="AiAssistanceQuerySubmitted",e[e.AiAssistanceAnswerReceived=177]="AiAssistanceAnswerReceived",e[e.AiAssistanceDynamicSuggestionClicked=178]="AiAssistanceDynamicSuggestionClicked",e[e.AiAssistanceSideEffectConfirmed=179]="AiAssistanceSideEffectConfirmed",e[e.AiAssistanceSideEffectRejected=180]="AiAssistanceSideEffectRejected",e[e.AiAssistanceError=181]="AiAssistanceError",e[e.AiAssistanceOpenedFromPerformanceInsight=182]="AiAssistanceOpenedFromPerformanceInsight",e[e.MAX_VALUE=183]="MAX_VALUE"}(J||(J={})),function(e){e[e.elements=1]="elements",e[e.resources=2]="resources",e[e.network=3]="network",e[e.sources=4]="sources",e[e.timeline=5]="timeline",e[e["heap-profiler"]=6]="heap-profiler",e[e.console=8]="console",e[e.layers=9]="layers",e[e["console-view"]=10]="console-view",e[e.animations=11]="animations",e[e["network.config"]=12]="network.config",e[e.rendering=13]="rendering",e[e.sensors=14]="sensors",e[e["sources.search"]=15]="sources.search",e[e.security=16]="security",e[e["js-profiler"]=17]="js-profiler",e[e.lighthouse=18]="lighthouse",e[e.coverage=19]="coverage",e[e["protocol-monitor"]=20]="protocol-monitor",e[e["remote-devices"]=21]="remote-devices",e[e["web-audio"]=22]="web-audio",e[e["changes.changes"]=23]="changes.changes",e[e["performance.monitor"]=24]="performance.monitor",e[e["release-note"]=25]="release-note",e[e["live-heap-profile"]=26]="live-heap-profile",e[e["sources.quick"]=27]="sources.quick",e[e["network.blocked-urls"]=28]="network.blocked-urls",e[e["settings-preferences"]=29]="settings-preferences",e[e["settings-workspace"]=30]="settings-workspace",e[e["settings-experiments"]=31]="settings-experiments",e[e["settings-blackbox"]=32]="settings-blackbox",e[e["settings-devices"]=33]="settings-devices",e[e["settings-throttling-conditions"]=34]="settings-throttling-conditions",e[e["settings-emulation-locations"]=35]="settings-emulation-locations",e[e["settings-shortcuts"]=36]="settings-shortcuts",e[e["issues-pane"]=37]="issues-pane",e[e["settings-keybinds"]=38]="settings-keybinds",e[e.cssoverview=39]="cssoverview",e[e["chrome-recorder"]=40]="chrome-recorder",e[e["trust-tokens"]=41]="trust-tokens",e[e["reporting-api"]=42]="reporting-api",e[e["interest-groups"]=43]="interest-groups",e[e["back-forward-cache"]=44]="back-forward-cache",e[e["service-worker-cache"]=45]="service-worker-cache",e[e["background-service-background-fetch"]=46]="background-service-background-fetch",e[e["background-service-background-sync"]=47]="background-service-background-sync",e[e["background-service-push-messaging"]=48]="background-service-push-messaging",e[e["background-service-notifications"]=49]="background-service-notifications",e[e["background-service-payment-handler"]=50]="background-service-payment-handler",e[e["background-service-periodic-background-sync"]=51]="background-service-periodic-background-sync",e[e["service-workers"]=52]="service-workers",e[e["app-manifest"]=53]="app-manifest",e[e.storage=54]="storage",e[e.cookies=55]="cookies",e[e["frame-details"]=56]="frame-details",e[e["frame-resource"]=57]="frame-resource",e[e["frame-window"]=58]="frame-window",e[e["frame-worker"]=59]="frame-worker",e[e["dom-storage"]=60]="dom-storage",e[e["indexed-db"]=61]="indexed-db",e[e["web-sql"]=62]="web-sql",e[e["performance-insights"]=63]="performance-insights",e[e.preloading=64]="preloading",e[e["bounce-tracking-mitigations"]=65]="bounce-tracking-mitigations",e[e["developer-resources"]=66]="developer-resources",e[e["autofill-view"]=67]="autofill-view",e[e.MAX_VALUE=68]="MAX_VALUE"}(Z||(Z={})),function(e){e[e["elements-main"]=1]="elements-main",e[e["elements-drawer"]=2]="elements-drawer",e[e["resources-main"]=3]="resources-main",e[e["resources-drawer"]=4]="resources-drawer",e[e["network-main"]=5]="network-main",e[e["network-drawer"]=6]="network-drawer",e[e["sources-main"]=7]="sources-main",e[e["sources-drawer"]=8]="sources-drawer",e[e["timeline-main"]=9]="timeline-main",e[e["timeline-drawer"]=10]="timeline-drawer",e[e["heap_profiler-main"]=11]="heap_profiler-main",e[e["heap_profiler-drawer"]=12]="heap_profiler-drawer",e[e["console-main"]=13]="console-main",e[e["console-drawer"]=14]="console-drawer",e[e["layers-main"]=15]="layers-main",e[e["layers-drawer"]=16]="layers-drawer",e[e["console-view-main"]=17]="console-view-main",e[e["console-view-drawer"]=18]="console-view-drawer",e[e["animations-main"]=19]="animations-main",e[e["animations-drawer"]=20]="animations-drawer",e[e["network.config-main"]=21]="network.config-main",e[e["network.config-drawer"]=22]="network.config-drawer",e[e["rendering-main"]=23]="rendering-main",e[e["rendering-drawer"]=24]="rendering-drawer",e[e["sensors-main"]=25]="sensors-main",e[e["sensors-drawer"]=26]="sensors-drawer",e[e["sources.search-main"]=27]="sources.search-main",e[e["sources.search-drawer"]=28]="sources.search-drawer",e[e["security-main"]=29]="security-main",e[e["security-drawer"]=30]="security-drawer",e[e["lighthouse-main"]=33]="lighthouse-main",e[e["lighthouse-drawer"]=34]="lighthouse-drawer",e[e["coverage-main"]=35]="coverage-main",e[e["coverage-drawer"]=36]="coverage-drawer",e[e["protocol-monitor-main"]=37]="protocol-monitor-main",e[e["protocol-monitor-drawer"]=38]="protocol-monitor-drawer",e[e["remote-devices-main"]=39]="remote-devices-main",e[e["remote-devices-drawer"]=40]="remote-devices-drawer",e[e["web-audio-main"]=41]="web-audio-main",e[e["web-audio-drawer"]=42]="web-audio-drawer",e[e["changes.changes-main"]=43]="changes.changes-main",e[e["changes.changes-drawer"]=44]="changes.changes-drawer",e[e["performance.monitor-main"]=45]="performance.monitor-main",e[e["performance.monitor-drawer"]=46]="performance.monitor-drawer",e[e["release-note-main"]=47]="release-note-main",e[e["release-note-drawer"]=48]="release-note-drawer",e[e["live_heap_profile-main"]=49]="live_heap_profile-main",e[e["live_heap_profile-drawer"]=50]="live_heap_profile-drawer",e[e["sources.quick-main"]=51]="sources.quick-main",e[e["sources.quick-drawer"]=52]="sources.quick-drawer",e[e["network.blocked-urls-main"]=53]="network.blocked-urls-main",e[e["network.blocked-urls-drawer"]=54]="network.blocked-urls-drawer",e[e["settings-preferences-main"]=55]="settings-preferences-main",e[e["settings-preferences-drawer"]=56]="settings-preferences-drawer",e[e["settings-workspace-main"]=57]="settings-workspace-main",e[e["settings-workspace-drawer"]=58]="settings-workspace-drawer",e[e["settings-experiments-main"]=59]="settings-experiments-main",e[e["settings-experiments-drawer"]=60]="settings-experiments-drawer",e[e["settings-blackbox-main"]=61]="settings-blackbox-main",e[e["settings-blackbox-drawer"]=62]="settings-blackbox-drawer",e[e["settings-devices-main"]=63]="settings-devices-main",e[e["settings-devices-drawer"]=64]="settings-devices-drawer",e[e["settings-throttling-conditions-main"]=65]="settings-throttling-conditions-main",e[e["settings-throttling-conditions-drawer"]=66]="settings-throttling-conditions-drawer",e[e["settings-emulation-locations-main"]=67]="settings-emulation-locations-main",e[e["settings-emulation-locations-drawer"]=68]="settings-emulation-locations-drawer",e[e["settings-shortcuts-main"]=69]="settings-shortcuts-main",e[e["settings-shortcuts-drawer"]=70]="settings-shortcuts-drawer",e[e["issues-pane-main"]=71]="issues-pane-main",e[e["issues-pane-drawer"]=72]="issues-pane-drawer",e[e["settings-keybinds-main"]=73]="settings-keybinds-main",e[e["settings-keybinds-drawer"]=74]="settings-keybinds-drawer",e[e["cssoverview-main"]=75]="cssoverview-main",e[e["cssoverview-drawer"]=76]="cssoverview-drawer",e[e["chrome_recorder-main"]=77]="chrome_recorder-main",e[e["chrome_recorder-drawer"]=78]="chrome_recorder-drawer",e[e["trust_tokens-main"]=79]="trust_tokens-main",e[e["trust_tokens-drawer"]=80]="trust_tokens-drawer",e[e["reporting_api-main"]=81]="reporting_api-main",e[e["reporting_api-drawer"]=82]="reporting_api-drawer",e[e["interest_groups-main"]=83]="interest_groups-main",e[e["interest_groups-drawer"]=84]="interest_groups-drawer",e[e["back_forward_cache-main"]=85]="back_forward_cache-main",e[e["back_forward_cache-drawer"]=86]="back_forward_cache-drawer",e[e["service_worker_cache-main"]=87]="service_worker_cache-main",e[e["service_worker_cache-drawer"]=88]="service_worker_cache-drawer",e[e["background_service_backgroundFetch-main"]=89]="background_service_backgroundFetch-main",e[e["background_service_backgroundFetch-drawer"]=90]="background_service_backgroundFetch-drawer",e[e["background_service_backgroundSync-main"]=91]="background_service_backgroundSync-main",e[e["background_service_backgroundSync-drawer"]=92]="background_service_backgroundSync-drawer",e[e["background_service_pushMessaging-main"]=93]="background_service_pushMessaging-main",e[e["background_service_pushMessaging-drawer"]=94]="background_service_pushMessaging-drawer",e[e["background_service_notifications-main"]=95]="background_service_notifications-main",e[e["background_service_notifications-drawer"]=96]="background_service_notifications-drawer",e[e["background_service_paymentHandler-main"]=97]="background_service_paymentHandler-main",e[e["background_service_paymentHandler-drawer"]=98]="background_service_paymentHandler-drawer",e[e["background_service_periodicBackgroundSync-main"]=99]="background_service_periodicBackgroundSync-main",e[e["background_service_periodicBackgroundSync-drawer"]=100]="background_service_periodicBackgroundSync-drawer",e[e["service_workers-main"]=101]="service_workers-main",e[e["service_workers-drawer"]=102]="service_workers-drawer",e[e["app_manifest-main"]=103]="app_manifest-main",e[e["app_manifest-drawer"]=104]="app_manifest-drawer",e[e["storage-main"]=105]="storage-main",e[e["storage-drawer"]=106]="storage-drawer",e[e["cookies-main"]=107]="cookies-main",e[e["cookies-drawer"]=108]="cookies-drawer",e[e["frame_details-main"]=109]="frame_details-main",e[e["frame_details-drawer"]=110]="frame_details-drawer",e[e["frame_resource-main"]=111]="frame_resource-main",e[e["frame_resource-drawer"]=112]="frame_resource-drawer",e[e["frame_window-main"]=113]="frame_window-main",e[e["frame_window-drawer"]=114]="frame_window-drawer",e[e["frame_worker-main"]=115]="frame_worker-main",e[e["frame_worker-drawer"]=116]="frame_worker-drawer",e[e["dom_storage-main"]=117]="dom_storage-main",e[e["dom_storage-drawer"]=118]="dom_storage-drawer",e[e["indexed_db-main"]=119]="indexed_db-main",e[e["indexed_db-drawer"]=120]="indexed_db-drawer",e[e["web_sql-main"]=121]="web_sql-main",e[e["web_sql-drawer"]=122]="web_sql-drawer",e[e["performance_insights-main"]=123]="performance_insights-main",e[e["performance_insights-drawer"]=124]="performance_insights-drawer",e[e["preloading-main"]=125]="preloading-main",e[e["preloading-drawer"]=126]="preloading-drawer",e[e["bounce_tracking_mitigations-main"]=127]="bounce_tracking_mitigations-main",e[e["bounce_tracking_mitigations-drawer"]=128]="bounce_tracking_mitigations-drawer",e[e["developer-resources-main"]=129]="developer-resources-main",e[e["developer-resources-drawer"]=130]="developer-resources-drawer",e[e["autofill-view-main"]=131]="autofill-view-main",e[e["autofill-view-drawer"]=132]="autofill-view-drawer",e[e.MAX_VALUE=133]="MAX_VALUE"}(ee||(ee={})),function(e){e[e.OtherSidebarPane=0]="OtherSidebarPane",e[e.styles=1]="styles",e[e.computed=2]="computed",e[e["elements.layout"]=3]="elements.layout",e[e["elements.event-listeners"]=4]="elements.event-listeners",e[e["elements.dom-breakpoints"]=5]="elements.dom-breakpoints",e[e["elements.dom-properties"]=6]="elements.dom-properties",e[e["accessibility.view"]=7]="accessibility.view",e[e.MAX_VALUE=8]="MAX_VALUE"}(re||(re={})),function(e){e[e.Unknown=0]="Unknown",e[e["text/css"]=2]="text/css",e[e["text/html"]=3]="text/html",e[e["application/xml"]=4]="application/xml",e[e["application/wasm"]=5]="application/wasm",e[e["application/manifest+json"]=6]="application/manifest+json",e[e["application/x-aspx"]=7]="application/x-aspx",e[e["application/jsp"]=8]="application/jsp",e[e["text/x-c++src"]=9]="text/x-c++src",e[e["text/x-coffeescript"]=10]="text/x-coffeescript",e[e["application/vnd.dart"]=11]="application/vnd.dart",e[e["text/typescript"]=12]="text/typescript",e[e["text/typescript-jsx"]=13]="text/typescript-jsx",e[e["application/json"]=14]="application/json",e[e["text/x-csharp"]=15]="text/x-csharp",e[e["text/x-java"]=16]="text/x-java",e[e["text/x-less"]=17]="text/x-less",e[e["application/x-httpd-php"]=18]="application/x-httpd-php",e[e["text/x-python"]=19]="text/x-python",e[e["text/x-sh"]=20]="text/x-sh",e[e["text/x-gss"]=21]="text/x-gss",e[e["text/x-sass"]=22]="text/x-sass",e[e["text/x-scss"]=23]="text/x-scss",e[e["text/markdown"]=24]="text/markdown",e[e["text/x-clojure"]=25]="text/x-clojure",e[e["text/jsx"]=26]="text/jsx",e[e["text/x-go"]=27]="text/x-go",e[e["text/x-kotlin"]=28]="text/x-kotlin",e[e["text/x-scala"]=29]="text/x-scala",e[e["text/x.svelte"]=30]="text/x.svelte",e[e["text/javascript+plain"]=31]="text/javascript+plain",e[e["text/javascript+minified"]=32]="text/javascript+minified",e[e["text/javascript+sourcemapped"]=33]="text/javascript+sourcemapped",e[e["text/x.angular"]=34]="text/x.angular",e[e["text/x.vue"]=35]="text/x.vue",e[e["text/javascript+snippet"]=36]="text/javascript+snippet",e[e["text/javascript+eval"]=37]="text/javascript+eval",e[e.MAX_VALUE=38]="MAX_VALUE"}(te||(te={})),function(e){e[e.devToolsDefault=0]="devToolsDefault",e[e.vsCode=1]="vsCode",e[e.MAX_VALUE=2]="MAX_VALUE"}(ne||(ne={})),function(e){e[e.OtherShortcut=0]="OtherShortcut",e[e["quick-open.show-command-menu"]=1]="quick-open.show-command-menu",e[e["console.clear"]=2]="console.clear",e[e["console.toggle"]=3]="console.toggle",e[e["debugger.step"]=4]="debugger.step",e[e["debugger.step-into"]=5]="debugger.step-into",e[e["debugger.step-out"]=6]="debugger.step-out",e[e["debugger.step-over"]=7]="debugger.step-over",e[e["debugger.toggle-breakpoint"]=8]="debugger.toggle-breakpoint",e[e["debugger.toggle-breakpoint-enabled"]=9]="debugger.toggle-breakpoint-enabled",e[e["debugger.toggle-pause"]=10]="debugger.toggle-pause",e[e["elements.edit-as-html"]=11]="elements.edit-as-html",e[e["elements.hide-element"]=12]="elements.hide-element",e[e["elements.redo"]=13]="elements.redo",e[e["elements.toggle-element-search"]=14]="elements.toggle-element-search",e[e["elements.undo"]=15]="elements.undo",e[e["main.search-in-panel.find"]=16]="main.search-in-panel.find",e[e["main.toggle-drawer"]=17]="main.toggle-drawer",e[e["network.hide-request-details"]=18]="network.hide-request-details",e[e["network.search"]=19]="network.search",e[e["network.toggle-recording"]=20]="network.toggle-recording",e[e["quick-open.show"]=21]="quick-open.show",e[e["settings.show"]=22]="settings.show",e[e["sources.search"]=23]="sources.search",e[e["background-service.toggle-recording"]=24]="background-service.toggle-recording",e[e["components.collect-garbage"]=25]="components.collect-garbage",e[e["console.clear.history"]=26]="console.clear.history",e[e["console.create-pin"]=27]="console.create-pin",e[e["coverage.start-with-reload"]=28]="coverage.start-with-reload",e[e["coverage.toggle-recording"]=29]="coverage.toggle-recording",e[e["debugger.breakpoint-input-window"]=30]="debugger.breakpoint-input-window",e[e["debugger.evaluate-selection"]=31]="debugger.evaluate-selection",e[e["debugger.next-call-frame"]=32]="debugger.next-call-frame",e[e["debugger.previous-call-frame"]=33]="debugger.previous-call-frame",e[e["debugger.run-snippet"]=34]="debugger.run-snippet",e[e["debugger.toggle-breakpoints-active"]=35]="debugger.toggle-breakpoints-active",e[e["elements.capture-area-screenshot"]=36]="elements.capture-area-screenshot",e[e["emulation.capture-full-height-screenshot"]=37]="emulation.capture-full-height-screenshot",e[e["emulation.capture-node-screenshot"]=38]="emulation.capture-node-screenshot",e[e["emulation.capture-screenshot"]=39]="emulation.capture-screenshot",e[e["emulation.show-sensors"]=40]="emulation.show-sensors",e[e["emulation.toggle-device-mode"]=41]="emulation.toggle-device-mode",e[e["help.release-notes"]=42]="help.release-notes",e[e["help.report-issue"]=43]="help.report-issue",e[e["input.start-replaying"]=44]="input.start-replaying",e[e["input.toggle-pause"]=45]="input.toggle-pause",e[e["input.toggle-recording"]=46]="input.toggle-recording",e[e["inspector-main.focus-debuggee"]=47]="inspector-main.focus-debuggee",e[e["inspector-main.hard-reload"]=48]="inspector-main.hard-reload",e[e["inspector-main.reload"]=49]="inspector-main.reload",e[e["live-heap-profile.start-with-reload"]=50]="live-heap-profile.start-with-reload",e[e["live-heap-profile.toggle-recording"]=51]="live-heap-profile.toggle-recording",e[e["main.debug-reload"]=52]="main.debug-reload",e[e["main.next-tab"]=53]="main.next-tab",e[e["main.previous-tab"]=54]="main.previous-tab",e[e["main.search-in-panel.cancel"]=55]="main.search-in-panel.cancel",e[e["main.search-in-panel.find-next"]=56]="main.search-in-panel.find-next",e[e["main.search-in-panel.find-previous"]=57]="main.search-in-panel.find-previous",e[e["main.toggle-dock"]=58]="main.toggle-dock",e[e["main.zoom-in"]=59]="main.zoom-in",e[e["main.zoom-out"]=60]="main.zoom-out",e[e["main.zoom-reset"]=61]="main.zoom-reset",e[e["network-conditions.network-low-end-mobile"]=62]="network-conditions.network-low-end-mobile",e[e["network-conditions.network-mid-tier-mobile"]=63]="network-conditions.network-mid-tier-mobile",e[e["network-conditions.network-offline"]=64]="network-conditions.network-offline",e[e["network-conditions.network-online"]=65]="network-conditions.network-online",e[e["profiler.heap-toggle-recording"]=66]="profiler.heap-toggle-recording",e[e["profiler.js-toggle-recording"]=67]="profiler.js-toggle-recording",e[e["resources.clear"]=68]="resources.clear",e[e["settings.documentation"]=69]="settings.documentation",e[e["settings.shortcuts"]=70]="settings.shortcuts",e[e["sources.add-folder-to-workspace"]=71]="sources.add-folder-to-workspace",e[e["sources.add-to-watch"]=72]="sources.add-to-watch",e[e["sources.close-all"]=73]="sources.close-all",e[e["sources.close-editor-tab"]=74]="sources.close-editor-tab",e[e["sources.create-snippet"]=75]="sources.create-snippet",e[e["sources.go-to-line"]=76]="sources.go-to-line",e[e["sources.go-to-member"]=77]="sources.go-to-member",e[e["sources.jump-to-next-location"]=78]="sources.jump-to-next-location",e[e["sources.jump-to-previous-location"]=79]="sources.jump-to-previous-location",e[e["sources.rename"]=80]="sources.rename",e[e["sources.save"]=81]="sources.save",e[e["sources.save-all"]=82]="sources.save-all",e[e["sources.switch-file"]=83]="sources.switch-file",e[e["timeline.jump-to-next-frame"]=84]="timeline.jump-to-next-frame",e[e["timeline.jump-to-previous-frame"]=85]="timeline.jump-to-previous-frame",e[e["timeline.load-from-file"]=86]="timeline.load-from-file",e[e["timeline.next-recording"]=87]="timeline.next-recording",e[e["timeline.previous-recording"]=88]="timeline.previous-recording",e[e["timeline.record-reload"]=89]="timeline.record-reload",e[e["timeline.save-to-file"]=90]="timeline.save-to-file",e[e["timeline.show-history"]=91]="timeline.show-history",e[e["timeline.toggle-recording"]=92]="timeline.toggle-recording",e[e["sources.increment-css"]=93]="sources.increment-css",e[e["sources.increment-css-by-ten"]=94]="sources.increment-css-by-ten",e[e["sources.decrement-css"]=95]="sources.decrement-css",e[e["sources.decrement-css-by-ten"]=96]="sources.decrement-css-by-ten",e[e["layers.reset-view"]=97]="layers.reset-view",e[e["layers.pan-mode"]=98]="layers.pan-mode",e[e["layers.rotate-mode"]=99]="layers.rotate-mode",e[e["layers.zoom-in"]=100]="layers.zoom-in",e[e["layers.zoom-out"]=101]="layers.zoom-out",e[e["layers.up"]=102]="layers.up",e[e["layers.down"]=103]="layers.down",e[e["layers.left"]=104]="layers.left",e[e["layers.right"]=105]="layers.right",e[e["help.report-translation-issue"]=106]="help.report-translation-issue",e[e["rendering.toggle-prefers-color-scheme"]=107]="rendering.toggle-prefers-color-scheme",e[e["chrome-recorder.start-recording"]=108]="chrome-recorder.start-recording",e[e["chrome-recorder.replay-recording"]=109]="chrome-recorder.replay-recording",e[e["chrome-recorder.toggle-code-view"]=110]="chrome-recorder.toggle-code-view",e[e["chrome-recorder.copy-recording-or-step"]=111]="chrome-recorder.copy-recording-or-step",e[e["changes.revert"]=112]="changes.revert",e[e["changes.copy"]=113]="changes.copy",e[e["elements.new-style-rule"]=114]="elements.new-style-rule",e[e["elements.refresh-event-listeners"]=115]="elements.refresh-event-listeners",e[e["coverage.clear"]=116]="coverage.clear",e[e["coverage.export"]=117]="coverage.export",e[e["timeline.dim-third-parties"]=118]="timeline.dim-third-parties",e[e.MAX_VALUE=119]="MAX_VALUE"}(oe||(oe={})),function(e){e[e["capture-node-creation-stacks"]=1]="capture-node-creation-stacks",e[e["live-heap-profile"]=11]="live-heap-profile",e[e["protocol-monitor"]=13]="protocol-monitor",e[e["sampling-heap-profiler-timeline"]=17]="sampling-heap-profiler-timeline",e[e["show-option-tp-expose-internals-in-heap-snapshot"]=18]="show-option-tp-expose-internals-in-heap-snapshot",e[e["timeline-invalidation-tracking"]=26]="timeline-invalidation-tracking",e[e["timeline-show-all-events"]=27]="timeline-show-all-events",e[e["timeline-v8-runtime-call-stats"]=28]="timeline-v8-runtime-call-stats",e[e.apca=39]="apca",e[e["font-editor"]=41]="font-editor",e[e["full-accessibility-tree"]=42]="full-accessibility-tree",e[e["contrast-issues"]=44]="contrast-issues",e[e["experimental-cookie-features"]=45]="experimental-cookie-features",e[e["instrumentation-breakpoints"]=61]="instrumentation-breakpoints",e[e["authored-deployed-grouping"]=63]="authored-deployed-grouping",e[e["just-my-code"]=65]="just-my-code",e[e["highlight-errors-elements-panel"]=73]="highlight-errors-elements-panel",e[e["use-source-map-scopes"]=76]="use-source-map-scopes",e[e["network-panel-filter-bar-redesign"]=79]="network-panel-filter-bar-redesign",e[e["timeline-show-postmessage-events"]=86]="timeline-show-postmessage-events",e[e["timeline-enhanced-traces"]=90]="timeline-enhanced-traces",e[e["timeline-compiled-sources"]=91]="timeline-compiled-sources",e[e["timeline-debug-mode"]=93]="timeline-debug-mode",e[e["timeline-experimental-insights"]=102]="timeline-experimental-insights",e[e["timeline-dim-unrelated-events"]=103]="timeline-dim-unrelated-events",e[e["timeline-alternative-navigation"]=104]="timeline-alternative-navigation",e[e.MAX_VALUE=106]="MAX_VALUE"}(se||(se={})),function(e){e[e.CrossOriginEmbedderPolicy=0]="CrossOriginEmbedderPolicy",e[e.MixedContent=1]="MixedContent",e[e.SameSiteCookie=2]="SameSiteCookie",e[e.HeavyAd=3]="HeavyAd",e[e.ContentSecurityPolicy=4]="ContentSecurityPolicy",e[e.Other=5]="Other",e[e.Generic=6]="Generic",e[e.ThirdPartyPhaseoutCookie=7]="ThirdPartyPhaseoutCookie",e[e.GenericCookie=8]="GenericCookie",e[e.MAX_VALUE=9]="MAX_VALUE"}(ie||(ie={})),function(e){e[e.CrossOriginEmbedderPolicyRequest=0]="CrossOriginEmbedderPolicyRequest",e[e.CrossOriginEmbedderPolicyElement=1]="CrossOriginEmbedderPolicyElement",e[e.MixedContentRequest=2]="MixedContentRequest",e[e.SameSiteCookieCookie=3]="SameSiteCookieCookie",e[e.SameSiteCookieRequest=4]="SameSiteCookieRequest",e[e.HeavyAdElement=5]="HeavyAdElement",e[e.ContentSecurityPolicyDirective=6]="ContentSecurityPolicyDirective",e[e.ContentSecurityPolicyElement=7]="ContentSecurityPolicyElement",e[e.MAX_VALUE=13]="MAX_VALUE"}(ae||(ae={})),function(e){e[e.MixedContentIssue=0]="MixedContentIssue",e[e["ContentSecurityPolicyIssue::kInlineViolation"]=1]="ContentSecurityPolicyIssue::kInlineViolation",e[e["ContentSecurityPolicyIssue::kEvalViolation"]=2]="ContentSecurityPolicyIssue::kEvalViolation",e[e["ContentSecurityPolicyIssue::kURLViolation"]=3]="ContentSecurityPolicyIssue::kURLViolation",e[e["ContentSecurityPolicyIssue::kTrustedTypesSinkViolation"]=4]="ContentSecurityPolicyIssue::kTrustedTypesSinkViolation",e[e["ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation"]=5]="ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation",e[e["HeavyAdIssue::NetworkTotalLimit"]=6]="HeavyAdIssue::NetworkTotalLimit",e[e["HeavyAdIssue::CpuTotalLimit"]=7]="HeavyAdIssue::CpuTotalLimit",e[e["HeavyAdIssue::CpuPeakLimit"]=8]="HeavyAdIssue::CpuPeakLimit",e[e["CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader"]=9]="CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader",e[e["CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage"]=10]="CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage",e[e["CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin"]=11]="CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin",e[e["CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep"]=12]="CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep",e[e["CrossOriginEmbedderPolicyIssue::CorpNotSameSite"]=13]="CrossOriginEmbedderPolicyIssue::CorpNotSameSite",e[e["CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie"]=14]="CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie",e[e["CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie"]=15]="CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie",e[e["CookieIssue::WarnSameSiteNoneInsecure::ReadCookie"]=16]="CookieIssue::WarnSameSiteNoneInsecure::ReadCookie",e[e["CookieIssue::WarnSameSiteNoneInsecure::SetCookie"]=17]="CookieIssue::WarnSameSiteNoneInsecure::SetCookie",e[e["CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure"]=18]="CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure",e[e["CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure"]=19]="CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure",e[e["CookieIssue::WarnCrossDowngrade::ReadCookie::Secure"]=20]="CookieIssue::WarnCrossDowngrade::ReadCookie::Secure",e[e["CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure"]=21]="CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure",e[e["CookieIssue::WarnCrossDowngrade::SetCookie::Secure"]=22]="CookieIssue::WarnCrossDowngrade::SetCookie::Secure",e[e["CookieIssue::WarnCrossDowngrade::SetCookie::Insecure"]=23]="CookieIssue::WarnCrossDowngrade::SetCookie::Insecure",e[e["CookieIssue::ExcludeNavigationContextDowngrade::Secure"]=24]="CookieIssue::ExcludeNavigationContextDowngrade::Secure",e[e["CookieIssue::ExcludeNavigationContextDowngrade::Insecure"]=25]="CookieIssue::ExcludeNavigationContextDowngrade::Insecure",e[e["CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure"]=26]="CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure",e[e["CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure"]=27]="CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure",e[e["CookieIssue::ExcludeContextDowngrade::SetCookie::Secure"]=28]="CookieIssue::ExcludeContextDowngrade::SetCookie::Secure",e[e["CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure"]=29]="CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure",e[e["CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie"]=30]="CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie",e[e["CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie"]=31]="CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie",e[e["CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie"]=32]="CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie",e[e["CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie"]=33]="CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie",e[e["CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie"]=34]="CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie",e[e["CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie"]=35]="CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie",e[e["SharedArrayBufferIssue::TransferIssue"]=36]="SharedArrayBufferIssue::TransferIssue",e[e["SharedArrayBufferIssue::CreationIssue"]=37]="SharedArrayBufferIssue::CreationIssue",e[e.LowTextContrastIssue=41]="LowTextContrastIssue",e[e["CorsIssue::InsecurePrivateNetwork"]=42]="CorsIssue::InsecurePrivateNetwork",e[e["CorsIssue::InvalidHeaders"]=44]="CorsIssue::InvalidHeaders",e[e["CorsIssue::WildcardOriginWithCredentials"]=45]="CorsIssue::WildcardOriginWithCredentials",e[e["CorsIssue::PreflightResponseInvalid"]=46]="CorsIssue::PreflightResponseInvalid",e[e["CorsIssue::OriginMismatch"]=47]="CorsIssue::OriginMismatch",e[e["CorsIssue::AllowCredentialsRequired"]=48]="CorsIssue::AllowCredentialsRequired",e[e["CorsIssue::MethodDisallowedByPreflightResponse"]=49]="CorsIssue::MethodDisallowedByPreflightResponse",e[e["CorsIssue::HeaderDisallowedByPreflightResponse"]=50]="CorsIssue::HeaderDisallowedByPreflightResponse",e[e["CorsIssue::RedirectContainsCredentials"]=51]="CorsIssue::RedirectContainsCredentials",e[e["CorsIssue::DisallowedByMode"]=52]="CorsIssue::DisallowedByMode",e[e["CorsIssue::CorsDisabledScheme"]=53]="CorsIssue::CorsDisabledScheme",e[e["CorsIssue::PreflightMissingAllowExternal"]=54]="CorsIssue::PreflightMissingAllowExternal",e[e["CorsIssue::PreflightInvalidAllowExternal"]=55]="CorsIssue::PreflightInvalidAllowExternal",e[e["CorsIssue::NoCorsRedirectModeNotFollow"]=57]="CorsIssue::NoCorsRedirectModeNotFollow",e[e["QuirksModeIssue::QuirksMode"]=58]="QuirksModeIssue::QuirksMode",e[e["QuirksModeIssue::LimitedQuirksMode"]=59]="QuirksModeIssue::LimitedQuirksMode",e[e.DeprecationIssue=60]="DeprecationIssue",e[e["ClientHintIssue::MetaTagAllowListInvalidOrigin"]=61]="ClientHintIssue::MetaTagAllowListInvalidOrigin",e[e["ClientHintIssue::MetaTagModifiedHTML"]=62]="ClientHintIssue::MetaTagModifiedHTML",e[e["CorsIssue::PreflightAllowPrivateNetworkError"]=63]="CorsIssue::PreflightAllowPrivateNetworkError",e[e["GenericIssue::CrossOriginPortalPostMessageError"]=64]="GenericIssue::CrossOriginPortalPostMessageError",e[e["GenericIssue::FormLabelForNameError"]=65]="GenericIssue::FormLabelForNameError",e[e["GenericIssue::FormDuplicateIdForInputError"]=66]="GenericIssue::FormDuplicateIdForInputError",e[e["GenericIssue::FormInputWithNoLabelError"]=67]="GenericIssue::FormInputWithNoLabelError",e[e["GenericIssue::FormAutocompleteAttributeEmptyError"]=68]="GenericIssue::FormAutocompleteAttributeEmptyError",e[e["GenericIssue::FormEmptyIdAndNameAttributesForInputError"]=69]="GenericIssue::FormEmptyIdAndNameAttributesForInputError",e[e["GenericIssue::FormAriaLabelledByToNonExistingId"]=70]="GenericIssue::FormAriaLabelledByToNonExistingId",e[e["GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError"]=71]="GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError",e[e["GenericIssue::FormLabelHasNeitherForNorNestedInput"]=72]="GenericIssue::FormLabelHasNeitherForNorNestedInput",e[e["GenericIssue::FormLabelForMatchesNonExistingIdError"]=73]="GenericIssue::FormLabelForMatchesNonExistingIdError",e[e["GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError"]=74]="GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError",e[e["GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError"]=75]="GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError",e[e["StylesheetLoadingIssue::LateImportRule"]=76]="StylesheetLoadingIssue::LateImportRule",e[e["StylesheetLoadingIssue::RequestFailed"]=77]="StylesheetLoadingIssue::RequestFailed",e[e["CorsIssue::PreflightMissingPrivateNetworkAccessId"]=78]="CorsIssue::PreflightMissingPrivateNetworkAccessId",e[e["CorsIssue::PreflightMissingPrivateNetworkAccessName"]=79]="CorsIssue::PreflightMissingPrivateNetworkAccessName",e[e["CorsIssue::PrivateNetworkAccessPermissionUnavailable"]=80]="CorsIssue::PrivateNetworkAccessPermissionUnavailable",e[e["CorsIssue::PrivateNetworkAccessPermissionDenied"]=81]="CorsIssue::PrivateNetworkAccessPermissionDenied",e[e["CookieIssue::WarnThirdPartyPhaseout::ReadCookie"]=82]="CookieIssue::WarnThirdPartyPhaseout::ReadCookie",e[e["CookieIssue::WarnThirdPartyPhaseout::SetCookie"]=83]="CookieIssue::WarnThirdPartyPhaseout::SetCookie",e[e["CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie"]=84]="CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie",e[e["CookieIssue::ExcludeThirdPartyPhaseout::SetCookie"]=85]="CookieIssue::ExcludeThirdPartyPhaseout::SetCookie",e[e["SelectElementAccessibilityIssue::DisallowedSelectChild"]=86]="SelectElementAccessibilityIssue::DisallowedSelectChild",e[e["SelectElementAccessibilityIssue::DisallowedOptGroupChild"]=87]="SelectElementAccessibilityIssue::DisallowedOptGroupChild",e[e["SelectElementAccessibilityIssue::NonPhrasingContentOptionChild"]=88]="SelectElementAccessibilityIssue::NonPhrasingContentOptionChild",e[e["SelectElementAccessibilityIssue::InteractiveContentOptionChild"]=89]="SelectElementAccessibilityIssue::InteractiveContentOptionChild",e[e["SelectElementAccessibilityIssue::InteractiveContentLegendChild"]=90]="SelectElementAccessibilityIssue::InteractiveContentLegendChild",e[e["SRIMessageSignatureIssue::MissingSignatureHeader"]=91]="SRIMessageSignatureIssue::MissingSignatureHeader",e[e["SRIMessageSignatureIssue::MissingSignatureInputHeader"]=92]="SRIMessageSignatureIssue::MissingSignatureInputHeader",e[e["SRIMessageSignatureIssue::InvalidSignatureHeader"]=93]="SRIMessageSignatureIssue::InvalidSignatureHeader",e[e["SRIMessageSignatureIssue::InvalidSignatureInputHeader"]=94]="SRIMessageSignatureIssue::InvalidSignatureInputHeader",e[e["SRIMessageSignatureIssue::SignatureHeaderValueIsNotByteSequence"]=95]="SRIMessageSignatureIssue::SignatureHeaderValueIsNotByteSequence",e[e["SRIMessageSignatureIssue::SignatureHeaderValueIsParameterized"]=96]="SRIMessageSignatureIssue::SignatureHeaderValueIsParameterized",e[e["SRIMessageSignatureIssue::SignatureHeaderValueIsIncorrectLength"]=97]="SRIMessageSignatureIssue::SignatureHeaderValueIsIncorrectLength",e[e["SRIMessageSignatureIssue::SignatureInputHeaderMissingLabel"]=98]="SRIMessageSignatureIssue::SignatureInputHeaderMissingLabel",e[e["SRIMessageSignatureIssue::SignatureInputHeaderValueNotInnerList"]=99]="SRIMessageSignatureIssue::SignatureInputHeaderValueNotInnerList",e[e["SRIMessageSignatureIssue::SignatureInputHeaderValueMissingComponents"]=100]="SRIMessageSignatureIssue::SignatureInputHeaderValueMissingComponents",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentType"]=101]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentType",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentName"]=102]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentName",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidHeaderComponentParameter"]=103]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidHeaderComponentParameter",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidDerivedComponentParameter"]=104]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidDerivedComponentParameter",e[e["SRIMessageSignatureIssue::SignatureInputHeaderKeyIdLength"]=105]="SRIMessageSignatureIssue::SignatureInputHeaderKeyIdLength",e[e["SRIMessageSignatureIssue::SignatureInputHeaderInvalidParameter"]=106]="SRIMessageSignatureIssue::SignatureInputHeaderInvalidParameter",e[e["SRIMessageSignatureIssue::SignatureInputHeaderMissingRequiredParameters"]=107]="SRIMessageSignatureIssue::SignatureInputHeaderMissingRequiredParameters",e[e["SRIMessageSignatureIssue::ValidationFailedSignatureExpired"]=108]="SRIMessageSignatureIssue::ValidationFailedSignatureExpired",e[e["SRIMessageSignatureIssue::ValidationFailedInvalidLength"]=109]="SRIMessageSignatureIssue::ValidationFailedInvalidLength",e[e["SRIMessageSignatureIssue::ValidationFailedSignatureMismatch"]=110]="SRIMessageSignatureIssue::ValidationFailedSignatureMismatch",e[e["CorsIssue::LocalNetworkAccessPermissionDenied"]=111]="CorsIssue::LocalNetworkAccessPermissionDenied",e[e["SRIMessageSignatureIssue::ValidationFailedIntegrityMismatch"]=112]="SRIMessageSignatureIssue::ValidationFailedIntegrityMismatch",e[e.MAX_VALUE=113]="MAX_VALUE"}(de||(de={})),function(e){e[e.af=1]="af",e[e.am=2]="am",e[e.ar=3]="ar",e[e.as=4]="as",e[e.az=5]="az",e[e.be=6]="be",e[e.bg=7]="bg",e[e.bn=8]="bn",e[e.bs=9]="bs",e[e.ca=10]="ca",e[e.cs=11]="cs",e[e.cy=12]="cy",e[e.da=13]="da",e[e.de=14]="de",e[e.el=15]="el",e[e["en-GB"]=16]="en-GB",e[e["en-US"]=17]="en-US",e[e["es-419"]=18]="es-419",e[e.es=19]="es",e[e.et=20]="et",e[e.eu=21]="eu",e[e.fa=22]="fa",e[e.fi=23]="fi",e[e.fil=24]="fil",e[e["fr-CA"]=25]="fr-CA",e[e.fr=26]="fr",e[e.gl=27]="gl",e[e.gu=28]="gu",e[e.he=29]="he",e[e.hi=30]="hi",e[e.hr=31]="hr",e[e.hu=32]="hu",e[e.hy=33]="hy",e[e.id=34]="id",e[e.is=35]="is",e[e.it=36]="it",e[e.ja=37]="ja",e[e.ka=38]="ka",e[e.kk=39]="kk",e[e.km=40]="km",e[e.kn=41]="kn",e[e.ko=42]="ko",e[e.ky=43]="ky",e[e.lo=44]="lo",e[e.lt=45]="lt",e[e.lv=46]="lv",e[e.mk=47]="mk",e[e.ml=48]="ml",e[e.mn=49]="mn",e[e.mr=50]="mr",e[e.ms=51]="ms",e[e.my=52]="my",e[e.ne=53]="ne",e[e.nl=54]="nl",e[e.no=55]="no",e[e.or=56]="or",e[e.pa=57]="pa",e[e.pl=58]="pl",e[e["pt-PT"]=59]="pt-PT",e[e.pt=60]="pt",e[e.ro=61]="ro",e[e.ru=62]="ru",e[e.si=63]="si",e[e.sk=64]="sk",e[e.sl=65]="sl",e[e.sq=66]="sq",e[e["sr-Latn"]=67]="sr-Latn",e[e.sr=68]="sr",e[e.sv=69]="sv",e[e.sw=70]="sw",e[e.ta=71]="ta",e[e.te=72]="te",e[e.th=73]="th",e[e.tr=74]="tr",e[e.uk=75]="uk",e[e.ur=76]="ur",e[e.uz=77]="uz",e[e.vi=78]="vi",e[e.zh=79]="zh",e[e["zh-HK"]=80]="zh-HK",e[e["zh-TW"]=81]="zh-TW",e[e.zu=82]="zu",e[e.MAX_VALUE=83]="MAX_VALUE"}(ce||(ce={})),function(e){e[e.OtherSection=0]="OtherSection",e[e.Identity=1]="Identity",e[e.Presentation=2]="Presentation",e[e["Protocol Handlers"]=3]="Protocol Handlers",e[e.Icons=4]="Icons",e[e["Window Controls Overlay"]=5]="Window Controls Overlay",e[e.MAX_VALUE=6]="MAX_VALUE"}(le||(le={}));var ge=Object.freeze({__proto__:null,get Action(){return J},get DevtoolsExperiments(){return se},get ElementsSidebarTabCodes(){return re},get IssueCreated(){return de},get IssueExpanded(){return ie},get IssueResourceOpened(){return ae},get KeybindSetSettings(){return ne},get KeyboardShortcutAction(){return oe},get Language(){return ce},get ManifestSectionCodes(){return le},get MediaTypes(){return te},get PanelCodes(){return Z},get PanelWithLocation(){return ee},UserMetrics:me});const pe=new me,he=K();export{U as AidaClient,F as InspectorFrontendHost,i as InspectorFrontendHostAPI,X as Platform,ue as RNPerfMetrics,v as ResourceLoader,ge as UserMetrics,he as rnPerfMetrics,pe as userMetrics}; diff --git a/packages/debugger-frontend/dist/third-party/front_end/core/i18n/locales/en-US.json b/packages/debugger-frontend/dist/third-party/front_end/core/i18n/locales/en-US.json index 5ba1fe1b929b..2134ee005530 100644 --- a/packages/debugger-frontend/dist/third-party/front_end/core/i18n/locales/en-US.json +++ b/packages/debugger-frontend/dist/third-party/front_end/core/i18n/locales/en-US.json @@ -1 +1 @@ -{"core/common/ResourceType.ts | cspviolationreport":{"message":"CSPViolationReport"},"core/common/ResourceType.ts | css":{"message":"CSS"},"core/common/ResourceType.ts | directsocket":{"message":"DirectSocket"},"core/common/ResourceType.ts | doc":{"message":"Doc"},"core/common/ResourceType.ts | document":{"message":"Document"},"core/common/ResourceType.ts | eventsource":{"message":"EventSource"},"core/common/ResourceType.ts | fetch":{"message":"Fetch"},"core/common/ResourceType.ts | fetchAndXHR":{"message":"Fetch and XHR"},"core/common/ResourceType.ts | font":{"message":"Font"},"core/common/ResourceType.ts | image":{"message":"Image"},"core/common/ResourceType.ts | img":{"message":"Img"},"core/common/ResourceType.ts | javascript":{"message":"JavaScript"},"core/common/ResourceType.ts | js":{"message":"JS"},"core/common/ResourceType.ts | manifest":{"message":"Manifest"},"core/common/ResourceType.ts | media":{"message":"Media"},"core/common/ResourceType.ts | other":{"message":"Other"},"core/common/ResourceType.ts | ping":{"message":"Ping"},"core/common/ResourceType.ts | preflight":{"message":"Preflight"},"core/common/ResourceType.ts | script":{"message":"Script"},"core/common/ResourceType.ts | signedexchange":{"message":"SignedExchange"},"core/common/ResourceType.ts | socketShort":{"message":"Socket"},"core/common/ResourceType.ts | stylesheet":{"message":"Stylesheet"},"core/common/ResourceType.ts | texttrack":{"message":"TextTrack"},"core/common/ResourceType.ts | wasm":{"message":"Wasm"},"core/common/ResourceType.ts | webassembly":{"message":"WebAssembly"},"core/common/ResourceType.ts | webbundle":{"message":"WebBundle"},"core/common/ResourceType.ts | websocket":{"message":"WebSocket"},"core/common/ResourceType.ts | webtransport":{"message":"WebTransport"},"core/common/Revealer.ts | animationsPanel":{"message":"Animations panel"},"core/common/Revealer.ts | applicationPanel":{"message":"Application panel"},"core/common/Revealer.ts | changesDrawer":{"message":"Changes drawer"},"core/common/Revealer.ts | developerResourcesPanel":{"message":"Developer Resources panel"},"core/common/Revealer.ts | elementsPanel":{"message":"Elements panel"},"core/common/Revealer.ts | issuesView":{"message":"Issues view"},"core/common/Revealer.ts | memoryInspectorPanel":{"message":"Memory inspector panel"},"core/common/Revealer.ts | networkPanel":{"message":"Network panel"},"core/common/Revealer.ts | securityPanel":{"message":"Security panel"},"core/common/Revealer.ts | sourcesPanel":{"message":"Sources panel"},"core/common/Revealer.ts | stylesSidebar":{"message":"styles sidebar"},"core/common/Revealer.ts | timelinePanel":{"message":"Performance panel"},"core/common/SettingRegistration.ts | adorner":{"message":"Adorner"},"core/common/SettingRegistration.ts | ai":{"message":"AI"},"core/common/SettingRegistration.ts | appearance":{"message":"Appearance"},"core/common/SettingRegistration.ts | console":{"message":"Console"},"core/common/SettingRegistration.ts | debugger":{"message":"Debugger"},"core/common/SettingRegistration.ts | elements":{"message":"Elements"},"core/common/SettingRegistration.ts | extension":{"message":"Extension"},"core/common/SettingRegistration.ts | global":{"message":"Global"},"core/common/SettingRegistration.ts | grid":{"message":"Grid"},"core/common/SettingRegistration.ts | memory":{"message":"Memory"},"core/common/SettingRegistration.ts | mobile":{"message":"Mobile"},"core/common/SettingRegistration.ts | network":{"message":"Network"},"core/common/SettingRegistration.ts | performance":{"message":"Performance"},"core/common/SettingRegistration.ts | persistence":{"message":"Persistence"},"core/common/SettingRegistration.ts | privacy":{"message":"Privacy"},"core/common/SettingRegistration.ts | rendering":{"message":"Rendering"},"core/common/SettingRegistration.ts | sources":{"message":"Sources"},"core/common/SettingRegistration.ts | sync":{"message":"Sync"},"core/host/InspectorFrontendHost.ts | devtoolsS":{"message":"DevTools - {PH1}"},"core/host/ResourceLoader.ts | cacheError":{"message":"Cache error"},"core/host/ResourceLoader.ts | certificateError":{"message":"Certificate error"},"core/host/ResourceLoader.ts | certificateManagerError":{"message":"Certificate manager error"},"core/host/ResourceLoader.ts | connectionError":{"message":"Connection error"},"core/host/ResourceLoader.ts | decodingDataUrlFailed":{"message":"Decoding Data URL failed"},"core/host/ResourceLoader.ts | dnsResolverError":{"message":"DNS resolver error"},"core/host/ResourceLoader.ts | ftpError":{"message":"FTP error"},"core/host/ResourceLoader.ts | httpError":{"message":"HTTP error"},"core/host/ResourceLoader.ts | httpErrorStatusCodeSS":{"message":"HTTP error: status code {PH1}, {PH2}"},"core/host/ResourceLoader.ts | invalidUrl":{"message":"Invalid URL"},"core/host/ResourceLoader.ts | signedExchangeError":{"message":"Signed Exchange error"},"core/host/ResourceLoader.ts | systemError":{"message":"System error"},"core/host/ResourceLoader.ts | unknownError":{"message":"Unknown error"},"core/sdk/ChildTargetManager.ts | main":{"message":"Main"},"core/sdk/CompilerSourceMappingContentProvider.ts | couldNotLoadContentForSS":{"message":"Could not load content for {PH1} ({PH2})"},"core/sdk/Connections.ts | websocketDisconnected":{"message":"WebSocket disconnected"},"core/sdk/ConsoleModel.ts | bfcacheNavigation":{"message":"Navigation to {PH1} was restored from back/forward cache (see https://web.dev/bfcache/)"},"core/sdk/ConsoleModel.ts | failedToSaveToTempVariable":{"message":"Failed to save to temp variable."},"core/sdk/ConsoleModel.ts | navigatedToS":{"message":"Navigated to {PH1}"},"core/sdk/ConsoleModel.ts | profileSFinished":{"message":"Profile ''{PH1}'' finished."},"core/sdk/ConsoleModel.ts | profileSStarted":{"message":"Profile ''{PH1}'' started."},"core/sdk/CPUProfilerModel.ts | profileD":{"message":"Profile {PH1}"},"core/sdk/CPUThrottlingManager.ts | calibratedLowTierMobile":{"message":"Low-tier mobile"},"core/sdk/CPUThrottlingManager.ts | calibratedMidTierMobile":{"message":"Mid-tier mobile"},"core/sdk/CPUThrottlingManager.ts | calibrationErrorDeviceTooWeak":{"message":"Device is not powerful enough"},"core/sdk/CPUThrottlingManager.ts | dSlowdown":{"message":"{PH1}× slowdown"},"core/sdk/CPUThrottlingManager.ts | noThrottling":{"message":"No throttling"},"core/sdk/CSSStyleSheetHeader.ts | couldNotFindTheOriginalStyle":{"message":"Could not find the original style sheet."},"core/sdk/CSSStyleSheetHeader.ts | thereWasAnErrorRetrievingThe":{"message":"There was an error retrieving the source styles."},"core/sdk/DebuggerModel.ts | block":{"message":"Block"},"core/sdk/DebuggerModel.ts | catchBlock":{"message":"Catch block"},"core/sdk/DebuggerModel.ts | closure":{"message":"Closure"},"core/sdk/DebuggerModel.ts | exception":{"message":"Exception"},"core/sdk/DebuggerModel.ts | expression":{"message":"Expression"},"core/sdk/DebuggerModel.ts | global":{"message":"Global"},"core/sdk/DebuggerModel.ts | local":{"message":"Local"},"core/sdk/DebuggerModel.ts | module":{"message":"Module"},"core/sdk/DebuggerModel.ts | returnValue":{"message":"Return value"},"core/sdk/DebuggerModel.ts | script":{"message":"Script"},"core/sdk/DebuggerModel.ts | withBlock":{"message":"With block"},"core/sdk/NetworkManager.ts | directSocketStatusAborted":{"message":"Aborted"},"core/sdk/NetworkManager.ts | directSocketStatusClosed":{"message":"Closed"},"core/sdk/NetworkManager.ts | directSocketStatusOpen":{"message":"Open"},"core/sdk/NetworkManager.ts | directSocketStatusOpening":{"message":"Opening"},"core/sdk/NetworkManager.ts | fast4G":{"message":"Fast 4G"},"core/sdk/NetworkManager.ts | fastG":{"message":"Slow 4G"},"core/sdk/NetworkManager.ts | noContentForPreflight":{"message":"No content available for preflight request"},"core/sdk/NetworkManager.ts | noContentForRedirect":{"message":"No content available because this request was redirected"},"core/sdk/NetworkManager.ts | noContentForWebSocket":{"message":"Content for WebSockets is currently not supported"},"core/sdk/NetworkManager.ts | noThrottling":{"message":"No throttling"},"core/sdk/NetworkManager.ts | offline":{"message":"Offline"},"core/sdk/NetworkManager.ts | requestWasBlockedByDevtoolsS":{"message":"Request was blocked by DevTools: \"{PH1}\""},"core/sdk/NetworkManager.ts | sFailedLoadingSS":{"message":"{PH1} failed loading: {PH2} \"{PH3}\"."},"core/sdk/NetworkManager.ts | sFinishedLoadingSS":{"message":"{PH1} finished loading: {PH2} \"{PH3}\"."},"core/sdk/NetworkManager.ts | slowG":{"message":"3G"},"core/sdk/NetworkRequest.ts | anUnknownErrorWasEncounteredWhenTrying":{"message":"An unknown error was encountered when trying to store this cookie."},"core/sdk/NetworkRequest.ts | binary":{"message":"(binary)"},"core/sdk/NetworkRequest.ts | blockedReasonInvalidDomain":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because its Domain attribute was invalid with regards to the current host url."},"core/sdk/NetworkRequest.ts | blockedReasonInvalidPrefix":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it used the \"__Secure-\" or \"__Host-\" prefix in its name and broke the additional rules applied to cookies with these prefixes as defined in https://tools.ietf.org/html/draft-west-cookie-prefixes-05."},"core/sdk/NetworkRequest.ts | blockedReasonOverwriteSecure":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it was not sent over a secure connection and would have overwritten a cookie with the Secure attribute."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteNoneInsecure":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameSite=None\" attribute but did not have the \"Secure\" attribute, which is required in order to use \"SameSite=None\"."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteStrictLax":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteUnspecifiedTreatedAsLax":{"message":"This Set-Cookie header didn't specify a \"SameSite\" attribute and was defaulted to \"SameSite=Lax,\" and was blocked because it came from a cross-site response which was not the response to a top-level navigation. The Set-Cookie had to have been set with \"SameSite=None\" to enable cross-site usage."},"core/sdk/NetworkRequest.ts | blockedReasonSecureOnly":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"Secure\" attribute but was not received over a secure connection."},"core/sdk/NetworkRequest.ts | domainMismatch":{"message":"This cookie was blocked because neither did the request URL's domain exactly match the cookie's domain, nor was the request URL's domain a subdomain of the cookie's Domain attribute value."},"core/sdk/NetworkRequest.ts | exemptionReasonEnterprisePolicy":{"message":"This cookie is allowed by Chrome Enterprise policy. Learn more: goo.gle/ce-3pc"},"core/sdk/NetworkRequest.ts | exemptionReasonScheme":{"message":"This cookie is allowed by the top-level url scheme"},"core/sdk/NetworkRequest.ts | exemptionReasonStorageAccessAPI":{"message":"This cookie is allowed by the Storage Access API. Learn more: goo.gle/saa"},"core/sdk/NetworkRequest.ts | exemptionReasonTopLevelStorageAccessAPI":{"message":"This cookie is allowed by the top-level Storage Access API. Learn more: goo.gle/saa-top"},"core/sdk/NetworkRequest.ts | exemptionReasonTopLevelTPCDDeprecationTrial":{"message":"This cookie is allowed by top-level third-party cookie deprecation trial. Learn more: goo.gle/ps-dt."},"core/sdk/NetworkRequest.ts | exemptionReasonTPCDDeprecationTrial":{"message":"This cookie is allowed by third-party cookie deprecation trial. Learn more: goo.gle/ps-dt."},"core/sdk/NetworkRequest.ts | exemptionReasonTPCDHeuristics":{"message":"This cookie is allowed by third-party cookie heuristics. Learn more: goo.gle/hbe"},"core/sdk/NetworkRequest.ts | exemptionReasonTPCDMetadata":{"message":"This cookie is allowed by a third-party cookie deprecation trial grace period. Learn more: goo.gle/dt-grace."},"core/sdk/NetworkRequest.ts | exemptionReasonUserSetting":{"message":"This cookie is allowed by user preference."},"core/sdk/NetworkRequest.ts | nameValuePairExceedsMaxSize":{"message":"This cookie was blocked because it was too large. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | notOnPath":{"message":"This cookie was blocked because its path was not an exact match for or a superdirectory of the request url's path."},"core/sdk/NetworkRequest.ts | samePartyFromCrossPartyContext":{"message":"This cookie was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set."},"core/sdk/NetworkRequest.ts | sameSiteLax":{"message":"This cookie was blocked because it had the \"SameSite=Lax\" attribute and the request was made from a different site and was not initiated by a top-level navigation."},"core/sdk/NetworkRequest.ts | sameSiteNoneInsecure":{"message":"This cookie was blocked because it had the \"SameSite=None\" attribute but was not marked \"Secure\". Cookies without SameSite restrictions must be marked \"Secure\" and sent over a secure connection."},"core/sdk/NetworkRequest.ts | sameSiteStrict":{"message":"This cookie was blocked because it had the \"SameSite=Strict\" attribute and the request was made from a different site. This includes top-level navigation requests initiated by other sites."},"core/sdk/NetworkRequest.ts | sameSiteUnspecifiedTreatedAsLax":{"message":"This cookie didn't specify a \"SameSite\" attribute when it was stored and was defaulted to \"SameSite=Lax,\" and was blocked because the request was made from a different site and was not initiated by a top-level navigation. The cookie had to have been set with \"SameSite=None\" to enable cross-site usage."},"core/sdk/NetworkRequest.ts | schemefulSameSiteLax":{"message":"This cookie was blocked because it had the \"SameSite=Lax\" attribute but the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | schemefulSameSiteStrict":{"message":"This cookie was blocked because it had the \"SameSite=Strict\" attribute but the request was cross-site. This includes top-level navigation requests initiated by other sites. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | schemefulSameSiteUnspecifiedTreatedAsLax":{"message":"This cookie didn't specify a \"SameSite\" attribute when it was stored, was defaulted to \"SameSite=Lax\", and was blocked because the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | secureOnly":{"message":"This cookie was blocked because it had the \"Secure\" attribute and the connection was not secure."},"core/sdk/NetworkRequest.ts | setcookieHeaderIsIgnoredIn":{"message":"Set-Cookie header is ignored in response from url: {PH1}. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | theSchemeOfThisConnectionIsNot":{"message":"The scheme of this connection is not allowed to store cookies."},"core/sdk/NetworkRequest.ts | thirdPartyPhaseout":{"message":"This cookie was blocked either because of Chrome flags or browser configuration. Learn more in the Issues panel."},"core/sdk/NetworkRequest.ts | thisSetcookieDidntSpecifyASamesite":{"message":"This Set-Cookie header didn't specify a \"SameSite\" attribute, was defaulted to \"SameSite=Lax\", and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | thisSetcookieHadADisallowedCharacter":{"message":"This Set-Cookie header contained a disallowed character (a forbidden ASCII control character, or the tab character if it appears in the middle of the cookie name, value, an attribute name, or an attribute value)."},"core/sdk/NetworkRequest.ts | thisSetcookieHadInvalidSyntax":{"message":"This Set-Cookie header had invalid syntax."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSameparty":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but also had other conflicting attributes. Chrome requires cookies that use the \"SameParty\" attribute to also have the \"Secure\" attribute, and to not be restricted to \"SameSite=Strict\"."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because the cookie was too large. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedDueThirdPartyPhaseout":{"message":"Setting this cookie was blocked either because of Chrome flags or browser configuration. Learn more in the Issues panel."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedDueToUser":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked due to user preferences."},"core/sdk/NetworkRequest.ts | unknownError":{"message":"An unknown error was encountered when trying to send this cookie."},"core/sdk/NetworkRequest.ts | userPreferences":{"message":"This cookie was blocked due to user preferences."},"core/sdk/OverlayModel.ts | pausedInDebugger":{"message":"Paused in debugger"},"core/sdk/PageResourceLoader.ts | loadCanceledDueToReloadOf":{"message":"Load canceled due to reload of inspected page"},"core/sdk/RehydratingConnection.ts | errorLoadingLog":{"message":"Error loading log"},"core/sdk/RehydratingConnection.ts | noHostWindow":{"message":"Can not find host window"},"core/sdk/RehydratingConnection.ts | noSourceText":{"message":"No source text available"},"core/sdk/Script.ts | scriptRemovedOrDeleted":{"message":"Script removed or deleted."},"core/sdk/Script.ts | unableToFetchScriptSource":{"message":"Unable to fetch script source."},"core/sdk/sdk-meta.ts | achromatopsia":{"message":"Achromatopsia (no color)"},"core/sdk/sdk-meta.ts | blurredVision":{"message":"Blurred vision"},"core/sdk/sdk-meta.ts | captureAsyncStackTraces":{"message":"Capture async stack traces"},"core/sdk/sdk-meta.ts | customFormatters":{"message":"Custom formatters"},"core/sdk/sdk-meta.ts | deuteranopia":{"message":"Deuteranopia (no green)"},"core/sdk/sdk-meta.ts | disableAsyncStackTraces":{"message":"Disable async stack traces"},"core/sdk/sdk-meta.ts | disableAvifFormat":{"message":"Disable AVIF format"},"core/sdk/sdk-meta.ts | disableCache":{"message":"Disable cache while DevTools is open"},"core/sdk/sdk-meta.ts | disableJavascript":{"message":"Disable JavaScript"},"core/sdk/sdk-meta.ts | disableLocalFonts":{"message":"Disable local fonts"},"core/sdk/sdk-meta.ts | disableNetworkRequestBlocking":{"message":"Disable network request blocking"},"core/sdk/sdk-meta.ts | disableWebpFormat":{"message":"Disable WebP format"},"core/sdk/sdk-meta.ts | doNotCaptureAsyncStackTraces":{"message":"Do not capture async stack traces"},"core/sdk/sdk-meta.ts | doNotEmulateAFocusedPage":{"message":"Do not emulate a focused page"},"core/sdk/sdk-meta.ts | doNotEmulateAnyVisionDeficiency":{"message":"Do not emulate any vision deficiency"},"core/sdk/sdk-meta.ts | doNotEmulateCss":{"message":"Do not emulate CSS {PH1}"},"core/sdk/sdk-meta.ts | doNotEmulateCssMediaType":{"message":"Do not emulate CSS media type"},"core/sdk/sdk-meta.ts | doNotExtendGridLines":{"message":"Do not extend grid lines"},"core/sdk/sdk-meta.ts | doNotHighlightAdFrames":{"message":"Do not highlight ad frames"},"core/sdk/sdk-meta.ts | doNotPauseOnExceptions":{"message":"Do not pause on exceptions"},"core/sdk/sdk-meta.ts | doNotPreserveLogUponNavigation":{"message":"Do not preserve log upon navigation"},"core/sdk/sdk-meta.ts | doNotShowGridNamedAreas":{"message":"Do not show grid named areas"},"core/sdk/sdk-meta.ts | doNotShowGridTrackSizes":{"message":"Do not show grid track sizes"},"core/sdk/sdk-meta.ts | doNotShowRulersOnHover":{"message":"Do not show rulers on hover"},"core/sdk/sdk-meta.ts | emulateAchromatopsia":{"message":"Emulate achromatopsia (no color)"},"core/sdk/sdk-meta.ts | emulateAFocusedPage":{"message":"Emulate a focused page"},"core/sdk/sdk-meta.ts | emulateAutoDarkMode":{"message":"Emulate auto dark mode"},"core/sdk/sdk-meta.ts | emulateBlurredVision":{"message":"Emulate blurred vision"},"core/sdk/sdk-meta.ts | emulateCss":{"message":"Emulate CSS {PH1}"},"core/sdk/sdk-meta.ts | emulateCssMediaFeature":{"message":"Emulate CSS media feature {PH1}"},"core/sdk/sdk-meta.ts | emulateCssMediaType":{"message":"Emulate CSS media type"},"core/sdk/sdk-meta.ts | emulateCssPrintMediaType":{"message":"Emulate CSS print media type"},"core/sdk/sdk-meta.ts | emulateCssScreenMediaType":{"message":"Emulate CSS screen media type"},"core/sdk/sdk-meta.ts | emulateDeuteranopia":{"message":"Emulate deuteranopia (no green)"},"core/sdk/sdk-meta.ts | emulateProtanopia":{"message":"Emulate protanopia (no red)"},"core/sdk/sdk-meta.ts | emulateReducedContrast":{"message":"Emulate reduced contrast"},"core/sdk/sdk-meta.ts | emulateTritanopia":{"message":"Emulate tritanopia (no blue)"},"core/sdk/sdk-meta.ts | emulateVisionDeficiencies":{"message":"Emulate vision deficiencies"},"core/sdk/sdk-meta.ts | enableAvifFormat":{"message":"Enable AVIF format"},"core/sdk/sdk-meta.ts | enableCache":{"message":"Enable cache"},"core/sdk/sdk-meta.ts | enableJavascript":{"message":"Enable JavaScript"},"core/sdk/sdk-meta.ts | enableLocalFonts":{"message":"Enable local fonts"},"core/sdk/sdk-meta.ts | enableNetworkRequestBlocking":{"message":"Enable network request blocking"},"core/sdk/sdk-meta.ts | enableRemoteFileLoading":{"message":"Allow DevTools to load resources, such as source maps, from remote file paths. Disabled by default for security reasons."},"core/sdk/sdk-meta.ts | enableWebpFormat":{"message":"Enable WebP format"},"core/sdk/sdk-meta.ts | extendGridLines":{"message":"Extend grid lines"},"core/sdk/sdk-meta.ts | hideFramesPerSecondFpsMeter":{"message":"Hide frames per second (FPS) meter"},"core/sdk/sdk-meta.ts | hideLayerBorders":{"message":"Hide layer borders"},"core/sdk/sdk-meta.ts | hideLayoutShiftRegions":{"message":"Hide layout shift regions"},"core/sdk/sdk-meta.ts | hideLineLabels":{"message":"Hide line labels"},"core/sdk/sdk-meta.ts | hidePaintFlashingRectangles":{"message":"Hide paint flashing rectangles"},"core/sdk/sdk-meta.ts | hideScrollPerformanceBottlenecks":{"message":"Hide scroll performance bottlenecks"},"core/sdk/sdk-meta.ts | highlightAdFrames":{"message":"Highlight ad frames"},"core/sdk/sdk-meta.ts | networkCacheExplanation":{"message":"Disabling the network cache will simulate a network experience similar to a first time visitor."},"core/sdk/sdk-meta.ts | networkRequestBlocking":{"message":"Network request blocking"},"core/sdk/sdk-meta.ts | noEmulation":{"message":"No emulation"},"core/sdk/sdk-meta.ts | pauseOnExceptions":{"message":"Pause on exceptions"},"core/sdk/sdk-meta.ts | preserveLogUponNavigation":{"message":"Preserve log upon navigation"},"core/sdk/sdk-meta.ts | print":{"message":"print"},"core/sdk/sdk-meta.ts | protanopia":{"message":"Protanopia (no red)"},"core/sdk/sdk-meta.ts | query":{"message":"query"},"core/sdk/sdk-meta.ts | reducedContrast":{"message":"Reduced contrast"},"core/sdk/sdk-meta.ts | screen":{"message":"screen"},"core/sdk/sdk-meta.ts | showAreaNames":{"message":"Show area names"},"core/sdk/sdk-meta.ts | showFramesPerSecondFpsMeter":{"message":"Show frames per second (FPS) meter"},"core/sdk/sdk-meta.ts | showGridNamedAreas":{"message":"Show grid named areas"},"core/sdk/sdk-meta.ts | showGridTrackSizes":{"message":"Show grid track sizes"},"core/sdk/sdk-meta.ts | showLayerBorders":{"message":"Show layer borders"},"core/sdk/sdk-meta.ts | showLayoutShiftRegions":{"message":"Show layout shift regions"},"core/sdk/sdk-meta.ts | showLineLabels":{"message":"Show line labels"},"core/sdk/sdk-meta.ts | showLineNames":{"message":"Show line names"},"core/sdk/sdk-meta.ts | showLineNumbers":{"message":"Show line numbers"},"core/sdk/sdk-meta.ts | showPaintFlashingRectangles":{"message":"Show paint flashing rectangles"},"core/sdk/sdk-meta.ts | showRulersOnHover":{"message":"Show rulers on hover"},"core/sdk/sdk-meta.ts | showScrollPerformanceBottlenecks":{"message":"Show scroll performance bottlenecks"},"core/sdk/sdk-meta.ts | showTrackSizes":{"message":"Show track sizes"},"core/sdk/sdk-meta.ts | tritanopia":{"message":"Tritanopia (no blue)"},"core/sdk/ServerTiming.ts | deprecatedSyntaxFoundPleaseUse":{"message":"Deprecated syntax found. Please use: ;dur=;desc="},"core/sdk/ServerTiming.ts | duplicateParameterSIgnored":{"message":"Duplicate parameter \"{PH1}\" ignored."},"core/sdk/ServerTiming.ts | extraneousTrailingCharacters":{"message":"Extraneous trailing characters."},"core/sdk/ServerTiming.ts | noValueFoundForParameterS":{"message":"No value found for parameter \"{PH1}\"."},"core/sdk/ServerTiming.ts | unableToParseSValueS":{"message":"Unable to parse \"{PH1}\" value \"{PH2}\"."},"core/sdk/ServerTiming.ts | unrecognizedParameterS":{"message":"Unrecognized parameter \"{PH1}\"."},"core/sdk/ServiceWorkerCacheModel.ts | serviceworkercacheagentError":{"message":"ServiceWorkerCacheAgent error deleting cache entry {PH1} in cache: {PH2}"},"core/sdk/ServiceWorkerManager.ts | activated":{"message":"activated"},"core/sdk/ServiceWorkerManager.ts | activating":{"message":"activating"},"core/sdk/ServiceWorkerManager.ts | installed":{"message":"installed"},"core/sdk/ServiceWorkerManager.ts | installing":{"message":"installing"},"core/sdk/ServiceWorkerManager.ts | new":{"message":"new"},"core/sdk/ServiceWorkerManager.ts | redundant":{"message":"redundant"},"core/sdk/ServiceWorkerManager.ts | running":{"message":"running"},"core/sdk/ServiceWorkerManager.ts | sSS":{"message":"{PH1} #{PH2} ({PH3})"},"core/sdk/ServiceWorkerManager.ts | starting":{"message":"starting"},"core/sdk/ServiceWorkerManager.ts | stopped":{"message":"stopped"},"core/sdk/ServiceWorkerManager.ts | stopping":{"message":"stopping"},"core/sdk/SourceMapScopeChainEntry.ts | block":{"message":"Block"},"core/sdk/SourceMapScopeChainEntry.ts | closure":{"message":"Closure"},"core/sdk/SourceMapScopeChainEntry.ts | global":{"message":"Global"},"core/sdk/SourceMapScopeChainEntry.ts | local":{"message":"Local"},"core/sdk/SourceMapScopeChainEntry.ts | returnValue":{"message":"Return value"},"entrypoints/inspector_main/inspector_main-meta.ts | autoOpenDevTools":{"message":"Auto-open DevTools for popups"},"entrypoints/inspector_main/inspector_main-meta.ts | blockAds":{"message":"Block ads on this site"},"entrypoints/inspector_main/inspector_main-meta.ts | colorVisionDeficiency":{"message":"color vision deficiency"},"entrypoints/inspector_main/inspector_main-meta.ts | cssMediaFeature":{"message":"CSS media feature"},"entrypoints/inspector_main/inspector_main-meta.ts | cssMediaType":{"message":"CSS media type"},"entrypoints/inspector_main/inspector_main-meta.ts | disablePaused":{"message":"Disable paused state overlay"},"entrypoints/inspector_main/inspector_main-meta.ts | doNotAutoOpen":{"message":"Do not auto-open DevTools for popups"},"entrypoints/inspector_main/inspector_main-meta.ts | forceAdBlocking":{"message":"Force ad blocking on this site"},"entrypoints/inspector_main/inspector_main-meta.ts | fps":{"message":"fps"},"entrypoints/inspector_main/inspector_main-meta.ts | hardReloadPage":{"message":"Hard reload page"},"entrypoints/inspector_main/inspector_main-meta.ts | layout":{"message":"layout"},"entrypoints/inspector_main/inspector_main-meta.ts | paint":{"message":"paint"},"entrypoints/inspector_main/inspector_main-meta.ts | reloadPage":{"message":"Reload page"},"entrypoints/inspector_main/inspector_main-meta.ts | rendering":{"message":"Rendering"},"entrypoints/inspector_main/inspector_main-meta.ts | showAds":{"message":"Show ads on this site, if allowed"},"entrypoints/inspector_main/inspector_main-meta.ts | showRendering":{"message":"Show Rendering"},"entrypoints/inspector_main/inspector_main-meta.ts | toggleCssPrefersColorSchemeMedia":{"message":"Toggle CSS media feature prefers-color-scheme"},"entrypoints/inspector_main/inspector_main-meta.ts | visionDeficiency":{"message":"vision deficiency"},"entrypoints/inspector_main/InspectorMain.ts | javascriptIsDisabled":{"message":"JavaScript is disabled"},"entrypoints/inspector_main/InspectorMain.ts | main":{"message":"Main"},"entrypoints/inspector_main/InspectorMain.ts | openDedicatedTools":{"message":"Open dedicated DevTools for Node.js"},"entrypoints/inspector_main/InspectorMain.ts | tab":{"message":"Tab"},"entrypoints/inspector_main/OutermostTargetSelector.ts | targetNotSelected":{"message":"Page: Not selected"},"entrypoints/inspector_main/OutermostTargetSelector.ts | targetS":{"message":"Page: {PH1}"},"entrypoints/inspector_main/RenderingOptions.ts | disableAvifImageFormat":{"message":"Disable AVIF image format"},"entrypoints/inspector_main/RenderingOptions.ts | disableLocalFonts":{"message":"Disable local fonts"},"entrypoints/inspector_main/RenderingOptions.ts | disablesLocalSourcesInFontface":{"message":"Disables local() sources in @font-face rules. Requires a page reload to apply."},"entrypoints/inspector_main/RenderingOptions.ts | disableWebpImageFormat":{"message":"Disable WebP image format"},"entrypoints/inspector_main/RenderingOptions.ts | emulateAFocusedPage":{"message":"Emulate a focused page"},"entrypoints/inspector_main/RenderingOptions.ts | emulateAutoDarkMode":{"message":"Enable automatic dark mode"},"entrypoints/inspector_main/RenderingOptions.ts | emulatesAFocusedPage":{"message":"Keep page focused. Commonly used for debugging disappearing elements."},"entrypoints/inspector_main/RenderingOptions.ts | emulatesAutoDarkMode":{"message":"Enables automatic dark mode and sets prefers-color-scheme to dark."},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssColorgamutMediaFeature":{"message":"Forces CSS color-gamut media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssForcedColors":{"message":"Forces CSS forced-colors media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscolorschemeMedia":{"message":"Forces CSS prefers-color-scheme media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscontrastMedia":{"message":"Forces CSS prefers-contrast media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreduceddataMedia":{"message":"Forces CSS prefers-reduced-data media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreducedmotion":{"message":"Forces CSS prefers-reduced-motion media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreducedtransparencyMedia":{"message":"Forces CSS prefers-reduced-transparency media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesMediaTypeForTestingPrint":{"message":"Forces media type for testing print and screen styles"},"entrypoints/inspector_main/RenderingOptions.ts | forcesVisionDeficiencyEmulation":{"message":"Forces vision deficiency emulation"},"entrypoints/inspector_main/RenderingOptions.ts | frameRenderingStats":{"message":"Frame Rendering Stats"},"entrypoints/inspector_main/RenderingOptions.ts | highlightAdFrames":{"message":"Highlight ad frames"},"entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageBlueThat":{"message":"Highlights areas of the page (blue) that were shifted. May not be suitable for people prone to photosensitive epilepsy."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageGreen":{"message":"Highlights areas of the page (green) that need to be repainted. May not be suitable for people prone to photosensitive epilepsy."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsElementsTealThatCan":{"message":"Highlights elements (teal) that can slow down scrolling, including touch & wheel event handlers and other main-thread scrolling situations."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsFramesRedDetectedToBe":{"message":"Highlights frames (red) detected to be ads."},"entrypoints/inspector_main/RenderingOptions.ts | layerBorders":{"message":"Layer borders"},"entrypoints/inspector_main/RenderingOptions.ts | layoutShiftRegions":{"message":"Layout shift regions"},"entrypoints/inspector_main/RenderingOptions.ts | paintFlashing":{"message":"Paint flashing"},"entrypoints/inspector_main/RenderingOptions.ts | plotsFrameThroughputDropped":{"message":"Plots frame throughput, dropped frames distribution, and GPU memory."},"entrypoints/inspector_main/RenderingOptions.ts | requiresAPageReloadToApplyAnd":{"message":"Requires a page reload to apply and disables caching for image requests."},"entrypoints/inspector_main/RenderingOptions.ts | scrollingPerformanceIssues":{"message":"Scrolling performance issues"},"entrypoints/inspector_main/RenderingOptions.ts | showsLayerBordersOrangeoliveAnd":{"message":"Shows layer borders (orange/olive) and tiles (cyan)."},"entrypoints/js_app/js_app.ts | main":{"message":"Main"},"entrypoints/js_app/js_app.ts | networkTitle":{"message":"Scripts"},"entrypoints/js_app/js_app.ts | showNode":{"message":"Show Scripts"},"entrypoints/main/main-meta.ts | auto":{"message":"auto"},"entrypoints/main/main-meta.ts | autoTheme":{"message":"Auto"},"entrypoints/main/main-meta.ts | bottom":{"message":"Bottom"},"entrypoints/main/main-meta.ts | browserLanguage":{"message":"Browser UI language"},"entrypoints/main/main-meta.ts | cancelSearch":{"message":"Cancel search"},"entrypoints/main/main-meta.ts | darkCapital":{"message":"Dark"},"entrypoints/main/main-meta.ts | darkLower":{"message":"dark"},"entrypoints/main/main-meta.ts | devtoolsDefault":{"message":"DevTools (Default)"},"entrypoints/main/main-meta.ts | dockToBottom":{"message":"Dock to bottom"},"entrypoints/main/main-meta.ts | dockToLeft":{"message":"Dock to left"},"entrypoints/main/main-meta.ts | dockToRight":{"message":"Dock to right"},"entrypoints/main/main-meta.ts | dontMatchChromeColorSchemeCommand":{"message":"Don't match Chrome color scheme"},"entrypoints/main/main-meta.ts | enableCtrlShortcutToSwitchPanels":{"message":"Enable Ctrl + 1-9 shortcut to switch panels"},"entrypoints/main/main-meta.ts | enableShortcutToSwitchPanels":{"message":"Enable ⌘ + 1-9 shortcut to switch panels"},"entrypoints/main/main-meta.ts | enableSync":{"message":"Enable settings sync"},"entrypoints/main/main-meta.ts | findNextResult":{"message":"Find next result"},"entrypoints/main/main-meta.ts | findPreviousResult":{"message":"Find previous result"},"entrypoints/main/main-meta.ts | focusDebuggee":{"message":"Focus page"},"entrypoints/main/main-meta.ts | horizontal":{"message":"horizontal"},"entrypoints/main/main-meta.ts | language":{"message":"Language:"},"entrypoints/main/main-meta.ts | left":{"message":"Left"},"entrypoints/main/main-meta.ts | lightCapital":{"message":"Light"},"entrypoints/main/main-meta.ts | lightLower":{"message":"light"},"entrypoints/main/main-meta.ts | matchChromeColorScheme":{"message":"Match Chrome color scheme"},"entrypoints/main/main-meta.ts | matchChromeColorSchemeCommand":{"message":"Match Chrome color scheme"},"entrypoints/main/main-meta.ts | matchChromeColorSchemeDocumentation":{"message":"Match DevTools colors to your customized Chrome theme (when enabled)"},"entrypoints/main/main-meta.ts | nextPanel":{"message":"Next panel"},"entrypoints/main/main-meta.ts | panelLayout":{"message":"Panel layout:"},"entrypoints/main/main-meta.ts | previousPanel":{"message":"Previous panel"},"entrypoints/main/main-meta.ts | reloadDevtools":{"message":"Reload DevTools"},"entrypoints/main/main-meta.ts | resetZoomLevel":{"message":"Reset zoom level"},"entrypoints/main/main-meta.ts | restoreLastDockPosition":{"message":"Restore last dock position"},"entrypoints/main/main-meta.ts | right":{"message":"Right"},"entrypoints/main/main-meta.ts | searchAsYouTypeCommand":{"message":"Enable search as you type"},"entrypoints/main/main-meta.ts | searchAsYouTypeSetting":{"message":"Search as you type"},"entrypoints/main/main-meta.ts | searchInPanel":{"message":"Search in panel"},"entrypoints/main/main-meta.ts | searchOnEnterCommand":{"message":"Disable search as you type (press Enter to search)"},"entrypoints/main/main-meta.ts | switchToBrowserPreferredTheme":{"message":"Switch to browser's preferred theme"},"entrypoints/main/main-meta.ts | switchToDarkTheme":{"message":"Switch to dark theme"},"entrypoints/main/main-meta.ts | switchToLightTheme":{"message":"Switch to light theme"},"entrypoints/main/main-meta.ts | theme":{"message":"Theme:"},"entrypoints/main/main-meta.ts | toggleDrawer":{"message":"Toggle drawer"},"entrypoints/main/main-meta.ts | undocked":{"message":"Undocked"},"entrypoints/main/main-meta.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"entrypoints/main/main-meta.ts | useAutomaticPanelLayout":{"message":"Use automatic panel layout"},"entrypoints/main/main-meta.ts | useHorizontalPanelLayout":{"message":"Use horizontal panel layout"},"entrypoints/main/main-meta.ts | useVerticalPanelLayout":{"message":"Use vertical panel layout"},"entrypoints/main/main-meta.ts | vertical":{"message":"vertical"},"entrypoints/main/main-meta.ts | zoomIn":{"message":"Zoom in"},"entrypoints/main/main-meta.ts | zoomOut":{"message":"Zoom out"},"entrypoints/main/MainImpl.ts | customizeAndControlDevtools":{"message":"Customize and control DevTools"},"entrypoints/main/MainImpl.ts | dockSide":{"message":"Dock side"},"entrypoints/main/MainImpl.ts | dockSideNaviation":{"message":"Use left and right arrow keys to navigate the options"},"entrypoints/main/MainImpl.ts | dockToBottom":{"message":"Dock to bottom"},"entrypoints/main/MainImpl.ts | dockToLeft":{"message":"Dock to left"},"entrypoints/main/MainImpl.ts | dockToRight":{"message":"Dock to right"},"entrypoints/main/MainImpl.ts | focusDebuggee":{"message":"Focus page"},"entrypoints/main/MainImpl.ts | help":{"message":"Help"},"entrypoints/main/MainImpl.ts | hideConsoleDrawer":{"message":"Hide console drawer"},"entrypoints/main/MainImpl.ts | moreTools":{"message":"More tools"},"entrypoints/main/MainImpl.ts | placementOfDevtoolsRelativeToThe":{"message":"Placement of DevTools relative to the page. ({PH1} to restore last position)"},"entrypoints/main/MainImpl.ts | showConsoleDrawer":{"message":"Show console drawer"},"entrypoints/main/MainImpl.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"entrypoints/node_app/node_app.ts | connection":{"message":"Connection"},"entrypoints/node_app/node_app.ts | networkTitle":{"message":"Node"},"entrypoints/node_app/node_app.ts | node":{"message":"node"},"entrypoints/node_app/node_app.ts | showConnection":{"message":"Show Connection"},"entrypoints/node_app/node_app.ts | showNode":{"message":"Show Node"},"entrypoints/node_app/NodeConnectionsPanel.ts | addConnection":{"message":"Add connection"},"entrypoints/node_app/NodeConnectionsPanel.ts | networkAddressEgLocalhost":{"message":"Network address (e.g. localhost:9229)"},"entrypoints/node_app/NodeConnectionsPanel.ts | noConnectionsSpecified":{"message":"No connections specified"},"entrypoints/node_app/NodeConnectionsPanel.ts | nodejsDebuggingGuide":{"message":"Node.js debugging guide"},"entrypoints/node_app/NodeConnectionsPanel.ts | specifyNetworkEndpointAnd":{"message":"Specify network endpoint and DevTools will connect to it automatically. Read {PH1} to learn more."},"entrypoints/node_app/NodeMain.ts | main":{"message":"Main"},"entrypoints/node_app/NodeMain.ts | nodejsS":{"message":"Node.js: {PH1}"},"entrypoints/node_app/NodeMain.ts | NodejsTitleS":{"message":"DevTools - Node.js: {PH1}"},"entrypoints/rn_fusebox/FuseboxExperimentsObserver.ts | reloadRequiredForNetworkPanelMessage":{"message":"The Network panel is now available for dogfooding. Please reload to access it."},"entrypoints/rn_fusebox/FuseboxReconnectDeviceButton.ts | connectionStatusDisconnectedLabel":{"message":"Reconnect DevTools"},"entrypoints/rn_fusebox/FuseboxReconnectDeviceButton.ts | connectionStatusDisconnectedTooltip":{"message":"Debugging connection was closed"},"entrypoints/rn_fusebox/rn_fusebox.ts | networkTitle":{"message":"React Native"},"entrypoints/rn_fusebox/rn_fusebox.ts | sendFeedback":{"message":"[FB-only] Send feedback"},"entrypoints/rn_fusebox/rn_fusebox.ts | showReactNative":{"message":"Show React Native"},"entrypoints/rn_inspector/rn_inspector.ts | networkTitle":{"message":"React Native"},"entrypoints/rn_inspector/rn_inspector.ts | showReactNative":{"message":"Show React Native"},"entrypoints/worker_app/WorkerMain.ts | main":{"message":"Main"},"generated/Deprecation.ts | AuthorizationCoveredByWildcard":{"message":"Authorization will not be covered by the wildcard symbol (*) in CORS Access-Control-Allow-Headers handling."},"generated/Deprecation.ts | CanRequestURLHTTPContainingNewline":{"message":"Resource requests whose URLs contained both removed whitespace \\(n|r|t) characters and less-than characters (<) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources."},"generated/Deprecation.ts | ChromeLoadTimesConnectionInfo":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: Navigation Timing 2."},"generated/Deprecation.ts | ChromeLoadTimesFirstPaintAfterLoadTime":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: Paint Timing."},"generated/Deprecation.ts | ChromeLoadTimesWasAlternateProtocolAvailable":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: nextHopProtocol in Navigation Timing 2."},"generated/Deprecation.ts | CookieWithTruncatingChar":{"message":"Cookies containing a \\(0|r|n) character will be rejected instead of truncated."},"generated/Deprecation.ts | CrossOriginAccessBasedOnDocumentDomain":{"message":"Relaxing the same-origin policy by setting document.domain is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting document.domain."},"generated/Deprecation.ts | CrossOriginWindowAlert":{"message":"Triggering window.alert from cross origin iframes has been deprecated and will be removed in the future."},"generated/Deprecation.ts | CrossOriginWindowConfirm":{"message":"Triggering window.confirm from cross origin iframes has been deprecated and will be removed in the future."},"generated/Deprecation.ts | CSSSelectorInternalMediaControlsOverlayCastButton":{"message":"The disableRemotePlayback attribute should be used in order to disable the default Cast integration instead of using -internal-media-controls-overlay-cast-button selector."},"generated/Deprecation.ts | CSSValueAppearanceSliderVertical":{"message":"CSS appearance value slider-vertical is not standardized and will be removed."},"generated/Deprecation.ts | DataUrlInSvgUse":{"message":"Support for data: URLs in SVGUseElement is deprecated and it will be removed in the future."},"generated/Deprecation.ts | DOMMutationEvents":{"message":"DOM Mutation Events, including DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved, DOMNodeRemovedFromDocument, DOMNodeInsertedIntoDocument, and DOMCharacterDataModified are deprecated (https://w3c.github.io/uievents/#legacy-event-types) and will be removed. Please use MutationObserver instead."},"generated/Deprecation.ts | GeolocationInsecureOrigin":{"message":"getCurrentPosition() and watchPosition() no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."},"generated/Deprecation.ts | GeolocationInsecureOriginDeprecatedNotRemoved":{"message":"getCurrentPosition() and watchPosition() are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."},"generated/Deprecation.ts | GetUserMediaInsecureOrigin":{"message":"getUserMedia() no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."},"generated/Deprecation.ts | H1UserAgentFontSizeInSection":{"message":"Found an

tag within an
,