From 89a39fdd63a1fe315fd2893aebea3580ae09ed7e Mon Sep 17 00:00:00 2001 From: EthanShoeDev <13422990+EthanShoeDev@users.noreply.github.com> Date: Wed, 24 Sep 2025 04:04:13 -0400 Subject: [PATCH 1/2] flake --- .dockerignore | 322 +++++++++++++++++++++++++++++++ .github/actions/setup/action.yml | 21 -- .github/workflows/check.yml | 29 ++- Dockerfile | 20 ++ flake.lock | 12 +- flake.nix | 91 ++++++--- justfile | 10 + package.json | 2 + turbo.jsonc | 10 +- 9 files changed, 455 insertions(+), 62 deletions(-) create mode 100644 .dockerignore delete mode 100644 .github/actions/setup/action.yml create mode 100644 Dockerfile create mode 100644 justfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b77c5f9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,322 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# Dependencies +**/node_modules +**/.pnp +**/.pnp.js + +# Testing +**/coverage + +# Turbo +**/.turbo + +# Vercel +**/.vercel + +# Build Outputs +**/.next/ +**/out/ +**/dist + + +# Debug +**/npm-debug.log* +**/yarn-debug.log* +**/yarn-error.log* + +# Misc +**/.DS_Store +**/*.pem + +**/tmp/ +**/**/tsconfig.tsbuildinfo + +**/dep-log.json + +**/mnt/* +**/*.log +**/.turbo/ +# From apps/mobile/.gitignore +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +apps/mobile/**/node_modules/ + +# Expo +apps/mobile/**/.expo/ +apps/mobile/**/dist/ +apps/mobile/**/web-build/ +apps/mobile/**/expo-env.d.ts + +# Native +apps/mobile/**/.kotlin/ +apps/mobile/**/*.orig.* +apps/mobile/**/*.jks +apps/mobile/**/*.p8 +apps/mobile/**/*.p12 +apps/mobile/**/*.key +apps/mobile/**/*.mobileprovision + +# Metro +apps/mobile/**/.metro-health-check* + +# debug +apps/mobile/**/npm-debug.* +apps/mobile/**/yarn-debug.* +apps/mobile/**/yarn-error.* + +# macOS +apps/mobile/**/.DS_Store +apps/mobile/**/*.pem + +# local env files +apps/mobile/**/.env*.local + +# typescript +apps/mobile/**/*.tsbuildinfo + +# https://docs.expo.dev/workflow/continuous-native-generation/ +apps/mobile/**/android/ +apps/mobile/**/ios/ + +# From apps/web/.gitignore +# build output +apps/web/**/dist/ + +# generated types +apps/web/**/.astro/ + +# dependencies +apps/web/**/node_modules/ + +# logs +apps/web/**/npm-debug.log* +apps/web/**/yarn-debug.log* +apps/web/**/yarn-error.log* +apps/web/**/pnpm-debug.log* + +# environment variables +apps/web/**/.env +apps/web/**/.env.production + +# macOS-specific files +apps/web/**/.DS_Store + +# jetbrains setting folder +apps/web/**/.idea/ + +# From packages/react-native-uniffi-russh/.gitignore +# OSX +# +packages/react-native-uniffi-russh/**/.DS_Store + +# XDE +packages/react-native-uniffi-russh/**/.expo/ + +# VSCode +packages/react-native-uniffi-russh/**/.vscode/ +packages/react-native-uniffi-russh/**/jsconfig.json + +# Xcode +# +packages/react-native-uniffi-russh/**/build/ +packages/react-native-uniffi-russh/**/*.pbxuser +!packages/react-native-uniffi-russh/**/default.pbxuser +packages/react-native-uniffi-russh/**/*.mode1v3 +!packages/react-native-uniffi-russh/**/default.mode1v3 +packages/react-native-uniffi-russh/**/*.mode2v3 +!packages/react-native-uniffi-russh/**/default.mode2v3 +packages/react-native-uniffi-russh/**/*.perspectivev3 +!packages/react-native-uniffi-russh/**/default.perspectivev3 +packages/react-native-uniffi-russh/**/xcuserdata +packages/react-native-uniffi-russh/**/*.xccheckout +packages/react-native-uniffi-russh/**/*.moved-aside +packages/react-native-uniffi-russh/**/DerivedData +packages/react-native-uniffi-russh/**/*.hmap +packages/react-native-uniffi-russh/**/*.ipa +packages/react-native-uniffi-russh/**/*.xcuserstate +packages/react-native-uniffi-russh/**/project.xcworkspace +packages/react-native-uniffi-russh/**/**/.xcode.env.local + +# Android/IJ +# +packages/react-native-uniffi-russh/**/.classpath +packages/react-native-uniffi-russh/**/.cxx +packages/react-native-uniffi-russh/**/.gradle +packages/react-native-uniffi-russh/**/.idea +packages/react-native-uniffi-russh/**/.project +packages/react-native-uniffi-russh/**/.settings +packages/react-native-uniffi-russh/**/local.properties +packages/react-native-uniffi-russh/**/android.iml + +# Cocoapods +# +packages/react-native-uniffi-russh/**/example/ios/Pods + +# Ruby +packages/react-native-uniffi-russh/**/example/vendor/ + +# node.js +# +packages/react-native-uniffi-russh/**/node_modules/ +packages/react-native-uniffi-russh/**/npm-debug.log +packages/react-native-uniffi-russh/**/yarn-debug.log +packages/react-native-uniffi-russh/**/yarn-error.log + +# BUCK +packages/react-native-uniffi-russh/**/buck-out/ +packages/react-native-uniffi-russh/**/\.buckd/ +packages/react-native-uniffi-russh/**/android/app/libs +packages/react-native-uniffi-russh/**/android/keystores/debug.keystore + +# Yarn +packages/react-native-uniffi-russh/**/.yarn/* +!packages/react-native-uniffi-russh/**/.yarn/patches +!packages/react-native-uniffi-russh/**/.yarn/plugins +!packages/react-native-uniffi-russh/**/.yarn/releases +!packages/react-native-uniffi-russh/**/.yarn/sdks +!packages/react-native-uniffi-russh/**/.yarn/versions + +# Expo +packages/react-native-uniffi-russh/**/.expo/ + +# Turborepo +packages/react-native-uniffi-russh/**/.turbo/ + +# generated by bob +packages/react-native-uniffi-russh/lib + +# React Native Codegen +packages/react-native-uniffi-russh/**/ios/generated +packages/react-native-uniffi-russh/**/android/generated + +# React Native Nitro Modules +packages/react-native-uniffi-russh/**/nitrogen/ + +# From uniffi-bindgen-react-native +# rust_modules/ +packages/react-native-uniffi-russh/**/*.a +packages/react-native-uniffi-russh/android +packages/react-native-uniffi-russh/ios +packages/react-native-uniffi-russh/cpp +packages/react-native-uniffi-russh/src/* +packages/react-native-uniffi-russh/**/*.xcframework +packages/react-native-uniffi-russh/**/*.podspec + +!packages/react-native-uniffi-russh/**/src/api.ts +# From packages/react-native-uniffi-russh/rust/.gitignore +# Created by https://www.toptal.com/developers/gitignore/api/rust,xcode,android +# Edit at https://www.toptal.com/developers/gitignore?templates=rust,xcode,android + +### Android ### +# Gradle files +packages/react-native-uniffi-russh/rust/**/.gradle/ +packages/react-native-uniffi-russh/rust/**/build/ + +# Local configuration file (sdk path, etc) +packages/react-native-uniffi-russh/rust/**/local.properties + +# Log/OS Files +packages/react-native-uniffi-russh/rust/**/*.log + +# Android Studio generated files and folders +packages/react-native-uniffi-russh/rust/**/captures/ +packages/react-native-uniffi-russh/rust/**/.externalNativeBuild/ +packages/react-native-uniffi-russh/rust/**/.cxx/ +packages/react-native-uniffi-russh/rust/**/*.apk +packages/react-native-uniffi-russh/rust/**/output.json + +# IntelliJ +packages/react-native-uniffi-russh/rust/**/*.iml +packages/react-native-uniffi-russh/rust/**/.idea/ +packages/react-native-uniffi-russh/rust/**/misc.xml +packages/react-native-uniffi-russh/rust/**/deploymentTargetDropDown.xml +packages/react-native-uniffi-russh/rust/**/render.experimental.xml + +# Keystore files +packages/react-native-uniffi-russh/rust/**/*.jks +packages/react-native-uniffi-russh/rust/**/*.keystore + +# Google Services (e.g. APIs or Firebase) +packages/react-native-uniffi-russh/rust/**/google-services.json + +# Android Profiling +packages/react-native-uniffi-russh/rust/**/*.hprof + +### Android Patch ### +packages/react-native-uniffi-russh/rust/**/gen-external-apklibs + +# Replacement of .externalNativeBuild directories introduced +# with Android Studio 3.5. + +### Rust ### +# Generated by Cargo +# will have compiled files and executables +packages/react-native-uniffi-russh/rust/**/debug/ +packages/react-native-uniffi-russh/rust/**/target/ + +# These are backup files generated by rustfmt +packages/react-native-uniffi-russh/rust/**/**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +packages/react-native-uniffi-russh/rust/**/*.pdb + +### Xcode ### +## User settings +packages/react-native-uniffi-russh/rust/**/xcuserdata/ + +## Xcode 8 and earlier +packages/react-native-uniffi-russh/rust/**/*.xcscmblueprint +packages/react-native-uniffi-russh/rust/**/*.xccheckout + +### Xcode Patch ### +packages/react-native-uniffi-russh/rust/**/*.xcodeproj/* +!packages/react-native-uniffi-russh/rust/**/*.xcodeproj/project.pbxproj +!packages/react-native-uniffi-russh/rust/**/*.xcodeproj/xcshareddata/ +!packages/react-native-uniffi-russh/rust/**/*.xcodeproj/project.xcworkspace/ +!packages/react-native-uniffi-russh/rust/**/*.xcworkspace/contents.xcworkspacedata +packages/react-native-uniffi-russh/rust/*.gcno +packages/react-native-uniffi-russh/rust/**/**/xcshareddata/WorkspaceSettings.xcsettings + +# End of https://www.toptal.com/developers/gitignore/api/rust,xcode,android + +# Swift Package Manager +packages/react-native-uniffi-russh/rust/**/.build/ + +# macOS Ignores +packages/react-native-uniffi-russh/rust/**/.DS_Store + +# Android (cargo-ndk outputs; they end up in the Android source tree) +packages/react-native-uniffi-russh/rust/**/*.so + +# From packages/react-native-uniffi-russh/rust/uniffi-russh/.gitignore +!packages/react-native-uniffi-russh/rust/uniffi-russh/**/.vscode +packages/react-native-uniffi-russh/rust/uniffi-russh/**/mnt/ +# From packages/react-native-xtermjs-webview/.gitignore +# Logs +packages/react-native-xtermjs-webview/**/logs +packages/react-native-xtermjs-webview/**/*.log +packages/react-native-xtermjs-webview/**/npm-debug.log* +packages/react-native-xtermjs-webview/**/yarn-debug.log* +packages/react-native-xtermjs-webview/**/yarn-error.log* +packages/react-native-xtermjs-webview/**/pnpm-debug.log* +packages/react-native-xtermjs-webview/**/lerna-debug.log* + +packages/react-native-xtermjs-webview/**/node_modules +packages/react-native-xtermjs-webview/**/dist +packages/react-native-xtermjs-webview/**/dist-internal +packages/react-native-xtermjs-webview/**/dist-ssr +packages/react-native-xtermjs-webview/**/*.local + +# Editor directories and files +packages/react-native-xtermjs-webview/**/.vscode/* +!packages/react-native-xtermjs-webview/**/.vscode/extensions.json +packages/react-native-xtermjs-webview/**/.idea +packages/react-native-xtermjs-webview/**/.DS_Store +packages/react-native-xtermjs-webview/**/*.suo +packages/react-native-xtermjs-webview/**/*.ntvs* +packages/react-native-xtermjs-webview/**/*.njsproj +packages/react-native-xtermjs-webview/**/*.sln +packages/react-native-xtermjs-webview/**/*.sw? + diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml deleted file mode 100644 index beb57d4..0000000 --- a/.github/actions/setup/action.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Setup -description: Perform standard setup and install dependencies using pnpm. -inputs: - node-version: - description: The version of Node.js to install - required: true - default: 24.5.0 - -runs: - using: composite - steps: - - name: Install pnpm - uses: pnpm/action-setup@v3 - - name: Install node - uses: actions/setup-node@v4 - with: - cache: pnpm - node-version: ${{ inputs.node-version }} - - name: Install dependencies - shell: bash - run: pnpm install diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e294184..3cfb1bf 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -20,8 +20,35 @@ jobs: timeout-minutes: 10 steps: - uses: actions/checkout@v4 + + - name: Cache Nix Store + uses: nix-community/cache-nix-action@main + with: + primary-key: ${{ runner.os }}-nix-${{ hashFiles('flake.lock') }} + + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + + - name: Load devShell environment + uses: nicknovitski/nix-develop@main + with: + arguments: .#android-remote + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - name: Install dependencies - uses: ./.github/actions/setup + run: pnpm install - run: pnpm exec turbo lint:check # test: diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f7f1759 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM nixos/nix:latest + +# Enable flakes and nix-command +RUN mkdir -p /etc/nix && \ + echo 'experimental-features = nix-command flakes' > /etc/nix/nix.conf && \ + echo 'accept-flake-config = true' >> /etc/nix/nix.conf + +WORKDIR /workspace + +COPY flake.nix flake.lock . +RUN nix develop .#android-remote + +# Pre-populate pnpm store from lockfile only (fast, cacheable) +COPY pnpm-lock.yaml ./ +COPY patches/* ./patches/ +RUN nix develop .#android-remote -c pnpm fetch + +# Now copy full source and link from the store (no network) +COPY . . +RUN nix develop .#android-remote -c pnpm install --offline --frozen-lockfile \ No newline at end of file diff --git a/flake.lock b/flake.lock index c6050b5..f5617e6 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ ] }, "locked": { - "lastModified": 1757621816, - "narHash": "sha256-r1cZQcvqcF7YUsw70Gxb2eGzuHl/hQHs01WNNeWklIc=", + "lastModified": 1758658832, + "narHash": "sha256-CWJUlYTqdCuWl6a7IYbrEficoz7gKouD7zzuHnko3sI=", "owner": "tadfisher", "repo": "android-nixpkgs", - "rev": "feba9bc6e12243ba9ee9bdb236866e1209c55a78", + "rev": "ee542f7fee389dca5c04622a8fb33459d825cd08", "type": "github" }, "original": { @@ -63,11 +63,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1757487488, - "narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=", + "lastModified": 1758427187, + "narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ab0f3607a6c7486ea22229b92ed2d355f1482ee0", + "rev": "554be6495561ff07b6c724047bdd7e0716aa7b46", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index c81591d..88fcd76 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ +# nix flake update { - # nix run nixpkgs#alejandra -- format ./flake.nix description = "Expo RN devshells (local emulator / remote AVD)"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -10,6 +10,15 @@ }; }; + nixConfig = { + extra-substituters = [ + "https://android-nixpkgs.cachix.org" + ]; + extra-trusted-public-keys = [ + "android-nixpkgs.cachix.org-1:2lZoPmwoyTVGaNDHqa6A32tdn8Gc0aMWBRrfXN1H3dQ=" + ]; + }; + outputs = { self, nixpkgs, @@ -30,28 +39,56 @@ ); in { devShells = forAllSystems ({pkgs}: let + defaultPkgs = with pkgs; [ + # System + bash + git + pkg-config + jq + # JS + nodejs_22 + turbo + nodePackages.pnpm + yarn + watchman + # Rust + rustc + clippy + rustfmt + cargo + cargo-ndk + # Android + jdk17 + gradle_8 + # Misc + cmake + ninja + just + alejandra + ]; + + defaultAndroidPkgs = sdk: + with sdk; [ + cmdline-tools-latest + platform-tools # adb/fastboot + platforms-android-36 + build-tools-36-0-0 + ndk-27-1-12297006 + ]; + makeAndroidSdk = mode: let androidSdk = pkgs.androidSdk ( sdk: if mode == "full" then - (with sdk; [ - cmdline-tools-latest - platform-tools - emulator - build-tools-36-0-0 - platforms-android-36 - system-images-android-36-0-Baklava-google-apis-playstore-x86-64 - # Add NDK + CMake for native builds - ndk-26-1-10909125 - cmake-3-22-1 - ]) + (with sdk; + [ + emulator + system-images-android-36-0-Baklava-google-apis-playstore-x86-64 + ] + ++ (defaultAndroidPkgs sdk)) else if mode == "remote" - then - (with sdk; [ - cmdline-tools-latest # ← required for a valid SDK - platform-tools # adb/fastboot - ]) + then (with sdk; (defaultAndroidPkgs sdk)) else throw "makeAndroidSdk: unknown mode '${mode}'. Use \"full\" or \"remote\"." ); @@ -64,20 +101,6 @@ fullAndroidSdk = makeAndroidSdk "full"; remoteAndroidSdk = makeAndroidSdk "remote"; - - defaultPkgs = with pkgs; [ - nodejs_22 - nodePackages.pnpm - git - just - jq - watchman - jdk17 - gradle_8 - cmake - ninja - pkg-config - ]; in { # Minimal: only universal dev tools you always want default = pkgs.mkShell { @@ -112,6 +135,9 @@ hash -r echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" + export ANDROID_NDK_ROOT="$ANDROID_SDK_ROOT/ndk/27.1.12297006" + export ANDROID_NDK_HOME="$ANDROID_NDK_ROOT" + export ANDROID_NDK="$ANDROID_NDK_ROOT" which -a adb || true which -a emulator || true which -a avdmanager || true @@ -128,7 +154,7 @@ packages = defaultPkgs ++ [ - remoteAndroidSdk.androidSdk # provides adb/fastboot only + (pkgs.androidSdk (sdk: (defaultAndroidPkgs sdk))) pkgs.scrcpy ]; shellHook = '' @@ -143,5 +169,6 @@ ''; }; }); + formatter = forAllSystems ({pkgs}: pkgs.alejandra); }; } diff --git a/justfile b/justfile new file mode 100644 index 0000000..f290690 --- /dev/null +++ b/justfile @@ -0,0 +1,10 @@ + + +default: + @just --list + +docker-build: + docker build -t fressh . + +docker-run: + docker run -it --rm fressh \ No newline at end of file diff --git a/package.json b/package.json index 60504de..bc453f5 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "scripts": { "fmt:root": "prettier --cache --write .", "fmt:check:root": "prettier --check .", + "fmt:root:nix": "nix fmt flake.nix", + "fmt:check:root:nix": "nix fmt flake.nix -- --c", "syncpack:fix": "syncpack list-mismatches || (syncpack fix-mismatches && pnpm i)", "syncpack:check": "syncpack list-mismatches", "jscpd:check": "cross-env NODE_OPTIONS=--max-old-space-size=8192 jscpd --config .jscpd.json", diff --git a/turbo.jsonc b/turbo.jsonc index e86a534..6cafa32 100644 --- a/turbo.jsonc +++ b/turbo.jsonc @@ -30,8 +30,14 @@ }, "clean": { "cache": false, "dependsOn": ["^clean"] }, // Root tasks overrides - "//#fmt:root": {}, - "//#fmt:check:root": {}, + "//#fmt:root": { + "with": ["fmt:root:nix"], + }, + "//#fmt:root:nix": {}, + "//#fmt:check:root:nix": {}, + "//#fmt:check:root": { + "with": ["fmt:check:root:nix"], + }, "//#lint:root": { "dependsOn": ["fmt:root"], "with": [ From 662d53717758f3c49c69451272886e12a8018ffa Mon Sep 17 00:00:00 2001 From: EthanShoeDev <13422990+EthanShoeDev@users.noreply.github.com> Date: Wed, 24 Sep 2025 17:41:02 -0400 Subject: [PATCH 2/2] flake --- .envrc | 1 + .github/workflows/check.yml | 21 +- .gitignore | 3 +- .vscode/extensions.json | 3 +- CONTRIBUTING.md | 228 +----------- Dockerfile | 27 +- apps/mobile/package.json | 6 +- flake.lock | 39 +++ flake.nix | 238 +++++++------ package.json | 4 +- .../react-native-uniffi-russh/package.json | 2 +- pnpm-lock.yaml | 324 +++++++++--------- turbo.jsonc | 3 +- 13 files changed, 367 insertions(+), 532 deletions(-) create mode 100644 .envrc diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..8392d15 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake \ No newline at end of file diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 3cfb1bf..1ebd435 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -21,18 +21,18 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + - name: Cache Nix Store uses: nix-community/cache-nix-action@main with: primary-key: ${{ runner.os }}-nix-${{ hashFiles('flake.lock') }} - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@main - - name: Load devShell environment uses: nicknovitski/nix-develop@main with: - arguments: .#android-remote + arguments: .#default - name: Get pnpm store directory shell: bash @@ -47,8 +47,21 @@ jobs: restore-keys: | ${{ runner.os }}-pnpm-store- + - name: Cache turbo build setup + uses: actions/cache@v4 + with: + path: .turbo + key: + ${{ runner.os }}-turbo-${{ github.ref_name }}-${{ github.job }}-${{ + github.sha }} + restore-keys: | + ${{ runner.os }}-turbo-${{ github.ref_name }}-${{ github.job }}- + ${{ runner.os }}-turbo-${{ github.ref_name }}- + ${{ runner.os }}-turbo- + - name: Install dependencies run: pnpm install + - run: pnpm exec turbo lint:check # test: diff --git a/.gitignore b/.gitignore index b6cadbb..d18f188 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,5 @@ dep-log.json mnt/* *.log -.turbo/ \ No newline at end of file +.turbo/ +.direnv/ \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 666ab99..1ab2ac5 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -8,6 +8,7 @@ "esbenp.prettier-vscode", "yoavbls.pretty-ts-errors", "ctf0.duplicated-code-new", - "github.vscode-github-actions" + "github.vscode-github-actions", + "mkhl.direnv" ] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8bf9a31..7eb4625 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,229 +1,3 @@ -# Development with Nix (Android/Expo) - -This repo ships a Nix **flake** that provides reproducible dev shells for React -Native + Expo and Android workflows. You don’t need global installs of -Node/Watchman/Android SDK—the shell provides everything. - -## Prereqs - -- Nix with flakes enabled (`nix --version` should work) -- (Optional, recommended) [`direnv`](https://direnv.net/) + - [`nix-direnv`](https://github.com/nix-community/nix-direnv) to auto-enter - shells - -## Shell variants - -We publish three dev shells: - -- **`default`** – minimal JS toolchain you always want (Node, pnpm, watchman, - git, jq, just) -- **`android-local`** – adds a full **Android SDK** + **Emulator** + **API 36 - Google Play x86_64** system image Good when you run the emulator **on your - machine**. -- **`android-remote`** – no emulator/image; adds **adb** + **scrcpy** Good when - you run an emulator **on a remote server** and mirror/control it locally. - -Pick one per your setup. - -## Quick start - -### A) One-off use (no direnv) - -```bash -# Minimal JS shell nix develop .#default -# Local emulator workflow (SDK + emulator + API 36 image) -nix develop .#android-local - -# Remote emulator workflow (adb + scrcpy only) -nix develop .#android-remote -``` - -### B) Auto-enter with direnv (recommended) - -Create `.envrc` at the project root: - -```bash -# choose one: -use flake .#android-local -# use flake .#android-remote -# use flake .#default -``` - -Then: - -```bash -direnv allow -``` - -Any new shell in this folder will enter the selected dev shell automatically. - -## What the shell sets up - -- **Node/PNPM/Watchman/Git/JQ/Just** (all shells) -- **ANDROID_SDK_ROOT / ANDROID_HOME** (in `android-local`; points to the - immutable SDK built by Nix) -- **adb / emulator / sdkmanager / avdmanager** (in `android-local`) -- **adb / scrcpy** (in `android-remote`) - -> Tip: we keep the Android SDK fully **immutable** (declarative). You don’t -> “install packages” via Android Studio; the flake lists exactly which -> components are present. - -## Local emulator workflow (`android-local`) - -1. Enter the shell: - -```bash -nix develop .#android-local -``` - -2. (First time) Create an AVD for API 36 (Google Play, x86_64): - -```bash -avdmanager create avd -n a36-play-x86_64 \ - -k "system-images;android-36;google_apis_playstore;x86_64" -``` - -3. Run the emulator: - -```bash -# GUI window (desktop) -emulator @a36-play-x86_64 - -# Headless (CI/servers): -emulator @a36-play-x86_64 -no-window -no-audio -# If no KVM: add -gpu swiftshader_indirect -``` - -4. Verify `adb` sees it: - -```bash -adb devices -``` - -5. Run your typical Expo/RN commands (Metro, build, etc.) inside the shell. - -> **macOS users**: You can still build Android in this shell. The -> `android-local` shell provides `platform-tools` + SDK commands; the GUI -> Android Studio app is optional. If you prefer to use the macOS GUI emulator -> instead of the Nix one, that’s fine—use `default` or `android-remote` and keep -> your local Android Studio install. - -## Remote emulator workflow (`android-remote`) - -Use this when your emulator runs on a remote Linux box (often headless/KVM). - -1. Enter the shell: - -```bash -nix develop .#android-remote -``` - -2. SSH-tunnel the **remote adb server** back to your machine: - -```bash -ssh -N -L 5037:127.0.0.1:5037 user@remote-host -``` - -3. Point `adb` at the forwarded server and verify: - -```bash -adb -H 127.0.0.1 -P 5037 devices -``` - -4. Mirror/control the remote emulator window locally: - -```bash -scrcpy -``` - -That’s it—everything flows through SSH, and you don’t need any extra ports. - -## Common tasks - -- Check versions: - - ```bash - adb version - sdkmanager --version - avdmanager --help - ``` - -- Upgrade/change Android components Edit the system image or - build-tools/platforms listed in `flake.nix` under the `androidSdk36` - definition, then re-enter the shell. - -- Clean emulators/AVDs AVDs live in `~/.android/avd` by default. You can remove - an AVD with: - - ```bash - avdmanager delete avd -n a36-play-x86_64 - ``` - -## Troubleshooting - -- **Emulator is very slow / won’t start** (Linux): Ensure `/dev/kvm` exists and - your user has permission (`kvm` group). Headless servers without KVM can still - run, but add `-gpu swiftshader_indirect` and expect reduced performance. - -- **`adb` doesn’t see the emulator**: Kill any stray local adb server and retry: - - ```bash - adb kill-server - adb start-server - adb devices - ``` - -- **Gradle/Java mismatch**: If your Android Gradle Plugin complains about Java, - pin the JDK you need in the dev shell and set `JAVA_HOME`. (You can add a JDK - to `defaultPkgs` in the flake if your project requires a specific version.) - -- **Expo/Metro can’t find Android SDK**: Confirm `echo $ANDROID_SDK_ROOT` prints - a path in the `android-local` shell. - -## CI usage - -You can build/test in CI with: - -```bash -nix develop --command bash -lc 'pnpm install && pnpm test' -``` - -or pick a specific shell: - -```bash -nix develop .#android-local --command bash -lc 'just android-build' -``` - ---- - -If you want, I can add a tiny `Justfile` with `just avd-create`, `just avd-run`, -and `just adb-tunnel-remote` helpers so the common commands are one-liners. - -## Enable Nix flakes globally - -If you see errors like: - -``` -error: experimental Nix feature 'nix-command' is disabled; add '--extra-experimental-features nix-command' to enable it -``` - -…it means flakes are not enabled in your Nix configuration yet. - -You can enable them permanently with a one-liner: - -```bash -sudo mkdir -p /etc/nix && echo 'experimental-features = nix-command flakes' | sudo tee /etc/nix/nix.conf -``` - -Then restart your shell (or `nix-daemon` on macOS), and the error goes away. - -From now on you can just run: - -```bash -nix develop .#android-local -``` - -without passing any extra flags. +nix develop .#android-emulator diff --git a/Dockerfile b/Dockerfile index f7f1759..3a2a370 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,33 @@ +# syntax=docker/dockerfile:1.4 FROM nixos/nix:latest -# Enable flakes and nix-command RUN mkdir -p /etc/nix && \ echo 'experimental-features = nix-command flakes' > /etc/nix/nix.conf && \ echo 'accept-flake-config = true' >> /etc/nix/nix.conf WORKDIR /workspace -COPY flake.nix flake.lock . -RUN nix develop .#android-remote +ENV PNPM_STORE_PATH=/pnpm/store + +COPY flake.nix flake.lock ./ +RUN nix develop -c true -# Pre-populate pnpm store from lockfile only (fast, cacheable) COPY pnpm-lock.yaml ./ COPY patches/* ./patches/ -RUN nix develop .#android-remote -c pnpm fetch +RUN --mount=type=cache,target=/pnpm/store,id=fressh-pnpm,sharing=locked \ + nix develop -c pnpm fetch + +COPY package.json pnpm-workspace.yaml ./ +COPY apps/mobile/package.json ./apps/mobile/ +COPY apps/web/package.json ./apps/web/ +COPY packages/react-native-uniffi-russh/package.json ./packages/react-native-uniffi-russh/ +COPY packages/react-native-xtermjs-webview/package.json ./packages/react-native-xtermjs-webview/ +COPY packages/assets/package.json ./packages/assets/ +RUN --mount=type=cache,target=/pnpm/store,id=fressh-pnpm,sharing=locked \ + nix develop -c pnpm install --frozen-lockfile --offline -# Now copy full source and link from the store (no network) COPY . . -RUN nix develop .#android-remote -c pnpm install --offline --frozen-lockfile \ No newline at end of file +RUN --mount=type=cache,target=/pnpm/store,id=fressh-pnpm,sharing=locked \ + nix develop -c pnpm install --frozen-lockfile + +CMD ["nix", "develop"] diff --git a/apps/mobile/package.json b/apps/mobile/package.json index 9106668..aee99ff 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -36,19 +36,19 @@ "@tanstack/react-form": "^1.20.0", "@tanstack/react-query": "^5.89.0", "date-fns": "^4.1.0", - "expo": "54.0.9", + "expo": "54.0.10", "expo-clipboard": "~8.0.7", "expo-constants": "~18.0.9", "expo-crypto": "~15.0.7", "expo-dev-client": "~6.0.12", "expo-document-picker": "~14.0.7", - "expo-file-system": "~19.0.14", + "expo-file-system": "~19.0.15", "expo-font": "~14.0.8", "expo-glass-effect": "^0.1.4", "expo-haptics": "~15.0.7", "expo-image": "~3.0.8", "expo-linking": "~8.0.8", - "expo-router": "6.0.7", + "expo-router": "6.0.8", "expo-secure-store": "~15.0.7", "expo-splash-screen": "~31.0.10", "expo-status-bar": "~3.0.8", diff --git a/flake.lock b/flake.lock index f5617e6..cc89de9 100644 --- a/flake.lock +++ b/flake.lock @@ -43,6 +43,27 @@ "type": "github" } }, + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1758695884, + "narHash": "sha256-rnHjtBRkcwRkrUZxg0RqN1qWTG+QC/gj4vn9uzEkBww=", + "owner": "nix-community", + "repo": "fenix", + "rev": "9cdb79384d02234fb2868eba6c7d390253ef6f83", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -80,9 +101,27 @@ "root": { "inputs": { "android-nixpkgs": "android-nixpkgs", + "fenix": "fenix", "nixpkgs": "nixpkgs" } }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1758620797, + "narHash": "sha256-Ly4rHgrixFMBnkbMursVt74mxnntnE6yVdF5QellJ+A=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "905641f3520230ad6ef421bcf5da9c6b49f2479b", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/flake.nix b/flake.nix index 88fcd76..a706fdf 100644 --- a/flake.nix +++ b/flake.nix @@ -1,21 +1,25 @@ -# nix flake update { description = "Expo RN devshells (local emulator / remote AVD)"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - # Android SDK as packages android-nixpkgs = { url = "github:tadfisher/android-nixpkgs"; inputs.nixpkgs.follows = "nixpkgs"; }; + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; nixConfig = { extra-substituters = [ "https://android-nixpkgs.cachix.org" + "https://nix-community.cachix.org" ]; extra-trusted-public-keys = [ "android-nixpkgs.cachix.org-1:2lZoPmwoyTVGaNDHqa6A32tdn8Gc0aMWBRrfXN1H3dQ=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ]; }; @@ -23,152 +27,140 @@ self, nixpkgs, android-nixpkgs, + fenix, ... }: let systems = ["x86_64-linux" "aarch64-darwin" "x86_64-darwin"]; + + overlays = [ + android-nixpkgs.overlays.default + ]; + forAllSystems = f: nixpkgs.lib.genAttrs systems ( system: f { pkgs = import nixpkgs { - inherit system; - overlays = [android-nixpkgs.overlays.default]; + inherit system overlays; config.allowUnfree = true; # emulator is unfree }; } ); in { - devShells = forAllSystems ({pkgs}: let - defaultPkgs = with pkgs; [ - # System - bash - git - pkg-config - jq - # JS - nodejs_22 - turbo - nodePackages.pnpm - yarn - watchman - # Rust - rustc - clippy - rustfmt - cargo - cargo-ndk - # Android - jdk17 - gradle_8 - # Misc - cmake - ninja - just - alejandra - ]; + devShells = forAllSystems ( + {pkgs}: let + fen = fenix.packages.${pkgs.system}; + rustToolchain = fen.combine [ + (fen.stable.withComponents [ + "cargo" + "clippy" + "rust-src" + "rustc" + "rustfmt" + ]) - defaultAndroidPkgs = sdk: - with sdk; [ - cmdline-tools-latest - platform-tools # adb/fastboot - platforms-android-36 - build-tools-36-0-0 - ndk-27-1-12297006 + fen.targets.aarch64-linux-android.stable.rust-std + fen.targets.armv7-linux-androideabi.stable.rust-std + fen.targets.x86_64-linux-android.stable.rust-std + fen.targets.i686-linux-android.stable.rust-std ]; - makeAndroidSdk = mode: let - androidSdk = pkgs.androidSdk ( - sdk: - if mode == "full" - then - (with sdk; - [ - emulator - system-images-android-36-0-Baklava-google-apis-playstore-x86-64 - ] - ++ (defaultAndroidPkgs sdk)) - else if mode == "remote" - then (with sdk; (defaultAndroidPkgs sdk)) - else throw "makeAndroidSdk: unknown mode '${mode}'. Use \"full\" or \"remote\"." - ); + defaultPkgs = with pkgs; [ + # System + bash + git + pkg-config + jq + # JS + nodejs_22 + turbo + nodePackages.pnpm + yarn + watchman + # Rust + rustToolchain + cargo-ndk + # Android build helpers + jdk17 + gradle_8 + scrcpy + # Misc + cmake + ninja + just + alejandra + clang-tools + ]; - # Standard path from nixpkgs' androidSdk wrapper - # https://ryantm.github.io/nixpkgs/languages-frameworks/android/#notes-on-environment-variables-in-android-projects - sdkRoot = "${androidSdk}/libexec/android-sdk"; - in { - inherit androidSdk sdkRoot; - }; + ndkId = "27-1-12297006"; # nix flake show github:tadfisher/android-nixpkgs | grep ndk + ndkAttr = "ndk-${ndkId}"; + ndkVer = builtins.replaceStrings ["-"] ["."] ndkId; - fullAndroidSdk = makeAndroidSdk "full"; - remoteAndroidSdk = makeAndroidSdk "remote"; - in { - # Minimal: only universal dev tools you always want - default = pkgs.mkShell { - packages = defaultPkgs; - }; + defaultAndroidPkgs = sdk: let + ndkPkg = builtins.getAttr ndkAttr sdk; + in + with sdk; [ + cmdline-tools-latest + platform-tools + platforms-android-36 + build-tools-35-0-0 + cmake-3-22-1 + ndkPkg + ]; - # Local emulator: full SDK + AVD bits for API 36 - android-local = pkgs.mkShell { - packages = defaultPkgs ++ [fullAndroidSdk.androidSdk]; - shellHook = '' - # Resolve SDK root robustly (libexec first, then share) - _CANDS=( - "${fullAndroidSdk.sdkRoot}" - "${fullAndroidSdk.androidSdk}/libexec/android-sdk" - "${fullAndroidSdk.androidSdk}/share/android-sdk" - ) - for p in "''${_CANDS[@]}"; do - if [ -d "$p" ]; then - export ANDROID_SDK_ROOT="$p" - export ANDROID_HOME="$p" - break - fi - done + makeAndroidSdk = mode: let + androidSdk = pkgs.androidSdk ( + sdk: + if mode == "full" + then + (with sdk; + [ + emulator + system-images-android-36-1-google-apis-x86-64 # nix flake show github:tadfisher/android-nixpkgs | grep system-images-android-36 + ] + ++ (defaultAndroidPkgs sdk)) + else if mode == "remote" + then (defaultAndroidPkgs sdk) + else throw "makeAndroidSdk: unknown mode '${mode}'. Use \"full\" or \"remote\"." + ); + sdkRoot = "${androidSdk}/share/android-sdk"; + in {inherit androidSdk sdkRoot;}; - if [ -z "$ANDROID_SDK_ROOT" ]; then - echo "❌ Could not locate ANDROID_SDK_ROOT in Nix store. Check androidSdk composition." - return 1 - fi + fullAndroidSdk = makeAndroidSdk "full"; + remoteAndroidSdk = makeAndroidSdk "remote"; - # Ensure Nix adb/emulator/cmdline-tools win over system tools + commonAndroidInit = sdkRoot: '' + export ANDROID_SDK_ROOT="${sdkRoot}" + export ANDROID_HOME="${sdkRoot}" export PATH="$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$PATH" - hash -r - - echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" - export ANDROID_NDK_ROOT="$ANDROID_SDK_ROOT/ndk/27.1.12297006" + export ANDROID_NDK_ROOT="$ANDROID_SDK_ROOT/ndk/${ndkVer}" export ANDROID_NDK_HOME="$ANDROID_NDK_ROOT" export ANDROID_NDK="$ANDROID_NDK_ROOT" - which -a adb || true - which -a emulator || true - which -a avdmanager || true - - # quick sanity - adb version || true - emulator -version || true - avdmanager --help >/dev/null || true ''; - }; + in { + default = pkgs.mkShell { + packages = defaultPkgs ++ [remoteAndroidSdk.androidSdk]; + shellHook = + commonAndroidInit remoteAndroidSdk.sdkRoot + + '' + echo "You are using the defaul nix dev shell. Noice." + ''; + }; - # Remote AVD workflow: no emulator/image; add scrcpy + adb only - android-remote = pkgs.mkShell { - packages = - defaultPkgs - ++ [ - (pkgs.androidSdk (sdk: (defaultAndroidPkgs sdk))) - pkgs.scrcpy - ]; - shellHook = '' - export ANDROID_SDK_ROOT="${remoteAndroidSdk.sdkRoot}" - export ANDROID_HOME="${remoteAndroidSdk.sdkRoot}" - export PATH="${remoteAndroidSdk.sdkRoot}/platform-tools:$PATH" - hash -r - echo "Using Nix adb from: $ANDROID_SDK_ROOT" - which -a adb - adb version || true - echo "Tip: ssh -N -L 5037:127.0.0.1:5037 user@remote && scrcpy" - ''; - }; - }); - formatter = forAllSystems ({pkgs}: pkgs.alejandra); + android-emulator = pkgs.mkShell { + packages = defaultPkgs ++ [fullAndroidSdk.androidSdk]; + shellHook = + commonAndroidInit fullAndroidSdk.sdkRoot + + '' + echo "You are using the android-emulator nix dev shell. Noice." + ''; + }; + } + ); + + formatter = forAllSystems ( + {pkgs}: + pkgs.alejandra + ); }; } diff --git a/package.json b/package.json index bc453f5..2e79eaf 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fressh", "private": true, "version": "workspace:*", - "packageManager": "pnpm@10.17.0", + "packageManager": "pnpm@10.17.1", "type": "module", "engines": { "node": ">=22" @@ -29,7 +29,7 @@ "prettier": "^3.6.2", "syncpack": "^13.0.4", "tsx": "^4.20.5", - "turbo": "^2.5.6", + "turbo": "^2.5.7", "typescript": "~5.9.2" } } diff --git a/packages/react-native-uniffi-russh/package.json b/packages/react-native-uniffi-russh/package.json index a93b268..1197772 100644 --- a/packages/react-native-uniffi-russh/package.json +++ b/packages/react-native-uniffi-russh/package.json @@ -79,7 +79,7 @@ "react-native": "0.81.4", "react-native-builder-bob": "^0.40.13", "release-it": "^19.0.4", - "turbo": "^2.5.6", + "turbo": "^2.5.7", "typescript": "~5.9.2" }, "dependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff394ec..3c4737b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,8 +38,8 @@ importers: specifier: ^4.20.5 version: 4.20.5 turbo: - specifier: ^2.5.6 - version: 2.5.6 + specifier: ^2.5.7 + version: 2.5.8 typescript: specifier: ~5.9.2 version: 5.9.2 @@ -48,7 +48,7 @@ importers: dependencies: '@expo/vector-icons': specifier: ^15.0.2 - version: 15.0.2(expo-font@14.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + version: 15.0.2(expo-font@14.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) '@fressh/assets': specifier: workspace:* version: link:../../packages/assets @@ -83,59 +83,59 @@ importers: specifier: ^4.1.0 version: 4.1.0 expo: - specifier: 54.0.9 - version: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + specifier: 54.0.10 + version: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-clipboard: specifier: ~8.0.7 - version: 8.0.7(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + version: 8.0.7(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-constants: specifier: ~18.0.9 - version: 18.0.9(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + version: 18.0.9(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) expo-crypto: specifier: ~15.0.7 - version: 15.0.7(expo@54.0.9) + version: 15.0.7(expo@54.0.10) expo-dev-client: specifier: ~6.0.12 - version: 6.0.12(expo@54.0.9) + version: 6.0.12(expo@54.0.10) expo-document-picker: specifier: ~14.0.7 - version: 14.0.7(expo@54.0.9) + version: 14.0.7(expo@54.0.10) expo-file-system: - specifier: ~19.0.14 - version: 19.0.14(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + specifier: ~19.0.15 + version: 19.0.15(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) expo-font: specifier: ~14.0.8 - version: 14.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + version: 14.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-glass-effect: specifier: ^0.1.4 - version: 0.1.4(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + version: 0.1.4(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-haptics: specifier: ~15.0.7 - version: 15.0.7(expo@54.0.9) + version: 15.0.7(expo@54.0.10) expo-image: specifier: ~3.0.8 - version: 3.0.8(expo@54.0.9)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + version: 3.0.8(expo@54.0.10)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-linking: specifier: ~8.0.8 - version: 8.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + version: 8.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-router: - specifier: 6.0.7 - version: 6.0.7(17dc46bbcebbe7410b72c5d7972d3dd3) + specifier: 6.0.8 + version: 6.0.8(d99bdd4c9a621570fefc333ee402cc8d) expo-secure-store: specifier: ~15.0.7 - version: 15.0.7(expo@54.0.9) + version: 15.0.7(expo@54.0.10) expo-splash-screen: specifier: ~31.0.10 - version: 31.0.10(expo@54.0.9) + version: 31.0.10(expo@54.0.10) expo-status-bar: specifier: ~3.0.8 version: 3.0.8(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-symbols: specifier: ~1.0.7 - version: 1.0.7(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + version: 1.0.7(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) expo-system-ui: specifier: ~6.0.7 - version: 6.0.7(expo@54.0.9)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + version: 6.0.7(expo@54.0.10)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) react: specifier: 19.1.0 version: 19.1.0 @@ -355,8 +355,8 @@ importers: specifier: ^19.0.4 version: 19.0.4(@types/node@24.3.0)(magicast@0.3.5) turbo: - specifier: ^2.5.6 - version: 2.5.6 + specifier: ^2.5.7 + version: 2.5.8 typescript: specifier: ~5.9.2 version: 5.9.2 @@ -1490,8 +1490,8 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@expo/cli@54.0.7': - resolution: {integrity: sha512-vpZDbIhN2eyb5u2o2iIL2Glu9+9eIY8U30wqeIxh0BUHLoMxFejvEBfS+90A0PtEHoQ1Zi9QxusK5UuyoEvweg==} + '@expo/cli@54.0.8': + resolution: {integrity: sha512-bRJXvtjgxpyElmJuKLotWyIW5j9a2K3rGUjd2A8LRcFimrZp0wwuKPQjlUK0sFNbU7zHWfxubNq/B+UkUNkCxw==} hasBin: true peerDependencies: expo: '*' @@ -1550,8 +1550,8 @@ packages: '@modelcontextprotocol/sdk': optional: true - '@expo/metro-config@54.0.4': - resolution: {integrity: sha512-syzvZGFGrOSQOWjpo+lHHwMV8XOLK5Ev/E+e0Or3fJvsAi4o7h62qbbPuAicrfFUPxlAm7XBvkWmAwPr2jIAYA==} + '@expo/metro-config@54.0.5': + resolution: {integrity: sha512-Y+oYtLg8b3L4dHFImfu8+yqO+KOcBpLLjxN7wGbs7miP/BjntBQ6tKbPxyKxHz5UUa1s+buBzZlZhsFo9uqKMg==} peerDependencies: expo: '*' peerDependenciesMeta: @@ -1593,8 +1593,8 @@ packages: '@expo/sdk-runtime-versions@1.0.0': resolution: {integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==} - '@expo/server@0.7.4': - resolution: {integrity: sha512-8bfRzL7h1Qgrmf3auR71sPAcAuxnmNkRJs+8enL8vZi2+hihevLhrayDu7P0A/XGEq7wySAGvBBFfIB00Et/AA==} + '@expo/server@0.7.5': + resolution: {integrity: sha512-aNVcerBSJEcUspvXRWChEgFhix1gTNIcgFDevaU/A1+TkfbejNIjGX4rfLEpfyRzzdLIRuOkBNjD+uTYMzohyg==} engines: {node: '>=20.16.0'} '@expo/spawn-async@1.7.2': @@ -3861,8 +3861,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 || ^8.0.0-0 - babel-preset-expo@54.0.2: - resolution: {integrity: sha512-wIlweUhun2+soWQf8slGrURU8ZZYrIqPGuvsvTpm03YE8aCZF9YZe1WvsMJCAlywIhQQ+970wSKzLncfPqK2hQ==} + babel-preset-expo@54.0.3: + resolution: {integrity: sha512-zC6g96Mbf1bofnCI8yI0VKAp8/ER/gpfTsWOpQvStbHU+E4jFZ294n3unW8Hf6nNP4NoeNq9Zc6Prp0vwhxbow==} peerDependencies: '@babel/runtime': ^7.20.0 expo: '*' @@ -5174,8 +5174,8 @@ packages: peerDependencies: expo: '*' - expo-file-system@19.0.14: - resolution: {integrity: sha512-0CA7O5IYhab11TlxQlJAx0Xm9pdkk/zEHNiW+Hh/T4atWi9U/J38CIp7iNYSrBvy9dC3rJbze5D1ANcKKr4mSQ==} + expo-file-system@19.0.15: + resolution: {integrity: sha512-sRLW+3PVJDiuoCE2LuteHhC7OxPjh1cfqLylf1YG1TDEbbQXnzwjfsKeRm6dslEPZLkMWfSLYIrVbnuq5mF7kQ==} peerDependencies: expo: '*' react-native: '*' @@ -5230,18 +5230,18 @@ packages: peerDependencies: expo: '*' - expo-modules-autolinking@3.0.12: - resolution: {integrity: sha512-vZijQgdtmhAhL8H3C0gEjWC0gGBVPVQdVZM92Zqcu2vXjRNDSqIxYXRTS3UT0nZzFltdqmeZAGxvWspxQLYtOQ==} + expo-modules-autolinking@3.0.13: + resolution: {integrity: sha512-58WnM15ESTyT2v93Rba7jplXtGvh5cFbxqUCi2uTSpBf3nndDRItLzBQaoWBzAvNUhpC2j1bye7Dn/E+GJFXmw==} hasBin: true - expo-modules-core@3.0.17: - resolution: {integrity: sha512-P1jZn8yjWi4jSCH+r9A1NykLR+0JtFYprJgYwnZ1EVFRtw+DoMjir0OexM9ehCuBg8sKDCbzCUAgm/JFnpjQww==} + expo-modules-core@3.0.18: + resolution: {integrity: sha512-9JPnjlXEFaq/uACZ7I4wb/RkgPYCEsfG75UKMvfl7P7rkymtpRGYj8/gTL2KId8Xt1fpmIPOF57U8tKamjtjXg==} peerDependencies: react: '*' react-native: '*' - expo-router@6.0.7: - resolution: {integrity: sha512-dP/35aQadCuplEP99CZ0sLrVpnCFCQGnCBtFlI0Tph75PbepdWhI7XC0Vzt7MoNBLF9NW80q5CeZdXTvybc+4w==} + expo-router@6.0.8: + resolution: {integrity: sha512-cx6vFvBrfPNHpNbN2ij2mF5JKE4JXyq+dJVmWNqt7JplA0aohOOKXS/KQ9vQy88HpnrcJMuYqUNHp44aWyce7g==} peerDependencies: '@expo/metro-runtime': ^6.1.2 '@react-navigation/drawer': ^7.5.0 @@ -5311,8 +5311,8 @@ packages: peerDependencies: expo: '*' - expo@54.0.9: - resolution: {integrity: sha512-hCWkBkftiSSoKCV83CKm5oaA613arl9311mjXCDb7Fn/9FzQWh1koL4Q3nflnYiiCRhFQnecbDOa6YxN+GKVEQ==} + expo@54.0.10: + resolution: {integrity: sha512-49+IginEoKC+g125ZlRvUYNl9jKjjHcDiDnQvejNWlMQ0LtcFIWiFad/PLjmi7YqF/0rj9u3FNxqM6jNP16O0w==} hasBin: true peerDependencies: '@expo/dom-webview': '*' @@ -8575,38 +8575,38 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-darwin-64@2.5.6: - resolution: {integrity: sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==} + turbo-darwin-64@2.5.8: + resolution: {integrity: sha512-Dh5bCACiHO8rUXZLpKw+m3FiHtAp2CkanSyJre+SInEvEr5kIxjGvCK/8MFX8SFRjQuhjtvpIvYYZJB4AGCxNQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.5.6: - resolution: {integrity: sha512-LyiG+rD7JhMfYwLqB6k3LZQtYn8CQQUePbpA8mF/hMLPAekXdJo1g0bUPw8RZLwQXUIU/3BU7tXENvhSGz5DPA==} + turbo-darwin-arm64@2.5.8: + resolution: {integrity: sha512-f1H/tQC9px7+hmXn6Kx/w8Jd/FneIUnvLlcI/7RGHunxfOkKJKvsoiNzySkoHQ8uq1pJnhJ0xNGTlYM48ZaJOQ==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.5.6: - resolution: {integrity: sha512-GOcUTT0xiT/pSnHL4YD6Yr3HreUhU8pUcGqcI2ksIF9b2/r/kRHwGFcsHgpG3+vtZF/kwsP0MV8FTlTObxsYIA==} + turbo-linux-64@2.5.8: + resolution: {integrity: sha512-hMyvc7w7yadBlZBGl/bnR6O+dJTx3XkTeyTTH4zEjERO6ChEs0SrN8jTFj1lueNXKIHh1SnALmy6VctKMGnWfw==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.5.6: - resolution: {integrity: sha512-10Tm15bruJEA3m0V7iZcnQBpObGBcOgUcO+sY7/2vk1bweW34LMhkWi8svjV9iDF68+KJDThnYDlYE/bc7/zzQ==} + turbo-linux-arm64@2.5.8: + resolution: {integrity: sha512-LQELGa7bAqV2f+3rTMRPnj5G/OHAe2U+0N9BwsZvfMvHSUbsQ3bBMWdSQaYNicok7wOZcHjz2TkESn1hYK6xIQ==} cpu: [arm64] os: [linux] - turbo-windows-64@2.5.6: - resolution: {integrity: sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==} + turbo-windows-64@2.5.8: + resolution: {integrity: sha512-3YdcaW34TrN1AWwqgYL9gUqmZsMT4T7g8Y5Azz+uwwEJW+4sgcJkIi9pYFyU4ZBSjBvkfuPZkGgfStir5BBDJQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.5.6: - resolution: {integrity: sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q==} + turbo-windows-arm64@2.5.8: + resolution: {integrity: sha512-eFC5XzLmgXJfnAK3UMTmVECCwuBcORrWdewoiXBnUm934DY6QN8YowC/srhNnROMpaKaqNeRpoB5FxCww3eteQ==} cpu: [arm64] os: [win32] - turbo@2.5.6: - resolution: {integrity: sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w==} + turbo@2.5.8: + resolution: {integrity: sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==} hasBin: true type-check@0.4.0: @@ -10613,7 +10613,7 @@ snapshots: '@eslint/core': 0.15.2 levn: 0.4.1 - '@expo/cli@54.0.7(expo-router@6.0.7)(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))': + '@expo/cli@54.0.8(expo-router@6.0.8)(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))': dependencies: '@0no-co/graphql.web': 1.2.0 '@expo/code-signing-certificates': 0.0.5 @@ -10625,13 +10625,13 @@ snapshots: '@expo/json-file': 10.0.7 '@expo/mcp-tunnel': 0.0.7 '@expo/metro': 54.0.0 - '@expo/metro-config': 54.0.4(expo@54.0.9) + '@expo/metro-config': 54.0.5(expo@54.0.10) '@expo/osascript': 2.3.7 '@expo/package-manager': 1.9.8 '@expo/plist': 0.4.7 - '@expo/prebuild-config': 54.0.3(expo@54.0.9) + '@expo/prebuild-config': 54.0.3(expo@54.0.10) '@expo/schema-utils': 0.1.7 - '@expo/server': 0.7.4 + '@expo/server': 0.7.5 '@expo/spawn-async': 1.7.2 '@expo/ws-tunnel': 1.0.6 '@expo/xcpretty': 4.3.2 @@ -10649,7 +10649,7 @@ snapshots: connect: 3.7.0 debug: 4.4.3 env-editor: 0.4.2 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) freeport-async: 2.0.0 getenv: 2.0.0 glob: 10.4.5 @@ -10681,7 +10681,7 @@ snapshots: wrap-ansi: 7.0.0 ws: 8.18.3 optionalDependencies: - expo-router: 6.0.7(17dc46bbcebbe7410b72c5d7972d3dd3) + expo-router: 6.0.8(d99bdd4c9a621570fefc333ee402cc8d) react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) transitivePeerDependencies: - '@modelcontextprotocol/sdk' @@ -10802,7 +10802,7 @@ snapshots: - bufferutil - utf-8-validate - '@expo/metro-config@54.0.4(expo@54.0.9)': + '@expo/metro-config@54.0.5(expo@54.0.10)': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.3 @@ -10826,16 +10826,16 @@ snapshots: postcss: 8.4.49 resolve-from: 5.0.0 optionalDependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@expo/metro-runtime@6.1.1(expo@54.0.9)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)': + '@expo/metro-runtime@6.1.1(expo@54.0.10)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)': dependencies: anser: 1.4.10 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) pretty-format: 29.7.0 react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) @@ -10883,7 +10883,7 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/prebuild-config@54.0.3(expo@54.0.9)': + '@expo/prebuild-config@54.0.3(expo@54.0.10)': dependencies: '@expo/config': 12.0.9 '@expo/config-plugins': 54.0.1 @@ -10892,7 +10892,7 @@ snapshots: '@expo/json-file': 10.0.7 '@react-native/normalize-colors': 0.81.4 debug: 4.4.3 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) resolve-from: 5.0.0 semver: 7.7.2 xml2js: 0.6.0 @@ -10903,7 +10903,7 @@ snapshots: '@expo/sdk-runtime-versions@1.0.0': {} - '@expo/server@0.7.4': + '@expo/server@0.7.5': dependencies: abort-controller: 3.0.0 debug: 4.4.3 @@ -10916,9 +10916,9 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/vector-icons@15.0.2(expo-font@14.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)': + '@expo/vector-icons@15.0.2(expo-font@14.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)': dependencies: - expo-font: 14.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-font: 14.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) @@ -13717,7 +13717,7 @@ snapshots: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.3) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.3) - babel-preset-expo@54.0.2(@babel/core@7.28.3)(@babel/runtime@7.28.3)(expo@54.0.9)(react-refresh@0.14.2): + babel-preset-expo@54.0.3(@babel/core@7.28.3)(@babel/runtime@7.28.3)(expo@54.0.10)(react-refresh@0.14.2): dependencies: '@babel/helper-module-imports': 7.27.1 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) @@ -13744,7 +13744,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.28.3 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -15216,93 +15216,93 @@ snapshots: jest-mock: 30.0.5 jest-util: 30.0.5 - expo-asset@12.0.9(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + expo-asset@12.0.9(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): dependencies: '@expo/image-utils': 0.8.7 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-constants: 18.0.9(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-constants: 18.0.9(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) transitivePeerDependencies: - supports-color - expo-clipboard@8.0.7(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + expo-clipboard@8.0.7(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) - expo-constants@18.0.9(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)): + expo-constants@18.0.9(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)): dependencies: '@expo/config': 12.0.9 '@expo/env': 2.0.7 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) transitivePeerDependencies: - supports-color - expo-crypto@15.0.7(expo@54.0.9): + expo-crypto@15.0.7(expo@54.0.10): dependencies: base64-js: 1.5.1 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-dev-client@6.0.12(expo@54.0.9): + expo-dev-client@6.0.12(expo@54.0.10): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-dev-launcher: 6.0.11(expo@54.0.9) - expo-dev-menu: 7.0.11(expo@54.0.9) - expo-dev-menu-interface: 2.0.0(expo@54.0.9) - expo-manifests: 1.0.8(expo@54.0.9) - expo-updates-interface: 2.0.0(expo@54.0.9) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-dev-launcher: 6.0.11(expo@54.0.10) + expo-dev-menu: 7.0.11(expo@54.0.10) + expo-dev-menu-interface: 2.0.0(expo@54.0.10) + expo-manifests: 1.0.8(expo@54.0.10) + expo-updates-interface: 2.0.0(expo@54.0.10) transitivePeerDependencies: - supports-color - expo-dev-launcher@6.0.11(expo@54.0.9): + expo-dev-launcher@6.0.11(expo@54.0.10): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-dev-menu: 7.0.11(expo@54.0.9) - expo-manifests: 1.0.8(expo@54.0.9) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-dev-menu: 7.0.11(expo@54.0.10) + expo-manifests: 1.0.8(expo@54.0.10) transitivePeerDependencies: - supports-color - expo-dev-menu-interface@2.0.0(expo@54.0.9): + expo-dev-menu-interface@2.0.0(expo@54.0.10): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-dev-menu@7.0.11(expo@54.0.9): + expo-dev-menu@7.0.11(expo@54.0.10): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-dev-menu-interface: 2.0.0(expo@54.0.9) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-dev-menu-interface: 2.0.0(expo@54.0.10) - expo-document-picker@14.0.7(expo@54.0.9): + expo-document-picker@14.0.7(expo@54.0.10): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-file-system@19.0.14(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)): + expo-file-system@19.0.15(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) - expo-font@14.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + expo-font@14.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) fontfaceobserver: 2.3.0 react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) - expo-glass-effect@0.1.4(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + expo-glass-effect@0.1.4(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) - expo-haptics@15.0.7(expo@54.0.9): + expo-haptics@15.0.7(expo@54.0.10): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-image@3.0.8(expo@54.0.9)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + expo-image@3.0.8(expo@54.0.10)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) optionalDependencies: @@ -15310,14 +15310,14 @@ snapshots: expo-json-utils@0.15.0: {} - expo-keep-awake@15.0.7(expo@54.0.9)(react@19.1.0): + expo-keep-awake@15.0.7(expo@54.0.10)(react@19.1.0): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react: 19.1.0 - expo-linking@8.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + expo-linking@8.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): dependencies: - expo-constants: 18.0.9(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + expo-constants: 18.0.9(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) invariant: 2.2.4 react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) @@ -15325,15 +15325,15 @@ snapshots: - expo - supports-color - expo-manifests@1.0.8(expo@54.0.9): + expo-manifests@1.0.8(expo@54.0.10): dependencies: '@expo/config': 12.0.9 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-json-utils: 0.15.0 transitivePeerDependencies: - supports-color - expo-modules-autolinking@3.0.12: + expo-modules-autolinking@3.0.13: dependencies: '@expo/spawn-async': 1.7.2 chalk: 4.1.2 @@ -15342,17 +15342,17 @@ snapshots: require-from-string: 2.0.2 resolve-from: 5.0.0 - expo-modules-core@3.0.17(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + expo-modules-core@3.0.18(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): dependencies: invariant: 2.2.4 react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) - expo-router@6.0.7(17dc46bbcebbe7410b72c5d7972d3dd3): + expo-router@6.0.8(d99bdd4c9a621570fefc333ee402cc8d): dependencies: - '@expo/metro-runtime': 6.1.1(expo@54.0.9)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + '@expo/metro-runtime': 6.1.1(expo@54.0.10)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) '@expo/schema-utils': 0.1.7 - '@expo/server': 0.7.4 + '@expo/server': 0.7.5 '@radix-ui/react-slot': 1.2.0(@types/react@19.1.12)(react@19.1.0) '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-navigation/bottom-tabs': 7.4.7(@react-navigation/native@7.1.17(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) @@ -15361,9 +15361,9 @@ snapshots: client-only: 0.0.1 debug: 4.4.3 escape-string-regexp: 4.0.0 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-constants: 18.0.9(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) - expo-linking: 8.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-constants: 18.0.9(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + expo-linking: 8.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) fast-deep-equal: 3.1.3 invariant: 2.2.4 nanoid: 3.3.11 @@ -15391,14 +15391,14 @@ snapshots: - '@types/react-dom' - supports-color - expo-secure-store@15.0.7(expo@54.0.9): + expo-secure-store@15.0.7(expo@54.0.10): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-splash-screen@31.0.10(expo@54.0.9): + expo-splash-screen@31.0.10(expo@54.0.10): dependencies: - '@expo/prebuild-config': 54.0.3(expo@54.0.9) - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + '@expo/prebuild-config': 54.0.3(expo@54.0.10) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - supports-color @@ -15408,54 +15408,54 @@ snapshots: react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) react-native-is-edge-to-edge: 1.2.1(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-symbols@1.0.7(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)): + expo-symbols@1.0.7(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) sf-symbols-typescript: 2.1.0 - expo-system-ui@6.0.7(expo@54.0.9)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)): + expo-system-ui@6.0.7(expo@54.0.10)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)): dependencies: '@react-native/normalize-colors': 0.81.4 debug: 4.4.1 - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) optionalDependencies: react-native-web: 0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - supports-color - expo-updates-interface@2.0.0(expo@54.0.9): + expo-updates-interface@2.0.0(expo@54.0.10): dependencies: - expo: 54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo: 54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo@54.0.9(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.7)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + expo@54.0.10(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.8)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.28.3 - '@expo/cli': 54.0.7(expo-router@6.0.7)(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + '@expo/cli': 54.0.8(expo-router@6.0.8)(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) '@expo/config': 12.0.9 '@expo/config-plugins': 54.0.1 '@expo/devtools': 0.1.7(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) '@expo/fingerprint': 0.15.1 '@expo/metro': 54.0.0 - '@expo/metro-config': 54.0.4(expo@54.0.9) - '@expo/vector-icons': 15.0.2(expo-font@14.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + '@expo/metro-config': 54.0.5(expo@54.0.10) + '@expo/vector-icons': 15.0.2(expo-font@14.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) '@ungap/structured-clone': 1.3.0 - babel-preset-expo: 54.0.2(@babel/core@7.28.3)(@babel/runtime@7.28.3)(expo@54.0.9)(react-refresh@0.14.2) - expo-asset: 12.0.9(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-constants: 18.0.9(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) - expo-file-system: 19.0.14(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) - expo-font: 14.0.8(expo@54.0.9)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) - expo-keep-awake: 15.0.7(expo@54.0.9)(react@19.1.0) - expo-modules-autolinking: 3.0.12 - expo-modules-core: 3.0.17(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + babel-preset-expo: 54.0.3(@babel/core@7.28.3)(@babel/runtime@7.28.3)(expo@54.0.10)(react-refresh@0.14.2) + expo-asset: 12.0.9(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-constants: 18.0.9(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + expo-file-system: 19.0.15(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)) + expo-font: 14.0.8(expo@54.0.10)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-keep-awake: 15.0.7(expo@54.0.10)(react@19.1.0) + expo-modules-autolinking: 3.0.13 + expo-modules-core: 3.0.18(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) pretty-format: 29.7.0 react: 19.1.0 react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0) react-refresh: 0.14.2 whatwg-url-without-unicode: 8.0.0-3 optionalDependencies: - '@expo/metro-runtime': 6.1.1(expo@54.0.9)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + '@expo/metro-runtime': 6.1.1(expo@54.0.10)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) react-native-webview: 13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@babel/core' @@ -19549,32 +19549,32 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - turbo-darwin-64@2.5.6: + turbo-darwin-64@2.5.8: optional: true - turbo-darwin-arm64@2.5.6: + turbo-darwin-arm64@2.5.8: optional: true - turbo-linux-64@2.5.6: + turbo-linux-64@2.5.8: optional: true - turbo-linux-arm64@2.5.6: + turbo-linux-arm64@2.5.8: optional: true - turbo-windows-64@2.5.6: + turbo-windows-64@2.5.8: optional: true - turbo-windows-arm64@2.5.6: + turbo-windows-arm64@2.5.8: optional: true - turbo@2.5.6: + turbo@2.5.8: optionalDependencies: - turbo-darwin-64: 2.5.6 - turbo-darwin-arm64: 2.5.6 - turbo-linux-64: 2.5.6 - turbo-linux-arm64: 2.5.6 - turbo-windows-64: 2.5.6 - turbo-windows-arm64: 2.5.6 + turbo-darwin-64: 2.5.8 + turbo-darwin-arm64: 2.5.8 + turbo-linux-64: 2.5.8 + turbo-linux-arm64: 2.5.8 + turbo-windows-64: 2.5.8 + turbo-windows-arm64: 2.5.8 type-check@0.4.0: dependencies: diff --git a/turbo.jsonc b/turbo.jsonc index 6cafa32..e0b8a67 100644 --- a/turbo.jsonc +++ b/turbo.jsonc @@ -1,6 +1,7 @@ { "$schema": "https://turbo.build/schema.json", "ui": "tui", + "globalPassThroughEnv": ["NIX_*", "ANDROID_*", "SSL_CERT_FILE"], "tasks": { // Defaults "fmt": { "with": ["//#fmt:root"] }, @@ -31,7 +32,7 @@ "clean": { "cache": false, "dependsOn": ["^clean"] }, // Root tasks overrides "//#fmt:root": { - "with": ["fmt:root:nix"], + "with": ["fmt:root:nix"], }, "//#fmt:root:nix": {}, "//#fmt:check:root:nix": {},