diff --git a/.github/workflows/ci-code-quality.yml b/.github/workflows/ci-code-quality.yml index 0b9e8a5..a4ff164 100644 --- a/.github/workflows/ci-code-quality.yml +++ b/.github/workflows/ci-code-quality.yml @@ -4,7 +4,7 @@ name: 'CI PR Code Quality' on: [pull_request] jobs: code-quality-and-tests: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest timeout-minutes: 14 steps: diff --git a/README.md b/README.md index 79ae18f..3ba6c71 100644 --- a/README.md +++ b/README.md @@ -1,79 +1,83 @@ # React Native Expo Template -This template bootstraps Expo Managed Workflow focused not only on solid project setup but also important app defaults such as Forced and OTA update functionality. - -> To start using it, create a .env file with `APP_ENV=dev`. Install pnpm via ``brew install pnpm`, if not yet installed, and run `pnpm install` to install dependencies. -> Also to use EAS, install `eas-cli` globally (`yarn global add eas-cli`). - -**Major dependencies:** - -- Expo SDK 51 -- React Native 0.74.1 -- React 18.2.0 - **Table of Contents** - [React Native Expo Template](#react-native-expo-template) - - [Important Defaults - SETUP](#important-defaults---setup) - - [Expo Managed Workflow](#expo-managed-workflow) - - [Native Folders](#native-folders) + - [Overview](#overview) + - [Quick Start](#quick-start) + - [Important Defaults - Configuration](#important-defaults---configuration) + - [Expo Development Build](#expo-development-build) - [EAS Build Setup](#eas-build-setup) - [App Environments Setup](#app-environments-setup) - [Babel Plugins](#babel-plugins) - [Debugging - Expo Dev Plugins](#debugging---expo-dev-plugins) - [Linting Tools](#linting-tools) - - [Github Actions](#github-actions) - [Important Defaults - APP](#important-defaults---app) - - [Global State and User Persistance](#global-state-and-user-persistance) + - [Global State and User Persistence](#global-state-and-user-persistence) - [Over-the-Air Updates](#over-the-air-updates) - [Forced Update aka Minimum Version Check](#forced-update-aka-minimum-version-check) - [Offline Check](#offline-check) - [Maximum Font Scaling](#maximum-font-scaling) - [Size Scaling](#size-scaling) - [Other Recommended Solutions](#other-recommended-solutions) - - [Release Process](#release-process) - - [Prerequisites:](#prerequisites) - - [EAS](#eas) - - [GitHub Setup Instructions](#github-setup-instructions) - - [Expo Access Token](#expo-access-token) - - [GitHub Workflow Permissions](#github-workflow-permissions) - - [GitHub Personal Access Token](#github-personal-access-token) - - [Required Permissions Table](#required-permissions-table) - - [Github Deploy Key](#github-deploy-key) - - [EAS BUILD](#eas-build) - - [Credentials](#credentials) - - [Builds and Submission](#builds-and-submission) - - [OTA-UPDATE](#ota-update) - - [Build number:](#build-number) - - [Adding new `ENV` variables:](#adding-new-env-variables) - - [Development Build:](#development-build) - - [Staging Release:](#staging-release) - - [Production Submit:](#production-submit) - - [Example of _ideal_ scenario:](#example-of-ideal-scenario) - - [Hotfix Scenario:](#hotfix-scenario) - - [JIRA Integration](#jira-integration) - - [Slack Integration](#slack-integration) - - [DEV BUILD DISTRIBUTION](#dev-build-distribution) - - [SLACK APP](#slack-app) - - [CLOUDFLARE WORKERS](#cloudflare-workers) - - [EAS SETUP](#eas-setup) - -## Important Defaults - SETUP - -### Expo Managed Workflow - -- The main benefit is better maintainability as most of the native setup is done through `app.config.ts` and community/custom config plugins. Updating Expo SDK mostly assures compatibility with majority of dependencies used, which is a common source of problem when upgrading React Native separately - though [rnx-kit/dep-check](https://microsoft.github.io/rnx-kit/docs/tools/dep-check) can be now used. - -### Native Folders - -- Once you create a development build, in practice iOS and Android folders with native code are not needed anymore and you could delete them, but you would have to delete them after each new local build. For convenience, they are moved to `.gitignore`. -- It is good to remove them **temporarily** from .gitignore when setting up a config plugin and you need to see the native code git changes. -- Also when you need to regenerate the native code because your build is somehow cached, you may remove the folders and run a fresh build, or run `yarn expo prebuild --clean`. + - [Adding new `ENV` variables:](#adding-new-env-variables) + +## Overview + +This template is a starting point for building a React Native app using Expo in STRV. + +It provides a foundation for every stage of the development process: + +πŸ”§ For the project start and initial development: + +- Expo Development build setup +- domain driven folder structure +- Storage service using MMKV +- Font and size scaling utilities + +πŸ“ For keeping the code quality high and enforcing code standards: + +- basic unit test setup +- Linter and formatter setup +- pre push and pre commit hooks + +πŸš€ For shipping and production maintenance: + +- Github Actions for CI/CD +- App config ready for different environments +- Utilities for version check and forced updates in production + +> ⚠️ We don't include any more opinionated solutions such as: +> +> - Styling and theming solution +> - State management library +> - Image loading library +> - E2E testing setup +> You need to decide what is best for your project and add it to the project. But we provide some recommendations in the [Other Recommended Solutions](#other-recommended-solutions) section. + +## Quick Start + +1. Clone the repository +2. Run `pnpm install` to install dependencies +3. copy `.env.example` to `.env` using `cp .env.example .env` +4. run `pnpm ios/android` to start the development server and run the app on your device + +To use the full CI/CD pipeline you also need to: + +1. [Setup EAS and EAS credentials](docs/eas-setup.md) +2. [Setup Github environment](docs/github-setup.md) +3. [Setup Slack app for notifications (optional)](docs/slack-setup.md) +4. [Jira Setup (optional)](docs/jira-setup.md) + +## Important Defaults - Configuration + +### Expo Development Build + +- The main benefit is better maintainability as most of the native setup is done through `app.config.ts` and community/custom config plugins. Updating Expo SDK mostly assures compatibility with majority of dependencies used, which is a common source of problem when upgrading React Native separately. You can use expo doctor to check for any issues with the setup and update the project accordingly. ### EAS Build Setup - EAS helps with building and app submission. It can create and store all important credentials so that we don't have to distribute them among everyone. -- Free tier has only 30 builds per months so we might need the client to order `production` tier for $99 per month. - Default build profiles in `eas.json`: - `dev` - this profile will build an `expo-dev-client`, meaning that after installing the app, one can change non-native code and see changes reflected in the app - `staging` - should be distributed for testing, does not have a dev client, meaning it cannot be manipulated. It builds `com.xxx.xxx.staging` application which can be distributed through a link or a QR code. @@ -94,8 +98,6 @@ This template bootstraps Expo Managed Workflow focused not only on solid project ### Debugging - Expo Dev Plugins -Flipper was removed from React Native, therefore Expo dev plugins are started to fill the gap since SDK 50. All plugins are listed in this [repository](https://github.com/expo/dev-plugins?tab=readme-ov-file#awesome-plugins) - Dev plugins included in the template: - [React Navigation](https://docs.expo.dev/debugging/devtools-plugins/#react-navigation) - to see navigation state, history, and params passed to screens @@ -103,34 +105,20 @@ Dev plugins included in the template: Not included but useful: -- [AsyncStorage](https://github.com/lbaldy/flipper-plugin-async-storage-advanced) - [React Query](https://github.com/bgaleotti/react-query-native-devtools) ### Linting Tools -Typical STRV stack. Quite a few rules overrides in Eslint config. - -- Eslint -- Prettier -- Husky -- Lint Staged - -### Github Actions - -Requires `Expo Access Token` set as Github secret to connect to EAS. - -1. **EAS Update (over-the-air)** - - env values are [prepended](https://docs.expo.dev/eas-update/environment-variables/#setting-and-getting-environment-variables-when-publishing) to the `eas update` command -2. **EAS Build** - - ideally would run tests before submitting an app and have build cache logic +- We are using @strv/eslint-config-react-native config which is an extension of Expo Universe config with couple of extra rule changes we have found useful. +- We are using mostly standard prettier config. +- Husky is used to run linting and formatting before committing and pushing code. +- Lint Staged is used to run linting and formatting before committing. ## Important Defaults - APP -### Global State and User Persistance - -`Zustand` is used for global state as it is simple and does not need an extra provider. The state can be used through a `useRootStore` hook within React render cycle or outside of it with its `useRootStore.getState()` store method. +### Global State and User Persistence -User persistance is setup through `MMKV` which is a **synchronized** and **faster** alternative to `AsyncStorage`. MMKV Storage is provided to Zustand `useRootStore` and `partialize` method defines what data from Zustand store should be persisted (e.g. `accessToken`). Meaning upon user login we just need to update the Zustand store and the persistance is handled for us - no need to persist the user in MMKV separately. The store is divided by slices to distinguish features. +User persistence is setup through `MMKV` which is a **synchronized** and **faster** alternative to `AsyncStorage`. ### Over-the-Air Updates @@ -148,9 +136,8 @@ To deliver the update through `eas update` we need to target the right `channel` ### Forced Update aka Minimum Version Check -**Before going to production** we should have a forced update functionality in place for cases such as when we introduce a major bug or our backend API is not backward compatible. `useStoreUpdate('forced' | 'suggested')` hook compares `minimumSupportedVersion` with `installedAppVersion` from `app.config.ts`. The minimum version should come either from our backend API or third party service such as `Firebase Remote Config` (good experience). If the app is outdated we should show to the user screen/modal/alert that would suggest them to update (redirect to store listing). - -We can also set `suggested` version to signal users that there is a new version available (e.g. in profile) +**Before going to production** we should have a forced update functionality in place for cases such as when we introduce a major bug or our backend API is not backward compatible. `useStoreUpdate()` hook compares `minimumSupportedVersion` or `recommendedVersion` with `installedAppVersion` from `app.config.ts`. The minimum version should come either from some backend API or third party service such as `Firebase Remote Config` (good experience). If the app is outdated we should show to the user screen/modal/alert that would suggest them to update (redirect to store listing). +How such a modal could look like is included in the template. ### Offline Check @@ -170,9 +157,9 @@ To replicate Figma design consistently on majority of mobile screen sizes, we sh - **Styling** - - [Restyle](https://github.com/Shopify/restyle) or [Styled Components](https://github.com/styled-components/styled-components) + - [Restyle](https://github.com/Shopify/restyle), [Unistyles](https://www.unistyl.es/), [Nativewind](https://www.nativewind.dev/) - > Restyle follows a defined theme with strict type safety resulting in consistent and quickly built UI. It is very helpeful when a designer defines majority of text variants which can be plugged into the theme and reused super easily. It has also responsive utilities that can make potential transition to a tablet app easier. Styled components or its variations are known to Web colleagues, so the familiarity may help in transition to React Native. + > Restyle follows a defined theme with strict type safety resulting in consistent and quickly built UI. It is very helpful when a designer defines majority of text variants which can be plugged into the theme and reused super easily. It has also responsive utilities that can make potential transition to a tablet app easier. Unistyles takes a similar approach but is newer and doesn't require special components. Nativewind is a newer library that is based on Tailwind CSS. - **Notifications** @@ -204,157 +191,7 @@ To replicate Figma design consistently on majority of mobile screen sizes, we sh > Ready-to-go solution from RevenueCat, used on Arnold and Showdown projects. -## Release Process - ---- - -### Prerequisites: - -## EAS - -To connect your App Store account, fill in the "submit" object in the eas.json file: - -``` -submit": { - "staging": { - "ios": { - "ascAppId": "ID", - "appleTeamId": "ID" - } - }, - "production": { - "ios": { - "ascAppId": "ID", - "appleTeamId": "ID" - } - } -} -``` - -### GitHub Setup Instructions - -### Expo Access Token - -1. Create a new token in the Expo dashboard. -2. Add the token to the GitHub secrets as `EXPO_TOKEN`. - -### GitHub Workflow Permissions - -1. Go to `Settings` > `Actions` > `General` > `Workflow permissions`. -2. Check `Read and write permissions`. - -### GitHub Personal Access Token - -1. Navigate to your GitHub profile > `Settings` > `Developer settings` > `Personal access tokens` > `Fine-grained tokens`. -2. Click on `Generate a new token`. -3. Select the repository under `STRV's` organization. -4. Set the permissions as shown in the table below. -5. Wait for the approval. -6. Add the token to the GitHub secrets as `GT_PAT`. - -#### Required Permissions Table - -When setting up the Fine-grained Personal Access Token, ensure you select the following permissions: - -| Permission | Access Level | -| --------------- | -------------- | -| Actions | Read and write | -| Commit statuses | Read and write | -| Contents | Read and write | -| Deployments | Read and write | -| Environments | Read and write | -| Merge queues | Read and write | -| Metadata | Read-only | -| Pull requests | Read and write | -| Secrets | Read and write | -| Variables | Read and write | -| Webhooks | Read and write | - -### Github Deploy Key - -This is necessary for release builds to allow Github Actions to bypass branch protection rules. - -1. generate a new SSH key pair on your machine: - -```bash -ssh-keygen -t rsa -b 4096 -C "example@email.com" -``` - -- Follow the steps and save the key pair in the `~/.ssh` directory. -- Be sure not to set a passcode on your key otherwise it will not work. -- This will generate two files: `id_rsa` (private key) and `id_rsa.pub` (public key). - -1. Add the public key to the repository settings: - -- Go to the repository settings > Deploy keys > Add deploy key -- Paste the public key -- Check the `Allow write access` option - -2. Add the private key to the Github secrets: - -- Go to the repository settings > Secrets > Actions > New repository secret -- Name the secret `SSH_PRIVATE_KEY` and paste the private key -- Be sure to paste the entire content of the file, starting with `-----BEGIN OPENSSH PRIVATE KEY-----` and ending with `-----END OPENSSH PRIVATE KEY-----` - -Then when you create rule sets in the branch protection rules, you select the `Deploy keys` option to allow release build action to bypass them and push changelog and updated version directly to main. - -### EAS BUILD - -- Setup your project with your EAS account by running: - ``` - npx eas init - ``` - -### Credentials - -- Set up` App Store Connect API Keys` for `staging` and `production` by running: - ``` - npx eas credentials -p ios - ``` - -### Builds and Submission - -To allow the GitHub Action to conduct builds, you must build the app for the first time using the `EAS` CLI. This will create the necessary credentials and allow the GitHub Action to access them. - -Run the following commands: - -``` -npx eas build --platform ios --profile dev-sim -npx eas build --platform ios --profile dev -npx eas build --platform ios --profile staging --auto-submit -npx eas build --platform ios --profile production --auto-submit -``` - -### OTA-UPDATE - -- Add the Expo URL to the `expoConfig` in` app.config.ts`. - -``` - updates: { - fallbackToCacheTimeout, - url: 'https://u.expo.dev/project-id', - }, -``` - -- Before conducting over-the-air updates, validate that the channels are setup against correct branch (environment). - -``` - npx eas channel:list -``` - -- if not, you can change it by running - -``` - npx eas channel:edit -``` - ---- - -### Build number: - -Build number is stored in GitHub variables as `BUILD_NUMBER`. If it's not present, it creates a new one with version 1. - -### Adding new `ENV` variables: +## Adding new `ENV` variables: **Format**: @@ -372,136 +209,6 @@ Build number is stored in GitHub variables as `BUILD_NUMBER`. If it's not presen > Settings -> Secrets and Variables -> Actions -> Select Variables tab -> New repository variable -### Development Build: - -**Description**: - -- Development are used for local development and testing on Simulator. This is the fastest way to iterate on the app. -- Development build should be created everytime there is a change affecting Native code or when a new feature is added. - -_- note: if you want to test the app on a real device, and your device is not registered in EAS, you can do it by running `npx eas device:create `_ - -**Steps**: - -- Workflow: `Create dev build` -- Build type: `dev`(real device) | `dev-sim`(simulator) -- Platform: `all` | `ios` | `android` - -### Staging Release: - -**Description**: - -- Staging builds are used for testing new features and bug fixes before they are released to production. -- After the staging build is created, the new release is created with the changelogs and it shared via Testflight or Play Store internal testing track. - -**Steps**: - -- Workflow: `Create release` -- Deployment environment: `staging` -- Version bump type: `patch` | `minor` | `major` | `none` -- Action type: `build and submit` | `ota update` -- Platform: `all` | `ios` | `android` - -### Production Submit: - -**Description**: - -- After the staging build is tested and approved, we are ready to submit the build to the stores. - -**Steps**: - -- Workflow: `Production submit` (triggered from the `tag` branch chosen via `Use workflow from` dropdown) -- Platform: `all` | `ios` | `android` - -### Example of _ideal_ scenario: - -Working on a new feature (v. `1.2.1`) - -- **Create dev build** Select `dev` for device build or `dev-sim` for simulator build and `platform` - - This creates a dev build that serves for local development -- After the feature is finished and merged to `main`, we trigger **Create release** and we select -> `staging` platform, version bump type `minor`, and action type will be `build and submit` -- This creates a new build, submits it for testing, and creates a new release `1.3.0` with `changelogs` -- After QA testing, we are ready for production submission via `Production submit` flow. This will create a new build with the version of the selected `tag` branch and submit it to the stores - -### Hotfix Scenario: - -- We found a bug in version `1.3.0` - we create a new branch from the `1.3.0` `tag` branch -- Fix the bug and create a **PR** -- Review the **PR** and then we create a `hotfix` by triggering **Hotfix release**, selecting the current Hotfix branch and selecting the `build type` (either OTA or Normal) -- This creates a new tag `1.3.0-hotfix.1` but no release -- Merge the hotfix branch to `main` - -### JIRA Integration - -- To track the progress of the project on the Jira board, follow the steps below: - -1. Connect the Jira project with the GitHub repository via the `GitHub for Jira` App. -2. Go to `Settings` -> `Features`, scroll to the `Operation` section, and turn on the `Deployments` feature. - -To track progress such as `Builds`, `Releases`, and `Commits`, both branch name and pull request title need to include the Jira ticket number in their titles: - -Branch name example: `feat/ABC-1234-add-new-feature` -PR title example: `feat(ABC-1234): add new feature` - -It is recommended to use the `Squash and merge` option for pull requests. This format is supported by the `release-it` Changelog plugin. - -### Slack Integration - -- **Staging and Production Notifications:** - -1. Open Slack -2. In the left sidebar, click on `... More` and select `Automations` -3. Click on `New Workflow` -4. name it `[App name] [Env] [Release]` -5. Choose `from a webhook` option -6. add data variables for `version` - string and `changelog`(optional) - string -7. add `Messages` step and select the `channel` where you want to send the message -8. Add the message - -Example message: - -``` -Hey @channel, :rocket: - -We’re excited to announce the release of the new EXPO-TEMPLATE app version! - -Latest version: {{version}} -Changelog: https://github.com/strvcom/{repository-name}/releases/tag/v{{version}} ``` -- you must create workflow for both `staging` and `production` environments - -- Copy the `webhook URL` and add it -- for [STAGING](.release-it.json) - `line 34` -- for [PRODUCTION](.github/workflows/production-submit.yml) - `line 64` - -`IN PROGRESS` - -### DEV BUILD DISTRIBUTION - -- the dev distribution builds are triggered by the `Create dev build` workflow -- To distribute the dev builds to among the team members, choose one of the options and follow the steps below: - -### SLACK APP - -- Create a new Slack App on https://api.slack.com/apps -- Select `Incoming Webhooks` and turn it on -- Wait for the approval -- Add `New Webhook to Workspace` and select the channel -- copy the` Webhook URL` - -### CLOUDFLARE WORKERS - -- Go to https://www.cloudflare.com/ -- Create a new Cloudflare Worker -- Copy the worker functionality from the [worker.js](docs/cloudflare-worker.txt) -- replace `SLACK_WEBHOOK_URL` variable with yours -- deploy the worker - -### EAS SETUP - -- create a new webhook via EAS CLI and the worker url `https//your-worker.account-name.workers.dev` - -``` -eas webhook:create ``` diff --git a/app.config.ts b/app.config.ts index 2a71177..e5d031c 100644 --- a/app.config.ts +++ b/app.config.ts @@ -3,7 +3,7 @@ import { ExpoConfig, IOS } from '@expo/config-types' import packageJson from './package.json' -import type { OtaUpdatePriority } from '~/hooks/useOTAUpdate' +import type { OtaUpdatePriority } from '~/features/versionCheck/hooks/useOTAUpdate' import { Environment } from '~/types/env' declare const process: { @@ -35,8 +35,8 @@ const environment = process.env.EXPO_PUBLIC_APP_ENV || 'dev' // your custom fonts const fonts = ['./assets/fonts/Domine-Bold.ttf'] -// prefetched/embedded assets, can be referenced as source='rn_meme' https://docs.expo.dev/versions/latest/sdk/asset/#configurable-properties -const assets = ['./assets/images/rn_meme.jpg'] +// prefetched/embedded assets, can be referenced as source='strv_logo' https://docs.expo.dev/versions/latest/sdk/asset/#configurable-properties +const assets = ['./assets/images/strv_logo.png'] const getEnvironmentInfo = (): { name: ExpoConfig['name'] @@ -83,7 +83,7 @@ const expoConfig: ExpoConfig = { slug: config.appScheme, version, runtimeVersion: { - policy: 'sdkVersion', + policy: 'fingerprint', }, scheme: config.appScheme, orientation: 'portrait', diff --git a/app/(home)/index.tsx b/app/(home)/index.tsx index 3c75167..817a67b 100644 --- a/app/(home)/index.tsx +++ b/app/(home)/index.tsx @@ -1 +1 @@ -export { Dashboard as default } from '~/features/dashboard/screens/DashboardScreen' +export { DashboardScreen as default } from '~/features/dashboard/screens/DashboardScreen' diff --git a/assets/images/rn_meme.jpg b/assets/images/rn_meme.jpg deleted file mode 100644 index 469ceab..0000000 Binary files a/assets/images/rn_meme.jpg and /dev/null differ diff --git a/assets/images/strv_logo.png b/assets/images/strv_logo.png new file mode 100644 index 0000000..a0cea5d Binary files /dev/null and b/assets/images/strv_logo.png differ diff --git a/docs/eas-setup.md b/docs/eas-setup.md new file mode 100644 index 0000000..4982184 --- /dev/null +++ b/docs/eas-setup.md @@ -0,0 +1,63 @@ +# EAS Build Setup + +> ❓ EAS helps with building and app submission. It can create and store all important credentials so that we don't have to distribute them among everyone. + +## eas.json config + +- Default build profiles in `eas.json`: + - `dev` - this profile will build an `expo-dev-client`, meaning that after installing the app, one can change non-native code and see changes reflected in the app + - `staging` - should be distributed for testing, does not have a dev client, meaning it cannot be manipulated. It builds `com.xxx.xxx.staging` application which can be distributed through a link or a QR code. + +> For iOS, we need to add devices for EAS testing (development, staging) via `eas device:create` (creates sharable registration link) and confirm the device has been added. It is good to write down your unique device ID to understand what is your device. + +- `production` - non-distributable build that should be submitted to Play Store and App Store. Can be tested through Play Store internal testing track or Testflight. It builds the official `com.xxx.xxx` package later released to production. + +### EAS account config + +- Setup your project with your EAS account by running: + ``` + npx eas init + ``` + +### Credentials + +- Set up` App Store Connect API Keys` for `staging` and `production` by running: + ``` + npx eas credentials -p ios + ``` + +### Before first build + +To allow the GitHub Action to conduct builds, you must build the app for the first time using the `EAS` CLI. This will create the necessary credentials and allow the GitHub Action to access them. + +Run the following commands: + +``` +npx eas build --platform ios --profile dev-sim +npx eas build --platform ios --profile dev +npx eas build --platform ios --profile staging --auto-submit +npx eas build --platform ios --profile production --auto-submit +``` + +### OTA updates setup + +- Add the Expo URL to the `expoConfig` in` app.config.ts`. + +``` + updates: { + fallbackToCacheTimeout, + url: 'https://u.expo.dev/project-id', + }, +``` + +- Before conducting over-the-air updates, validate that the channels are setup against correct branch (environment). + +``` + npx eas channel:list +``` + +- if not, you can change it by running + +``` + npx eas channel:edit +``` diff --git a/docs/github-actions.md b/docs/github-actions.md new file mode 100644 index 0000000..8a3138a --- /dev/null +++ b/docs/github-actions.md @@ -0,0 +1,67 @@ +# Github Actions + +> ❓ We have found github actions to be the best way to trigger the builds. It does not require any git knowledge to i.e push a tag so almost anyone +> with access can do it. We have created workflows that should work for almost any possible scenario. + +### Development Build: + +**Description**: + +- Development are used for local development and testing on Simulator. This is the fastest way to iterate on the app. +- Development build should be created every time there is a change affecting Native code or when a new feature is added. + +_- note: if you want to test the app on a real device, and your device is not registered in EAS, you can do it by running `npx eas device:create `_ + +**Steps**: + +- Workflow: `Create dev build` +- Build type: `dev`(real device) | `dev-sim`(simulator) +- Platform: `all` | `ios` | `android` + +### Staging Release: + +**Description**: + +- Staging builds are used for testing new features and bug fixes before they are released to production. +- After the staging build is created, the new release is created with the changelogs and it shared via Testflight or Play Store internal testing track. + +**Steps**: + +- Workflow: `Create release` +- Deployment environment: `staging` +- Version bump type: `patch` | `minor` | `major` | `none` +- Action type: `build and submit` | `ota update` +- Platform: `all` | `ios` | `android` + +### Production Submit: + +**Description**: + +- After the staging build is tested and approved, we are ready to submit the build to the stores. + +**Steps**: + +- Workflow: `Production submit` (triggered from the `tag` branch chosen via `Use workflow from` dropdown) +- Platform: `all` | `ios` | `android` + +### Example of _ideal_ scenario: + +Working on a new feature (v. `1.2.1`) + +- **Create dev build** Select `dev` for device build or `dev-sim` for simulator build and `platform` + - This creates a dev build that serves for local development +- After the feature is finished and merged to `main`, we trigger **Create release** and we select -> `staging` platform, version bump type `minor`, and action type will be `build and submit` +- This creates a new build, submits it for testing, and creates a new release `1.3.0` with `changelogs` +- After QA testing, we are ready for production submission via `Production submit` flow. This will create a new build with the version of the selected `tag` branch and submit it to the stores + +### Hotfix Scenario: + +- We found a bug in version `1.3.0` - we create a new branch from the `1.3.0` `tag` branch +- Fix the bug and create a **PR** +- Review the **PR** and then we create a `hotfix` by triggering **Hotfix release**, selecting the current Hotfix branch and selecting the `build type` (either OTA or Normal) +- This creates a new tag `1.3.0-hotfix.1` but no release +- Merge the hotfix branch to `main` + +### Build number: + +Build number is stored in GitHub variables as `BUILD_NUMBER`. If it's not present, it creates a new one with version 1. diff --git a/docs/github-setup.md b/docs/github-setup.md new file mode 100644 index 0000000..178ea2f --- /dev/null +++ b/docs/github-setup.md @@ -0,0 +1,66 @@ +# GitHub Setup Instructions + +> ❓ For our actions to work, we need to setup some things in GitHub. Otherwise these actions won't be able to push changes like a new release tag or a changelog to the repository. + +## Expo Access Token + +1. Create a new token in the Expo dashboard. +2. Add the token to the GitHub secrets as `EXPO_TOKEN`. + +## GitHub Workflow Permissions + +1. Go to `Settings` > `Actions` > `General` > `Workflow permissions`. +2. Check `Read and write permissions`. + +## GitHub Personal Access Token + +1. Navigate to your GitHub profile > `Settings` > `Developer settings` > `Personal access tokens` > `Fine-grained tokens`. +2. Click on `Generate a new token`. +3. Set the permissions as shown in the table below. +4. Add the token to the GitHub secrets as `GT_PAT`. + +#### Required Permissions Table + +When setting up the Fine-grained Personal Access Token, ensure you select the following permissions: + +| Permission | Access Level | +| --------------- | -------------- | +| Actions | Read and write | +| Commit statuses | Read and write | +| Contents | Read and write | +| Deployments | Read and write | +| Environments | Read and write | +| Merge queues | Read and write | +| Metadata | Read-only | +| Pull requests | Read and write | +| Secrets | Read and write | +| Variables | Read and write | +| Webhooks | Read and write | + +## Github Deploy Key + +This is necessary for release builds to allow Github Actions to bypass branch protection rules to push the changelog and updated version directly to main. + +1. generate a new SSH key pair on your machine: + +```bash +ssh-keygen -t rsa -b 4096 -C "example@email.com" +``` + +- Follow the steps and save the key pair in the `~/.ssh` directory. +- Be sure not to set a passcode on your key otherwise it will not work. +- This will generate two files: `id_rsa` (private key) and `id_rsa.pub` (public key). + +1. Add the public key to the repository settings: + +- Go to the repository settings > Deploy keys > Add deploy key +- Paste the public key +- Check the `Allow write access` option + +2. Add the private key to the Github secrets: + +- Go to the repository settings > Secrets > Actions > New repository secret +- Name the secret `SSH_PRIVATE_KEY` and paste the private key +- Be sure to paste the entire content of the file, starting with `-----BEGIN OPENSSH PRIVATE KEY-----` and ending with `-----END OPENSSH PRIVATE KEY-----` + +Then when you create rule sets in the branch protection rules, you select the `Deploy keys` option to allow release build action to bypass them and push changelog and updated version directly to main. diff --git a/docs/jira-setup.md b/docs/jira-setup.md new file mode 100644 index 0000000..83d1f33 --- /dev/null +++ b/docs/jira-setup.md @@ -0,0 +1,13 @@ +### JIRA Integration + +> ❓ To track the progress of the project on the Jira board automatically without the need to move tickets manually. + +1. Connect the Jira project with the GitHub repository via the `GitHub for Jira` App. +2. Go to `Settings` -> `Features`, scroll to the `Operation` section, and turn on the `Deployments` feature. + +To track progress such as `Builds`, `Releases`, and `Commits`, both branch name and pull request title need to include the Jira ticket number in their titles: + +Branch name example: `feat/ABC-1234-add-new-feature` +PR title example: `feat(ABC-1234): add new feature` + +It is recommended to use the `Squash and merge` option for pull requests. This format is supported by the `release-it` Changelog plugin. diff --git a/docs/release-process.md b/docs/release-process.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/slack-setup.md b/docs/slack-setup.md new file mode 100644 index 0000000..d93049f --- /dev/null +++ b/docs/slack-setup.md @@ -0,0 +1,64 @@ +# Slack Setup + +> ❓ Our github actions support several notification types to Slack to notify the team about the build status. + +But there is some additional setup both in Slack and on EAS to make this work. + +- **Staging and Production Notifications:** + +1. Open Slack +2. In the left sidebar, click on `... More` and select `Automations` +3. Click on `New Workflow` +4. name it `[App name] [Env] [Release]` +5. Choose `from a webhook` option +6. add data variables for `version` - string and `changelog`(optional) - string +7. add `Messages` step and select the `channel` where you want to send the message +8. Add the message + +Example message: + +``` +Hey @channel, :rocket: + +We’re excited to announce the release of the new EXPO-TEMPLATE app version! + +Latest version: {{version}} +Changelog: https://github.com/strvcom/{repository-name}/releases/tag/v{{version}} +``` + +- you must create workflow for both `staging` and `production` environments + +- Copy the `webhook URL` and add it +- for [STAGING](.release-it.json) - `line 34` +- for [PRODUCTION](.github/workflows/production-submit.yml) - `line 64` + +**Dev build notifications** + +- the dev distribution builds are triggered by the `Create dev build` workflow +- To distribute the dev builds to among the team members, choose one of the options and follow the steps below: + +### SLACK APP + +- Create a new Slack App on https://api.slack.com/apps +- Select `Incoming Webhooks` and turn it on +- Wait for the approval +- Add `New Webhook to Workspace` and select the channel +- copy the` Webhook URL` + +### CLOUDFLARE WORKERS + +This is necessary to include the QR code to download the app in the notification message. + +- Go to https://www.cloudflare.com/ +- Create a new Cloudflare Worker +- Copy the worker functionality from the [worker.js](docs/cloudflare-worker.txt) +- replace `SLACK_WEBHOOK_URL` variable with yours +- deploy the worker + +### EAS SETUP + +- create a new webhook via EAS CLI and the worker url `https//your-worker.account-name.workers.dev` + +``` +eas webhook:create +``` diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..854fd76 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,11 @@ +module.exports = { + preset: 'jest-expo', + moduleNameMapper: { + '^~/(.*)$': '/src/$1', + '^package.json$': '/package.json', + }, + transformIgnorePatterns: [ + 'node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg)', + ], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], +} diff --git a/package.json b/package.json index f302a3d..c7d424c 100644 --- a/package.json +++ b/package.json @@ -24,34 +24,35 @@ "preinstall": "npx only-allow pnpm" }, "dependencies": { - "@dev-plugins/react-native-mmkv": "^0.0.1", + "@dev-plugins/react-native-mmkv": "^0.2.0", "@react-native-community/netinfo": "11.4.1", - "expo": "^52.0.24", - "expo-build-properties": "~0.13.1", - "expo-constants": "~17.0.3", - "expo-dev-client": "~5.0.8", - "expo-image": "~2.0.3", - "expo-linking": "~7.0.3", - "expo-router": "~4.0.16", - "expo-splash-screen": "~0.29.19", - "expo-status-bar": "~2.0.0", - "expo-system-ui": "~4.0.6", - "expo-updates": "~0.26.11", + "expo": "^52.0.44", + "expo-build-properties": "~0.13.2", + "expo-constants": "~17.0.8", + "expo-dev-client": "~5.0.20", + "expo-image": "~2.0.7", + "expo-linking": "~7.0.5", + "expo-router": "~4.0.20", + "expo-splash-screen": "~0.29.22", + "expo-status-bar": "~2.0.1", + "expo-system-ui": "~4.0.9", + "expo-updates": "~0.27.4", "react": "18.3.1", "react-dom": "18.3.1", - "react-native": "0.76.5", + "react-native": "0.76.9", "react-native-gesture-handler": "~2.20.2", "react-native-mmkv": "^3.2.0", "react-native-reanimated": "~3.16.6", "react-native-safe-area-context": "4.12.0", "react-native-screens": "4.4.0", "react-native-web": "~0.19.13", - "zustand": "^4.5.2" + "semver": "^7.7.1" }, "devDependencies": { "@babel/core": "^7.26.0", "@release-it/conventional-changelog": "^8.0.1", "@strv/eslint-config-react-native": "3.3.3", + "@testing-library/react-hooks": "^8.0.1", "@types/jest": "^29.5.12", "@types/react": "~18.3.18", "babel-plugin-transform-remove-console": "^6.9.4", @@ -61,7 +62,7 @@ "eslint-plugin-prettier": "^5.1.3", "husky": "^9.0.11", "jest": "^29.7.0", - "jest-expo": "^52.0.2", + "jest-expo": "^52.0.6", "lint-staged": "^15.2.2", "prettier": "^3.2.5", "release-it": "^17.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d59a0a..9bfdd2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,44 +8,44 @@ importers: .: dependencies: '@dev-plugins/react-native-mmkv': - specifier: ^0.0.1 - version: 0.0.1(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-mmkv@3.2.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + specifier: ^0.2.0 + version: 0.2.0(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-mmkv@3.2.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) '@react-native-community/netinfo': specifier: 11.4.1 - version: 11.4.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) + version: 11.4.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) expo: - specifier: ^52.0.24 - version: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + specifier: ^52.0.44 + version: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) expo-build-properties: - specifier: ~0.13.1 - version: 0.13.1(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + specifier: ~0.13.2 + version: 0.13.2(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) expo-constants: - specifier: ~17.0.3 - version: 17.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) + specifier: ~17.0.8 + version: 17.0.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) expo-dev-client: - specifier: ~5.0.8 - version: 5.0.8(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + specifier: ~5.0.20 + version: 5.0.20(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) expo-image: - specifier: ~2.0.3 - version: 2.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + specifier: ~2.0.7 + version: 2.0.7(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) expo-linking: - specifier: ~7.0.3 - version: 7.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + specifier: ~7.0.5 + version: 7.0.5(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) expo-router: - specifier: ~4.0.16 - version: 4.0.16(53mxfbsp7mgsg6qridtbs27zrq) + specifier: ~4.0.20 + version: 4.0.20(xuhaadxw236jaxicigy2i7zuye) expo-splash-screen: - specifier: ~0.29.19 - version: 0.29.19(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + specifier: ~0.29.22 + version: 0.29.22(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) expo-status-bar: - specifier: ~2.0.0 - version: 2.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + specifier: ~2.0.1 + version: 2.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) expo-system-ui: - specifier: ~4.0.6 - version: 4.0.6(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) + specifier: ~4.0.9 + version: 4.0.9(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) expo-updates: - specifier: ~0.26.11 - version: 0.26.11(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + specifier: ~0.27.4 + version: 0.27.4(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -53,29 +53,29 @@ importers: specifier: 18.3.1 version: 18.3.1(react@18.3.1) react-native: - specifier: 0.76.5 - version: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + specifier: 0.76.9 + version: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) react-native-gesture-handler: specifier: ~2.20.2 - version: 2.20.2(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + version: 2.20.2(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react-native-mmkv: specifier: ^3.2.0 - version: 3.2.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + version: 3.2.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react-native-reanimated: specifier: ~3.16.6 - version: 3.16.6(@babel/core@7.26.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + version: 3.16.6(@babel/core@7.26.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react-native-safe-area-context: specifier: 4.12.0 - version: 4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + version: 4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react-native-screens: specifier: 4.4.0 - version: 4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + version: 4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react-native-web: specifier: ~0.19.13 version: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - zustand: - specifier: ^4.5.2 - version: 4.5.2(@types/react@18.3.18)(react@18.3.1) + semver: + specifier: ^7.7.1 + version: 7.7.1 devDependencies: '@babel/core': specifier: ^7.26.0 @@ -86,6 +86,9 @@ importers: '@strv/eslint-config-react-native': specifier: 3.3.3 version: 3.3.3(@types/eslint@9.6.1)(@typescript-eslint/parser@6.11.0(eslint@8.49.0)(typescript@5.3.3))(eslint@8.49.0)(prettier@3.2.5)(typescript@5.3.3) + '@testing-library/react-hooks': + specifier: ^8.0.1 + version: 8.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -114,8 +117,8 @@ importers: specifier: ^29.7.0 version: 29.7.0(@types/node@18.19.33) jest-expo: - specifier: ^52.0.2 - version: 52.0.2(@babel/core@7.26.0)(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(jest@29.7.0(@types/node@18.19.33))(react-dom@18.3.1(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(webpack@5.97.1) + specifier: ^52.0.6 + version: 52.0.6(@babel/core@7.26.0)(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(jest@29.7.0(@types/node@18.19.33))(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(webpack@5.97.1) lint-staged: specifier: ^15.2.2 version: 15.2.2 @@ -195,13 +198,6 @@ packages: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 - '@babel/generator@7.24.5': - resolution: - { - integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==, - } - engines: { node: '>=6.9.0' } - '@babel/generator@7.26.3': resolution: { @@ -277,13 +273,6 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/helper-module-imports@7.24.3': - resolution: - { - integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==, - } - engines: { node: '>=6.9.0' } - '@babel/helper-module-imports@7.25.9': resolution: { @@ -346,13 +335,6 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/helper-string-parser@7.24.1': - resolution: - { - integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==, - } - engines: { node: '>=6.9.0' } - '@babel/helper-string-parser@7.25.9': resolution: { @@ -360,13 +342,6 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/helper-validator-identifier@7.24.5': - resolution: - { - integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==, - } - engines: { node: '>=6.9.0' } - '@babel/helper-validator-identifier@7.25.9': resolution: { @@ -402,14 +377,6 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/parser@7.24.5': - resolution: - { - integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==, - } - engines: { node: '>=6.0.0' } - hasBin: true - '@babel/parser@7.26.3': resolution: { @@ -578,15 +545,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-flow@7.22.5': - resolution: - { - integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==, - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-flow@7.26.0': resolution: { @@ -993,15 +951,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.5': - resolution: - { - integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==, - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.25.9': resolution: { @@ -1038,15 +987,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.24.5': - resolution: - { - integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==, - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.25.9': resolution: { @@ -1083,15 +1023,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.24.1': - resolution: - { - integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==, - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.25.9': resolution: { @@ -1128,15 +1059,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.23.4': - resolution: - { - integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==, - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.25.9': resolution: { @@ -1360,13 +1282,6 @@ packages: } engines: { node: '>=6.9.0' } - '@babel/types@7.24.5': - resolution: - { - integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==, - } - engines: { node: '>=6.9.0' } - '@babel/types@7.26.3': resolution: { @@ -1380,14 +1295,14 @@ packages: integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, } - '@dev-plugins/react-native-mmkv@0.0.1': + '@dev-plugins/react-native-mmkv@0.2.0': resolution: { - integrity: sha512-eogoKAd9M/SyJcKZM+/oi2cxt/QZrCp88VgJc2pen8eRwSvKrabBrWyomryGVH69Q2y4/x6U4R02HEAdmUNsGQ==, + integrity: sha512-Dt5i1uZVQ/aAnBPiHJEbdxuh9Dnt6hPmkO7iVM5VVMIxBIvE81ReIRI+fQOO4dz7b+X2gBviuVTjPTppkvJZWQ==, } peerDependencies: - expo: '*' - react-native-mmkv: ^2.0.0 + expo: ^52.0.41 + react-native-mmkv: '*' '@egjs/hammerjs@2.0.17': resolution: @@ -1433,10 +1348,10 @@ packages: } engines: { '0': node >=0.10.0 } - '@expo/cli@0.22.8': + '@expo/cli@0.22.24': resolution: { - integrity: sha512-MpHrfPKcHL+b1wwx+WiniEL5n33tl964tN8EW1K4okW3/tAPgbu3R00NZs6OExH9PZGQP8OKhCXhZttbK2jUnA==, + integrity: sha512-lhdenxBC8/x/vL39j79eXE09mOaqNNLmiSDdY/PblnI+UNzGgsQ48hBTYa/MQhd0ioXXVKurZL2941dLKwcxJw==, } hasBin: true @@ -1446,22 +1361,22 @@ packages: integrity: sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==, } - '@expo/config-plugins@9.0.13': + '@expo/config-plugins@9.0.17': resolution: { - integrity: sha512-9mSjuMoCijA0O4JONJwWXg+xaD4tVeVv7pXWQovnQGxorgMNgygOGEzGi9GXFMki8FJ1Zlt2gyXrcPFXiId7Hw==, + integrity: sha512-m24F1COquwOm7PBl5wRbkT9P9DviCXe0D7S7nQsolfbhdCWuvMkfXeoWmgjtdhy7sDlOyIgBrAdnB6MfsWKqIg==, } - '@expo/config-types@52.0.2': + '@expo/config-types@52.0.5': resolution: { - integrity: sha512-4hYwnaCxOLlXXF1TE17RY+GU1CyBqzRx7s13VUDhU1PQ8Zr9/kzGoJI0McmfayncO9RIeSqeDWO6dELZWk/0uw==, + integrity: sha512-AMDeuDLHXXqd8W+0zSjIt7f37vUd/BP8p43k68NHpyAvQO+z8mbQZm3cNQVAMySeayK2XoPigAFB1JF2NFajaA==, } - '@expo/config@10.0.7': + '@expo/config@10.0.11': resolution: { - integrity: sha512-fS9xuxH3U9tuiXofwxrmsan8TfzlDXgPiX38SDMkq/AQctmRtWllD8GNHRIk9Bdz3vODeBv7vRVGKXPBYG72cQ==, + integrity: sha512-nociJ4zr/NmbVfMNe9j/+zRlt7wz/siISu7PjdWE4WE+elEGxWWxsGzltdJG0llzrM+khx8qUiFK5aiVcdMBww==, } '@expo/devcert@1.1.2': @@ -1470,68 +1385,68 @@ packages: integrity: sha512-FyWghLu7rUaZEZSTLt/XNRukm0c9GFfwP0iFaswoDWpV6alvVg+zRAfCLdIVQEz1SVcQ3zo1hMZFDrnKGvkCuQ==, } - '@expo/env@0.4.0': + '@expo/env@0.4.2': resolution: { - integrity: sha512-g2JYFqck3xKIwJyK+8LxZ2ENZPWtRgjFWpeht9abnKgzXVXBeSNECFBkg+WQjQocSIdxXhEWM6hz4ZAe7Tc4ng==, + integrity: sha512-TgbCgvSk0Kq0e2fLoqHwEBL4M0ztFjnBEz0YCDm5boc1nvkV1VMuIMteVdeBwnTh8Z0oPJTwHCD49vhMEt1I6A==, } - '@expo/fingerprint@0.11.6': + '@expo/fingerprint@0.11.11': resolution: { - integrity: sha512-hlVIfMEJYZIqIFMjeGRN5GhK/h6vJ3M4QVc1ZD8F0Bh7gMeI+jZkEyZdL5XT29jergQrksP638e2qFwgrGTw/w==, + integrity: sha512-gNyn1KnAOpEa8gSNsYqXMTcq0fSwqU/vit6fP5863vLSKxHm/dNt/gm/uZJxrRZxKq71KUJWF6I7d3z8qIfq5g==, } hasBin: true - '@expo/image-utils@0.6.3': + '@expo/image-utils@0.6.5': resolution: { - integrity: sha512-v/JbCKBrHeudxn1gN1TgfPE/pWJSlLPrl29uXJBgrJFQVkViQvUHQNDhaS+UEa9wYI5HHh7XYmtzAehyG4L+GA==, + integrity: sha512-RsS/1CwJYzccvlprYktD42KjyfWZECH6PPIEowvoSmXfGLfdViwcUEI4RvBfKX5Jli6P67H+6YmHvPTbGOboew==, } - '@expo/json-file@9.0.0': + '@expo/json-file@9.0.2': resolution: { - integrity: sha512-M+55xFVrFzDcgMDf+52lPDLjKB5xwRfStWlv/b/Vu2OLgxGZLWpxoPYjlRoHqxjPbCQIi2ZCbobK+0KuNhsELg==, + integrity: sha512-yAznIUrybOIWp3Uax7yRflB0xsEpvIwIEqIjao9SGi2Gaa+N0OamWfe0fnXBSWF+2zzF4VvqwT4W5zwelchfgw==, } - '@expo/metro-config@0.19.8': + '@expo/metro-config@0.19.12': resolution: { - integrity: sha512-dVAOetouQYuOTEJ2zR0OTLNPOH6zPkeEt5fY53TK0Wxi1QmtsmH6vEWg05U4zkSJ6f1aXmQ0Za77R8QxuukESA==, + integrity: sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==, } - '@expo/metro-runtime@4.0.0': + '@expo/metro-runtime@4.0.1': resolution: { - integrity: sha512-+zgCyuXqIzgZVN8h0g36sursGXBy3xqtJW9han7t/iR2HTTrrbEoep5ftW1a27bdSINU96ng+rSsPLbyHYeBvw==, + integrity: sha512-CRpbLvdJ1T42S+lrYa1iZp1KfDeBp4oeZOK3hdpiS5n0vR0nhD6sC1gGF0sTboCTp64tLteikz5Y3j53dvgOIw==, } peerDependencies: react-native: '*' - '@expo/osascript@2.0.33': + '@expo/osascript@2.1.6': resolution: { - integrity: sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==, + integrity: sha512-SbMp4BUwDAKiFF4zZEJf32rRYMeNnLK9u4FaPo0lQRer60F+SKd20NTSys0wgssiVeQyQz2OhGLRx3cxYowAGw==, } engines: { node: '>=12' } - '@expo/package-manager@1.7.0': + '@expo/package-manager@1.7.2': resolution: { - integrity: sha512-yWn5TIjd42wLHZjNtdZkvCkcxqUGxlI4YHb+bQmgm3tWZ8aBHnLhPb0rgU8+hVHCofmRvVUXfVZv8Uh+kkLXgw==, + integrity: sha512-wT/qh9ebNjl6xr00bYkSh93b6E/78J3JPlT6WzGbxbsnv5FIZKB/nr522oWqVe1E+ML7BpXs8WugErWDN9kOFg==, } - '@expo/plist@0.2.0': + '@expo/plist@0.2.2': resolution: { - integrity: sha512-F/IZJQaf8OIVnVA6XWUeMPC3OH6MV00Wxf0WC0JhTQht2QgjyHUa3U5Gs3vRtDq8tXNsZneOQRDVwpaOnd4zTQ==, + integrity: sha512-ZZGvTO6vEWq02UAPs3LIdja+HRO18+LRI5QuDl6Hs3Ps7KX7xU6Y6kjahWKY37Rx2YjNpX07dGpBFzzC+vKa2g==, } - '@expo/prebuild-config@8.0.24': + '@expo/prebuild-config@8.0.31': resolution: { - integrity: sha512-zxbKW+oHn0/QwKaShjbxD7tv+5WtK2+C5ZJTHztyXJXrBP6BOL5dK4lP2djQVzpHYU1p6ZzKFvp9d1bW/+S32Q==, + integrity: sha512-YTuS5ic9KolD/WA3GqgLcZytHQU1dpitlZ/cbDq8ZqkY+1ae5YWX+GkYEZf2VyECPaWnHYuDGddaTQVw5miTRg==, } '@expo/rudder-sdk-node@1.1.1': @@ -1547,10 +1462,10 @@ packages: integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==, } - '@expo/server@0.5.0': + '@expo/server@0.5.3': resolution: { - integrity: sha512-bfo5udr9C2feCn+vGQ9LvjRD2zFjMyBEnMWDZLYr5D8eCjqLjazGBpPKOVjWOhFR2SshKA3hUBkWEYrVpun0NQ==, + integrity: sha512-WXsWzeBs5v/h0PUfHyNLLz07rwwO5myQ1A5DGYewyyGLmsyl61yVCe8AgAlp1wkiMsqhj2hZqI2u3K10QnCMrQ==, } '@expo/spawn-async@1.7.2': @@ -1566,6 +1481,12 @@ packages: integrity: sha512-70LpmXQu4xa8cMxjp1fydgRPsalefnHaXLzIwaHMEzcZhnyjw2acZz8azRrZOslPVAWlxItOa2Dd7WtD/kI+CA==, } + '@expo/ws-tunnel@1.0.6': + resolution: + { + integrity: sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==, + } + '@expo/xcpretty@4.3.1': resolution: { @@ -1751,13 +1672,6 @@ packages: } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - '@jest/types@26.6.2': - resolution: - { - integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==, - } - engines: { node: '>= 10.14.2' } - '@jest/types@29.6.3': resolution: { @@ -1793,12 +1707,6 @@ packages: } engines: { node: '>=6.0.0' } - '@jridgewell/source-map@0.3.2': - resolution: - { - integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==, - } - '@jridgewell/source-map@0.3.6': resolution: { @@ -1990,24 +1898,6 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - '@react-native-community/cli-debugger-ui@13.6.6': - resolution: - { - integrity: sha512-Vv9u6eS4vKSDAvdhA0OiQHoA7y39fiPIgJ6biT32tN4avHDtxlc6TWZGiqv7g98SBvDWvoVAmdPLcRf3kU+c8g==, - } - - '@react-native-community/cli-server-api@13.6.6': - resolution: - { - integrity: sha512-ZtCXxoFlM7oDv3iZ3wsrT3SamhtUJuIkX2WePLPlN5bcbq7zimbPm2lHyicNJtpcGQ5ymsgpUWPCNZsWQhXBqQ==, - } - - '@react-native-community/cli-tools@13.6.6': - resolution: - { - integrity: sha512-ptOnn4AJczY5njvbdK91k4hcYazDnGtEPrqIwEI+k/CTBHNdb27Rsm2OZ7ye6f7otLBqF8gj/hK6QzJs8CEMgw==, - } - '@react-native-community/netinfo@11.4.1': resolution: { @@ -2016,82 +1906,82 @@ packages: peerDependencies: react-native: '>=0.59' - '@react-native/assets-registry@0.76.5': + '@react-native/assets-registry@0.76.9': resolution: { - integrity: sha512-MN5dasWo37MirVcKWuysRkRr4BjNc81SXwUtJYstwbn8oEkfnwR9DaqdDTo/hHOnTdhafffLIa2xOOHcjDIGEw==, + integrity: sha512-pN0Ws5xsjWOZ8P37efh0jqHHQmq+oNGKT4AyAoKRpxBDDDmlAmpaYjer9Qz7PpDKF+IUyRjF/+rBsM50a8JcUg==, } engines: { node: '>=18' } - '@react-native/babel-plugin-codegen@0.76.5': + '@react-native/babel-plugin-codegen@0.76.9': resolution: { - integrity: sha512-xe7HSQGop4bnOLMaXt0aU+rIatMNEQbz242SDl8V9vx5oOTI0VbZV9yLy6yBc6poUlYbcboF20YVjoRsxX4yww==, + integrity: sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==, } engines: { node: '>=18' } - '@react-native/babel-preset@0.76.5': + '@react-native/babel-preset@0.76.9': resolution: { - integrity: sha512-1Nu5Um4EogOdppBLI4pfupkteTjWfmI0hqW8ezWTg7Bezw0FtBj8yS8UYVd3wTnDFT9A5mA2VNoNUqomJnvj2A==, + integrity: sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==, } engines: { node: '>=18' } peerDependencies: '@babel/core': '*' - '@react-native/codegen@0.76.5': + '@react-native/codegen@0.76.9': resolution: { - integrity: sha512-FoZ9VRQ5MpgtDAnVo1rT9nNRfjnWpE40o1GeJSDlpUMttd36bVXvsDm8W/NhX8BKTWXSX+CPQJsRcvN1UPYGKg==, + integrity: sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==, } engines: { node: '>=18' } peerDependencies: '@babel/preset-env': ^7.1.6 - '@react-native/community-cli-plugin@0.76.5': + '@react-native/community-cli-plugin@0.76.9': resolution: { - integrity: sha512-3MKMnlU0cZOWlMhz5UG6WqACJiWUrE3XwBEumzbMmZw3Iw3h+fIsn+7kLLE5EhzqLt0hg5Y4cgYFi4kOaNgq+g==, + integrity: sha512-08jx8ixCjjd4jNQwNpP8yqrjrDctN2qvPPlf6ebz1OJQk8e1sbUl3wVn1zhhMvWrYcaraDnatPb5uCPq+dn3NQ==, } engines: { node: '>=18' } peerDependencies: - '@react-native-community/cli-server-api': '*' + '@react-native-community/cli': '*' peerDependenciesMeta: - '@react-native-community/cli-server-api': + '@react-native-community/cli': optional: true - '@react-native/debugger-frontend@0.76.5': + '@react-native/debugger-frontend@0.76.9': resolution: { - integrity: sha512-5gtsLfBaSoa9WP8ToDb/8NnDBLZjv4sybQQj7rDKytKOdsXm3Pr2y4D7x7GQQtP1ZQRqzU0X0OZrhRz9xNnOqA==, + integrity: sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==, } engines: { node: '>=18' } - '@react-native/dev-middleware@0.76.5': + '@react-native/dev-middleware@0.76.9': resolution: { - integrity: sha512-f8eimsxpkvMgJia7POKoUu9uqjGF6KgkxX4zqr/a6eoR1qdEAWUd6PonSAqtag3PAqvEaJpB99gLH2ZJI1nDGg==, + integrity: sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==, } engines: { node: '>=18' } - '@react-native/gradle-plugin@0.76.5': + '@react-native/gradle-plugin@0.76.9': resolution: { - integrity: sha512-7KSyD0g0KhbngITduC8OABn0MAlJfwjIdze7nA4Oe1q3R7qmAv+wQzW+UEXvPah8m1WqFjYTkQwz/4mK3XrQGw==, + integrity: sha512-uGzp3dL4GfNDz+jOb8Nik1Vrfq1LHm0zESizrGhHACFiFlUSflVAnWuUAjlZlz5XfLhzGVvunG4Vdrpw8CD2ng==, } engines: { node: '>=18' } - '@react-native/js-polyfills@0.76.5': + '@react-native/js-polyfills@0.76.9': resolution: { - integrity: sha512-ggM8tcKTcaqyKQcXMIvcB0vVfqr9ZRhWVxWIdiFO1mPvJyS6n+a+lLGkgQAyO8pfH0R1qw6K9D0nqbbDo865WQ==, + integrity: sha512-s6z6m8cK4SMjIX1hm8LT187aQ6//ujLrjzDBogqDCYXRbfjbAYovw5as/v2a2rhUIyJbS3UjokZm3W0H+Oh/RQ==, } engines: { node: '>=18' } - '@react-native/metro-babel-transformer@0.76.5': + '@react-native/metro-babel-transformer@0.76.9': resolution: { - integrity: sha512-Cm9G5Sg5BDty3/MKa3vbCAJtT3YHhlEaPlQALLykju7qBS+pHZV9bE9hocfyyvc5N/osTIGWxG5YOfqTeMu1oQ==, + integrity: sha512-HGq11347UHNiO/NvVbAO35hQCmH8YZRs7in7nVq7SL99pnpZK4WXwLdAXmSuwz5uYqOuwnKYDlpadz8fkE94Mg==, } engines: { node: '>=18' } peerDependencies: @@ -2103,16 +1993,22 @@ packages: integrity: sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==, } - '@react-native/normalize-colors@0.76.5': + '@react-native/normalize-colors@0.76.8': + resolution: + { + integrity: sha512-FRjRvs7RgsXjkbGSOjYSxhX5V70c0IzA/jy3HXeYpATMwD9fOR1DbveLW497QGsVdCa0vThbJUtR8rIzAfpHQA==, + } + + '@react-native/normalize-colors@0.76.9': resolution: { - integrity: sha512-6QRLEok1r55gLqj+94mEWUENuU5A6wsr2OoXpyq/CgQ7THWowbHtru/kRGRr6o3AQXrVnZheR60JNgFcpNYIug==, + integrity: sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==, } - '@react-native/virtualized-lists@0.76.5': + '@react-native/virtualized-lists@0.76.9': resolution: { - integrity: sha512-M/fW1fTwxrHbcx0OiVOIxzG6rKC0j9cR9Csf80o77y1Xry0yrNPpAlf8D1ev3LvHsiAUiRNFlauoPtodrs2J1A==, + integrity: sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw==, } engines: { node: '>=18' } peerDependencies: @@ -2194,68 +2090,6 @@ packages: peerDependencies: release-it: ^17.0.0 - '@remix-run/node@2.15.2': - resolution: - { - integrity: sha512-NS/h5uxje7DYCNgcKqKAiUhf0r2HVnoYUBWLyIIMmCUP1ddWurBP6xTPcWzGhEvV/EvguniYi1wJZ5+X8sonWw==, - } - engines: { node: '>=18.0.0' } - peerDependencies: - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - - '@remix-run/router@1.21.0': - resolution: - { - integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==, - } - engines: { node: '>=14.0.0' } - - '@remix-run/server-runtime@2.15.2': - resolution: - { - integrity: sha512-OqiPcvEnnU88B8b1LIWHHkQ3Tz2GDAmQ1RihFNQsbrFKpDsQLkw0lJlnfgKA/uHd0CEEacpfV7C9qqJT3V6Z2g==, - } - engines: { node: '>=18.0.0' } - peerDependencies: - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - - '@remix-run/web-blob@3.1.0': - resolution: - { - integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==, - } - - '@remix-run/web-fetch@4.4.2': - resolution: - { - integrity: sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==, - } - engines: { node: ^10.17 || >=12.3 } - - '@remix-run/web-file@3.1.0': - resolution: - { - integrity: sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==, - } - - '@remix-run/web-form-data@3.1.0': - resolution: - { - integrity: sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==, - } - - '@remix-run/web-stream@1.1.0': - resolution: - { - integrity: sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==, - } - '@segment/loosely-validate-event@2.0.0': resolution: { @@ -2328,6 +2162,25 @@ packages: } engines: { node: '>=14.16' } + '@testing-library/react-hooks@8.0.1': + resolution: + { + integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==, + } + engines: { node: '>=12' } + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-dom: + optional: true + react-test-renderer: + optional: true + '@tootallnate/once@2.0.0': resolution: { @@ -2365,12 +2218,6 @@ packages: integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==, } - '@types/cookie@0.6.0': - resolution: - { - integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==, - } - '@types/eslint-scope@3.7.7': resolution: { @@ -2503,12 +2350,6 @@ packages: integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==, } - '@types/yargs@15.0.14': - resolution: - { - integrity: sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==, - } - '@types/yargs@17.0.13': resolution: { @@ -2611,12 +2452,6 @@ packages: peerDependencies: '@urql/core': ^5.0.0 - '@web3-storage/multipart-parser@1.0.0': - resolution: - { - integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==, - } - '@webassemblyjs/ast@1.14.1': resolution: { @@ -2727,12 +2562,6 @@ packages: integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, } - '@zxing/text-encoding@0.9.0': - resolution: - { - integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==, - } - JSONStream@1.3.5: resolution: { @@ -2797,14 +2626,6 @@ packages: engines: { node: '>=0.4.0' } hasBin: true - acorn@8.12.1: - resolution: - { - integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==, - } - engines: { node: '>=0.4.0' } - hasBin: true - acorn@8.14.0: resolution: { @@ -2980,12 +2801,6 @@ packages: } engines: { node: '>= 8' } - appdirsjs@1.2.7: - resolution: - { - integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==, - } - application-config-path@0.1.0: resolution: { @@ -3253,10 +3068,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-preset-expo@12.0.5: + babel-preset-expo@12.0.11: resolution: { - integrity: sha512-rEFjN1CoMYEWSRpE+Hvw+zv+nLbDXyRM8vGAoYJtFPJovHupX2VRWPVaqtHlnMTrzsGFQDf4WfQJrjAQ9e2hAQ==, + integrity: sha512-4m6D92nKEieg+7DXa8uSvpr0GjfuRfM/G0t0I/Q5hF8HleEv5ms3z4dJ+p52qXSJsm760tMqLdO93Ywuoi7cCQ==, } peerDependencies: babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 @@ -4001,20 +3816,6 @@ packages: integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, } - cookie-signature@1.2.1: - resolution: - { - integrity: sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==, - } - engines: { node: '>=6.6.0' } - - cookie@0.6.0: - resolution: - { - integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==, - } - engines: { node: '>= 0.6' } - core-js-compat@3.40.0: resolution: { @@ -4144,13 +3945,6 @@ packages: } engines: { node: '>=12' } - data-uri-to-buffer@3.0.1: - resolution: - { - integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==, - } - engines: { node: '>= 6' } - data-uri-to-buffer@4.0.1: resolution: { @@ -4566,13 +4360,6 @@ packages: integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, } - errorhandler@1.5.1: - resolution: - { - integrity: sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==, - } - engines: { node: '>= 0.8' } - es-abstract@1.22.2: resolution: { @@ -4979,101 +4766,93 @@ packages: } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - expo-asset@11.0.1: + expo-asset@11.0.5: resolution: { - integrity: sha512-WatvD7JVC89EsllXFYcS/rji3ajVzE2B/USo0TqedsETixwyVCQfrrvCdCPQyuKghrxVNEj8bQ/Qbea/RZLYjg==, + integrity: sha512-TL60LmMBGVzs3NQcO8ylWqBumMh4sx0lmeJsn7+9C88fylGDhyyVnKZ1PyTXo9CVDBkndutZx2JUEQWM9BaiXw==, } peerDependencies: expo: '*' react: '*' react-native: '*' - expo-build-properties@0.13.1: + expo-build-properties@0.13.2: resolution: { - integrity: sha512-7tDlAM0PPkXC0B00C6/FG19sMzwxZNyiDfn22AWVbBxWxZE1/3RqxPgT3MlPVNfvy+wJw7jt/qbAb0S06wFYVg==, + integrity: sha512-ML2GwBgn0Bo4yPgnSGb7h3XVxCigS/KFdid3xPC2HldEioTP3UewB/2Qa4WBsam9Fb7lAuRyVHAfRoA3swpDzg==, } peerDependencies: expo: '*' - expo-constants@17.0.3: + expo-constants@17.0.8: resolution: { - integrity: sha512-lnbcX2sAu8SucHXEXxSkhiEpqH+jGrf+TF+MO6sHWIESjwOUVVYlT8qYdjR9xbxWmqFtrI4KV44FkeJf2DaFjQ==, + integrity: sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg==, } peerDependencies: expo: '*' react-native: '*' - expo-dev-client@5.0.8: - resolution: - { - integrity: sha512-b9vEIoPBYNqCegxx1D/aZdXkLABa+JA7eFn/dygiU0HnFsr0YBFx3Lj2kzMukayy5x0u9EjMps3l/fznC1EMQg==, - } - peerDependencies: - expo: '*' - - expo-dev-launcher@5.0.21: + expo-dev-client@5.0.20: resolution: { - integrity: sha512-ZH/PB6COzxQMl9vvJB84hLNqU2X4gcoj+P6QgpWoANdoMLjl9Cm4u14XlEghZ7W3EHkesZUHl8dT+p/5QIiaNA==, + integrity: sha512-bLNkHdU7V3I4UefgJbJnIDUBUL0LxIal/xYEx9BbgDd3B7wgQKY//+BpPIxBOKCQ22lkyiHY8y9tLhO903sAgg==, } peerDependencies: expo: '*' - expo-dev-menu-interface@1.9.2: + expo-dev-launcher@5.0.35: resolution: { - integrity: sha512-9piGiHZYnNjoO9oQFWlVsndQ1jhTdGCKf81WfCMHbQBamna/zucC1A+jbGpyzE4icXZZ29CpsSd4uVR+tB2Rfw==, + integrity: sha512-hEQr0ZREnUMxZ6wtQgfK1lzYnbb0zar3HqYZhmANzXmE6UEPbQ4GByLzhpfz/d+xxdBVQZsrHdtiV28KPG2sog==, } peerDependencies: expo: '*' - expo-dev-menu@6.0.14: + expo-dev-menu-interface@1.9.3: resolution: { - integrity: sha512-bG4NXm4epHSmZdWW9hZCS7dTcKO82CyVfYMbNSOw5o/FKO9cY/AgfSj6ERPE9zBqYEJJEJaoJ0mzv0d47/h23g==, + integrity: sha512-KY/dWTBE1l47i9V366JN5rC6YIdOc9hz8yAmZzkl5DrPia5l3M2WIjtnpHC9zUkNjiSiG2urYoOAq4H/uLdmyg==, } peerDependencies: expo: '*' - expo-dev-menu@6.0.15: + expo-dev-menu@6.0.25: resolution: { - integrity: sha512-GMMOSKq9Sjv6uZJt0pSHLHAi33ZHj6mdC+ostvz1A02+U86+mujcMUozYIBTzpiL4Vzj4v7D+sJB+oW6CmDxgg==, + integrity: sha512-K2m4z/I+CPWbMtHlDzU68lHaQs52De0v5gbsjAmA5ig8FrYh4MKZvPxSVANaiKENzgmtglu8qaFh7ua9Gt2TfA==, } peerDependencies: expo: '*' - expo-eas-client@0.13.1: + expo-eas-client@0.13.3: resolution: { - integrity: sha512-IyeDiM6YSJG0c45kbuEo0qt76z0KTEZtisEFEtle+b+vfn9I3N+r3jbPscaI4yS3P6gpuoDyHv81YDVC6Dmkhw==, + integrity: sha512-t+1F1tiDocSot8iSnrn/CjTUMvVvPV2DpafSVcticpbSzMGybEN7wcamO1t18fK7WxGXpZE9gxtd80qwv/LLqQ==, } - expo-file-system@18.0.6: + expo-file-system@18.0.12: resolution: { - integrity: sha512-gGEwIJCXV3/wpIJ/wRyhmieLOSAY7HeFFjb+wEfHs04aE63JYR+rXXV4b7rBpEh1ZgNV9U91zfet/iQG7J8HBQ==, + integrity: sha512-HAkrd/mb8r+G3lJ9MzmGeuW2B+BxQR1joKfeCyY4deLl1zoZ48FrAWjgZjHK9aHUVhJ0ehzInu/NQtikKytaeg==, } peerDependencies: expo: '*' react-native: '*' - expo-font@13.0.2: + expo-font@13.0.4: resolution: { - integrity: sha512-H9FaXM7ZW5+EfV38w80BgJG3H17kB7CuVXwHoiszIYyoPfWz9bWesFe4QwNZjTq3pzKes28sSd8irFuflIrSIA==, + integrity: sha512-eAP5hyBgC8gafFtprsz0HMaB795qZfgJWqTmU0NfbSin1wUuVySFMEPMOrTkTgmazU73v4Cb4x7p86jY1XXYUw==, } peerDependencies: expo: '*' react: '*' - expo-image@2.0.3: + expo-image@2.0.7: resolution: { - integrity: sha512-+YnHTQv8jbXaut3FY7TDhNiSiGZ927C329mHvTZWV4Fyj32/Hjhhmk7dqq9I6LrA0nqBBiJjFj3u6VdHvCBnZg==, + integrity: sha512-kv40OIJOkItwznhdqFmKxTMC5O8GkpyTf8ng7Py4Hy6IBiH59dkeP6vUZQhzPhJOm5v1kZK4XldbskBosqzOug==, } peerDependencies: expo: '*' @@ -5090,49 +4869,49 @@ packages: integrity: sha512-xjGfK9dL0B1wLnOqNkX0jM9p48Y0I5xEPzHude28LY67UmamUyAACkqhZGaPClyPNfdzczk7Ej6WaRMT3HfXvw==, } - expo-keep-awake@14.0.1: + expo-keep-awake@14.0.3: resolution: { - integrity: sha512-c5mGCAIk2YM+Vsdy90BlEJ4ZX+KG5Au9EkJUIxXWlpnuKmDAJ3N+5nEZ7EUO1ZTheqoSBeAo4jJ8rTWPU+JXdw==, + integrity: sha512-6Jh94G6NvTZfuLnm2vwIpKe3GdOiVBuISl7FI8GqN0/9UOg9E0WXXp5cDcfAG8bn80RfgLJS8P7EPUGTZyOvhg==, } peerDependencies: expo: '*' react: '*' - expo-linking@7.0.3: + expo-linking@7.0.5: resolution: { - integrity: sha512-YiDacNzeQZd/bdOwGyi+YlawM4GGbcSRkuFCpDGIK7D1KUGqLinBHwJvxUMb9Zert2Ois5IHtmZaZ1et6g229g==, + integrity: sha512-3KptlJtcYDPWohk0MfJU75MJFh2ybavbtcSd84zEPfw9s1q3hjimw3sXnH03ZxP54kiEWldvKmmnGcVffBDB1g==, } peerDependencies: react: '*' react-native: '*' - expo-manifests@0.15.4: + expo-manifests@0.15.8: resolution: { - integrity: sha512-Ki6+twRbm+HTX3L8larhOdDbSYPG3ojGnZepR/+TGg3JF/5yyscosDVY6c6z8xEGjKIjs1F813yq9yAfiPh8/g==, + integrity: sha512-VuIyaMfRfLZeETNsRohqhy1l7iZ7I+HKMPfZXVL2Yn17TT0WkOhZoq1DzYwPbOHPgp1Uk6phNa86EyaHrD2DLw==, } peerDependencies: expo: '*' - expo-modules-autolinking@2.0.4: + expo-modules-autolinking@2.0.8: resolution: { - integrity: sha512-e0p+19NhmD50U7s7BV7kWIypWmTNC9n/VlJKlXS05hM/zX7pe6JKmXyb+BFnXJq3SLBalLCUY0tu2gEUF3XeVg==, + integrity: sha512-DezgnEYFQYic8hKGhkbztBA3QUmSftjaNDIKNAtS2iGJmzCcNIkatjN2slFDSWjSTNo8gOvPQyMKfyHWFvLpOQ==, } hasBin: true - expo-modules-core@2.1.2: + expo-modules-core@2.2.3: resolution: { - integrity: sha512-0OhMU5S8zf9c/CRh1MwiXfOInI9wzz6yiIh5RuR/9J7N6xHRum68hInsPbaSc1UQpo08ZZLM4MPsbpoNRUoqIg==, + integrity: sha512-01QqZzpP/wWlxnNly4G06MsOBUTbMDj02DQigZoXfDh80vd/rk3/uVXqnZgOdLSggTs6DnvOgAUy0H2q30XdUg==, } - expo-router@4.0.16: + expo-router@4.0.20: resolution: { - integrity: sha512-KRGUxo43g9gCWbq9cJn5AkxW+rOxoJwBNv3X57Ylns5j/5p6WUMiKnRJOT4k8wmMQTQGzH37gGDx3ufI2A9Q2g==, + integrity: sha512-1+CtvohptOsG/Piejk8uQ9cmM+8ojadFkdeThCn4klZjc0dtFSSHenb8D/0RKuBdp4taBkNaqgEKwYvhVBJyEg==, } peerDependencies: '@react-navigation/drawer': ^7.1.1 @@ -5151,18 +4930,18 @@ packages: react-native-reanimated: optional: true - expo-splash-screen@0.29.19: + expo-splash-screen@0.29.22: resolution: { - integrity: sha512-tknx8oWl8c8VO8zXYYwF38oKjuLHvWwxK61pDyr73I6lflJ0/p81LSb5x53OEsyzr+H69y/RHvVQnWKu+RFfBg==, + integrity: sha512-f+bPpF06bqiuW1Fbrd3nxeaSsmTVTBEKEYe3epYt4IE6y4Ulli3qEUamMLlRQiDGuIXPU6zQlscpy2mdBUI5cA==, } peerDependencies: expo: '*' - expo-status-bar@2.0.0: + expo-status-bar@2.0.1: resolution: { - integrity: sha512-vxxdpvpNDMTEc5uTiIrbTvySKKUsOACmfl8OZuUdjNle05oGqwtq3v5YObwym/njSByjoyuZX8UpXBZnxvarwQ==, + integrity: sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg==, } peerDependencies: react: '*' @@ -5174,10 +4953,10 @@ packages: integrity: sha512-uPiwZjWq3AdFGgY52+I2nGPrNa6izxAglymPXHUZLekZW290GqIUOk7MBNDD4sg4JwUbSi3gdxEurpEvuq+FSg==, } - expo-system-ui@4.0.6: + expo-system-ui@4.0.9: resolution: { - integrity: sha512-JWmw0aaNIB8YxA6bXgH6nClyledZaAG5VNzoRvmXT4+j3MY4waAHSSSdVV71bUgjchT/2KOAcibZ/EeosJONug==, + integrity: sha512-hqBc0EWeK/BTB8i4H84vqNjje8GgxhapYrcWdg5qriaRA/u+bNNxhmpZXdAjFuhonOP4SmAbF+gjoJJWsTrhUg==, } peerDependencies: expo: '*' @@ -5195,20 +4974,20 @@ packages: peerDependencies: expo: '*' - expo-updates@0.26.11: + expo-updates@0.27.4: resolution: { - integrity: sha512-FlplNXhWHsJTdHuyZ6+o22VhM1mhSqECNknWqhhJza+vU5znNKCoY5y1vQjzpcfo4WK+gMvv42JlcOXxzenAmw==, + integrity: sha512-0rg4L2fFPEjTR/qnZ9Te4Q4irVC8uvNcTZW1pWnWbadG1SLv2PKjS1MYX5BboKzC3ao0H7m++5TP3hWhNg9org==, } hasBin: true peerDependencies: expo: '*' react: '*' - expo@52.0.24: + expo@52.0.44: resolution: { - integrity: sha512-g9o7Hi1Zqr5MHNR76sMVm3oEwBFWgAozx4CMbVIgJE+wq8Gu0WZyOFOL6NswR5aZs+Cx0CK5hZEXwDtLQql8WQ==, + integrity: sha512-qj3+MWxmqLyBaYQ8jDOvVLEgSqNplH3cf+nDhxCo4C1cpTPD1u/HGh1foibtaeuCYLHsE5km1lrcOpRbFJ4luQ==, } hasBin: true peerDependencies: @@ -6149,13 +5928,6 @@ packages: } engines: { node: '>= 0.10' } - is-arguments@1.1.1: - resolution: - { - integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, - } - engines: { node: '>= 0.4' } - is-array-buffer@3.0.2: resolution: { @@ -6538,13 +6310,6 @@ packages: integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==, } - is-wsl@1.1.0: - resolution: - { - integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==, - } - engines: { node: '>=4' } - is-wsl@2.2.0: resolution: { @@ -6727,10 +6492,10 @@ packages: } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - jest-expo@52.0.2: + jest-expo@52.0.6: resolution: { - integrity: sha512-6xV/+IRw93Org1UlgIqu89Ex3vuPRozD5VqTS95AonHMgjb0XTHHhMmn+TdR1d3i3ziy7JFbWAMoBLwminIalw==, + integrity: sha512-Ql60mCy4cfwyNvCW2wpEXbw/3i5H+SmB1XP1z0SJUpafGBipq6xMjPcgQpe/7PzAHTc/ikD+dFA0sPnljDJmZQ==, } hasBin: true peerDependencies: @@ -6967,14 +6732,6 @@ packages: canvas: optional: true - jsesc@2.5.2: - resolution: - { - integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, - } - engines: { node: '>=4' } - hasBin: true - jsesc@3.0.2: resolution: { @@ -7645,14 +7402,6 @@ packages: engines: { node: '>=4' } hasBin: true - mime@2.6.0: - resolution: - { - integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, - } - engines: { node: '>=4.0.0' } - hasBin: true - mimic-fn@1.2.0: resolution: { @@ -7742,13 +7491,6 @@ packages: } engines: { node: '>=8' } - minipass@7.1.1: - resolution: - { - integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==, - } - engines: { node: '>=16 || 14 >=14.17' } - minipass@7.1.2: resolution: { @@ -7778,13 +7520,6 @@ packages: engines: { node: '>=10' } hasBin: true - mrmime@1.0.1: - resolution: - { - integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==, - } - engines: { node: '>=10' } - ms@2.0.0: resolution: { @@ -7823,14 +7558,6 @@ packages: integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, } - nanoid@3.3.7: - resolution: - { - integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } - hasBin: true - nanoid@3.3.8: resolution: { @@ -7891,13 +7618,6 @@ packages: integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, } - nocache@3.0.4: - resolution: - { - integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==, - } - engines: { node: '>=12.0.0' } - node-abort-controller@3.1.1: resolution: { @@ -8139,13 +7859,6 @@ packages: } engines: { node: '>=18' } - open@6.4.0: - resolution: - { - integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==, - } - engines: { node: '>=8' } - open@7.4.2: resolution: { @@ -8448,12 +8161,6 @@ packages: } engines: { node: '>=12' } - picocolors@1.0.0: - resolution: - { - integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, - } - picocolors@1.1.1: resolution: { @@ -8573,17 +8280,10 @@ packages: } engines: { node: '>=6' } - pretty-format@26.6.2: + pretty-format@29.7.0: resolution: { - integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==, - } - engines: { node: '>= 10' } - - pretty-format@29.7.0: - resolution: - { - integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, + integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } @@ -8762,6 +8462,15 @@ packages: peerDependencies: react: ^18.3.1 + react-error-boundary@3.1.4: + resolution: + { + integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==, + } + engines: { node: '>=10', npm: '>=6' } + peerDependencies: + react: '>=16.13.1' + react-fast-compare@3.2.2: resolution: { @@ -8792,12 +8501,6 @@ packages: integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, } - react-is@17.0.2: - resolution: - { - integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, - } - react-is@18.2.0: resolution: { @@ -8882,10 +8585,10 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - react-native@0.76.5: + react-native@0.76.9: resolution: { - integrity: sha512-op2p2kB+lqMF1D7AdX4+wvaR0OPFbvWYs+VBE7bwsb99Cn9xISrLRLAgFflZedQsa5HvnOGrULhtnmItbIKVVw==, + integrity: sha512-+LRwecWmTDco7OweGsrECIqJu0iyrREd6CTCgC/uLLYipiHvk+MH9nd6drFtCw/6Blz6eoKTcH9YTTJusNtrWg==, } engines: { node: '>=18' } hasBin: true @@ -9167,6 +8870,13 @@ packages: } engines: { node: '>=10' } + resolve.exports@2.0.3: + resolution: + { + integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==, + } + engines: { node: '>=10' } + resolve@1.22.8: resolution: { @@ -9362,13 +9072,6 @@ packages: } engines: { node: '>= 10.13.0' } - schema-utils@4.2.0: - resolution: - { - integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==, - } - engines: { node: '>= 12.13.0' } - schema-utils@4.3.0: resolution: { @@ -9420,6 +9123,14 @@ packages: engines: { node: '>=10' } hasBin: true + semver@7.7.1: + resolution: + { + integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==, + } + engines: { node: '>=10' } + hasBin: true + send@0.18.0: resolution: { @@ -9460,12 +9171,6 @@ packages: integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==, } - set-cookie-parser@2.6.0: - resolution: - { - integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==, - } - set-function-length@1.2.2: resolution: { @@ -9680,13 +9385,6 @@ packages: } engines: { node: '>=0.10.0' } - source-map@0.7.4: - resolution: - { - integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, - } - engines: { node: '>= 8' } - spdx-correct@3.2.0: resolution: { @@ -9816,12 +9514,6 @@ packages: } engines: { node: '>= 0.10.0' } - stream-slice@0.1.2: - resolution: - { - integrity: sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==, - } - strict-uri-encode@2.0.0: resolution: { @@ -10012,13 +9704,6 @@ packages: } deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - sudo-prompt@9.2.1: - resolution: - { - integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==, - } - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - supports-color@5.5.0: resolution: { @@ -10128,14 +9813,6 @@ packages: uglify-js: optional: true - terser@5.16.5: - resolution: - { - integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==, - } - engines: { node: '>=10' } - hasBin: true - terser@5.37.0: resolution: { @@ -10208,13 +9885,6 @@ packages: integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, } - to-fast-properties@2.0.0: - resolution: - { - integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, - } - engines: { node: '>=4' } - to-regex-range@5.0.1: resolution: { @@ -10276,12 +9946,6 @@ packages: integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, } - turbo-stream@2.4.0: - resolution: - { - integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==, - } - type-check@0.4.0: resolution: { @@ -10579,14 +10243,6 @@ packages: peerDependencies: react: '>=16.8' - use-sync-external-store@1.2.0: - resolution: - { - integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==, - } - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - use-sync-external-store@1.4.0: resolution: { @@ -10601,12 +10257,6 @@ packages: integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, } - util@0.12.5: - resolution: - { - integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==, - } - utils-merge@1.0.1: resolution: { @@ -10693,12 +10343,6 @@ packages: integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, } - web-encoding@1.1.5: - resolution: - { - integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==, - } - web-streams-polyfill@3.3.3: resolution: { @@ -10941,21 +10585,6 @@ packages: utf-8-validate: optional: true - ws@7.5.9: - resolution: - { - integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==, - } - engines: { node: '>=8.3.0' } - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.13.0: resolution: { @@ -11094,24 +10723,6 @@ packages: } engines: { node: '>=18' } - zustand@4.5.2: - resolution: - { - integrity: sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==, - } - engines: { node: '>=12.7.0' } - peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0.6' - react: '>=16.8' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true - snapshots: '@0no-co/graphql.web@1.0.13(graphql@15.8.0)': optionalDependencies: @@ -11164,13 +10775,6 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.24.5': - dependencies: - '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - '@babel/generator@7.26.3': dependencies: '@babel/parser': 7.26.3 @@ -11239,10 +10843,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.24.3': - dependencies: - '@babel/types': 7.26.3 - '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.26.4 @@ -11294,12 +10894,8 @@ snapshots: dependencies: '@babel/types': 7.26.3 - '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.24.5': {} - '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-option@7.25.9': {} @@ -11324,10 +10920,6 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.24.5': - dependencies: - '@babel/types': 7.26.3 - '@babel/parser@7.26.3': dependencies: '@babel/types': 7.26.3 @@ -11441,11 +11033,6 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -11728,14 +11315,6 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.26.0) - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -11764,11 +11343,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.24.5(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -11796,11 +11370,6 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -11809,7 +11378,9 @@ snapshots: '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': dependencies: @@ -11821,15 +11392,6 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.3 - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -12038,10 +11600,12 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.26.0) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.26.0) '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color '@babel/preset-typescript@7.24.1(@babel/core@7.26.0)': dependencies: @@ -12094,12 +11658,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.24.5': - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 - to-fast-properties: 2.0.0 - '@babel/types@7.26.3': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -12107,10 +11665,10 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@dev-plugins/react-native-mmkv@0.0.1(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-mmkv@3.2.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))': + '@dev-plugins/react-native-mmkv@0.2.0(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-mmkv@3.2.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))': dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - react-native-mmkv: 3.2.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-mmkv: 3.2.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) '@egjs/hammerjs@2.0.17': dependencies: @@ -12146,26 +11704,27 @@ snapshots: mv: 2.1.1 safe-json-stringify: 1.2.0 - '@expo/cli@0.22.8(graphql@15.8.0)': + '@expo/cli@0.22.24(graphql@15.8.0)': dependencies: '@0no-co/graphql.web': 1.0.13(graphql@15.8.0) - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.26.0 '@expo/code-signing-certificates': 0.0.5 - '@expo/config': 10.0.7 - '@expo/config-plugins': 9.0.13 + '@expo/config': 10.0.11 + '@expo/config-plugins': 9.0.17 '@expo/devcert': 1.1.2 - '@expo/env': 0.4.0 - '@expo/image-utils': 0.6.3 - '@expo/json-file': 9.0.0 - '@expo/metro-config': 0.19.8 - '@expo/osascript': 2.0.33 - '@expo/package-manager': 1.7.0 - '@expo/plist': 0.2.0 - '@expo/prebuild-config': 8.0.24 + '@expo/env': 0.4.2 + '@expo/image-utils': 0.6.5 + '@expo/json-file': 9.0.2 + '@expo/metro-config': 0.19.12 + '@expo/osascript': 2.1.6 + '@expo/package-manager': 1.7.2 + '@expo/plist': 0.2.2 + '@expo/prebuild-config': 8.0.31 '@expo/rudder-sdk-node': 1.1.1 '@expo/spawn-async': 1.7.2 + '@expo/ws-tunnel': 1.0.6 '@expo/xcpretty': 4.3.1 - '@react-native/dev-middleware': 0.76.5 + '@react-native/dev-middleware': 0.76.9 '@urql/core': 5.1.0(graphql@15.8.0) '@urql/exchange-retry': 1.3.0(@urql/core@5.1.0(graphql@15.8.0)) accepts: 1.3.8 @@ -12204,8 +11763,8 @@ snapshots: requireg: 0.2.2 resolve: 1.22.8 resolve-from: 5.0.0 - resolve.exports: 2.0.2 - semver: 7.6.2 + resolve.exports: 2.0.3 + semver: 7.7.1 send: 0.19.1 slugify: 1.6.6 source-map-support: 0.5.21 @@ -12231,18 +11790,18 @@ snapshots: node-forge: 1.3.1 nullthrows: 1.1.1 - '@expo/config-plugins@9.0.13': + '@expo/config-plugins@9.0.17': dependencies: - '@expo/config-types': 52.0.2 - '@expo/json-file': 9.0.0 - '@expo/plist': 0.2.0 + '@expo/config-types': 52.0.5 + '@expo/json-file': 9.0.2 + '@expo/plist': 0.2.2 '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 debug: 4.4.0 getenv: 1.0.0 glob: 10.4.5 resolve-from: 5.0.0 - semver: 7.6.2 + semver: 7.7.1 slash: 3.0.0 slugify: 1.6.6 xcode: 3.0.1 @@ -12250,21 +11809,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/config-types@52.0.2': {} + '@expo/config-types@52.0.5': {} - '@expo/config@10.0.7': + '@expo/config@10.0.11': dependencies: '@babel/code-frame': 7.10.4 - '@expo/config-plugins': 9.0.13 - '@expo/config-types': 52.0.2 - '@expo/json-file': 9.0.0 + '@expo/config-plugins': 9.0.17 + '@expo/config-types': 52.0.5 + '@expo/json-file': 9.0.2 deepmerge: 4.3.1 getenv: 1.0.0 glob: 10.4.5 require-from-string: 2.0.2 resolve-from: 5.0.0 resolve-workspace-root: 2.0.0 - semver: 7.6.3 + semver: 7.7.1 slugify: 1.6.6 sucrase: 3.35.0 transitivePeerDependencies: @@ -12288,7 +11847,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/env@0.4.0': + '@expo/env@0.4.2': dependencies: chalk: 4.1.2 debug: 4.4.0 @@ -12298,7 +11857,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/fingerprint@0.11.6': + '@expo/fingerprint@0.11.11': dependencies: '@expo/spawn-async': 1.7.2 arg: 5.0.2 @@ -12309,11 +11868,11 @@ snapshots: minimatch: 3.1.2 p-limit: 3.1.0 resolve-from: 5.0.0 - semver: 7.6.2 + semver: 7.7.1 transitivePeerDependencies: - supports-color - '@expo/image-utils@0.6.3': + '@expo/image-utils@0.6.5': dependencies: '@expo/spawn-async': 1.7.2 chalk: 4.1.2 @@ -12322,25 +11881,25 @@ snapshots: jimp-compact: 0.16.1 parse-png: 2.1.0 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.7.1 temp-dir: 2.0.0 unique-string: 2.0.0 - '@expo/json-file@9.0.0': + '@expo/json-file@9.0.2': dependencies: '@babel/code-frame': 7.10.4 json5: 2.2.3 write-file-atomic: 2.4.3 - '@expo/metro-config@0.19.8': + '@expo/metro-config@0.19.12': dependencies: '@babel/core': 7.26.0 - '@babel/generator': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - '@expo/config': 10.0.7 - '@expo/env': 0.4.0 - '@expo/json-file': 9.0.0 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@expo/config': 10.0.11 + '@expo/env': 0.4.2 + '@expo/json-file': 9.0.2 '@expo/spawn-async': 1.7.2 chalk: 4.1.2 debug: 4.4.0 @@ -12355,18 +11914,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))': + '@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))': dependencies: - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) - '@expo/osascript@2.0.33': + '@expo/osascript@2.1.6': dependencies: '@expo/spawn-async': 1.7.2 exec-async: 2.2.0 - '@expo/package-manager@1.7.0': + '@expo/package-manager@1.7.2': dependencies: - '@expo/json-file': 9.0.0 + '@expo/json-file': 9.0.2 '@expo/spawn-async': 1.7.2 ansi-regex: 5.0.1 chalk: 4.1.2 @@ -12379,24 +11938,24 @@ snapshots: split: 1.0.1 sudo-prompt: 9.1.1 - '@expo/plist@0.2.0': + '@expo/plist@0.2.2': dependencies: '@xmldom/xmldom': 0.7.9 base64-js: 1.5.1 xmlbuilder: 14.0.0 - '@expo/prebuild-config@8.0.24': + '@expo/prebuild-config@8.0.31': dependencies: - '@expo/config': 10.0.7 - '@expo/config-plugins': 9.0.13 - '@expo/config-types': 52.0.2 - '@expo/image-utils': 0.6.3 - '@expo/json-file': 9.0.0 - '@react-native/normalize-colors': 0.76.5 + '@expo/config': 10.0.11 + '@expo/config-plugins': 9.0.17 + '@expo/config-types': 52.0.5 + '@expo/image-utils': 0.6.5 + '@expo/json-file': 9.0.2 + '@react-native/normalize-colors': 0.76.9 debug: 4.4.0 fs-extra: 9.1.0 resolve-from: 5.0.0 - semver: 7.6.2 + semver: 7.7.1 xml2js: 0.6.0 transitivePeerDependencies: - supports-color @@ -12415,15 +11974,14 @@ snapshots: '@expo/sdk-runtime-versions@1.0.0': {} - '@expo/server@0.5.0(typescript@5.3.3)': + '@expo/server@0.5.3': dependencies: - '@remix-run/node': 2.15.2(typescript@5.3.3) abort-controller: 3.0.0 debug: 4.4.0 source-map-support: 0.5.21 + undici: 6.19.2 transitivePeerDependencies: - supports-color - - typescript '@expo/spawn-async@1.7.2': dependencies: @@ -12433,6 +11991,8 @@ snapshots: dependencies: prop-types: 15.8.1 + '@expo/ws-tunnel@1.0.6': {} + '@expo/xcpretty@4.3.1': dependencies: '@babel/code-frame': 7.10.4 @@ -12600,7 +12160,7 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 '@jest/test-result@29.7.0': dependencies: @@ -12612,7 +12172,7 @@ snapshots: '@jest/test-sequencer@29.7.0': dependencies: '@jest/test-result': 29.7.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.7.0 slash: 3.0.0 @@ -12636,15 +12196,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/types@26.6.2': - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.19.33 - '@types/yargs': 15.0.14 - chalk: 4.1.2 - optional: true - '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 @@ -12669,11 +12220,6 @@ snapshots: '@jridgewell/set-array@1.2.1': {} - '@jridgewell/source-map@0.3.2': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/source-map@0.3.6': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -12704,7 +12250,7 @@ snapshots: '@npmcli/fs@3.1.1': dependencies: - semver: 7.6.3 + semver: 7.7.1 '@octokit/auth-token@4.0.0': {} @@ -12788,71 +12334,29 @@ snapshots: '@radix-ui/react-compose-refs@1.0.0(react@18.3.1)': dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.26.0 react: 18.3.1 '@radix-ui/react-slot@1.0.1(react@18.3.1)': dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.26.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) react: 18.3.1 - '@react-native-community/cli-debugger-ui@13.6.6': + '@react-native-community/netinfo@11.4.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))': dependencies: - serve-static: 1.15.0 - transitivePeerDependencies: - - supports-color - optional: true + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) - '@react-native-community/cli-server-api@13.6.6': - dependencies: - '@react-native-community/cli-debugger-ui': 13.6.6 - '@react-native-community/cli-tools': 13.6.6 - compression: 1.7.4 - connect: 3.7.0 - errorhandler: 1.5.1 - nocache: 3.0.4 - pretty-format: 26.6.2 - serve-static: 1.15.0 - ws: 6.2.3 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - optional: true + '@react-native/assets-registry@0.76.9': {} - '@react-native-community/cli-tools@13.6.6': + '@react-native/babel-plugin-codegen@0.76.9(@babel/preset-env@7.24.5(@babel/core@7.26.0))': dependencies: - appdirsjs: 1.2.7 - chalk: 4.1.2 - execa: 5.1.1 - find-up: 5.0.0 - mime: 2.6.0 - node-fetch: 2.6.7 - open: 6.4.0 - ora: 5.4.1 - semver: 7.6.3 - shell-quote: 1.7.4 - sudo-prompt: 9.2.1 - transitivePeerDependencies: - - encoding - optional: true - - '@react-native-community/netinfo@11.4.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))': - dependencies: - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) - - '@react-native/assets-registry@0.76.5': {} - - '@react-native/babel-plugin-codegen@0.76.5(@babel/preset-env@7.24.5(@babel/core@7.26.0))': - dependencies: - '@react-native/codegen': 0.76.5(@babel/preset-env@7.24.5(@babel/core@7.26.0)) + '@react-native/codegen': 0.76.9(@babel/preset-env@7.24.5(@babel/core@7.26.0)) transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))': + '@react-native/babel-preset@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.0) @@ -12895,7 +12399,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) '@babel/template': 7.25.9 - '@react-native/babel-plugin-codegen': 0.76.5(@babel/preset-env@7.24.5(@babel/core@7.26.0)) + '@react-native/babel-plugin-codegen': 0.76.9(@babel/preset-env@7.24.5(@babel/core@7.26.0)) babel-plugin-syntax-hermes-parser: 0.25.1 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.0) react-refresh: 0.14.2 @@ -12903,7 +12407,7 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/codegen@0.76.5(@babel/preset-env@7.24.5(@babel/core@7.26.0))': + '@react-native/codegen@0.76.9(@babel/preset-env@7.24.5(@babel/core@7.26.0))': dependencies: '@babel/parser': 7.26.3 '@babel/preset-env': 7.24.5(@babel/core@7.26.0) @@ -12917,10 +12421,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)': + '@react-native/community-cli-plugin@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))': dependencies: - '@react-native/dev-middleware': 0.76.5 - '@react-native/metro-babel-transformer': 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) + '@react-native/dev-middleware': 0.76.9 + '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) chalk: 4.1.2 execa: 5.1.1 invariant: 2.2.4 @@ -12929,9 +12433,7 @@ snapshots: metro-core: 0.81.0 node-fetch: 2.6.7 readline: 1.3.0 - semver: 7.6.2 - optionalDependencies: - '@react-native-community/cli-server-api': 13.6.6 + semver: 7.7.1 transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -12940,16 +12442,17 @@ snapshots: - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.76.5': {} + '@react-native/debugger-frontend@0.76.9': {} - '@react-native/dev-middleware@0.76.5': + '@react-native/dev-middleware@0.76.9': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.76.5 + '@react-native/debugger-frontend': 0.76.9 chrome-launcher: 0.15.2 chromium-edge-launcher: 0.2.0 connect: 3.7.0 debug: 2.6.9 + invariant: 2.2.4 nullthrows: 1.1.1 open: 7.4.2 selfsigned: 2.4.1 @@ -12960,14 +12463,14 @@ snapshots: - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.76.5': {} + '@react-native/gradle-plugin@0.76.9': {} - '@react-native/js-polyfills@0.76.5': {} + '@react-native/js-polyfills@0.76.9': {} - '@react-native/metro-babel-transformer@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))': + '@react-native/metro-babel-transformer@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))': dependencies: '@babel/core': 7.26.0 - '@react-native/babel-preset': 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) + '@react-native/babel-preset': 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) hermes-parser: 0.23.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -12976,26 +12479,28 @@ snapshots: '@react-native/normalize-colors@0.74.84': {} - '@react-native/normalize-colors@0.76.5': {} + '@react-native/normalize-colors@0.76.8': {} + + '@react-native/normalize-colors@0.76.9': {} - '@react-native/virtualized-lists@0.76.5(@types/react@18.3.18)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + '@react-native/virtualized-lists@0.76.9(@types/react@18.3.18)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@react-navigation/bottom-tabs@7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + '@react-navigation/bottom-tabs@7.2.0(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': dependencies: - '@react-navigation/elements': 2.2.5(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - '@react-navigation/native': 7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/elements': 2.2.5(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) color: 4.2.3 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) - react-native-safe-area-context: 4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - react-native-screens: 4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-screens: 4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -13006,38 +12511,38 @@ snapshots: nanoid: 3.3.8 query-string: 7.1.3 react: 18.3.1 - react-is: 18.2.0 + react-is: 18.3.1 use-latest-callback: 0.2.3(react@18.3.1) use-sync-external-store: 1.4.0(react@18.3.1) - '@react-navigation/elements@2.2.5(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + '@react-navigation/elements@2.2.5(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': dependencies: - '@react-navigation/native': 7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) color: 4.2.3 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) - react-native-safe-area-context: 4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - '@react-navigation/native-stack@7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + '@react-navigation/native-stack@7.2.0(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': dependencies: - '@react-navigation/elements': 2.2.5(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - '@react-navigation/native': 7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/elements': 2.2.5(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) - react-native-safe-area-context: 4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - react-native-screens: 4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-screens: 4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) warn-once: 0.1.1 transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + '@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': dependencies: '@react-navigation/core': 7.3.1(react@18.3.1) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.8 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) use-latest-callback: 0.2.3(react@18.3.1) '@react-navigation/routers@7.1.2': @@ -13050,61 +12555,7 @@ snapshots: conventional-changelog: 5.1.0 conventional-recommended-bump: 9.0.0 release-it: 17.6.0(typescript@5.3.3) - semver: 7.6.2 - - '@remix-run/node@2.15.2(typescript@5.3.3)': - dependencies: - '@remix-run/server-runtime': 2.15.2(typescript@5.3.3) - '@remix-run/web-fetch': 4.4.2 - '@web3-storage/multipart-parser': 1.0.0 - cookie-signature: 1.2.1 - source-map-support: 0.5.21 - stream-slice: 0.1.2 - undici: 6.19.2 - optionalDependencies: - typescript: 5.3.3 - - '@remix-run/router@1.21.0': {} - - '@remix-run/server-runtime@2.15.2(typescript@5.3.3)': - dependencies: - '@remix-run/router': 1.21.0 - '@types/cookie': 0.6.0 - '@web3-storage/multipart-parser': 1.0.0 - cookie: 0.6.0 - set-cookie-parser: 2.6.0 - source-map: 0.7.4 - turbo-stream: 2.4.0 - optionalDependencies: - typescript: 5.3.3 - - '@remix-run/web-blob@3.1.0': - dependencies: - '@remix-run/web-stream': 1.1.0 - web-encoding: 1.1.5 - - '@remix-run/web-fetch@4.4.2': - dependencies: - '@remix-run/web-blob': 3.1.0 - '@remix-run/web-file': 3.1.0 - '@remix-run/web-form-data': 3.1.0 - '@remix-run/web-stream': 1.1.0 - '@web3-storage/multipart-parser': 1.0.0 - abort-controller: 3.0.0 - data-uri-to-buffer: 3.0.1 - mrmime: 1.0.1 - - '@remix-run/web-file@3.1.0': - dependencies: - '@remix-run/web-blob': 3.1.0 - - '@remix-run/web-form-data@3.1.0': - dependencies: - web-encoding: 1.1.5 - - '@remix-run/web-stream@1.1.0': - dependencies: - web-streams-polyfill: 3.3.3 + semver: 7.7.1 '@segment/loosely-validate-event@2.0.0': dependencies: @@ -13168,6 +12619,15 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@testing-library/react-hooks@8.0.1(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + react: 18.3.1 + react-error-boundary: 3.1.4(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + react-dom: 18.3.1(react@18.3.1) + '@tootallnate/once@2.0.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -13193,8 +12653,6 @@ snapshots: dependencies: '@babel/types': 7.26.3 - '@types/cookie@0.6.0': {} - '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -13265,11 +12723,6 @@ snapshots: '@types/yargs-parser@21.0.0': {} - '@types/yargs@15.0.14': - dependencies: - '@types/yargs-parser': 21.0.0 - optional: true - '@types/yargs@17.0.13': dependencies: '@types/yargs-parser': 21.0.0 @@ -13287,7 +12740,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.3 + semver: 7.7.1 ts-api-utils: 1.0.3(typescript@5.3.3) optionalDependencies: typescript: 5.3.3 @@ -13333,7 +12786,7 @@ snapshots: debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.3 + semver: 7.7.1 ts-api-utils: 1.0.3(typescript@5.3.3) optionalDependencies: typescript: 5.3.3 @@ -13349,7 +12802,7 @@ snapshots: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) eslint: 8.49.0 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - typescript @@ -13371,8 +12824,6 @@ snapshots: '@urql/core': 5.1.0(graphql@15.8.0) wonka: 6.3.4 - '@web3-storage/multipart-parser@1.0.0': {} - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -13455,9 +12906,6 @@ snapshots: '@xtuc/long@4.2.2': {} - '@zxing/text-encoding@0.9.0': - optional: true - JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -13476,7 +12924,7 @@ snapshots: acorn-globals@7.0.1: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk: 8.3.3 acorn-jsx@5.3.2(acorn@8.10.0): @@ -13485,16 +12933,14 @@ snapshots: acorn-loose@8.4.0: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk@8.3.3: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn@8.10.0: {} - acorn@8.12.1: {} - acorn@8.14.0: {} add-stream@1.0.0: {} @@ -13589,9 +13035,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - appdirsjs@1.2.7: - optional: true - application-config-path@0.1.0: {} arg@4.1.0: {} @@ -13606,7 +13049,7 @@ snapshots: aria-query@4.2.2: dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.26.0 '@babel/runtime-corejs3': 7.19.4 array-buffer-byte-length@1.0.0: @@ -13712,7 +13155,7 @@ snapshots: babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.6.3(@babel/core@7.26.0) chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color @@ -13770,7 +13213,7 @@ snapshots: babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.26.0): dependencies: - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.26.0) + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) transitivePeerDependencies: - '@babel/core' @@ -13795,15 +13238,15 @@ snapshots: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) - babel-preset-expo@12.0.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)): + babel-preset-expo@12.0.11(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)): dependencies: '@babel/plugin-proposal-decorators': 7.19.3(@babel/core@7.26.0) '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.26.0) - '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.26.0) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) '@babel/preset-react': 7.24.1(@babel/core@7.26.0) '@babel/preset-typescript': 7.24.1(@babel/core@7.26.0) - '@react-native/babel-preset': 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) + '@react-native/babel-preset': 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) babel-plugin-react-native-web: 0.19.13 react-refresh: 0.14.2 transitivePeerDependencies: @@ -13920,7 +13363,7 @@ snapshots: fs-minipass: 3.0.3 glob: 10.4.5 lru-cache: 10.2.2 - minipass: 7.1.1 + minipass: 7.1.2 minipass-collect: 2.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -14213,7 +13656,7 @@ snapshots: handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 12.1.1 - semver: 7.6.3 + semver: 7.7.1 split2: 4.2.0 conventional-changelog@5.1.0: @@ -14250,10 +13693,6 @@ snapshots: convert-source-map@2.0.0: {} - cookie-signature@1.2.1: {} - - cookie@0.6.0: {} - core-js-compat@3.40.0: dependencies: browserslist: 4.24.4 @@ -14340,8 +13779,6 @@ snapshots: dargs@8.1.0: {} - data-uri-to-buffer@3.0.1: {} - data-uri-to-buffer@4.0.1: {} data-uri-to-buffer@6.0.2: {} @@ -14427,7 +13864,7 @@ snapshots: del@6.1.1: dependencies: globby: 11.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 is-glob: 4.0.3 is-path-cwd: 2.2.0 is-path-inside: 3.0.3 @@ -14524,12 +13961,6 @@ snapshots: dependencies: stackframe: 1.3.4 - errorhandler@1.5.1: - dependencies: - accepts: 1.3.8 - escape-html: 1.0.3 - optional: true - es-abstract@1.22.2: dependencies: array-buffer-byte-length: 1.0.0 @@ -14714,7 +14145,7 @@ snapshots: eslint-plugin-jsx-a11y@6.6.1(eslint@8.49.0): dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.26.0 aria-query: 4.2.2 array-includes: 3.1.7 ast-types-flow: 0.0.7 @@ -14921,116 +14352,111 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - expo-asset@11.0.1(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + expo-asset@11.0.5(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: - '@expo/image-utils': 0.6.3 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-constants: 17.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) + '@expo/image-utils': 0.6.5 + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-constants: 17.0.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) invariant: 2.2.4 md5-file: 3.2.3 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) transitivePeerDependencies: - supports-color - expo-build-properties@0.13.1(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + expo-build-properties@0.13.2(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): dependencies: ajv: 8.12.0 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - semver: 7.6.2 + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + semver: 7.7.1 - expo-constants@17.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)): + expo-constants@17.0.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)): dependencies: - '@expo/config': 10.0.7 - '@expo/env': 0.4.0 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + '@expo/config': 10.0.11 + '@expo/env': 0.4.2 + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) transitivePeerDependencies: - supports-color - expo-dev-client@5.0.8(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + expo-dev-client@5.0.20(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-dev-launcher: 5.0.21(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) - expo-dev-menu: 6.0.15(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) - expo-dev-menu-interface: 1.9.2(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) - expo-manifests: 0.15.4(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) - expo-updates-interface: 1.0.0(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-dev-launcher: 5.0.35(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-dev-menu: 6.0.25(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-dev-menu-interface: 1.9.3(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-manifests: 0.15.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-updates-interface: 1.0.0(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) transitivePeerDependencies: - supports-color - expo-dev-launcher@5.0.21(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + expo-dev-launcher@5.0.35(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): dependencies: ajv: 8.11.0 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-dev-menu: 6.0.14(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) - expo-manifests: 0.15.4(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-dev-menu: 6.0.25(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-manifests: 0.15.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) resolve-from: 5.0.0 transitivePeerDependencies: - supports-color - expo-dev-menu-interface@1.9.2(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): - dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - - expo-dev-menu@6.0.14(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + expo-dev-menu-interface@1.9.3(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-dev-menu-interface: 1.9.2(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-dev-menu@6.0.15(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + expo-dev-menu@6.0.25(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-dev-menu-interface: 1.9.2(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-dev-menu-interface: 1.9.3(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) - expo-eas-client@0.13.1: {} + expo-eas-client@0.13.3: {} - expo-file-system@18.0.6(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)): + expo-file-system@18.0.12(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)): dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) web-streams-polyfill: 3.3.3 - expo-font@13.0.2(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): + expo-font@13.0.4(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) fontfaceobserver: 2.3.0 react: 18.3.1 - expo-image@2.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + expo-image@2.0.7(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) optionalDependencies: react-native-web: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) expo-json-utils@0.14.0: {} - expo-keep-awake@14.0.1(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): + expo-keep-awake@14.0.3(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react: 18.3.1 - expo-linking@7.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + expo-linking@7.0.5(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: - expo-constants: 17.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) + expo-constants: 17.0.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) invariant: 2.2.4 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) transitivePeerDependencies: - expo - supports-color - expo-manifests@0.15.4(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + expo-manifests@0.15.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): dependencies: - '@expo/config': 10.0.7 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@expo/config': 10.0.11 + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) expo-json-utils: 0.14.0 transitivePeerDependencies: - supports-color - expo-modules-autolinking@2.0.4: + expo-modules-autolinking@2.0.8: dependencies: '@expo/spawn-async': 1.7.2 chalk: 4.1.2 @@ -15041,82 +14467,81 @@ snapshots: require-from-string: 2.0.2 resolve-from: 5.0.0 - expo-modules-core@2.1.2: + expo-modules-core@2.2.3: dependencies: invariant: 2.2.4 - expo-router@4.0.16(53mxfbsp7mgsg6qridtbs27zrq): + expo-router@4.0.20(xuhaadxw236jaxicigy2i7zuye): dependencies: - '@expo/metro-runtime': 4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) - '@expo/server': 0.5.0(typescript@5.3.3) + '@expo/metro-runtime': 4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) + '@expo/server': 0.5.3 '@radix-ui/react-slot': 1.0.1(react@18.3.1) - '@react-navigation/bottom-tabs': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - '@react-navigation/native': 7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - '@react-navigation/native-stack': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/bottom-tabs': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native-stack': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) client-only: 0.0.1 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-constants: 17.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) - expo-linking: 7.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-constants: 17.0.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) + expo-linking: 7.0.5(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-native-helmet-async: 2.0.4(react@18.3.1) - react-native-is-edge-to-edge: 1.1.6(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - react-native-safe-area-context: 4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - react-native-screens: 4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - schema-utils: 4.2.0 + react-native-is-edge-to-edge: 1.1.6(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-screens: 4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + schema-utils: 4.3.0 semver: 7.6.3 server-only: 0.0.1 optionalDependencies: - react-native-reanimated: 3.16.6(@babel/core@7.26.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-reanimated: 3.16.6(@babel/core@7.26.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@react-native-masked-view/masked-view' - react - react-dom - react-native - supports-color - - typescript - expo-splash-screen@0.29.19(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + expo-splash-screen@0.29.22(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): dependencies: - '@expo/prebuild-config': 8.0.24 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@expo/prebuild-config': 8.0.31 + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - supports-color - expo-status-bar@2.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + expo-status-bar@2.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) expo-structured-headers@4.0.0: {} - expo-system-ui@4.0.6(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)): + expo-system-ui@4.0.9(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)): dependencies: - '@react-native/normalize-colors': 0.76.5 + '@react-native/normalize-colors': 0.76.8 debug: 4.4.0 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) optionalDependencies: react-native-web: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - supports-color - expo-updates-interface@1.0.0(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + expo-updates-interface@1.0.0(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): dependencies: - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-updates@0.26.11(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): + expo-updates@0.27.4(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: '@expo/code-signing-certificates': 0.0.5 - '@expo/config': 10.0.7 - '@expo/config-plugins': 9.0.13 + '@expo/config': 10.0.11 + '@expo/config-plugins': 9.0.17 '@expo/spawn-async': 1.7.2 arg: 4.1.0 chalk: 4.1.2 - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-eas-client: 0.13.1 - expo-manifests: 0.15.4(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-eas-client: 0.13.3 + expo-manifests: 0.15.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) expo-structured-headers: 4.0.0 - expo-updates-interface: 1.0.0(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-updates-interface: 1.0.0(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) fast-glob: 3.3.2 fbemitter: 3.0.0 ignore: 5.3.1 @@ -15126,30 +14551,30 @@ snapshots: - encoding - supports-color - expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.21.0 - '@expo/cli': 0.22.8(graphql@15.8.0) - '@expo/config': 10.0.7 - '@expo/config-plugins': 9.0.13 - '@expo/fingerprint': 0.11.6 - '@expo/metro-config': 0.19.8 + '@babel/runtime': 7.26.0 + '@expo/cli': 0.22.24(graphql@15.8.0) + '@expo/config': 10.0.11 + '@expo/config-plugins': 9.0.17 + '@expo/fingerprint': 0.11.11 + '@expo/metro-config': 0.19.12 '@expo/vector-icons': 14.0.2 - babel-preset-expo: 12.0.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) - expo-asset: 11.0.1(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - expo-constants: 17.0.3(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) - expo-file-system: 18.0.6(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) - expo-font: 13.0.2(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) - expo-keep-awake: 14.0.1(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) - expo-modules-autolinking: 2.0.4 - expo-modules-core: 2.1.2 + babel-preset-expo: 12.0.11(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) + expo-asset: 11.0.5(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-constants: 17.0.8(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) + expo-file-system: 18.0.12(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) + expo-font: 13.0.4(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + expo-keep-awake: 14.0.3(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + expo-modules-autolinking: 2.0.8 + expo-modules-core: 2.2.3 fbemitter: 3.0.0 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) web-streams-polyfill: 3.3.3 whatwg-url-without-unicode: 8.0.0-3 optionalDependencies: - '@expo/metro-runtime': 4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)) + '@expo/metro-runtime': 4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)) transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -15317,27 +14742,27 @@ snapshots: fs-extra@11.2.0: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 fs-extra@8.1.0: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 fs-extra@9.0.0: dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 1.0.0 fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 @@ -15416,7 +14841,7 @@ snapshots: git-semver-tags@7.0.1: dependencies: meow: 12.1.1 - semver: 7.6.3 + semver: 7.7.1 git-up@7.0.0: dependencies: @@ -15735,11 +15160,6 @@ snapshots: ipaddr.js@1.9.1: {} - is-arguments@1.1.1: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-array-buffer@3.0.2: dependencies: call-bind: 1.0.7 @@ -15906,9 +15326,6 @@ snapshots: call-bind: 1.0.7 get-intrinsic: 1.2.4 - is-wsl@1.1.0: - optional: true - is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -15951,7 +15368,7 @@ snapshots: '@babel/parser': 7.26.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -16112,14 +15529,14 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-expo@52.0.2(@babel/core@7.26.0)(expo@52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(jest@29.7.0(@types/node@18.19.33))(react-dom@18.3.1(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(webpack@5.97.1): + jest-expo@52.0.6(@babel/core@7.26.0)(expo@52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(jest@29.7.0(@types/node@18.19.33))(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(webpack@5.97.1): dependencies: - '@expo/config': 10.0.7 - '@expo/json-file': 9.0.0 + '@expo/config': 10.0.11 + '@expo/json-file': 9.0.2 '@jest/create-cache-key-function': 29.7.0 '@jest/globals': 29.7.0 babel-jest: 29.7.0(@babel/core@7.26.0) - expo: 52.0.24(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo: 52.0.44(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1)))(graphql@15.8.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) fbemitter: 3.0.0 find-up: 5.0.0 jest-environment-jsdom: 29.7.0 @@ -16128,7 +15545,7 @@ snapshots: jest-watch-typeahead: 2.2.1(jest@29.7.0(@types/node@18.19.33)) json5: 2.2.3 lodash: 4.17.21 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) react-server-dom-webpack: 19.0.0-rc-6230622a1a-20240610(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.97.1) react-test-renderer: 18.3.1(react@18.3.1) server-only: 0.0.1 @@ -16292,7 +15709,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -16403,7 +15820,7 @@ snapshots: babel-core: 7.0.0-bridge.0(@babel/core@7.26.0) chalk: 4.1.2 flow-parser: 0.190.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 node-dir: 0.1.17 @@ -16416,7 +15833,7 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.12.1 + acorn: 8.14.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -16446,8 +15863,6 @@ snapshots: - supports-color - utf-8-validate - jsesc@2.5.2: {} - jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -16476,13 +15891,13 @@ snapshots: jsonfile@4.0.0: optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile@6.1.0: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonparse@1.3.1: {} @@ -16682,7 +16097,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 makeerror@1.0.12: dependencies: @@ -16756,7 +16171,7 @@ snapshots: debug: 2.6.9 fb-watchman: 2.0.2 flow-enums-runtime: 0.0.6 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 invariant: 2.2.4 jest-worker: 29.7.0 micromatch: 4.0.8 @@ -16771,7 +16186,7 @@ snapshots: metro-minify-terser@0.81.0: dependencies: flow-enums-runtime: 0.0.6 - terser: 5.16.5 + terser: 5.37.0 metro-resolver@0.81.0: dependencies: @@ -16857,7 +16272,7 @@ snapshots: denodeify: 1.2.1 error-stack-parser: 2.1.4 flow-enums-runtime: 0.0.6 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 hermes-parser: 0.24.0 image-size: 1.0.2 invariant: 2.2.4 @@ -16907,9 +16322,6 @@ snapshots: mime@1.6.0: {} - mime@2.6.0: - optional: true - mimic-fn@1.2.0: {} mimic-fn@2.1.0: {} @@ -16948,8 +16360,6 @@ snapshots: minipass@5.0.0: {} - minipass@7.1.1: {} - minipass@7.1.2: {} minizlib@2.1.2: @@ -16963,8 +16373,6 @@ snapshots: mkdirp@1.0.4: {} - mrmime@1.0.1: {} - ms@2.0.0: {} ms@2.1.2: {} @@ -16986,8 +16394,6 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.7: {} - nanoid@3.3.8: {} natural-compare@1.4.0: {} @@ -17009,9 +16415,6 @@ snapshots: nice-try@1.0.5: {} - nocache@3.0.4: - optional: true - node-abort-controller@3.1.1: {} node-dir@0.1.17: @@ -17039,7 +16442,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.6.3 + semver: 7.7.1 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -17050,7 +16453,7 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.6.3 + semver: 7.7.1 validate-npm-package-name: 5.0.1 npm-run-path@2.0.2: @@ -17149,11 +16552,6 @@ snapshots: is-inside-container: 1.0.0 is-wsl: 3.1.0 - open@6.4.0: - dependencies: - is-wsl: 1.1.0 - optional: true - open@7.4.2: dependencies: is-docker: 2.2.1 @@ -17277,7 +16675,7 @@ snapshots: ky: 1.4.0 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.6.3 + semver: 7.7.1 parent-module@1.0.1: dependencies: @@ -17351,8 +16749,6 @@ snapshots: path-type@5.0.0: {} - picocolors@1.0.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -17386,8 +16782,8 @@ snapshots: postcss@8.4.38: dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 + nanoid: 3.3.8 + picocolors: 1.1.1 source-map-js: 1.2.0 prelude-ls@1.2.1: {} @@ -17400,14 +16796,6 @@ snapshots: pretty-bytes@5.6.0: {} - pretty-format@26.6.2: - dependencies: - '@jest/types': 26.6.2 - ansi-regex: 5.0.1 - ansi-styles: 4.3.0 - react-is: 17.0.2 - optional: true - pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 @@ -17508,7 +16896,7 @@ snapshots: react-devtools-core@5.3.2: dependencies: shell-quote: 1.7.4 - ws: 7.5.9 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -17519,6 +16907,11 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-error-boundary@3.1.4(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + react: 18.3.1 + react-fast-compare@3.2.2: {} react-freeze@1.0.3(react@18.3.1): @@ -17527,7 +16920,7 @@ snapshots: react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.26.0 invariant: 2.2.4 prop-types: 15.8.1 react: 18.3.1 @@ -17537,21 +16930,18 @@ snapshots: react-is@16.13.1: {} - react-is@17.0.2: - optional: true - react-is@18.2.0: {} react-is@18.3.1: {} - react-native-gesture-handler@2.20.2(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + react-native-gesture-handler@2.20.2(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: '@egjs/hammerjs': 2.0.17 hoist-non-react-statics: 3.3.2 invariant: 2.2.4 prop-types: 15.8.1 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) react-native-helmet-async@2.0.4(react@18.3.1): dependencies: @@ -17560,17 +16950,17 @@ snapshots: react-fast-compare: 3.2.2 shallowequal: 1.1.0 - react-native-is-edge-to-edge@1.1.6(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + react-native-is-edge-to-edge@1.1.6(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) - react-native-mmkv@3.2.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + react-native-mmkv@3.2.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) - react-native-reanimated@3.16.6(@babel/core@7.26.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + react-native-reanimated@3.16.6(@babel/core@7.26.0)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) @@ -17585,20 +16975,20 @@ snapshots: convert-source-map: 2.0.0 invariant: 2.2.4 react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) transitivePeerDependencies: - supports-color - react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) - react-native-screens@4.4.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-freeze: 1.0.3(react@18.3.1) - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1) warn-once: 0.1.1 react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -17616,16 +17006,16 @@ snapshots: transitivePeerDependencies: - encoding - react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1): + react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1): dependencies: '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.76.5 - '@react-native/codegen': 0.76.5(@babel/preset-env@7.24.5(@babel/core@7.26.0)) - '@react-native/community-cli-plugin': 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6) - '@react-native/gradle-plugin': 0.76.5 - '@react-native/js-polyfills': 0.76.5 - '@react-native/normalize-colors': 0.76.5 - '@react-native/virtualized-lists': 0.76.5(@types/react@18.3.18)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.6)(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native/assets-registry': 0.76.9 + '@react-native/codegen': 0.76.9(@babel/preset-env@7.24.5(@babel/core@7.26.0)) + '@react-native/community-cli-plugin': 0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0)) + '@react-native/gradle-plugin': 0.76.9 + '@react-native/js-polyfills': 0.76.9 + '@react-native/normalize-colors': 0.76.9 + '@react-native/virtualized-lists': 0.76.9(@types/react@18.3.18)(react-native@0.76.9(@babel/core@7.26.0)(@babel/preset-env@7.24.5(@babel/core@7.26.0))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -17652,7 +17042,7 @@ snapshots: react-refresh: 0.14.2 regenerator-runtime: 0.13.11 scheduler: 0.24.0-canary-efb381bbf-20230505 - semver: 7.6.2 + semver: 7.7.1 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.2 ws: 6.2.3 @@ -17662,7 +17052,7 @@ snapshots: transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' - - '@react-native-community/cli-server-api' + - '@react-native-community/cli' - bufferutil - encoding - supports-color @@ -17758,7 +17148,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.26.0 regexp.prototype.flags@1.5.1: dependencies: @@ -17857,6 +17247,8 @@ snapshots: resolve.exports@2.0.2: {} + resolve.exports@2.0.3: {} + resolve@1.22.8: dependencies: is-core-module: 2.13.1 @@ -17969,13 +17361,6 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.2.0: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - schema-utils@4.3.0: dependencies: '@types/json-schema': 7.0.15 @@ -17990,7 +17375,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 semver@5.7.1: {} @@ -18000,6 +17385,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.1: {} + send@0.18.0: dependencies: debug: 2.6.9 @@ -18053,8 +17440,6 @@ snapshots: server-only@0.0.1: {} - set-cookie-parser@2.6.0: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -18171,8 +17556,6 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: {} - spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -18236,8 +17619,6 @@ snapshots: stream-buffers@2.2.0: {} - stream-slice@0.1.2: {} - strict-uri-encode@2.0.0: {} string-argv@0.3.2: {} @@ -18352,9 +17733,6 @@ snapshots: sudo-prompt@9.1.1: {} - sudo-prompt@9.2.1: - optional: true - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -18420,13 +17798,6 @@ snapshots: terser: 5.37.0 webpack: 5.97.1 - terser@5.16.5: - dependencies: - '@jridgewell/source-map': 0.3.2 - acorn: 8.12.1 - commander: 2.20.3 - source-map-support: 0.5.21 - terser@5.37.0: dependencies: '@jridgewell/source-map': 0.3.6 @@ -18467,8 +17838,6 @@ snapshots: tmpl@1.0.5: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -18503,8 +17872,6 @@ snapshots: tslib@2.6.2: {} - turbo-stream@2.4.0: {} - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -18636,7 +18003,7 @@ snapshots: is-npm: 6.0.0 latest-version: 9.0.0 pupa: 3.1.0 - semver: 7.6.2 + semver: 7.7.1 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -18655,24 +18022,12 @@ snapshots: dependencies: react: 18.3.1 - use-sync-external-store@1.2.0(react@18.3.1): - dependencies: - react: 18.3.1 - use-sync-external-store@1.4.0(react@18.3.1): dependencies: react: 18.3.1 util-deprecate@1.0.2: {} - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.12 - which-typed-array: 1.1.15 - utils-merge@1.0.1: {} uuid@7.0.3: {} @@ -18715,12 +18070,6 @@ snapshots: dependencies: defaults: 1.0.4 - web-encoding@1.1.5: - dependencies: - util: 0.12.5 - optionalDependencies: - '@zxing/text-encoding': 0.9.0 - web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} @@ -18895,8 +18244,6 @@ snapshots: ws@7.5.10: {} - ws@7.5.9: {} - ws@8.13.0: {} xcode@3.0.1: @@ -18948,10 +18295,3 @@ snapshots: yocto-queue@1.1.1: {} yoctocolors-cjs@2.1.2: {} - - zustand@4.5.2(@types/react@18.3.18)(react@18.3.1): - dependencies: - use-sync-external-store: 1.2.0(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - react: 18.3.1 diff --git a/src/constants/expo.ts b/src/constants/expo.ts deleted file mode 100644 index 133ef65..0000000 --- a/src/constants/expo.ts +++ /dev/null @@ -1,4 +0,0 @@ -import Constants from 'expo-constants' - -export const isExpoGo = Constants.appOwnership === 'expo' -export const isExpoDevClient = __DEV__ && !isExpoGo diff --git a/src/features/auth/hooks/useAuth.ts b/src/features/auth/hooks/useAuth.ts index 8a33fbe..70654f4 100644 --- a/src/features/auth/hooks/useAuth.ts +++ b/src/features/auth/hooks/useAuth.ts @@ -1,20 +1,22 @@ -import { router } from 'expo-router' - -import { useRootStore } from '~/store/useRootStore' +import { useRouter } from 'expo-router' +import { useMMKVString } from 'react-native-mmkv' export const useAuth = () => { - const accessToken = useRootStore((state) => state.accessToken) - const setAccessToken = useRootStore((state) => state.setAccessToken) + const [accessToken, setAccessToken] = useMMKVString('accessToken') + const router = useRouter() - const signOut = useRootStore((state) => state.logoutUser) const signIn = () => { setAccessToken('dummyToken') - router.replace('/') + router.dismissTo('/') + } + + const signOut = () => { + setAccessToken(undefined) } return { isSignedIn: Boolean(accessToken), - signOut, signIn, + signOut, } } diff --git a/src/features/auth/screens/SignInScreen/index.tsx b/src/features/auth/screens/SignInScreen/index.tsx index f6d0f77..a6f79db 100644 --- a/src/features/auth/screens/SignInScreen/index.tsx +++ b/src/features/auth/screens/SignInScreen/index.tsx @@ -1,7 +1,7 @@ import { View, Text } from 'react-native' -import { Button } from '~/components/Button' import { useAuth } from '~/features/auth/hooks/useAuth' +import { Button } from '~/features/ui/components/Button' import { ms } from '~/utils/scale' export const SignIn = () => { diff --git a/src/features/dashboard/screens/DashboardScreen/index.tsx b/src/features/dashboard/screens/DashboardScreen/index.tsx index c0aaaa7..ac73c68 100644 --- a/src/features/dashboard/screens/DashboardScreen/index.tsx +++ b/src/features/dashboard/screens/DashboardScreen/index.tsx @@ -1,13 +1,13 @@ import { Image } from 'expo-image' import { View, Text } from 'react-native' -import { ms } from '~/utils/scale' +import { styles } from './styles' -export const Dashboard = () => { +export const DashboardScreen = () => { return ( - - Dashboard - + + Dashboard + ) } diff --git a/src/features/dashboard/screens/DashboardScreen/styles.ts b/src/features/dashboard/screens/DashboardScreen/styles.ts new file mode 100644 index 0000000..1ee0f24 --- /dev/null +++ b/src/features/dashboard/screens/DashboardScreen/styles.ts @@ -0,0 +1,19 @@ +import { StyleSheet } from 'react-native' + +import { colors } from '~/features/ui/theme/colors' +import { ms } from '~/utils/scale' + +export const styles = StyleSheet.create({ + container: { + alignItems: 'center', + flex: 1, + }, + title: { + fontSize: ms(20), + }, + image: { + width: '100%', + flex: 1, + backgroundColor: colors.black, + }, +}) diff --git a/src/components/OfflineMessage.tsx b/src/features/offlineCheck/components/OfflineMessage.tsx similarity index 95% rename from src/components/OfflineMessage.tsx rename to src/features/offlineCheck/components/OfflineMessage.tsx index 673ef0b..9c899a7 100644 --- a/src/components/OfflineMessage.tsx +++ b/src/features/offlineCheck/components/OfflineMessage.tsx @@ -4,7 +4,7 @@ import { useEffect, useState } from 'react' import { Pressable, Text, View } from 'react-native' import { useSafeAreaInsets } from 'react-native-safe-area-context' -import { colors } from '~/styles/colors' +import { colors } from '~/features/ui/theme/colors' export const OfflineMessage = () => { const { bottom } = useSafeAreaInsets() diff --git a/src/hooks/useIsOnline.tsx b/src/features/offlineCheck/hooks/useIsOnline.tsx similarity index 100% rename from src/hooks/useIsOnline.tsx rename to src/features/offlineCheck/hooks/useIsOnline.tsx diff --git a/src/features/profile/screens/ProfileScreen/index.tsx b/src/features/profile/screens/ProfileScreen/index.tsx index 07db012..e3d549b 100644 --- a/src/features/profile/screens/ProfileScreen/index.tsx +++ b/src/features/profile/screens/ProfileScreen/index.tsx @@ -1,7 +1,7 @@ import { Text, View } from 'react-native' -import { Button } from '~/components/Button' import { useAuth } from '~/features/auth/hooks/useAuth' +import { Button } from '~/features/ui/components/Button' import { ms } from '~/utils/scale' export const Profile = () => { diff --git a/src/components/Button.tsx b/src/features/ui/components/Button.tsx similarity index 55% rename from src/components/Button.tsx rename to src/features/ui/components/Button.tsx index 0466c59..6ead331 100644 --- a/src/components/Button.tsx +++ b/src/features/ui/components/Button.tsx @@ -1,8 +1,8 @@ import { StyleSheet, Text, TouchableOpacity } from 'react-native' -import { colors } from '~/styles/colors' +import { colors } from '~/features/ui/theme/colors' -interface IButton { +type ButtonProps = { text: string onPress: () => void } @@ -14,12 +14,15 @@ const styles = StyleSheet.create({ margin: 8, alignItems: 'center', }, + text: { + fontFamily: 'Domine-Bold', + textTransform: 'uppercase', + color: 'white', + }, }) -export const Button = ({ text, onPress }: IButton) => ( +export const Button = ({ text, onPress }: ButtonProps) => ( - - {text} - + {text} ) diff --git a/src/features/ui/styles/common.ts b/src/features/ui/styles/common.ts new file mode 100644 index 0000000..97cb6cb --- /dev/null +++ b/src/features/ui/styles/common.ts @@ -0,0 +1,20 @@ +import { StyleSheet } from 'react-native' + +export const commonStyles = StyleSheet.create({ + f1: { + flex: 1, + }, + w100: { + width: '100%', + }, + w100h100: { + width: '100%', + height: '100%', + }, + scrollContent: { + flexGrow: 1, + }, + mtAuto: { + marginTop: 'auto', + }, +}) diff --git a/src/styles/colors.ts b/src/features/ui/theme/colors.ts similarity index 100% rename from src/styles/colors.ts rename to src/features/ui/theme/colors.ts diff --git a/src/components/ForcedUpdate.tsx b/src/features/versionCheck/components/ForcedUpdate.tsx similarity index 60% rename from src/components/ForcedUpdate.tsx rename to src/features/versionCheck/components/ForcedUpdate.tsx index 4b6b2d6..77f4511 100644 --- a/src/components/ForcedUpdate.tsx +++ b/src/features/versionCheck/components/ForcedUpdate.tsx @@ -1,10 +1,10 @@ import * as Linking from 'expo-linking' import { useEffect } from 'react' -import { View, Alert } from 'react-native' +import { View, Alert, AlertButton } from 'react-native' import { getStoreLink } from '~/utils/getStoreLink' -export const ForcedUpdate = () => { +export const ForcedUpdate = ({ cancelable = true }: { cancelable?: boolean }) => { useEffect(() => { const handleUpdate = async () => { const storeLink = getStoreLink() @@ -16,18 +16,23 @@ export const ForcedUpdate = () => { } } + const buttonCancel = { + text: 'Not now', + onPress: () => {}, + } + + const buttonUpdate = { + text: 'Update', + onPress: handleUpdate, + } + Alert.alert( 'Update Available', 'Updating to the latest version provides the newest features, security updates, and bug fixes. Tap below to update the app.', - [ - { - text: 'Update', - onPress: handleUpdate, - }, - ], - { cancelable: false }, + [cancelable && buttonCancel, buttonUpdate].filter(Boolean) as AlertButton[], + { cancelable }, ) - }, []) + }, [cancelable]) return } diff --git a/src/hooks/useOTAUpdate.tsx b/src/features/versionCheck/hooks/useOTAUpdate.tsx similarity index 100% rename from src/hooks/useOTAUpdate.tsx rename to src/features/versionCheck/hooks/useOTAUpdate.tsx diff --git a/src/features/versionCheck/hooks/useStoreUpdate/index.test.ts b/src/features/versionCheck/hooks/useStoreUpdate/index.test.ts new file mode 100644 index 0000000..3f7edfd --- /dev/null +++ b/src/features/versionCheck/hooks/useStoreUpdate/index.test.ts @@ -0,0 +1,94 @@ +import { renderHook } from '@testing-library/react-hooks' + +import { useStoreUpdate } from './index' + +import { useStorageString } from '~/services/storage' + +// Mock the storage hook +jest.mock('~/services/storage', () => ({ + useStorageString: jest.fn(), + StorageKeys: { + RecommendedUpdate: 'recommendedUpdate', + }, +})) + +// Mock Platform.select +jest.mock('react-native', () => ({ + Platform: { + select: jest.fn(({ ios }) => ios), // Simplified to always return iOS version + OS: 'ios', + }, +})) + +// Mock package.json +jest.mock('package.json', () => ({ + version: '1.0.0', +})) + +const mockData = { + recommendedIOSVersion: '1.0.0', + recommendedAndroidVersion: '1.1.0', + minIOSVersion: '0.9.0', + minAndroidVersion: '0.9.5', +} + +describe('useStoreUpdate', () => { + beforeEach(() => { + jest.clearAllMocks() + // Default mock implementation + ;(useStorageString as jest.Mock).mockReturnValue([null]) + }) + + it('should handle loading state', () => { + const { result } = renderHook(() => useStoreUpdate({ loading: true })) + expect(result.current.loading).toBe(true) + }) + + it('should return correct platform-specific versions', () => { + const { result } = renderHook(() => useStoreUpdate({ data: mockData })) + + expect(result.current.recommendedVersion).toBe(mockData.recommendedIOSVersion) + expect(result.current.forceUpdateVersion).toBe(mockData.minIOSVersion) + }) + + it('should not force update when version is supported', () => { + const { result } = renderHook(() => useStoreUpdate({ data: mockData })) + expect(result.current.shouldForceUpdate).toBe(false) + }) + + it('should force update when version is not supported', () => { + const forceUpdateData = { + ...mockData, + minIOSVersion: '2.0.0', // Higher than current version + } + + const { result } = renderHook(() => useStoreUpdate({ data: forceUpdateData })) + expect(result.current.shouldForceUpdate).toBe(true) + }) + + it('should not recommend update when force update is required', () => { + const forceUpdateData = { + ...mockData, + minIOSVersion: '2.0.0', // Higher than current version + } + + const { result } = renderHook(() => useStoreUpdate({ data: forceUpdateData })) + expect(result.current.shouldRecommendUpdate).toBe(false) + }) + + it('should recommend update when version is not supported and not forced', () => { + const recommendUpdateData = { + ...mockData, + recommendedIOSVersion: '2.0.0', // Higher than current version + } + + const { result } = renderHook(() => useStoreUpdate({ data: recommendUpdateData })) + expect(result.current.shouldRecommendUpdate).toBe(true) + }) + + it('should not recommend update when recommended version matches stored version', () => { + ;(useStorageString as jest.Mock).mockReturnValue(['1.0.0']) + const { result } = renderHook(() => useStoreUpdate({ data: mockData })) + expect(result.current.shouldRecommendUpdate).toBe(false) + }) +}) diff --git a/src/features/versionCheck/hooks/useStoreUpdate/index.tsx b/src/features/versionCheck/hooks/useStoreUpdate/index.tsx new file mode 100644 index 0000000..3d2aacb --- /dev/null +++ b/src/features/versionCheck/hooks/useStoreUpdate/index.tsx @@ -0,0 +1,50 @@ +import packageJson from 'package.json' +import { Platform } from 'react-native' +import semver from 'semver' + +import { useStorageString, StorageKeys } from '~/services/storage' + +const getIfVersionIsSupported = (version: string | undefined, appVersion = packageJson.version) => { + if (!version) return true + if (semver.valid(version) === null) return true + return semver.gte(appVersion, version) +} + +type UseStoreUpdateProps = { + loading?: boolean + data?: { + recommendedIOSVersion: string + recommendedAndroidVersion: string + minIOSVersion: string + minAndroidVersion: string + } +} + +export const useStoreUpdate = ({ data, loading }: UseStoreUpdateProps) => { + const [recommendedUpdate] = useStorageString(StorageKeys.RecommendedUpdate) + + const recommendedVersion = Platform.select({ + ios: data?.recommendedIOSVersion, + android: data?.recommendedAndroidVersion, + }) + + const forceUpdateVersion = Platform.select({ + ios: data?.minIOSVersion, + android: data?.minAndroidVersion, + }) + + const shouldForceUpdate = !getIfVersionIsSupported(forceUpdateVersion) + + const shouldRecommendUpdate = + shouldForceUpdate || recommendedUpdate === recommendedVersion + ? false + : !getIfVersionIsSupported(recommendedVersion) + + return { + loading, + shouldRecommendUpdate, + shouldForceUpdate, + recommendedVersion, + forceUpdateVersion, + } +} diff --git a/src/hooks/useStoreUpdate.tsx b/src/hooks/useStoreUpdate.tsx deleted file mode 100644 index 88cb52b..0000000 --- a/src/hooks/useStoreUpdate.tsx +++ /dev/null @@ -1,71 +0,0 @@ -// - -// import remoteConfig from '@react-native-firebase/remote-config' -import { useState, useEffect } from 'react' -// import { Platform } from 'react-native' - -// import { config } from '~/config' - -// eslint-disable-next-line prefer-named-capture-group -const SEMANTIC_VERSION_REGEX = /^([1-9][0-9]*|[0]+)\.([1-9][0-9]*|[0]+)\.([1-9][0-9]*|[0]+)$/u - -const checkSemanticity = (version: string): boolean => - SEMANTIC_VERSION_REGEX.test(version.split('-')[0]) - -const getVersionAttributes = (version: string) => { - const [major, minor, patch] = version.split('-')[0].split('.') - return [Number(major), Number(minor), Number(patch)] -} - -type UpdateVariant = 'forced' | 'suggested' - -// const minimumSupportedVersionKey = `minimum_supported_version_${Platform.OS}` -// const latestReleasedVersionKey = 'latest_released_version' - -const getIsAppOutdated = async (_variant: UpdateVariant) => { - try { - // await remoteConfig().fetch(1800) - // await remoteConfig().activate() - // void remoteConfig().ensureInitialized() - - // const remoteConfigKey = - // variant === 'suggested' ? latestReleasedVersionKey : minimumSupportedVersionKey - - // const comparableVersion = remoteConfig().getValue(remoteConfigKey).asString() - // const installedAppVersion = config.installedAppVersion - - const comparableVersion = '0.0.0' - const installedAppVersion = '0.0.0' - - if (!comparableVersion || !installedAppVersion) return false - - // if the shape of versions is unexpected, no forced update prompted, expecting `major.minor.patch` with optional `-buildNumber` - if (!checkSemanticity(installedAppVersion) || !checkSemanticity(comparableVersion)) return false - - const [supportedMajor, supportedMinor, supportedPatch] = getVersionAttributes(comparableVersion) - - const [installedMajor, installedMinor, installedPatch] = - getVersionAttributes(installedAppVersion) - - const hasMajorDiff = supportedMajor > installedMajor - const hasMinorDif = supportedMajor === installedMajor && supportedMinor > installedMinor - const hasPatchDif = - supportedMajor === installedMajor && - supportedMinor === installedMinor && - supportedPatch > installedPatch - - return hasMajorDiff || hasMinorDif || hasPatchDif - // eslint-disable-next-line @typescript-eslint/no-unused-vars - } catch (error) { - // crashlytics.recordCatchError(error, `${variant} version flag could not be fetched`) - return false - } -} - -export const useStoreUpdate = (variant: UpdateVariant) => { - const [isAppOutdated, setIsAppOutdated] = useState(null) - - useEffect(() => void getIsAppOutdated(variant).then(setIsAppOutdated), [variant]) - - return isAppOutdated -} diff --git a/src/provider/index.tsx b/src/provider/index.tsx index c5ab405..18a60e9 100644 --- a/src/provider/index.tsx +++ b/src/provider/index.tsx @@ -3,33 +3,43 @@ import * as SplashScreen from 'expo-splash-screen' import React, { PropsWithChildren, useEffect } from 'react' import { GestureHandlerRootView } from 'react-native-gesture-handler' -import { ForcedUpdate } from '~/components/ForcedUpdate' -import { OfflineMessage } from '~/components/OfflineMessage' -import { useIsOnline } from '~/hooks/useIsOnline' -import { useOTAUpdates } from '~/hooks/useOTAUpdate' -import { useStoreUpdate } from '~/hooks/useStoreUpdate' +import { OfflineMessage } from '~/features/offlineCheck/components/OfflineMessage' +import { useIsOnline } from '~/features/offlineCheck/hooks/useIsOnline' +import { commonStyles } from '~/features/ui/styles/common' +import { ForcedUpdate } from '~/features/versionCheck/components/ForcedUpdate' +import { useOTAUpdates } from '~/features/versionCheck/hooks/useOTAUpdate' +import { useStoreUpdate } from '~/features/versionCheck/hooks/useStoreUpdate' import { setFontScaling } from '~/utils/setFontScaling' void SplashScreen.preventAutoHideAsync() setFontScaling() export const Provider = ({ children }: PropsWithChildren) => { - const isAppOutdated = useStoreUpdate('forced') + const { shouldForceUpdate, shouldRecommendUpdate } = useStoreUpdate({ + data: { + recommendedIOSVersion: '1.0.0', + recommendedAndroidVersion: '1.0.0', + minIOSVersion: '0.0.0', + minAndroidVersion: '0.0.0', + }, + loading: false, + }) const { isOnline } = useIsOnline() useMMKVDevTools() useOTAUpdates() useEffect(() => { // isAppOutdated is null until logic runs - if (isAppOutdated !== null) { + if (!shouldForceUpdate && !shouldRecommendUpdate) { void SplashScreen.hideAsync() } - }, [isAppOutdated]) + }, [shouldForceUpdate, shouldRecommendUpdate]) return ( - + {children} - {isAppOutdated && } + {shouldForceUpdate && } + {shouldRecommendUpdate && } {isOnline === false && } ) diff --git a/src/services/storage/index.ts b/src/services/storage/index.ts new file mode 100644 index 0000000..18d64a1 --- /dev/null +++ b/src/services/storage/index.ts @@ -0,0 +1,34 @@ +import { MMKV, useMMKVObject, useMMKVString } from 'react-native-mmkv' + +export const storage = new MMKV() + +export enum StorageKeys { + AccessToken = 'accessToken', + RecommendedUpdate = 'recommendedUpdate', +} + +export const useStorageString = (key: StorageKeys) => useMMKVString(key) +export const useStorageObject = (key: StorageKeys) => useMMKVObject(key) + +export function getItem(key: StorageKeys): string | undefined { + return storage.getString(key) +} + +export function setItem(key: StorageKeys, value: string) { + storage.set(key, value) +} + +function removeItem(key: StorageKeys) { + storage.delete(key) +} + +function clearAll() { + storage.clearAll() +} + +export const storageService = { + setItem, + getItem, + removeItem, + clearAll, +} diff --git a/src/store/authSlice.tsx b/src/store/authSlice.tsx deleted file mode 100644 index 18c4fc6..0000000 --- a/src/store/authSlice.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { type StateCreator } from 'zustand' - -import { type IStore, type IAuthSlice } from './types' - -export const authSlice: StateCreator = ( - set, -) => ({ - accessToken: null, - setAccessToken: (accessToken) => { - set({ accessToken }) - }, - logoutUser: () => { - set({ accessToken: null }) - }, -}) diff --git a/src/store/types.ts b/src/store/types.ts deleted file mode 100644 index a168084..0000000 --- a/src/store/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface IAuthSlice { - accessToken: string | null - setAccessToken: (accessToken: string) => void - logoutUser: () => void -} -export type IStore = IAuthSlice diff --git a/src/store/useRootStore.ts b/src/store/useRootStore.ts deleted file mode 100644 index 51f3144..0000000 --- a/src/store/useRootStore.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { create } from 'zustand' -import { createJSONStorage, persist } from 'zustand/middleware' - -import { authSlice } from './authSlice' -import { type IStore } from './types' - -import { mmkvStorage } from '~/utils/storage' - -export const rootStore = create()( - persist( - // you can create more slices for other app features - (...args) => ({ ...authSlice(...args) }), - { - name: 'app-storage', - storage: createJSONStorage(() => mmkvStorage), - // allow only accessToken to be persisted on the device - partialize: (state: IStore) => ({ accessToken: state.accessToken }), - }, - ), -) - -export const useRootStore = (selector: (state: IStore) => T): T => rootStore(selector) diff --git a/src/test/example.test.ts b/src/test/example.test.ts deleted file mode 100644 index fb90314..0000000 --- a/src/test/example.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe('Example', () => { - it('should be true', () => { - expect(true).toBe(true) - }) -}) diff --git a/src/utils/getStoreLink.ts b/src/utils/getStoreLink.ts index f788e6d..9e1cc0a 100644 --- a/src/utils/getStoreLink.ts +++ b/src/utils/getStoreLink.ts @@ -5,12 +5,12 @@ import { config } from '~/config' const applicationIdProd = config.applicationIdProd const appleIdProd = config.appleIdProd -interface IStoreLink { +type StoreLink = { storeURI: string storeURL: string } -export const getStoreLink = (): IStoreLink => { +export const getStoreLink = (): StoreLink => { const appStoreURI = `itms-apps://apps.apple.com/app/id${appleIdProd}?mt=8` const appStoreURL = `https://apps.apple.com/app/id${appleIdProd}?mt=8` @@ -20,5 +20,5 @@ export const getStoreLink = (): IStoreLink => { return Platform.select({ ios: { storeURI: appStoreURI, storeURL: appStoreURL }, android: { storeURI: playStoreURI, storeURL: playStoreURL }, - }) as IStoreLink + }) as StoreLink } diff --git a/src/utils/storage.ts b/src/utils/storage.ts deleted file mode 100644 index 31ccf92..0000000 --- a/src/utils/storage.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { MMKV } from 'react-native-mmkv' -import { type StateStorage } from 'zustand/middleware' - -export const storage = new MMKV() -export const mmkvStorage: StateStorage = { - setItem: (name, value) => storage.set(name, value), - getItem: (name) => { - const value = storage.getString(name) - return value ?? null - }, - removeItem: (name) => storage.delete(name), -}