From 4e65d2079904b6b79e1fb64c977b2dc3b40198fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=81=D0=B8=D0=BB=D0=B8=D0=B9=20=D0=95=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D0=B5=D0=B5=D0=B2?= Date: Tue, 19 May 2026 16:04:08 +0600 Subject: [PATCH 1/4] fix: fix android memory pages size --- apps/mobile/app.config.ts | 8 ++++---- package-lock.json | 14 +++++++------- package.json | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/mobile/app.config.ts b/apps/mobile/app.config.ts index 56cd931..b23e1b6 100644 --- a/apps/mobile/app.config.ts +++ b/apps/mobile/app.config.ts @@ -27,10 +27,10 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } slug: process.env.EXPO_PUBLIC_APP_SLUG as string, scheme: process.env.EXPO_PUBLIC_APP_SCHEME as string, owner: process.env.EXPO_PUBLIC_APP_OWNER as string, - version: '1.4.0', + version: '1.4.2', orientation: 'portrait', icon: './assets/icon.png', - runtimeVersion: '1.4.0', + runtimeVersion: '1.4.2', experiments: { reactCompiler: true, }, @@ -42,7 +42,7 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } supportsTablet: false, buildNumber: appEnv.select({ default: '18', - production: '12', + production: '17', }), config: { usesNonExemptEncryption: false, @@ -52,7 +52,7 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } package: appId, versionCode: appEnv.select({ default: 15, - production: 12, + production: 17, }), adaptiveIcon: { foregroundImage: './assets/adaptive-icon.png', diff --git a/package-lock.json b/package-lock.json index 3d1c60a..593b525 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@expo/metro-runtime": "~6.1.2", "@gorhom/bottom-sheet": "^5.2.8", "@hookform/resolvers": "^5.1.1", - "@legendapp/state": "^3.0.0-beta.31", + "@legendapp/state": "2.1.15", "@likashefqet/react-native-image-zoom": "^4.3.0", "@lukemorales/query-key-factory": "^1.3.4", "@pusher/pusher-websocket-react-native": "^1.3.1", @@ -4830,18 +4830,18 @@ } }, "node_modules/@legendapp/state": { - "version": "3.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@legendapp/state/-/state-3.0.0-beta.42.tgz", - "integrity": "sha512-KoGZrBdbHG5gMzP4NjKRsGZgTyy6pG+HBSyKrniL6NLsjG8L+hbYC21tIfdMvt1Xks1kTRAaqevatc4C7Yn/Uw==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@legendapp/state/-/state-2.1.15.tgz", + "integrity": "sha512-7/8Rgg7m38eznupr36QJeSkrtbhVxaRtQvRMjdBigSm+HW3ZIFgMtUX1DqZ2hJxbPqqAJamw5s+TLs8dRstUNw==", "license": "MIT", "dependencies": { - "use-sync-external-store": "^1.2.2" + "use-sync-external-store": "^1.2.0" }, "peerDependencies": { - "expo-sqlite": "^15.0.0" + "react": ">=16.8.0" }, "peerDependenciesMeta": { - "expo-sqlite": { + "react": { "optional": true } } diff --git a/package.json b/package.json index 6f40ebc..4bf2d5c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@expo/metro-runtime": "~6.1.2", "@gorhom/bottom-sheet": "^5.2.8", "@hookform/resolvers": "^5.1.1", - "@legendapp/state": "^3.0.0-beta.31", + "@legendapp/state": "2.1.15", "@likashefqet/react-native-image-zoom": "^4.3.0", "@lukemorales/query-key-factory": "^1.3.4", "@pusher/pusher-websocket-react-native": "^1.3.1", From b8f793936106b55e79281ef0786743bda6ffaa76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=81=D0=B8=D0=BB=D0=B8=D0=B9=20=D0=95=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D0=B5=D0=B5=D0=B2?= Date: Mon, 25 May 2026 17:06:46 +0600 Subject: [PATCH 2/4] chore: release 1.4.9 --- apps/mobile/app.config.ts | 67 +- apps/mobile/package.json | 25 +- .../media-library-service/src/service.ts | 2 +- package-lock.json | 1486 ++++++++--------- package.json | 25 +- patches/expo-audio+1.1.1.patch | 23 + patches/expo-media-library+18.2.1.patch | 26 + patches/react-native-compressor+1.13.0.patch | 518 ++++++ 8 files changed, 1352 insertions(+), 820 deletions(-) create mode 100644 patches/expo-audio+1.1.1.patch create mode 100644 patches/expo-media-library+18.2.1.patch create mode 100644 patches/react-native-compressor+1.13.0.patch diff --git a/apps/mobile/app.config.ts b/apps/mobile/app.config.ts index b23e1b6..b1d8c3e 100644 --- a/apps/mobile/app.config.ts +++ b/apps/mobile/app.config.ts @@ -1,4 +1,5 @@ import { ExpoConfig } from '@expo/config'; +import { withAndroidManifest } from '@expo/config-plugins'; import { EASConfig } from 'expo-manifests'; import { AppEnv } from '../../libs/shared/utils/app-env/src/env'; import { AppEnvName } from '../../libs/shared/utils/app-env/src/app-env'; @@ -22,15 +23,44 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } googleSignInRoute: process.env.GOOGLE_SIGN_IN_ROUTE, }; - return { - name: process.env.EXPO_PUBLIC_APP_NAME as string, + const withRemoveMediaPlaybackPermission = (config: ExpoConfig): ExpoConfig => + withAndroidManifest(config, (config) => { + const manifest = config.modResults; + + if (!manifest.manifest.$['xmlns:tools']) { + manifest.manifest.$['xmlns:tools'] = 'http://schemas.android.com/tools'; + } + + const permissions = (manifest.manifest['uses-permission'] ?? []) as Array<{ $: Record }>; + + const alreadyAdded = permissions.some( + (p) => p.$['android:name'] === 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK', + ); + + if (!alreadyAdded) { + permissions.push({ + $: { + 'android:name': 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK', + 'tools:node': 'remove', + }, + }); + } + + manifest.manifest['uses-permission'] = permissions as never; + + return config; + }) as ExpoConfig; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return withRemoveMediaPlaybackPermission({ + name: 'Open MobileUI', slug: process.env.EXPO_PUBLIC_APP_SLUG as string, scheme: process.env.EXPO_PUBLIC_APP_SCHEME as string, owner: process.env.EXPO_PUBLIC_APP_OWNER as string, - version: '1.4.2', + version: '1.4.9', orientation: 'portrait', icon: './assets/icon.png', - runtimeVersion: '1.4.2', + runtimeVersion: '1.4.4', experiments: { reactCompiler: true, }, @@ -42,7 +72,7 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } supportsTablet: false, buildNumber: appEnv.select({ default: '18', - production: '17', + production: '23', }), config: { usesNonExemptEncryption: false, @@ -52,7 +82,7 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } package: appId, versionCode: appEnv.select({ default: 15, - production: 17, + production: 23, }), adaptiveIcon: { foregroundImage: './assets/adaptive-icon.png', @@ -88,10 +118,30 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } [ 'expo-media-library', { - photosPermission: 'Allow Open MobileUI to access your photos.', savePhotosPermission: 'Allow Open MobileUI to save photos.', }, ], + 'expo-audio', + [ + 'expo-build-properties', + { + android: { + androidGradlePluginVersion: '8.3.2', + compileSdkVersion: 35, + targetSdkVersion: 35, + buildToolsVersion: '35.0.0', + ndkVersion: '27.1.12297006', + packagingOptions: { + jniLibs: { + useLegacyPackaging: false, + }, + }, + }, + ios: { + useFrameworks: 'static', + }, + }, + ], googleAuthIosUrlScheme ? [ '@react-native-google-signin/google-signin', @@ -103,7 +153,8 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } ]), newArchEnabled: true, extra, - }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any) as any; }; export default createConfig; diff --git a/apps/mobile/package.json b/apps/mobile/package.json index f8d5223..a994a1a 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -37,29 +37,30 @@ "@tanstack/react-query-persist-client": "^5.87.4", "babel-plugin-module-resolver": "^5.0.2", "clsx": "^2.1.1", - "expo": "^54.0.0", - "expo-asset": "~12.0.11", - "expo-audio": "~1.1.0", + "expo": "~54.0.34", + "expo-asset": "~12.0.13", + "expo-audio": "~1.1.1", + "expo-build-properties": "~1.0.10", "expo-clipboard": "~8.0.8", - "expo-constants": "~18.0.12", - "expo-crypto": "~15.0.8", - "expo-dev-client": "~6.0.20", + "expo-constants": "~18.0.13", + "expo-crypto": "~15.0.9", + "expo-dev-client": "~6.0.21", "expo-document-picker": "~14.0.8", - "expo-file-system": "~19.0.21", + "expo-file-system": "~19.0.22", "expo-haptics": "~15.0.8", "expo-image": "~3.0.11", - "expo-image-picker": "~17.0.10", + "expo-image-picker": "~17.0.11", "expo-insights": "~0.10.8", "expo-linear-gradient": "~15.0.8", - "expo-linking": "~8.0.10", + "expo-linking": "~8.0.12", "expo-localization": "~17.0.8", "expo-media-library": "~18.2.1", - "expo-router": "~6.0.19", + "expo-router": "~6.0.23", "expo-sharing": "~14.0.8", "expo-speech": "~14.0.8", - "expo-splash-screen": "~31.0.12", + "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", - "expo-updates": "~29.0.15", + "expo-updates": "~29.0.17", "immer": "^10.1.1", "lodash-es": "^4.17.21", "luxon": "^3.6.1", diff --git a/libs/mobile/shared/data-access/media-library-service/src/service.ts b/libs/mobile/shared/data-access/media-library-service/src/service.ts index eb88b99..d24fb85 100644 --- a/libs/mobile/shared/data-access/media-library-service/src/service.ts +++ b/libs/mobile/shared/data-access/media-library-service/src/service.ts @@ -5,7 +5,7 @@ import { permissionAlertService } from '@open-webui-react-native/shared/utils/pe export class MediaLibraryService { public async saveImage(source: string, authorizationToken?: string): Promise { - const { status } = await MediaLibrary.requestPermissionsAsync(false, ['photo']); + const { status } = await MediaLibrary.requestPermissionsAsync(true); if (status === MediaLibrary.PermissionStatus.DENIED) { permissionAlertService.showAlert( diff --git a/package-lock.json b/package-lock.json index 593b525..bfdd980 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,29 +37,30 @@ "class-transformer": "^0.5.1", "clsx": "^2.1.1", "dayjs": "^1.11.13", - "expo": "^54.0.0", - "expo-asset": "~12.0.11", - "expo-audio": "~1.1.0", + "expo": "~54.0.34", + "expo-asset": "~12.0.13", + "expo-audio": "~1.1.1", + "expo-build-properties": "~1.0.10", "expo-clipboard": "~8.0.8", - "expo-constants": "~18.0.12", - "expo-crypto": "~15.0.8", - "expo-dev-client": "~6.0.20", + "expo-constants": "~18.0.13", + "expo-crypto": "~15.0.9", + "expo-dev-client": "~6.0.21", "expo-document-picker": "~14.0.8", - "expo-file-system": "~19.0.21", + "expo-file-system": "~19.0.22", "expo-haptics": "~15.0.8", "expo-image": "~3.0.11", - "expo-image-picker": "~17.0.10", + "expo-image-picker": "~17.0.11", "expo-insights": "~0.10.8", "expo-linear-gradient": "~15.0.8", - "expo-linking": "~8.0.10", + "expo-linking": "~8.0.12", "expo-localization": "~17.0.8", "expo-media-library": "~18.2.1", - "expo-router": "~6.0.19", + "expo-router": "~6.0.23", "expo-sharing": "~14.0.8", "expo-speech": "~14.0.8", - "expo-splash-screen": "~31.0.12", + "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", - "expo-updates": "~29.0.15", + "expo-updates": "~29.0.17", "html-entities": "^2.6.0", "i18n-js": "^4.5.1", "immer": "^10.1.1", @@ -173,29 +174,30 @@ "@tanstack/react-query-persist-client": "^5.87.4", "babel-plugin-module-resolver": "^5.0.2", "clsx": "^2.1.1", - "expo": "^54.0.0", - "expo-asset": "~12.0.11", - "expo-audio": "~1.1.0", + "expo": "~54.0.34", + "expo-asset": "~12.0.13", + "expo-audio": "~1.1.1", + "expo-build-properties": "~1.0.10", "expo-clipboard": "~8.0.8", - "expo-constants": "~18.0.12", - "expo-crypto": "~15.0.8", - "expo-dev-client": "~6.0.20", + "expo-constants": "~18.0.13", + "expo-crypto": "~15.0.9", + "expo-dev-client": "~6.0.21", "expo-document-picker": "~14.0.8", - "expo-file-system": "~19.0.21", + "expo-file-system": "~19.0.22", "expo-haptics": "~15.0.8", "expo-image": "~3.0.11", - "expo-image-picker": "~17.0.10", + "expo-image-picker": "~17.0.11", "expo-insights": "~0.10.8", "expo-linear-gradient": "~15.0.8", - "expo-linking": "~8.0.10", + "expo-linking": "~8.0.12", "expo-localization": "~17.0.8", "expo-media-library": "~18.2.1", - "expo-router": "~6.0.19", + "expo-router": "~6.0.23", "expo-sharing": "~14.0.8", "expo-speech": "~14.0.8", - "expo-splash-screen": "~31.0.12", + "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", - "expo-updates": "~29.0.15", + "expo-updates": "~29.0.17", "immer": "^10.1.1", "lodash-es": "^4.17.21", "luxon": "^3.6.1", @@ -3148,6 +3150,7 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "dev": true, "license": "MIT", "dependencies": { "node-forge": "^1.2.1", @@ -3292,9 +3295,9 @@ } }, "node_modules/@expo/fingerprint": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.15.4.tgz", - "integrity": "sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng==", + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.15.5.tgz", + "integrity": "sha512-mdVoAMcux1WlM6kd1RoWiHRNqKqS+J6mKmWQ/BKgeh937S/fcW58EE68O6nc4KDXtWi3PBeNHskOFcgyIuD4hw==", "license": "MIT", "dependencies": { "@expo/spawn-async": "^1.7.2", @@ -3304,7 +3307,7 @@ "getenv": "^2.0.0", "glob": "^13.0.0", "ignore": "^5.3.1", - "minimatch": "^9.0.0", + "minimatch": "^10.2.2", "p-limit": "^3.1.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" @@ -3313,13 +3316,25 @@ "fingerprint": "bin/cli.js" } }, + "node_modules/@expo/fingerprint/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/@expo/fingerprint/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/@expo/fingerprint/node_modules/getenv": { @@ -3332,72 +3347,57 @@ } }, "node_modules/@expo/fingerprint/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/fingerprint/node_modules/glob/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@expo/fingerprint/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", + "integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/@expo/fingerprint/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@expo/fingerprint/node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3483,38 +3483,40 @@ } }, "node_modules/@expo/metro": { - "version": "54.1.0", - "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-54.1.0.tgz", - "integrity": "sha512-MgdeRNT/LH0v1wcO0TZp9Qn8zEF0X2ACI0wliPtv5kXVbXWI+yK9GyrstwLAiTXlULKVIg3HVSCCvmLu0M3tnw==", + "version": "54.2.0", + "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-54.2.0.tgz", + "integrity": "sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==", "license": "MIT", "dependencies": { - "metro": "0.83.2", - "metro-babel-transformer": "0.83.2", - "metro-cache": "0.83.2", - "metro-cache-key": "0.83.2", - "metro-config": "0.83.2", - "metro-core": "0.83.2", - "metro-file-map": "0.83.2", - "metro-resolver": "0.83.2", - "metro-runtime": "0.83.2", - "metro-source-map": "0.83.2", - "metro-transform-plugins": "0.83.2", - "metro-transform-worker": "0.83.2" + "metro": "0.83.3", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-config": "0.83.3", + "metro-core": "0.83.3", + "metro-file-map": "0.83.3", + "metro-minify-terser": "0.83.3", + "metro-resolver": "0.83.3", + "metro-runtime": "0.83.3", + "metro-source-map": "0.83.3", + "metro-symbolicate": "0.83.3", + "metro-transform-plugins": "0.83.3", + "metro-transform-worker": "0.83.3" } }, "node_modules/@expo/metro-config": { - "version": "54.0.11", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.11.tgz", - "integrity": "sha512-Bmht6VW9w6Wk49EFqkMzYpICV++Q3Kuqh2KygjH/e5mj/9wHSCWLkmJYmUn0XaOo4bm6BwOp/hO3r5YNKP3AeQ==", + "version": "54.0.15", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.15.tgz", + "integrity": "sha512-SqIya4VZ9KHM1S9g+xR0A+QKw1Tfs7Gacx6bQNJ98vs4+O7I5+QP5mHZIB0QSZLUV8opiXebHYTiTu+0OAsIUw==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "~12.0.12", + "@expo/config": "~12.0.13", "@expo/env": "~2.0.8", "@expo/json-file": "~10.0.8", - "@expo/metro": "~54.1.0", + "@expo/metro": "~54.2.0", "@expo/spawn-async": "^1.7.2", "browserslist": "^4.25.0", "chalk": "^4.1.0", @@ -3526,7 +3528,7 @@ "hermes-parser": "^0.29.1", "jsc-safe-url": "^0.2.4", "lightningcss": "^1.30.1", - "minimatch": "^9.0.0", + "picomatch": "^4.0.3", "postcss": "~8.4.32", "resolve-from": "^5.0.0" }, @@ -3554,13 +3556,13 @@ } }, "node_modules/@expo/metro-config/node_modules/@expo/config": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.12.tgz", - "integrity": "sha512-X2MW86+ulLpMGvdgfvpl2EOBAKUlwvnvoPwdaZeeyWufGopn1nTUeh4C9gMsplDaP1kXv9sLXVhOoUoX6g9PvQ==", + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", + "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.3", + "@expo/config-plugins": "~54.0.4", "@expo/config-types": "^54.0.10", "@expo/json-file": "^10.0.8", "deepmerge": "^4.3.1", @@ -3625,24 +3627,15 @@ } }, "node_modules/@expo/metro-config/node_modules/@expo/json-file": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.8.tgz", - "integrity": "sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.14.tgz", + "integrity": "sha512-yWwBFywFv+SxkJp/pIzzA416JVYflNUh7pqQzgaA6nXDqRyK7KfrqVzk8PdUfDnqbBcaZZxpzNssfQZzp5KHrA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "~7.10.4", + "@babel/code-frame": "^7.20.0", "json5": "^2.2.3" } }, - "node_modules/@expo/metro-config/node_modules/@expo/json-file/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, "node_modules/@expo/metro-config/node_modules/@expo/plist": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz", @@ -3655,21 +3648,33 @@ } }, "node_modules/@expo/metro-config/node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/@expo/metro-config/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/@expo/metro-config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/@expo/metro-config/node_modules/commander": { @@ -3691,32 +3696,17 @@ } }, "node_modules/@expo/metro-config/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/metro-config/node_modules/glob/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3729,45 +3719,57 @@ "license": "MIT" }, "node_modules/@expo/metro-config/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", + "integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/@expo/metro-config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@expo/metro-config/node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@expo/metro-config/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@expo/metro-config/node_modules/sucrase": { "version": "3.35.1", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", @@ -3836,12 +3838,12 @@ } }, "node_modules/@expo/package-manager": { - "version": "1.9.9", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.9.9.tgz", - "integrity": "sha512-Nv5THOwXzPprMJwbnXU01iXSrCp3vJqly9M4EJ2GkKko9Ifer2ucpg7x6OUsE09/lw+npaoUnHMXwkw7gcKxlg==", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.10.5.tgz", + "integrity": "sha512-nCP9Mebfl3jvOr0/P6VAuyah6PAtun+aihIL2zAtuE8uSe94JWkVZ7051i0MUVO+y3gFpBqnr8IIH5ch+VJjHA==", "license": "MIT", "dependencies": { - "@expo/json-file": "^10.0.8", + "@expo/json-file": "^10.0.14", "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", @@ -3849,13 +3851,27 @@ "resolve-workspace-root": "^2.0.0" } }, + "node_modules/@expo/package-manager/node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@expo/package-manager/node_modules/@expo/json-file": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.8.tgz", - "integrity": "sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.14.tgz", + "integrity": "sha512-yWwBFywFv+SxkJp/pIzzA416JVYflNUh7pqQzgaA6nXDqRyK7KfrqVzk8PdUfDnqbBcaZZxpzNssfQZzp5KHrA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "~7.10.4", + "@babel/code-frame": "^7.20.0", "json5": "^2.2.3" } }, @@ -3930,6 +3946,39 @@ "node": ">= 10.0.0" } }, + "node_modules/@expo/require-utils": { + "version": "55.0.5", + "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-55.0.5.tgz", + "integrity": "sha512-U4K/CQ2VpXuwfNGsN+daKmYOt15hCP8v/pXaYH6eut7kdYZo6SfJ1yr67BIcJ+1Gzzs+QzTxswAZChKpXmceyw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.20.0", + "@babel/core": "^7.25.2", + "@babel/plugin-transform-modules-commonjs": "^7.24.8" + }, + "peerDependencies": { + "typescript": "^5.0.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@expo/require-utils/node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@expo/rudder-sdk-node": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", @@ -11788,9 +11837,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "54.0.8", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.8.tgz", - "integrity": "sha512-3ZJ4Q7uQpm8IR/C9xbKhE/IUjGpLm+OIjF8YCedLgqoe/wN1Ns2wLT7HwG6ZXXb6/rzN8IMCiKFQ2F93qlN6GA==", + "version": "54.0.10", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.10.tgz", + "integrity": "sha512-wTt7POavLFypLcPW/uC5v8y+mtQKDJiyGLzYCjqr9tx0Qc3vCXcDKk1iCFIj/++Iy5CWhhTflEa7VvVPNWeCfw==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", @@ -15419,29 +15468,29 @@ } }, "node_modules/expo": { - "version": "54.0.29", - "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.29.tgz", - "integrity": "sha512-9C90gyOzV83y2S3XzCbRDCuKYNaiyCzuP9ketv46acHCEZn+QTamPK/DobdghoSiofCmlfoaiD6/SzfxDiHMnw==", + "version": "54.0.34", + "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.34.tgz", + "integrity": "sha512-XkVHguZZDC8BcTQxHAd14/TQFbDp1Wt0Z/KApO9t68Ll5A127hLCPzU+a9gytfCIiyL/V1IpF1vIcOLKEVAoNQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "54.0.19", - "@expo/config": "~12.0.12", + "@expo/cli": "54.0.24", + "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", "@expo/devtools": "0.1.8", - "@expo/fingerprint": "0.15.4", - "@expo/metro": "~54.1.0", - "@expo/metro-config": "54.0.11", + "@expo/fingerprint": "0.15.5", + "@expo/metro": "~54.2.0", + "@expo/metro-config": "54.0.15", "@expo/vector-icons": "^15.0.3", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "~54.0.8", - "expo-asset": "~12.0.11", - "expo-constants": "~18.0.12", - "expo-file-system": "~19.0.21", - "expo-font": "~14.0.10", + "babel-preset-expo": "~54.0.10", + "expo-asset": "~12.0.13", + "expo-constants": "~18.0.13", + "expo-file-system": "~19.0.22", + "expo-font": "~14.0.11", "expo-keep-awake": "~15.0.8", - "expo-modules-autolinking": "3.0.23", - "expo-modules-core": "3.0.29", + "expo-modules-autolinking": "3.0.25", + "expo-modules-core": "3.0.30", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-without-unicode": "8.0.0-3" @@ -15471,13 +15520,13 @@ } }, "node_modules/expo-asset": { - "version": "12.0.11", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-12.0.11.tgz", - "integrity": "sha512-pnK/gQ5iritDPBeK54BV35ZpG7yeW5DtgGvJHruIXkyDT9BCoQq3i0AAxfcWG/e4eiRmTzAt5kNVYFJi48uo+A==", + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-12.0.13.tgz", + "integrity": "sha512-x/p7WvQUnkn6K43b9eL6SPeq5Vnf1E8BDe9bDrWrvMqzyUvJnUFvl+ctg3034s/+UHe7Ne2pAmc0+yzbl8CrDQ==", "license": "MIT", "dependencies": { "@expo/image-utils": "^0.8.8", - "expo-constants": "~18.0.11" + "expo-constants": "~18.0.13" }, "peerDependencies": { "expo": "*", @@ -15513,9 +15562,9 @@ } }, "node_modules/expo-audio": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expo-audio/-/expo-audio-1.1.0.tgz", - "integrity": "sha512-B6SlDVQ8AHzCo8ImzO3C/5BzZ8vxULTCj9Ubx9bBSdcyDmU1DpDi0Tr4znEXOvBGn+u8eaTaPDN2a8RCAyXyXw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/expo-audio/-/expo-audio-1.1.1.tgz", + "integrity": "sha512-CPCpJ+0AEHdzWROc0f00Zh6e+irLSl2ALos/LPvxEeIcJw1APfBa4DuHPkL4CQCWsVe7EnUjFpdwpqsEUWcP0g==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -15524,6 +15573,19 @@ "react-native": "*" } }, + "node_modules/expo-build-properties": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/expo-build-properties/-/expo-build-properties-1.0.10.tgz", + "integrity": "sha512-mFCZbrbrv0AP5RB151tAoRzwRJelqM7bCJzCkxpu+owOyH+p/rFC/q7H5q8B9EpVWj8etaIuszR+gKwohpmu1Q==", + "license": "MIT", + "dependencies": { + "ajv": "^8.11.0", + "semver": "^7.6.0" + }, + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-clipboard": { "version": "8.0.8", "resolved": "https://registry.npmjs.org/expo-clipboard/-/expo-clipboard-8.0.8.tgz", @@ -15536,12 +15598,12 @@ } }, "node_modules/expo-constants": { - "version": "18.0.12", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.12.tgz", - "integrity": "sha512-WzcKYMVNRRu4NcSzfIVRD5aUQFnSpTZgXFrlWmm19xJoDa4S3/PQNi6PNTBRc49xz9h8FT7HMxRKaC8lr0gflA==", + "version": "18.0.13", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.13.tgz", + "integrity": "sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ==", "license": "MIT", "dependencies": { - "@expo/config": "~12.0.12", + "@expo/config": "~12.0.13", "@expo/env": "~2.0.8" }, "peerDependencies": { @@ -15550,13 +15612,13 @@ } }, "node_modules/expo-constants/node_modules/@expo/config": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.12.tgz", - "integrity": "sha512-X2MW86+ulLpMGvdgfvpl2EOBAKUlwvnvoPwdaZeeyWufGopn1nTUeh4C9gMsplDaP1kXv9sLXVhOoUoX6g9PvQ==", + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", + "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.3", + "@expo/config-plugins": "~54.0.4", "@expo/config-types": "^54.0.10", "@expo/json-file": "^10.0.8", "deepmerge": "^4.3.1", @@ -15612,15 +15674,29 @@ } }, "node_modules/expo-constants/node_modules/@expo/json-file": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.8.tgz", - "integrity": "sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.14.tgz", + "integrity": "sha512-yWwBFywFv+SxkJp/pIzzA416JVYflNUh7pqQzgaA6nXDqRyK7KfrqVzk8PdUfDnqbBcaZZxpzNssfQZzp5KHrA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "~7.10.4", + "@babel/code-frame": "^7.20.0", "json5": "^2.2.3" } }, + "node_modules/expo-constants/node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/expo-constants/node_modules/@expo/plist": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz", @@ -15633,14 +15709,35 @@ } }, "node_modules/expo-constants/node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/expo-constants/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/expo-constants/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/expo-constants/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -15660,17 +15757,17 @@ } }, "node_modules/expo-constants/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -15683,40 +15780,40 @@ "license": "MIT" }, "node_modules/expo-constants/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", + "integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/expo-constants/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/expo-constants/node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -15754,9 +15851,9 @@ } }, "node_modules/expo-crypto": { - "version": "15.0.8", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-15.0.8.tgz", - "integrity": "sha512-aF7A914TB66WIlTJvl5J6/itejfY78O7dq3ibvFltL9vnTALJ/7LYHvLT4fwmx9yUNS6ekLBtDGWivFWnj2Fcw==", + "version": "15.0.9", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-15.0.9.tgz", + "integrity": "sha512-SNWKa2fXx7v9gkp1h/7nqXY5XN7qgNDn3yRc2aO0gWGbeMbvob/haMxxsPFe9f51aqH5NjNCqHf2kvLhvAd8KQ==", "license": "MIT", "dependencies": { "base64-js": "^1.3.0" @@ -15766,15 +15863,15 @@ } }, "node_modules/expo-dev-client": { - "version": "6.0.20", - "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-6.0.20.tgz", - "integrity": "sha512-5XjoVlj1OxakNxy55j/AUaGPrDOlQlB6XdHLLWAw61w5ffSpUDHDnuZzKzs9xY1eIaogOqTOQaAzZ2ddBkdXLA==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-6.0.21.tgz", + "integrity": "sha512-SWI6HD0pa4eJujkYFkvvpezUE1zmJXGLu+34azpu7+QJgO+FLutDYDj8BSTdeH/NYDEClDFjCGqVMcWETvmsCQ==", "license": "MIT", "dependencies": { - "expo-dev-launcher": "6.0.20", - "expo-dev-menu": "7.0.18", + "expo-dev-launcher": "6.0.21", + "expo-dev-menu": "7.0.19", "expo-dev-menu-interface": "2.0.0", - "expo-manifests": "~1.0.10", + "expo-manifests": "~1.0.11", "expo-updates-interface": "~2.0.0" }, "peerDependencies": { @@ -15782,23 +15879,23 @@ } }, "node_modules/expo-dev-launcher": { - "version": "6.0.20", - "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-6.0.20.tgz", - "integrity": "sha512-a04zHEeT9sB0L5EB38fz7sNnUKJ2Ar1pXpcyl60Ki8bXPNCs9rjY7NuYrDkP/irM8+1DklMBqHpyHiLyJ/R+EA==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-6.0.21.tgz", + "integrity": "sha512-QZ9gcKMZbp6EsIhzS0QoGB8Cf4xeVJhjbNgWUwcoBIk8gshoFz8CkCQOnX+HNv2sSY3rdCaNpx3Xo0Rflyq7rA==", "license": "MIT", "dependencies": { "ajv": "^8.11.0", - "expo-dev-menu": "7.0.18", - "expo-manifests": "~1.0.10" + "expo-dev-menu": "7.0.19", + "expo-manifests": "~1.0.11" }, "peerDependencies": { "expo": "*" } }, "node_modules/expo-dev-menu": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-7.0.18.tgz", - "integrity": "sha512-4kTdlHrnZCAWCT6tZRQHSSjZ7vECFisL4T+nsG/GJDo/jcHNaOVGV5qPV9wzlTxyMk3YOPggRw4+g7Ownrg5eA==", + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-7.0.19.tgz", + "integrity": "sha512-ju5MZiBCPhUKKvHy0ElZdnlhq01mkEEiR8jfrgQVvW26aWjzjLiOhppNAyXtvGbhk7WxJim3wYMiqFFrjGdfKA==", "license": "MIT", "dependencies": { "expo-dev-menu-interface": "2.0.0" @@ -15832,9 +15929,9 @@ "license": "MIT" }, "node_modules/expo-file-system": { - "version": "19.0.21", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-19.0.21.tgz", - "integrity": "sha512-s3DlrDdiscBHtab/6W1osrjGL+C2bvoInPJD7sOwmxfJ5Woynv2oc+Fz1/xVXaE/V7HE/+xrHC/H45tu6lZzzg==", + "version": "19.0.22", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-19.0.22.tgz", + "integrity": "sha512-l9pgahSc7sJD0bP9vBNeXvZjy8QKDpVHVxWmei/ESQOrzmoj5BidziqLVsyZdxsi+PfdbTtttLTAmddH/JafYA==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -15842,9 +15939,9 @@ } }, "node_modules/expo-font": { - "version": "14.0.10", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.10.tgz", - "integrity": "sha512-UqyNaaLKRpj4pKAP4HZSLnuDQqueaO5tB1c/NWu5vh1/LF9ulItyyg2kF/IpeOp0DeOLk0GY0HrIXaKUMrwB+Q==", + "version": "14.0.11", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.11.tgz", + "integrity": "sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==", "license": "MIT", "dependencies": { "fontfaceobserver": "^2.1.0" @@ -15891,9 +15988,9 @@ } }, "node_modules/expo-image-picker": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/expo-image-picker/-/expo-image-picker-17.0.10.tgz", - "integrity": "sha512-a2xrowp2trmvXyUWgX3O6Q2rZaa2C59AqivKI7+bm+wLvMfTEbZgldLX4rEJJhM8xtmEDTNU+lzjtObwzBRGaw==", + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/expo-image-picker/-/expo-image-picker-17.0.11.tgz", + "integrity": "sha512-/apkoyukDvsCHHb9fzP+F34A1uQqSzUtYH/2P/xJACNEwq+mwEXjXvVU8bzlJq6ih0Qo1+tpVivIa7B9kYSwOQ==", "license": "MIT", "dependencies": { "expo-image-loader": "~6.0.0" @@ -15942,12 +16039,12 @@ } }, "node_modules/expo-linking": { - "version": "8.0.10", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.10.tgz", - "integrity": "sha512-0EKtn4Sk6OYmb/5ZqK8riO0k1Ic+wyT3xExbmDvUYhT7p/cKqlVUExMuOIAt3Cx3KUUU1WCgGmdd493W/D5XjA==", + "version": "8.0.12", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.12.tgz", + "integrity": "sha512-FpXeIpFgZuxihwT9lBo86YD3y6LphBuAhN680MMxm/Y7fmsc57vimn2d3vFu68VI0+Z9w457t494mu2wvlgWTQ==", "license": "MIT", "dependencies": { - "expo-constants": "~18.0.11", + "expo-constants": "~18.0.13", "invariant": "^2.2.4" }, "peerDependencies": { @@ -15969,12 +16066,12 @@ } }, "node_modules/expo-manifests": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-1.0.10.tgz", - "integrity": "sha512-oxDUnURPcL4ZsOBY6X1DGWGuoZgVAFzp6PISWV7lPP2J0r8u1/ucuChBgpK7u1eLGFp6sDIPwXyEUCkI386XSQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-1.0.11.tgz", + "integrity": "sha512-6zItytTewN37Cjhp3glUg0ozrgW2GwB8x9wtfzUNoJIMmxO38nnGdTLMaotYhRqdf5PP2Dzdmej1HDHXVNUpRw==", "license": "MIT", "dependencies": { - "@expo/config": "~12.0.11", + "@expo/config": "~12.0.13", "expo-json-utils": "~0.15.0" }, "peerDependencies": { @@ -15982,13 +16079,13 @@ } }, "node_modules/expo-manifests/node_modules/@expo/config": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.12.tgz", - "integrity": "sha512-X2MW86+ulLpMGvdgfvpl2EOBAKUlwvnvoPwdaZeeyWufGopn1nTUeh4C9gMsplDaP1kXv9sLXVhOoUoX6g9PvQ==", + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", + "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.3", + "@expo/config-plugins": "~54.0.4", "@expo/config-types": "^54.0.10", "@expo/json-file": "^10.0.8", "deepmerge": "^4.3.1", @@ -16031,15 +16128,29 @@ "license": "MIT" }, "node_modules/expo-manifests/node_modules/@expo/json-file": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.8.tgz", - "integrity": "sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.14.tgz", + "integrity": "sha512-yWwBFywFv+SxkJp/pIzzA416JVYflNUh7pqQzgaA6nXDqRyK7KfrqVzk8PdUfDnqbBcaZZxpzNssfQZzp5KHrA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "~7.10.4", + "@babel/code-frame": "^7.20.0", "json5": "^2.2.3" } }, + "node_modules/expo-manifests/node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/expo-manifests/node_modules/@expo/plist": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz", @@ -16052,14 +16163,35 @@ } }, "node_modules/expo-manifests/node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/expo-manifests/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/expo-manifests/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/expo-manifests/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -16079,17 +16211,17 @@ } }, "node_modules/expo-manifests/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -16102,40 +16234,40 @@ "license": "MIT" }, "node_modules/expo-manifests/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", + "integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/expo-manifests/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/expo-manifests/node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -16183,9 +16315,9 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.23.tgz", - "integrity": "sha512-YZnaE0G+52xftjH5nsIRaWsoVBY38SQCECclpdgLisdbRY/6Mzo7ndokjauOv3mpFmzMZACHyJNu1YSAffQwTg==", + "version": "3.0.25", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.25.tgz", + "integrity": "sha512-YmHWctJlwvOuLZccg3cOXvSiXVJrPMKl7g2YR0YHWoGL9v2RvcmgaPJWPSLVW+voNEgEPsbo5UmUrAqbnYcBeg==", "license": "MIT", "dependencies": { "@expo/spawn-async": "^1.7.2", @@ -16199,9 +16331,9 @@ } }, "node_modules/expo-modules-core": { - "version": "3.0.29", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-3.0.29.tgz", - "integrity": "sha512-LzipcjGqk8gvkrOUf7O2mejNWugPkf3lmd9GkqL9WuNyeN2fRwU0Dn77e3ZUKI3k6sI+DNwjkq4Nu9fNN9WS7Q==", + "version": "3.0.30", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-3.0.30.tgz", + "integrity": "sha512-a6IrpAn/Jbmwxi9L+hMmXKpNqnkUpoF7WHOpn02rVLyax2J0gB1vvCVE5rNydplEnt41Q6WxQwvcOjZaIkcSUg==", "license": "MIT", "dependencies": { "invariant": "^2.2.4" @@ -16212,9 +16344,9 @@ } }, "node_modules/expo-router": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-6.0.19.tgz", - "integrity": "sha512-XK+vwpyEmGGamUM/S7+LwtjuBzbTm8VY401h8SOs8Tv1mrLl+7QNvAkk5lJiXgUVKaAIEXl8GxkWhF7mxBUzyg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-6.0.23.tgz", + "integrity": "sha512-qCxVAiCrCyu0npky6azEZ6dJDMt77OmCzEbpF6RbUTlfkaCA417LvY14SBkk0xyGruSxy/7pvJOI6tuThaUVCA==", "license": "MIT", "dependencies": { "@expo/metro-runtime": "^6.1.2", @@ -16246,8 +16378,8 @@ "@react-navigation/drawer": "^7.5.0", "@testing-library/react-native": ">= 12.0.0", "expo": "*", - "expo-constants": "^18.0.12", - "expo-linking": "^8.0.10", + "expo-constants": "^18.0.13", + "expo-linking": "^8.0.11", "react": "*", "react-dom": "*", "react-native": "*", @@ -16256,7 +16388,7 @@ "react-native-safe-area-context": ">= 5.4.0", "react-native-screens": "*", "react-native-web": "*", - "react-server-dom-webpack": "~19.0.3 || ~19.1.4 || ~19.2.3" + "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "peerDependenciesMeta": { "@react-navigation/drawer": { @@ -16295,9 +16427,9 @@ } }, "node_modules/expo-server": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-1.0.5.tgz", - "integrity": "sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-1.0.6.tgz", + "integrity": "sha512-vb5TBtskvEdzYuW79lATXutOEBfW5m6U4EFpNjCVZTnI7S//SAsLQkYEpn+EDfn84m6VQfzSGkIVR6YPaScKFA==", "license": "MIT", "engines": { "node": ">=20.16.0" @@ -16322,25 +16454,25 @@ } }, "node_modules/expo-splash-screen": { - "version": "31.0.12", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-31.0.12.tgz", - "integrity": "sha512-o466xFYh7Fld7CuBrzx5I12LONo7a4xzOSbxS+buOEObL/Wp4Xu4QhXg80ZY7puCGbJbtm7Ltjgg5olnWOU/Rg==", + "version": "31.0.13", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-31.0.13.tgz", + "integrity": "sha512-1epJLC1cDlwwj089R2h8cxaU5uk4ONVAC+vzGiTZH4YARQhL4Stlz1MbR6yAS173GMosvkE6CAeihR7oIbCkDA==", "license": "MIT", "dependencies": { - "@expo/prebuild-config": "^54.0.7" + "@expo/prebuild-config": "^54.0.8" }, "peerDependencies": { "expo": "*" } }, "node_modules/expo-splash-screen/node_modules/@expo/config": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.12.tgz", - "integrity": "sha512-X2MW86+ulLpMGvdgfvpl2EOBAKUlwvnvoPwdaZeeyWufGopn1nTUeh4C9gMsplDaP1kXv9sLXVhOoUoX6g9PvQ==", + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", + "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.3", + "@expo/config-plugins": "~54.0.4", "@expo/config-types": "^54.0.10", "@expo/json-file": "^10.0.8", "deepmerge": "^4.3.1", @@ -16383,33 +16515,44 @@ "license": "MIT" }, "node_modules/expo-splash-screen/node_modules/@expo/image-utils": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.8.8.tgz", - "integrity": "sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA==", + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.8.14.tgz", + "integrity": "sha512-5Sn+jG4Cw+shC2wDMXoqSAJnvERbiwzHn05FpWtD5IBflfTIs5gUmjzwiGVyjOdlMSQhgRrw/AymPbmO9h9mpQ==", "license": "MIT", "dependencies": { + "@expo/require-utils": "^55.0.5", "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0", - "semver": "^7.6.0", - "temp-dir": "~2.0.0", - "unique-string": "~2.0.0" + "semver": "^7.6.0" } }, "node_modules/expo-splash-screen/node_modules/@expo/json-file": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.8.tgz", - "integrity": "sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.14.tgz", + "integrity": "sha512-yWwBFywFv+SxkJp/pIzzA416JVYflNUh7pqQzgaA6nXDqRyK7KfrqVzk8PdUfDnqbBcaZZxpzNssfQZzp5KHrA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "~7.10.4", + "@babel/code-frame": "^7.20.0", "json5": "^2.2.3" } }, + "node_modules/expo-splash-screen/node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/expo-splash-screen/node_modules/@expo/plist": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz", @@ -16422,14 +16565,14 @@ } }, "node_modules/expo-splash-screen/node_modules/@expo/prebuild-config": { - "version": "54.0.7", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.7.tgz", - "integrity": "sha512-cKqBsiwcFFzpDWgtvemrCqJULJRLDLKo2QMF74NusoGNpfPI3vQVry1iwnYLeGht02AeD3dvfhpqBczD3wchxA==", + "version": "54.0.8", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.8.tgz", + "integrity": "sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==", "license": "MIT", "dependencies": { - "@expo/config": "~12.0.11", - "@expo/config-plugins": "~54.0.3", - "@expo/config-types": "^54.0.9", + "@expo/config": "~12.0.13", + "@expo/config-plugins": "~54.0.4", + "@expo/config-types": "^54.0.10", "@expo/image-utils": "^0.8.8", "@expo/json-file": "^10.0.8", "@react-native/normalize-colors": "0.81.5", @@ -16449,14 +16592,35 @@ "license": "MIT" }, "node_modules/expo-splash-screen/node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/expo-splash-screen/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/expo-splash-screen/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/expo-splash-screen/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -16476,17 +16640,17 @@ } }, "node_modules/expo-splash-screen/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -16499,40 +16663,40 @@ "license": "MIT" }, "node_modules/expo-splash-screen/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", + "integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/expo-splash-screen/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/expo-splash-screen/node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -16589,19 +16753,19 @@ "license": "MIT" }, "node_modules/expo-updates": { - "version": "29.0.15", - "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-29.0.15.tgz", - "integrity": "sha512-6Qj+g56nnCksKKnEPQFm19dfWvYB5EggQNN3SaLbIj4LI40k/pjQwqYStEuwTU+Ow+PG0AqxIhQ3NvgVPEzLvg==", + "version": "29.0.17", + "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-29.0.17.tgz", + "integrity": "sha512-9h78cs6Q2rs/dEY7zAgyEm/m6J5rHy8RNpRyhilEAvrzrGLHChVZJT+bSR2RwNJg1DtwUNEjCgZrxDlM7LnNkg==", "license": "MIT", "dependencies": { - "@expo/code-signing-certificates": "0.0.5", + "@expo/code-signing-certificates": "^0.0.6", "@expo/plist": "^0.4.8", "@expo/spawn-async": "^1.7.2", "arg": "4.1.0", "chalk": "^4.1.2", "debug": "^4.3.4", "expo-eas-client": "~1.0.8", - "expo-manifests": "~1.0.10", + "expo-manifests": "~1.0.11", "expo-structured-headers": "~5.0.0", "expo-updates-interface": "~2.0.0", "getenv": "^2.0.0", @@ -16627,6 +16791,15 @@ "expo": "*" } }, + "node_modules/expo-updates/node_modules/@expo/code-signing-certificates": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.6.tgz", + "integrity": "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==", + "license": "MIT", + "dependencies": { + "node-forge": "^1.3.3" + } + }, "node_modules/expo-updates/node_modules/@expo/plist": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz", @@ -16729,25 +16902,25 @@ } }, "node_modules/expo/node_modules/@expo/cli": { - "version": "54.0.19", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.19.tgz", - "integrity": "sha512-Za+Ena29uYkq2c1Lbh+r3VrooR/mW7c9dahoH4WvL1T9ttbfAeu7sJmCuWZo88bZ4bFsOpE5fYne71DK11iSrQ==", + "version": "54.0.24", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.24.tgz", + "integrity": "sha512-5xse1bEgnVUBhOrtttc6xTNJVvjyTRavpzuF0/0nuj+312vfSbk7EiRbG+xJ2pW/iZxnhLPJkFCrPYG0nmheAQ==", "license": "MIT", "dependencies": { "@0no-co/graphql.web": "^1.0.8", - "@expo/code-signing-certificates": "^0.0.5", - "@expo/config": "~12.0.12", - "@expo/config-plugins": "~54.0.3", + "@expo/code-signing-certificates": "^0.0.6", + "@expo/config": "~12.0.13", + "@expo/config-plugins": "~54.0.4", "@expo/devcert": "^1.2.1", "@expo/env": "~2.0.8", "@expo/image-utils": "^0.8.8", "@expo/json-file": "^10.0.8", - "@expo/metro": "~54.1.0", - "@expo/metro-config": "~54.0.11", + "@expo/metro": "~54.2.0", + "@expo/metro-config": "~54.0.15", "@expo/osascript": "^2.3.8", - "@expo/package-manager": "^1.9.9", + "@expo/package-manager": "^1.9.10", "@expo/plist": "^0.4.8", - "@expo/prebuild-config": "^54.0.7", + "@expo/prebuild-config": "^54.0.8", "@expo/schema-utils": "^0.1.8", "@expo/spawn-async": "^1.7.2", "@expo/ws-tunnel": "^1.0.1", @@ -16766,16 +16939,16 @@ "connect": "^3.7.0", "debug": "^4.3.4", "env-editor": "^0.4.1", - "expo-server": "^1.0.5", + "expo-server": "^1.0.6", "freeport-async": "^2.0.0", "getenv": "^2.0.0", "glob": "^13.0.0", - "lan-network": "^0.1.6", + "lan-network": "^0.2.1", "minimatch": "^9.0.0", - "node-forge": "^1.3.1", + "node-forge": "^1.3.3", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", - "picomatch": "^3.0.1", + "picomatch": "^4.0.3", "pretty-bytes": "^5.6.0", "pretty-format": "^29.7.0", "progress": "^2.0.3", @@ -16815,14 +16988,23 @@ } } }, + "node_modules/expo/node_modules/@expo/code-signing-certificates": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.6.tgz", + "integrity": "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==", + "license": "MIT", + "dependencies": { + "node-forge": "^1.3.3" + } + }, "node_modules/expo/node_modules/@expo/config": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.12.tgz", - "integrity": "sha512-X2MW86+ulLpMGvdgfvpl2EOBAKUlwvnvoPwdaZeeyWufGopn1nTUeh4C9gMsplDaP1kXv9sLXVhOoUoX6g9PvQ==", + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", + "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.3", + "@expo/config-plugins": "~54.0.4", "@expo/config-types": "^54.0.10", "@expo/json-file": "^10.0.8", "deepmerge": "^4.3.1", @@ -16865,9 +17047,9 @@ "license": "MIT" }, "node_modules/expo/node_modules/@expo/env": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.0.8.tgz", - "integrity": "sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.0.11.tgz", + "integrity": "sha512-xV+ps6YCW7XIPVUwFVCRN2nox09dnRwy8uIjwHWTODu0zFw4kp4omnVkl0OOjuu2XOe7tdgAHxikrkJt9xB/7Q==", "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -16878,33 +17060,44 @@ } }, "node_modules/expo/node_modules/@expo/image-utils": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.8.8.tgz", - "integrity": "sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA==", + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.8.14.tgz", + "integrity": "sha512-5Sn+jG4Cw+shC2wDMXoqSAJnvERbiwzHn05FpWtD5IBflfTIs5gUmjzwiGVyjOdlMSQhgRrw/AymPbmO9h9mpQ==", "license": "MIT", "dependencies": { + "@expo/require-utils": "^55.0.5", "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0", - "semver": "^7.6.0", - "temp-dir": "~2.0.0", - "unique-string": "~2.0.0" + "semver": "^7.6.0" } }, "node_modules/expo/node_modules/@expo/json-file": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.8.tgz", - "integrity": "sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.14.tgz", + "integrity": "sha512-yWwBFywFv+SxkJp/pIzzA416JVYflNUh7pqQzgaA6nXDqRyK7KfrqVzk8PdUfDnqbBcaZZxpzNssfQZzp5KHrA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "~7.10.4", + "@babel/code-frame": "^7.20.0", "json5": "^2.2.3" } }, + "node_modules/expo/node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/expo/node_modules/@expo/plist": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz", @@ -16917,14 +17110,14 @@ } }, "node_modules/expo/node_modules/@expo/prebuild-config": { - "version": "54.0.7", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.7.tgz", - "integrity": "sha512-cKqBsiwcFFzpDWgtvemrCqJULJRLDLKo2QMF74NusoGNpfPI3vQVry1iwnYLeGht02AeD3dvfhpqBczD3wchxA==", + "version": "54.0.8", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.8.tgz", + "integrity": "sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==", "license": "MIT", "dependencies": { - "@expo/config": "~12.0.11", - "@expo/config-plugins": "~54.0.3", - "@expo/config-types": "^54.0.9", + "@expo/config": "~12.0.13", + "@expo/config-plugins": "~54.0.4", + "@expo/config-types": "^54.0.10", "@expo/image-utils": "^0.8.8", "@expo/json-file": "^10.0.8", "@react-native/normalize-colors": "0.81.5", @@ -16984,9 +17177,9 @@ "license": "MIT" }, "node_modules/expo/node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -17002,9 +17195,9 @@ } }, "node_modules/expo/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -17038,32 +17231,53 @@ } }, "node_modules/expo/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/expo/node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/expo/node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/expo/node_modules/glob/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -17076,21 +17290,21 @@ "license": "MIT" }, "node_modules/expo/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", + "integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/expo/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -17112,21 +17326,33 @@ } }, "node_modules/expo/node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/expo/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/expo/node_modules/sucrase": { "version": "3.35.1", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", @@ -17150,9 +17376,9 @@ } }, "node_modules/expo/node_modules/tar": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", - "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "version": "7.5.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz", + "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -21877,9 +22103,9 @@ } }, "node_modules/lan-network": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.1.7.tgz", - "integrity": "sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.2.1.tgz", + "integrity": "sha512-ONPnazC96VKDntab9j9JKwIWhZ4ZUceB4A9Epu4Ssg0hYFmtHZSeQ+n15nIwTFmcBUKtExOer8WTJ4GF9MO64A==", "license": "MIT", "bin": { "lan-network": "dist/lan-network-cli.js" @@ -23112,9 +23338,9 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.2.tgz", - "integrity": "sha512-rirY1QMFlA1uxH3ZiNauBninwTioOgwChnRdDcbB4tgRZ+bGX9DiXoh9QdpppiaVKXdJsII932OwWXGGV4+Nlw==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", + "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -23142,24 +23368,24 @@ } }, "node_modules/metro-cache": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.2.tgz", - "integrity": "sha512-Z43IodutUZeIS7OTH+yQFjc59QlFJ6s5OvM8p2AP9alr0+F8UKr8ADzFzoGKoHefZSKGa4bJx7MZJLF6GwPDHQ==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", + "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", "license": "MIT", "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", - "metro-core": "0.83.2" + "metro-core": "0.83.3" }, "engines": { "node": ">=20.19.4" } }, "node_modules/metro-cache-key": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.2.tgz", - "integrity": "sha512-3EMG/GkGKYoTaf5RqguGLSWRqGTwO7NQ0qXKmNBjr0y6qD9s3VBXYlwB+MszGtmOKsqE9q3FPrE5Nd9Ipv7rZw==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", + "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -23209,88 +23435,24 @@ "node": ">=20.19.4" } }, - "node_modules/metro-config/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/metro-config/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/metro-core": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", + "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.83.3" }, "engines": { - "node": ">= 14" + "node": ">=20.19.4" } }, - "node_modules/metro-config/node_modules/metro-cache": { + "node_modules/metro-file-map": { "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", - "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", - "license": "MIT", - "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "https-proxy-agent": "^7.0.5", - "metro-core": "0.83.3" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-config/node_modules/metro-core": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", - "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.83.3" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-config/node_modules/metro-runtime": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", - "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-core": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.2.tgz", - "integrity": "sha512-8DRb0O82Br0IW77cNgKMLYWUkx48lWxUkvNUxVISyMkcNwE/9ywf1MYQUE88HaKwSrqne6kFgCSA/UWZoUT0Iw==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.83.2" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-file-map": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.2.tgz", - "integrity": "sha512-cMSWnEqZrp/dzZIEd7DEDdk72PXz6w5NOKriJoDN9p1TDQ5nAYrY2lHi8d6mwbcGLoSlWmpPyny9HZYFfPWcGQ==", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", + "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -23308,9 +23470,9 @@ } }, "node_modules/metro-minify-terser": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.2.tgz", - "integrity": "sha512-zvIxnh7U0JQ7vT4quasKsijId3dOAWgq+ip2jF/8TMrPUqQabGrs04L2dd0haQJ+PA+d4VvK/bPOY8X/vL2PWw==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", + "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", @@ -23333,9 +23495,9 @@ } }, "node_modules/metro-runtime": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.2.tgz", - "integrity": "sha512-nnsPtgRvFbNKwemqs0FuyFDzXLl+ezuFsUXDbX8o0SXOfsOPijqiQrf3kuafO1Zx1aUWf4NOrKJMAQP5EEHg9A==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", + "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.0", @@ -23346,9 +23508,9 @@ } }, "node_modules/metro-source-map": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.2.tgz", - "integrity": "sha512-5FL/6BSQvshIKjXOennt9upFngq2lFvDakZn5LfauIVq8+L4sxXewIlSTcxAtzbtjAIaXeOSVMtCJ5DdfCt9AA==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", + "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", @@ -23356,32 +23518,12 @@ "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.83.2", - "nullthrows": "^1.1.1", - "ob1": "0.83.2", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-source-map/node_modules/metro-symbolicate": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.2.tgz", - "integrity": "sha512-KoU9BLwxxED6n33KYuQQuc5bXkIxF3fSwlc3ouxrrdLWwhu64muYZNQrukkWzhVKRNFIXW7X2iM8JXpi2heIPw==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.83.2", + "metro-symbolicate": "0.83.3", "nullthrows": "^1.1.1", + "ob1": "0.83.3", "source-map": "^0.5.6", "vlq": "^1.0.0" }, - "bin": { - "metro-symbolicate": "src/index.js" - }, "engines": { "node": ">=20.19.4" } @@ -23415,39 +23557,6 @@ "node": ">=20.19.4" } }, - "node_modules/metro-symbolicate/node_modules/metro-source-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", - "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.83.3", - "nullthrows": "^1.1.1", - "ob1": "0.83.3", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-symbolicate/node_modules/ob1": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", - "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, "node_modules/metro-symbolicate/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -23458,9 +23567,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.2.tgz", - "integrity": "sha512-5WlW25WKPkiJk2yA9d8bMuZrgW7vfA4f4MBb9ZeHbTB3eIAoNN8vS8NENgG/X/90vpTB06X66OBvxhT3nHwP6A==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", + "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -23475,9 +23584,9 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.2.tgz", - "integrity": "sha512-G5DsIg+cMZ2KNfrdLnWMvtppb3+Rp1GMyj7Bvd9GgYc/8gRmvq1XVEF9XuO87Shhb03kFhGqMTgZerz3hZ1v4Q==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", + "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -23485,13 +23594,13 @@ "@babel/parser": "^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "metro": "0.83.2", - "metro-babel-transformer": "0.83.2", - "metro-cache": "0.83.2", - "metro-cache-key": "0.83.2", - "metro-minify-terser": "0.83.2", - "metro-source-map": "0.83.2", - "metro-transform-plugins": "0.83.2", + "metro": "0.83.3", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-minify-terser": "0.83.3", + "metro-source-map": "0.83.3", + "metro-transform-plugins": "0.83.3", "nullthrows": "^1.1.1" }, "engines": { @@ -23512,15 +23621,6 @@ "node": ">=6.9.0" } }, - "node_modules/metro/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, "node_modules/metro/node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -23542,19 +23642,6 @@ "hermes-estree": "0.32.0" } }, - "node_modules/metro/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/metro/node_modules/image-size": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", @@ -23570,182 +23657,6 @@ "node": ">=16.x" } }, - "node_modules/metro/node_modules/metro-babel-transformer": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", - "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.32.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-cache": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", - "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", - "license": "MIT", - "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "https-proxy-agent": "^7.0.5", - "metro-core": "0.83.3" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-cache-key": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", - "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-core": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", - "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.83.3" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-file-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", - "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-minify-terser": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", - "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-runtime": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", - "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-source-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", - "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.83.3", - "nullthrows": "^1.1.1", - "ob1": "0.83.3", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-transform-plugins": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", - "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/metro-transform-worker": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", - "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "metro": "0.83.3", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-minify-terser": "0.83.3", - "metro-source-map": "0.83.3", - "metro-transform-plugins": "0.83.3", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/ob1": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", - "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, "node_modules/metro/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -23925,10 +23836,10 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -24650,9 +24561,9 @@ } }, "node_modules/ob1": { - "version": "0.83.2", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.2.tgz", - "integrity": "sha512-XlK3w4M+dwd1g1gvHzVbxiXEbUllRONEgcF2uEO0zm4nxa0eKlh41c6N65q1xbiDOeKKda1tvNOAD33fNjyvCg==", + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", + "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -25436,6 +25347,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" diff --git a/package.json b/package.json index 4bf2d5c..ce71fd6 100644 --- a/package.json +++ b/package.json @@ -35,29 +35,30 @@ "class-transformer": "^0.5.1", "clsx": "^2.1.1", "dayjs": "^1.11.13", - "expo": "^54.0.0", - "expo-asset": "~12.0.11", - "expo-audio": "~1.1.0", + "expo": "~54.0.34", + "expo-asset": "~12.0.13", + "expo-audio": "~1.1.1", + "expo-build-properties": "~1.0.10", "expo-clipboard": "~8.0.8", - "expo-constants": "~18.0.12", - "expo-crypto": "~15.0.8", - "expo-dev-client": "~6.0.20", + "expo-constants": "~18.0.13", + "expo-crypto": "~15.0.9", + "expo-dev-client": "~6.0.21", "expo-document-picker": "~14.0.8", - "expo-file-system": "~19.0.21", + "expo-file-system": "~19.0.22", "expo-haptics": "~15.0.8", "expo-image": "~3.0.11", - "expo-image-picker": "~17.0.10", + "expo-image-picker": "~17.0.11", "expo-insights": "~0.10.8", "expo-linear-gradient": "~15.0.8", - "expo-linking": "~8.0.10", + "expo-linking": "~8.0.12", "expo-localization": "~17.0.8", "expo-media-library": "~18.2.1", - "expo-router": "~6.0.19", + "expo-router": "~6.0.23", "expo-sharing": "~14.0.8", "expo-speech": "~14.0.8", - "expo-splash-screen": "~31.0.12", + "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", - "expo-updates": "~29.0.15", + "expo-updates": "~29.0.17", "html-entities": "^2.6.0", "i18n-js": "^4.5.1", "immer": "^10.1.1", diff --git a/patches/expo-audio+1.1.1.patch b/patches/expo-audio+1.1.1.patch new file mode 100644 index 0000000..6550725 --- /dev/null +++ b/patches/expo-audio+1.1.1.patch @@ -0,0 +1,23 @@ +diff --git a/node_modules/expo-audio/android/src/main/AndroidManifest.xml b/node_modules/expo-audio/android/src/main/AndroidManifest.xml +index 8c797aa..671c6c3 100644 +--- a/node_modules/expo-audio/android/src/main/AndroidManifest.xml ++++ b/node_modules/expo-audio/android/src/main/AndroidManifest.xml +@@ -1,18 +1,8 @@ + + + +- +- + + +- +- +- +- +- + = { + video: 'android.permission.READ_MEDIA_VIDEO', + audio: 'android.permission.READ_MEDIA_AUDIO', + }; +-const defaultGranularPermissions: GranularPermission[] = ['photo', 'video', 'audio']; ++const defaultGranularPermissions: GranularPermission[] = []; + + export function modifyAndroidManifest( + manifest: AndroidConfig.Manifest.AndroidManifest diff --git a/patches/react-native-compressor+1.13.0.patch b/patches/react-native-compressor+1.13.0.patch new file mode 100644 index 0000000..e34b421 --- /dev/null +++ b/patches/react-native-compressor+1.13.0.patch @@ -0,0 +1,518 @@ +diff --git a/node_modules/react-native-compressor/android/build.gradle b/node_modules/react-native-compressor/android/build.gradle +index 5071139..8289b2c 100644 +--- a/node_modules/react-native-compressor/android/build.gradle ++++ b/node_modules/react-native-compressor/android/build.gradle +@@ -115,7 +115,7 @@ dependencies { + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4" + implementation 'org.mp4parser:isoparser:1.9.56' +- implementation 'com.github.banketree:AndroidLame-kotlin:v0.0.1' ++ + implementation 'javazoom:jlayer:1.0.1' + } + +diff --git a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioCompressor.kt b/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioCompressor.kt +deleted file mode 100644 +index 9292d3e..0000000 +--- a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioCompressor.kt ++++ /dev/null +@@ -1,264 +0,0 @@ +-package com.reactnativecompressor.Audio +- +- +-import android.annotation.SuppressLint +-import com.facebook.react.bridge.Promise +-import com.facebook.react.bridge.ReactApplicationContext +-import com.facebook.react.bridge.ReadableMap +-import com.naman14.androidlame.LameBuilder +-import com.naman14.androidlame.WaveReader +-import com.reactnativecompressor.Utils.MediaCache +-import com.reactnativecompressor.Utils.Utils +-import com.reactnativecompressor.Utils.Utils.addLog +-import javazoom.jl.converter.Converter +-import javazoom.jl.decoder.JavaLayerException +-import java.io.BufferedOutputStream +-import java.io.File +-import java.io.FileNotFoundException +-import java.io.FileOutputStream +-import java.io.IOException +- +-class AudioCompressor { +- companion object { +- val TAG="AudioMain" +- private const val OUTPUT_STREAM_BUFFER = 8192 +- +- var outputStream: BufferedOutputStream? = null +- var waveReader: WaveReader? = null +- @JvmStatic +- fun CompressAudio( +- fileUrl: String, +- optionMap: ReadableMap, +- context: ReactApplicationContext, +- promise: Promise, +- ) { +- val realPath = Utils.getRealPath(fileUrl, context) +- var _fileUrl=realPath +- val filePathWithoutFileUri = realPath!!.replace("file://", "") +- try { +- var wavPath=filePathWithoutFileUri; +- var isNonWav:Boolean=false +- if (fileUrl.endsWith(".mp4", ignoreCase = true)) +- { +- addLog("mp4 file found") +- val mp3Path= Utils.generateCacheFilePath("mp3", context) +- AudioExtractor().genVideoUsingMuxer(fileUrl, mp3Path, -1, -1, true, false) +- _fileUrl=Utils.slashifyFilePath(mp3Path) +- wavPath= Utils.generateCacheFilePath("wav", context) +- try { +- val converter = Converter() +- converter.convert(mp3Path, wavPath) +- } catch (e: JavaLayerException) { +- addLog("JavaLayerException error"+e.localizedMessage) +- e.printStackTrace(); +- } +- isNonWav=true +- } +- else if (!fileUrl.endsWith(".wav", ignoreCase = true)) +- { +- addLog("non wav file found") +- wavPath= Utils.generateCacheFilePath("wav", context) +- try { +- val converter = Converter() +- converter.convert(filePathWithoutFileUri, wavPath) +- } catch (e: JavaLayerException) { +- addLog("JavaLayerException error"+e.localizedMessage) +- e.printStackTrace(); +- } +- isNonWav=true +- } +- +- +- autoCompressHelper(wavPath,filePathWithoutFileUri, optionMap,context) { mp3Path, finished -> +- if (finished) { +- val returnableFilePath:String="file://$mp3Path" +- addLog("finished: " + returnableFilePath) +- MediaCache.removeCompletedImagePath(fileUrl) +- if(isNonWav) +- { +- File(wavPath).delete() +- } +- promise.resolve(returnableFilePath) +- } else { +- addLog("error: "+mp3Path) +- promise.resolve(_fileUrl) +- } +- } +- } catch (e: Exception) { +- promise.resolve(_fileUrl) +- } +- } +- +- @SuppressLint("WrongConstant") +- private fun autoCompressHelper( +- fileUrl: String, +- actualFileUrl: String, +- optionMap: ReadableMap, +- context: ReactApplicationContext, +- completeCallback: (String, Boolean) -> Unit +- ) { +- +- val options = AudioHelper.fromMap(optionMap) +- val quality = options.quality +- +- var isCompletedCallbackTriggered:Boolean=false +- try { +- var mp3Path = Utils.generateCacheFilePath("mp3", context) +- val input = File(fileUrl) +- val output = File(mp3Path) +- +- val CHUNK_SIZE = 8192 +- addLog("Initialising wav reader") +- +- waveReader = WaveReader(input) +- +- try { +- waveReader!!.openWave() +- } catch (e: IOException) { +- e.printStackTrace() +- } +- +- addLog("Intitialising encoder") +- +- +- // for bitrate +- var audioBitrate:Int +- if(options.bitrate != -1) +- { +- audioBitrate= options.bitrate/1000 +- } +- else +- { +- audioBitrate=AudioHelper.getDestinationBitrateByQuality(actualFileUrl, quality!!) +- Utils.addLog("dest bitrate: $audioBitrate") +- } +- +- var androidLame = LameBuilder(); +- androidLame.setOutBitrate(audioBitrate) +- +- // for channels +- var audioChannels:Int +- if(options.channels != -1){ +- audioChannels= options.channels!! +- } +- else +- { +- audioChannels=waveReader!!.channels +- } +- androidLame.setOutChannels(audioChannels) +- +- // for sample rate +- androidLame.setInSampleRate(waveReader!!.sampleRate) +- var audioSampleRate:Int +- if(options.samplerate != -1){ +- audioSampleRate= options.samplerate!! +- } +- else +- { +- audioSampleRate=waveReader!!.sampleRate +- } +- androidLame.setOutSampleRate(audioSampleRate) +- val androidLameBuild=androidLame.build() +- +- try { +- outputStream = BufferedOutputStream(FileOutputStream(output), OUTPUT_STREAM_BUFFER) +- } catch (e: FileNotFoundException) { +- e.printStackTrace() +- } +- +- var bytesRead = 0 +- +- val buffer_l = ShortArray(CHUNK_SIZE) +- val buffer_r = ShortArray(CHUNK_SIZE) +- val mp3Buf = ByteArray(CHUNK_SIZE) +- +- val channels = waveReader!!.channels +- +- addLog("started encoding") +- while (true) { +- try { +- if (channels == 2) { +- +- bytesRead = waveReader!!.read(buffer_l, buffer_r, CHUNK_SIZE) +- addLog("bytes read=$bytesRead") +- +- if (bytesRead > 0) { +- +- var bytesEncoded = 0 +- bytesEncoded = androidLameBuild.encode(buffer_l, buffer_r, bytesRead, mp3Buf) +- addLog("bytes encoded=$bytesEncoded") +- +- if (bytesEncoded > 0) { +- try { +- addLog("writing mp3 buffer to outputstream with $bytesEncoded bytes") +- outputStream!!.write(mp3Buf, 0, bytesEncoded) +- } catch (e: IOException) { +- e.printStackTrace() +- } +- +- } +- +- } else +- break +- } else { +- +- bytesRead = waveReader!!.read(buffer_l, CHUNK_SIZE) +- addLog("bytes read=$bytesRead") +- +- if (bytesRead > 0) { +- var bytesEncoded = 0 +- +- bytesEncoded = androidLameBuild.encode(buffer_l, buffer_l, bytesRead, mp3Buf) +- addLog("bytes encoded=$bytesEncoded") +- +- if (bytesEncoded > 0) { +- try { +- addLog("writing mp3 buffer to outputstream with $bytesEncoded bytes") +- outputStream!!.write(mp3Buf, 0, bytesEncoded) +- } catch (e: IOException) { +- e.printStackTrace() +- } +- +- } +- +- } else +- break +- } +- +- +- } catch (e: IOException) { +- e.printStackTrace() +- } +- +- } +- +- addLog("flushing final mp3buffer") +- val outputMp3buf = androidLameBuild.flush(mp3Buf) +- addLog("flushed $outputMp3buf bytes") +- if (outputMp3buf > 0) { +- try { +- addLog("writing final mp3buffer to outputstream") +- outputStream!!.write(mp3Buf, 0, outputMp3buf) +- addLog("closing output stream") +- outputStream!!.close() +- completeCallback(output.absolutePath, true) +- isCompletedCallbackTriggered=true +- } catch (e: IOException) { +- completeCallback(e.localizedMessage, false) +- e.printStackTrace() +- } +- } +- +- } catch (e: IOException) { +- completeCallback(e.localizedMessage, false) +- } +- if(!isCompletedCallbackTriggered) +- { +- completeCallback("something went wrong", false) +- } +- } +- +- +- +- } +-} +diff --git a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioExtractor.kt b/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioExtractor.kt +deleted file mode 100644 +index c655182..0000000 +--- a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioExtractor.kt ++++ /dev/null +@@ -1,112 +0,0 @@ +-package com.reactnativecompressor.Audio +- +-import android.annotation.SuppressLint +-import android.media.MediaCodec +-import android.media.MediaExtractor +-import android.media.MediaFormat +-import android.media.MediaMetadataRetriever +-import android.media.MediaMuxer +-import android.util.Log +-import java.io.IOException +-import java.nio.ByteBuffer +- +- +-class AudioExtractor { +- /** +- * @param srcPath the path of source video file. +- * @param dstPath the path of destination video file. +- * @param startMs starting time in milliseconds for trimming. Set to +- * negative if starting from beginning. +- * @param endMs end time for trimming in milliseconds. Set to negative if +- * no trimming at the end. +- * @param useAudio true if keep the audio track from the source. +- * @param useVideo true if keep the video track from the source. +- * @throws IOException +- */ +- @SuppressLint("NewApi", "WrongConstant") +- @Throws(IOException::class) +- fun genVideoUsingMuxer(srcPath: String?, dstPath: String?, startMs: Int, endMs: Int, useAudio: Boolean, useVideo: Boolean) { +- // Set up MediaExtractor to read from the source. +- val extractor = MediaExtractor() +- extractor.setDataSource(srcPath!!) +- val trackCount = extractor.trackCount +- // Set up MediaMuxer for the destination. +- val muxer: MediaMuxer +- muxer = MediaMuxer(dstPath!!, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4) +- // Set up the tracks and retrieve the max buffer size for selected +- // tracks. +- val indexMap = HashMap(trackCount) +- var bufferSize = -1 +- for (i in 0 until trackCount) { +- val format = extractor.getTrackFormat(i) +- val mime = format.getString(MediaFormat.KEY_MIME) +- var selectCurrentTrack = false +- if (mime!!.startsWith("audio/") && useAudio) { +- selectCurrentTrack = true +- } else if (mime.startsWith("video/") && useVideo) { +- selectCurrentTrack = true +- } +- if (selectCurrentTrack) { +- extractor.selectTrack(i) +- val dstIndex = muxer.addTrack(format) +- indexMap[i] = dstIndex +- if (format.containsKey(MediaFormat.KEY_MAX_INPUT_SIZE)) { +- val newSize = format.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE) +- bufferSize = if (newSize > bufferSize) newSize else bufferSize +- } +- } +- } +- if (bufferSize < 0) { +- bufferSize = DEFAULT_BUFFER_SIZE +- } +- // Set up the orientation and starting time for extractor. +- val retrieverSrc = MediaMetadataRetriever() +- retrieverSrc.setDataSource(srcPath) +- val degreesString = retrieverSrc.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION) +- if (degreesString != null) { +- val degrees = degreesString.toInt() +- if (degrees >= 0) { +- muxer.setOrientationHint(degrees) +- } +- } +- if (startMs > 0) { +- extractor.seekTo((startMs * 1000).toLong(), MediaExtractor.SEEK_TO_CLOSEST_SYNC) +- } +- // Copy the samples from MediaExtractor to MediaMuxer. We will loop +- // for copying each sample and stop when we get to the end of the source +- // file or exceed the end time of the trimming. +- val offset = 0 +- var trackIndex = -1 +- val dstBuf = ByteBuffer.allocate(bufferSize) +- val bufferInfo = MediaCodec.BufferInfo() +- muxer.start() +- while (true) { +- bufferInfo.offset = offset +- bufferInfo.size = extractor.readSampleData(dstBuf, offset) +- if (bufferInfo.size < 0) { +- Log.d(TAG, "Saw input EOS.") +- bufferInfo.size = 0 +- break +- } else { +- bufferInfo.presentationTimeUs = extractor.sampleTime +- if (endMs > 0 && bufferInfo.presentationTimeUs > endMs * 1000) { +- Log.d(TAG, "The current sample is over the trim end time.") +- break +- } else { +- bufferInfo.flags = extractor.sampleFlags +- trackIndex = extractor.sampleTrackIndex +- muxer.writeSampleData(indexMap[trackIndex]!!, dstBuf, bufferInfo) +- extractor.advance() +- } +- } +- } +- muxer.stop() +- muxer.release() +- return +- } +- +- companion object { +- private const val DEFAULT_BUFFER_SIZE = 1 * 1024 * 1024 +- private const val TAG = "AudioExtractorDecoder" +- } +-} +diff --git a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioHelper.kt b/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioHelper.kt +deleted file mode 100644 +index 42040b4..0000000 +--- a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioHelper.kt ++++ /dev/null +@@ -1,72 +0,0 @@ +-package com.reactnativecompressor.Audio +- +-import android.media.MediaExtractor +-import android.media.MediaFormat +-import com.facebook.react.bridge.ReadableMap +-import com.reactnativecompressor.Utils.Utils +-import java.io.File +-import java.io.IOException +- +- +-class AudioHelper { +- +- var quality: String? = "medium" +- var bitrate: Int = -1 +- var samplerate: Int = -1 +- var channels: Int = -1 +- var progressDivider: Int? = 0 +- +- companion object { +- fun fromMap(map: ReadableMap): AudioHelper { +- val options = AudioHelper() +- val iterator = map.keySetIterator() +- while (iterator.hasNextKey()) { +- val key = iterator.nextKey() +- when (key) { +- "quality" -> options.quality = map.getString(key) +- "bitrate" -> { +- val bitrate = map.getInt(key) +- options.bitrate = if (bitrate > 320000 || bitrate < 64000) 64000 else bitrate +- } +- "samplerate" -> options.samplerate = map.getInt(key) +- "channels" -> options.channels = map.getInt(key) +- } +- } +- return options +- } +- +- +- fun getAudioBitrate(path: String): Int { +- val file = File(path) +- val fileSize = file.length() * 8 // size in bits +- +- val mex = MediaExtractor() +- try { +- mex.setDataSource(path) +- } catch (e: IOException) { +- e.printStackTrace() +- } +- +- val mf = mex.getTrackFormat(0) +- val durationUs = mf.getLong(MediaFormat.KEY_DURATION) +- val durationSec = durationUs / 1_000_000.0 // convert duration to seconds +- +- return (fileSize / durationSec).toInt()/1000 // bitrate in bits per second +- } +- fun getDestinationBitrateByQuality(path: String, quality: String): Int { +- val originalBitrate = getAudioBitrate(path) +- var destinationBitrate = originalBitrate +- Utils.addLog("source bitrate: $originalBitrate") +- +- when (quality.lowercase()) { +- "low" -> destinationBitrate = maxOf(64, (originalBitrate * 0.3).toInt()) +- "medium" -> destinationBitrate = (originalBitrate * 0.5).toInt() +- "high" -> destinationBitrate = minOf(320, (originalBitrate * 0.7).toInt()) +- else -> Utils.addLog("Invalid quality level. Please enter 'low', 'medium', or 'high'.") +- } +- +- return destinationBitrate +- } +- +- } +-} +diff --git a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioMain.kt b/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioMain.kt +index 446d4fb..8d6313b 100644 +--- a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioMain.kt ++++ b/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Audio/AudioMain.kt +@@ -10,8 +10,9 @@ class AudioMain(private val reactContext: ReactApplicationContext) { + optionMap: ReadableMap, + promise: Promise) { + try { +- +- AudioCompressor.CompressAudio(fileUrl,optionMap,reactContext,promise) ++ // Skip compression on Android to avoid libandroidlame dependency ++ // Return the original file URL without compression ++ promise.resolve(fileUrl) + } catch (ex: Exception) { + promise.reject(ex) + } +diff --git a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Utils/Utils.kt b/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Utils/Utils.kt +index c14b727..1198908 100644 +--- a/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Utils/Utils.kt ++++ b/node_modules/react-native-compressor/android/src/main/java/com/reactnativecompressor/Utils/Utils.kt +@@ -7,7 +7,6 @@ import android.provider.OpenableColumns + import android.util.Log + import com.facebook.react.bridge.Promise + import com.facebook.react.bridge.ReactApplicationContext +-import com.reactnativecompressor.Audio.AudioCompressor + import com.reactnativecompressor.Video.VideoCompressor.CompressionListener + import com.reactnativecompressor.Video.VideoCompressor.VideoCompressorClass + import java.io.FileNotFoundException +@@ -152,10 +151,6 @@ object Utils { + } + } + +- fun addLog(log: String) { +- Log.d(AudioCompressor.TAG, log) +- } +- + val exifAttributes = arrayOf( + "FNumber", + "ApertureValue", From 1de5b7a1a7c301460cd2fc045236207026184503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=81=D0=B8=D0=BB=D0=B8=D0=B9=20=D0=95=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D0=B5=D0=B5=D0=B2?= Date: Mon, 25 May 2026 18:29:56 +0600 Subject: [PATCH 3/4] feat: add expo audio manifest plugin --- apps/mobile/app.config.ts | 36 +++---------------- .../with-remove-media-playback-permission.js | 31 ++++++++++++++++ 2 files changed, 35 insertions(+), 32 deletions(-) create mode 100644 apps/mobile/plugins/with-remove-media-playback-permission.js diff --git a/apps/mobile/app.config.ts b/apps/mobile/app.config.ts index b1d8c3e..8e188a4 100644 --- a/apps/mobile/app.config.ts +++ b/apps/mobile/app.config.ts @@ -1,5 +1,4 @@ import { ExpoConfig } from '@expo/config'; -import { withAndroidManifest } from '@expo/config-plugins'; import { EASConfig } from 'expo-manifests'; import { AppEnv } from '../../libs/shared/utils/app-env/src/env'; import { AppEnvName } from '../../libs/shared/utils/app-env/src/app-env'; @@ -23,37 +22,9 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } googleSignInRoute: process.env.GOOGLE_SIGN_IN_ROUTE, }; - const withRemoveMediaPlaybackPermission = (config: ExpoConfig): ExpoConfig => - withAndroidManifest(config, (config) => { - const manifest = config.modResults; - - if (!manifest.manifest.$['xmlns:tools']) { - manifest.manifest.$['xmlns:tools'] = 'http://schemas.android.com/tools'; - } - - const permissions = (manifest.manifest['uses-permission'] ?? []) as Array<{ $: Record }>; - - const alreadyAdded = permissions.some( - (p) => p.$['android:name'] === 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK', - ); - - if (!alreadyAdded) { - permissions.push({ - $: { - 'android:name': 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK', - 'tools:node': 'remove', - }, - }); - } - - manifest.manifest['uses-permission'] = permissions as never; - - return config; - }) as ExpoConfig; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return withRemoveMediaPlaybackPermission({ - name: 'Open MobileUI', + return { + name: process.env.EXPO_PUBLIC_APP_NAME, slug: process.env.EXPO_PUBLIC_APP_SLUG as string, scheme: process.env.EXPO_PUBLIC_APP_SCHEME as string, owner: process.env.EXPO_PUBLIC_APP_OWNER as string, @@ -150,11 +121,12 @@ const createConfig = (): Omit & { extra: { eas: EASConfig } }, ] : null, + ['./plugins/with-remove-media-playback-permission'], ]), newArchEnabled: true, extra, // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any) as any; + } as any; }; export default createConfig; diff --git a/apps/mobile/plugins/with-remove-media-playback-permission.js b/apps/mobile/plugins/with-remove-media-playback-permission.js new file mode 100644 index 0000000..8d31831 --- /dev/null +++ b/apps/mobile/plugins/with-remove-media-playback-permission.js @@ -0,0 +1,31 @@ +const { withAndroidManifest } = require('@expo/config-plugins'); + +const withRemoveMediaPlaybackPermission = (config) => + withAndroidManifest(config, (config) => { + const manifest = config.modResults; + + if (!manifest.manifest.$['xmlns:tools']) { + manifest.manifest.$['xmlns:tools'] = 'http://schemas.android.com/tools'; + } + + const permissions = manifest.manifest['uses-permission'] ?? []; + + const alreadyAdded = permissions.some( + (p) => p.$['android:name'] === 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK', + ); + + if (!alreadyAdded) { + permissions.push({ + $: { + 'android:name': 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK', + 'tools:node': 'remove', + }, + }); + } + + manifest.manifest['uses-permission'] = permissions; + + return config; + }); + +module.exports = withRemoveMediaPlaybackPermission; From f1d0de20c2bb193241b41d9f3a3dadd5a244d4ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=81=D0=B8=D0=BB=D0=B8=D0=B9=20=D0=95=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D0=B5=D0=B5=D0=B2?= Date: Mon, 25 May 2026 18:39:09 +0600 Subject: [PATCH 4/4] fix: fix lint errors --- .../src/lib/hooks/use-search-filters.ts | 4 ++- .../attached-files-list/src/lib/component.tsx | 28 +++++++++++-------- .../form-chat-input/src/lib/component.tsx | 14 +++++++--- .../upsert-folder-sheet/src/lib/component.tsx | 2 +- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/libs/mobile/chat/features/archived-chats-filters-sheet/src/lib/hooks/use-search-filters.ts b/libs/mobile/chat/features/archived-chats-filters-sheet/src/lib/hooks/use-search-filters.ts index 700df1c..55ee99a 100644 --- a/libs/mobile/chat/features/archived-chats-filters-sheet/src/lib/hooks/use-search-filters.ts +++ b/libs/mobile/chat/features/archived-chats-filters-sheet/src/lib/hooks/use-search-filters.ts @@ -52,7 +52,9 @@ export const useSearchFilters = (): UseFiltersResult => { archivedChatsFilterState$.selectedFilter.set(filter); }; - const resetFilter = (): void => archivedChatsFilterState$.selectedFilter.set(filters[0]); + const resetFilter = (): void => { + archivedChatsFilterState$.selectedFilter.set(filters[0]); + }; return { filters, diff --git a/libs/mobile/chat/features/attached-files-list/src/lib/component.tsx b/libs/mobile/chat/features/attached-files-list/src/lib/component.tsx index d1b722c..f79cf03 100644 --- a/libs/mobile/chat/features/attached-files-list/src/lib/component.tsx +++ b/libs/mobile/chat/features/attached-files-list/src/lib/component.tsx @@ -30,21 +30,25 @@ export function AttachedFilesList({ return ( - {files?.map((file) => ( - + file ? [ - ))} + onDeleteFilePress={onDeleteFilePress} />] : [], + )} - {images?.map((image, index) => ( - onImagePress(index)} - onDeleteImagePress={onDeleteImagePress} - image={image} - /> - ))} + {images.flatMap((image, index) => + image + ? [ + onImagePress(index)} + onDeleteImagePress={onDeleteImagePress} + image={image} + />, + ] + : [], + )} ); diff --git a/libs/mobile/chat/features/form-chat-input/src/lib/component.tsx b/libs/mobile/chat/features/form-chat-input/src/lib/component.tsx index 81eca9e..90933b5 100644 --- a/libs/mobile/chat/features/form-chat-input/src/lib/component.tsx +++ b/libs/mobile/chat/features/form-chat-input/src/lib/component.tsx @@ -87,10 +87,16 @@ export function FormChatInput({ const isInputEmpty = !field.value?.trim() && files.length === 0 && images.length === 0; - const imagesForPreview = images.map((image, index) => ({ - ...new AttachedImage({ url: toDataUrl(image.base64) }), - index, - })); + const imagesForPreview = images.flatMap((image, index) => + image + ? [ + { + ...new AttachedImage({ url: toDataUrl(image.base64) }), + index, + }, + ] + : [], + ); const onVoiceModePress = async (): Promise => { if (!modelId) { diff --git a/libs/mobile/folder/features/upsert-folder-sheet/src/lib/component.tsx b/libs/mobile/folder/features/upsert-folder-sheet/src/lib/component.tsx index 3370540..f5bb15b 100644 --- a/libs/mobile/folder/features/upsert-folder-sheet/src/lib/component.tsx +++ b/libs/mobile/folder/features/upsert-folder-sheet/src/lib/component.tsx @@ -90,7 +90,7 @@ export function UpsertFolderSheet({ ref, ...props }: UpsertFolderSheetProps): Re } }, [folder]); - const files = useSelector(attachedFiles); + const files = useSelector(attachedFiles).flatMap((file) => (file ? [file] : [])); const closeModal = (): void => sheetRef.current?.close();