From a8416b9a780546cedadc19279a4ff6c3ddfe232a Mon Sep 17 00:00:00 2001 From: Natalie Bridgers Date: Tue, 30 Sep 2025 18:08:47 -0500 Subject: [PATCH] build properly --- js/app/.gitignore | 2 +- js/app/package.json | 2 +- js/components/.gitignore | 4 +- .../public/locales/en-US/messages.json | 54 ------------------- .../public/locales/es-ES/messages.json | 54 ------------------- .../public/locales/fr-FR/messages.json | 54 ------------------- .../public/locales/pt-BR/messages.json | 54 ------------------- .../public/locales/zh-Hant/messages.json | 54 ------------------- js/components/scripts/extract-i18n.js | 4 +- pnpm-lock.yaml | 32 ++++------- 10 files changed, 16 insertions(+), 298 deletions(-) delete mode 100644 js/components/public/locales/en-US/messages.json delete mode 100644 js/components/public/locales/es-ES/messages.json delete mode 100644 js/components/public/locales/fr-FR/messages.json delete mode 100644 js/components/public/locales/pt-BR/messages.json delete mode 100644 js/components/public/locales/zh-Hant/messages.json diff --git a/js/app/.gitignore b/js/app/.gitignore index d71653397..1bc8e00dd 100644 --- a/js/app/.gitignore +++ b/js/app/.gitignore @@ -61,4 +61,4 @@ generated .env.local -./public/locales/**/*.json +public/locales/* diff --git a/js/app/package.json b/js/app/package.json index d913cafae..4d1d1ea14 100644 --- a/js/app/package.json +++ b/js/app/package.json @@ -14,7 +14,7 @@ "export": "expo export --dump-sourcemap || expo export --dump-sourcemap", "check": "bash -c 'set -euo pipefail;export OUT=$(mktemp -d); npx tsc -p . --outDir $OUT; rm -rf $OUT'", "prebuild": "EXPO_NO_GIT_STATUS=1 expo prebuild --clean && sed -i.bak 's/org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m/org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m/' android/gradle.properties && pnpm run find-node", - "prepare": "which pod && pnpm run prepare-ios || echo 'not a mac, not installing pods'", + "prepare": "which pod && pnpm run prepare-ios || echo 'not a mac, not installing pods' && cp -r ../components/public/locales ./public/locales", "prepare-ios": "cd ios && pod install && pnpm run find-node", "find-node": "node -p '`NODE_BINARY=${process.argv[0]}`' > ios/.xcode.env.local", "code-signing-dev": "mkdir -p code-signing-dev/keys code-signing-dev/certs && expo-updates codesigning:generate --key-output-directory code-signing-dev/keys --certificate-output-directory code-signing-dev/certs --certificate-validity-duration-years 10 --certificate-common-name 'Streamplace'", diff --git a/js/components/.gitignore b/js/components/.gitignore index 765b00d6f..8de3f9976 100644 --- a/js/components/.gitignore +++ b/js/components/.gitignore @@ -1,6 +1,6 @@ -# Ignore compiled translation files in source directory +# Ignore compiled translation files in source directory if they exist locales/**/messages.json -public/locales/**/*.ftl +public/locales/* # Ignore extracted i18n keys (they're just for reference) locales/*/*.json diff --git a/js/components/public/locales/en-US/messages.json b/js/components/public/locales/en-US/messages.json deleted file mode 100644 index 1fde21b54..000000000 --- a/js/components/public/locales/en-US/messages.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "app-version": "Streamplace v{ $version }", - "download-new-update": "Download New Update", - "check-for-updates": "Check for Updates", - "bundled-runtype": "Bundled", - "ota-runtype": "Over-the-Air (OTA)", - "recovery-runtype": "Recovery Mode", - "modal-latest-version": "You are using the latest version.", - "modal-no-update-available": "You are on the latest version of Streamplace, hooray!", - "modal-update-available-title": "Update Available", - "modal-update-available-description": "A new version of Streamplace is ready to download", - "modal-update-failed": "Update check failed. You may need to update the app through the { $store }.", - "modal-update-failed-title": "Update Failed", - "modal-update-failed-description": "Update check failed. You may need to update the app through the { $store }.", - "button-reload-app-on-update": "Apply Update (will reload app)", - "use-custom-node": "Use Custom Node", - "default-url": "Default: { $url }", - "enter-custom-node-url": "Enter custom node URL", - "save-button": "SAVE", - "language-selection": "Language", - "language-selection-description": "Choose your preferred language", - "input-search-languages": "Search languages...", - "debug-recording-title": "Allow { $host } to record your livestream for debugging and improving the service", - "debug-recording-description": "Optional", - "manage-keys": "Manage Keys", - "settings-title": "Settings", - "loading": "Loading...", - "error": "Error", - "cancel": "Cancel", - "confirm": "Confirm", - "welcome-user": "Welcome, { $username }!", - "notification-count": "{ $count ->\n [0] No notifications\n [1] One notification\n *[other] { $count } notifications\n}", - "search-placeholder": "Search...", - "message-input": "Enter your message...", - "success": "Success", - "warning": "Warning", - "info": "Information", - "close": "Close", - "open": "Open", - "delete": "Delete", - "edit": "Edit", - "create": "Create", - "update": "Update", - "refresh": "Refresh", - "save": "Save", - "cancel-button": "Cancel", - "ok": "OK", - "yes": "Yes", - "no": "No", - "continue": "Continue", - "back": "Back", - "next": "Next", - "finish": "Finish" -} diff --git a/js/components/public/locales/es-ES/messages.json b/js/components/public/locales/es-ES/messages.json deleted file mode 100644 index 1fe4705a7..000000000 --- a/js/components/public/locales/es-ES/messages.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "app-version": "Streamplace v{ $version }", - "download-new-update": "Descargar Nueva Actualización", - "check-for-updates": "Buscar Actualizaciones", - "bundled-runtype": "Empaquetado", - "ota-runtype": "Over-the-Air (OTA)", - "recovery-runtype": "Modo de Recuperación", - "modal-latest-version": "Estás usando la última versión.", - "modal-no-update-available": "¡Tienes la versión más reciente de Streamplace, genial!", - "modal-update-available-title": "Actualización Disponible", - "modal-update-available-description": "Una nueva versión de Streamplace está lista para descargar", - "modal-update-failed": "La búsqueda de actualizaciones falló. Es posible que necesites actualizar", - "modal-update-failed-title": "Actualización Falló", - "modal-update-failed-description": "La búsqueda de actualizaciones falló. Es posible que necesites actualizar", - "button-reload-app-on-update": "Aplicar Actualización (recargará la aplicación)", - "use-custom-node": "Usar Nodo Personalizado", - "default-url": "Predeterminado: { $url }", - "enter-custom-node-url": "Introduce la URL del nodo personalizado", - "save-button": "GUARDAR", - "language-selection": "Idioma", - "language-selection-description": "Elige tu idioma preferido", - "debug-recording-title": "Permitir que { $host } grabe tu retransmisión en directo para depuración y mejora del servicio", - "debug-recording-description": "Opcional", - "input-search-languages": "Buscar idiomas...", - "manage-keys": "Gestionar Claves", - "settings-title": "Configuración", - "loading": "Cargando...", - "error": "Error", - "cancel": "Cancelar", - "confirm": "Confirmar", - "welcome-user": "¡Bienvenido, { $username }!", - "notification-count": "{ $count ->\n [0] Sin notificaciones\n [1] Una notificación\n *[other] { $count } notificaciones\n}", - "search-placeholder": "Buscar...", - "message-input": "Introduce tu mensaje...", - "success": "Éxito", - "warning": "Aviso", - "info": "Información", - "close": "Cerrar", - "open": "Abrir", - "delete": "Eliminar", - "edit": "Editar", - "create": "Crear", - "update": "Actualizar", - "refresh": "Actualizar", - "save": "Guardar", - "cancel-button": "Cancelar", - "ok": "Aceptar", - "yes": "Sí", - "no": "No", - "continue": "Continuar", - "back": "Volver", - "next": "Siguiente", - "finish": "Finalizar" -} diff --git a/js/components/public/locales/fr-FR/messages.json b/js/components/public/locales/fr-FR/messages.json deleted file mode 100644 index 3676e4b8e..000000000 --- a/js/components/public/locales/fr-FR/messages.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "app-version": "Streamplace v{ $version }", - "download-new-update": "Télécharger la nouvelle mise à jour", - "check-for-updates": "Vérifier les mises à jour", - "bundled-runtype": "Inclus", - "ota-runtype": "Over-the-Air (OTA)", - "recovery-runtype": "Mode de récupération", - "modal-latest-version": "Vous utilisez la dernière version.", - "modal-no-update-available": "Vous avez la dernière version de Streamplace, génial !", - "modal-update-available-title": "Mise à jour disponible", - "modal-update-available-description": "Une nouvelle version de Streamplace est prête à télécharger", - "modal-update-failed": "La vérification des mises à jour a échoué. Vous devrez peut-être mettre à jour l'application via { $store }.", - "modal-update-failed-title": "Échec de la mise à jour", - "modal-update-failed-description": "La vérification des mises à jour a échoué. Vous devrez peut-être mettre à jour l'application via { $store }.", - "button-reload-app-on-update": "Appliquer la mise à jour (l'application va se recharger)", - "use-custom-node": "Utiliser un nœud personnalisé", - "default-url": "Par défaut : { $url }", - "enter-custom-node-url": "Saisir l'URL du nœud personnalisé", - "save-button": "ENREGISTRER", - "language-selection": "Langue", - "language-selection-description": "Choisissez votre langue préférée", - "debug-recording-title": "Autoriser { $host } à enregistrer votre diffusion en direct pour le débogage et l'amélioration du service", - "debug-recording-description": "Optionnel", - "input-search-languages": "Rechercher des langues...", - "manage-keys": "Gérer les clés", - "settings-title": "Paramètres", - "loading": "Chargement...", - "error": "Erreur", - "cancel": "Annuler", - "confirm": "Confirmer", - "welcome-user": "Bienvenue, { $username } !", - "notification-count": "{ $count ->\n [0] Aucune notification\n [1] Une notification\n *[other] { $count } notifications\n}", - "search-placeholder": "Rechercher...", - "message-input": "Saisissez votre message...", - "success": "Succès", - "warning": "Attention", - "info": "Information", - "close": "Fermer", - "open": "Ouvrir", - "delete": "Supprimer", - "edit": "Modifier", - "create": "Créer", - "update": "Mettre à jour", - "refresh": "Actualiser", - "save": "Enregistrer", - "cancel-button": "Annuler", - "ok": "OK", - "yes": "Oui", - "no": "Non", - "continue": "Continuer", - "back": "Retour", - "next": "Suivant", - "finish": "Terminer" -} diff --git a/js/components/public/locales/pt-BR/messages.json b/js/components/public/locales/pt-BR/messages.json deleted file mode 100644 index f2a06f67e..000000000 --- a/js/components/public/locales/pt-BR/messages.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "app-version": "Streamplace v{ $version }", - "download-new-update": "Baixar Nova Atualização", - "check-for-updates": "Verificar Atualizações", - "bundled-runtype": "Empacotado", - "ota-runtype": "Over-the-Air (OTA)", - "recovery-runtype": "Modo de Recuperação", - "modal-latest-version": "Você está usando a versão mais recente.", - "modal-no-update-available": "Você está na versão mais recente do Streamplace, eba!", - "modal-update-available-title": "Atualização Disponível", - "modal-update-available-description": "Uma nova versão do Streamplace está pronta para download", - "modal-update-failed": "A verificação de atualizações falhou. Você pode precisar atualizar o aplicativo através do { $store }.", - "modal-update-failed-title": "Atualização Falhou", - "modal-update-failed-description": "A verificação de atualizações falhou. Você pode precisar atualizar o aplicativo através do { $store }.", - "button-reload-app-on-update": "Aplicar Atualização (o aplicativo será recarregado)", - "use-custom-node": "Usar Nó Personalizado", - "default-url": "Padrão: { $url }", - "enter-custom-node-url": "Digite a URL do nó personalizado", - "save-button": "SALVAR", - "language-selection": "Idioma", - "language-selection-description": "Escolha seu idioma preferido", - "debug-recording-title": "Permitir que { $host } grave sua transmissão ao vivo para depuração e melhoria do serviço", - "debug-recording-description": "Opcional", - "input-search-languages": "Pesquisar idiomas...", - "manage-keys": "Gerenciar Chaves", - "settings-title": "Configurações", - "loading": "Carregando...", - "error": "Erro", - "cancel": "Cancelar", - "confirm": "Confirmar", - "welcome-user": "Bem-vindo, { $username }!", - "notification-count": "{ $count ->\n [0] Nenhuma notificação\n [1] Uma notificação\n *[other] { $count } notificações\n}", - "search-placeholder": "Pesquisar...", - "message-input": "Digite sua mensagem...", - "success": "Sucesso", - "warning": "Aviso", - "info": "Informação", - "close": "Fechar", - "open": "Abrir", - "delete": "Excluir", - "edit": "Editar", - "create": "Criar", - "update": "Atualizar", - "refresh": "Atualizar", - "save": "Salvar", - "cancel-button": "Cancelar", - "ok": "OK", - "yes": "Sim", - "no": "Não", - "continue": "Continuar", - "back": "Voltar", - "next": "Próximo", - "finish": "Finalizar" -} diff --git a/js/components/public/locales/zh-Hant/messages.json b/js/components/public/locales/zh-Hant/messages.json deleted file mode 100644 index e3d567f61..000000000 --- a/js/components/public/locales/zh-Hant/messages.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "app-version": "直播地 v{ $version }", - "download-new-update": "下載新更新", - "check-for-updates": "檢查更新", - "bundled-runtype": "捆綁版", - "ota-runtype": "空中下載 (OTA)", - "recovery-runtype": "復原模式", - "modal-latest-version": "您正在使用最新版本。", - "modal-no-update-available": "您已經在使用最新版本的直播地,太棒了!", - "modal-update-available-title": "有可用更新", - "modal-update-available-description": "新版本的直播地已準備好下載", - "modal-update-failed": "更新檢查失敗。您可能需要透過 { $store } 更新應用程式。", - "modal-update-failed-title": "更新失敗", - "modal-update-failed-description": "更新檢查失敗。您可能需要透過 { $store } 更新應用程式。", - "button-reload-app-on-update": "套用更新 (將重新載入應用程式)", - "use-custom-node": "使用自訂節點", - "default-url": "預設:{ $url }", - "enter-custom-node-url": "輸入自訂節點網址", - "save-button": "儲存", - "language-selection": "語言", - "language-selection-description": "選擇您偏好的語言", - "debug-recording-title": "允許 { $host } 錄製您的直播串流以進行除錯和服務改善", - "debug-recording-description": "可選項目", - "input-search-languages": "搜尋語言...", - "manage-keys": "管理金鑰", - "settings-title": "設定", - "loading": "載入中...", - "error": "錯誤", - "cancel": "取消", - "confirm": "確認", - "welcome-user": "歡迎,{ $username }!", - "notification-count": "{ $count ->\n [0] 無通知\n [1] 一則通知\n *[other] { $count } 則通知\n}", - "search-placeholder": "搜尋...", - "message-input": "請輸入您的訊息...", - "success": "成功", - "warning": "警告", - "info": "資訊", - "close": "關閉", - "open": "開啟", - "delete": "刪除", - "edit": "編輯", - "create": "建立", - "update": "更新", - "refresh": "重新整理", - "save": "儲存", - "cancel-button": "取消", - "ok": "確定", - "yes": "是", - "no": "否", - "continue": "繼續", - "back": "返回", - "next": "下一步", - "finish": "完成" -} diff --git a/js/components/scripts/extract-i18n.js b/js/components/scripts/extract-i18n.js index 901f94e2a..07a69fb1e 100644 --- a/js/components/scripts/extract-i18n.js +++ b/js/components/scripts/extract-i18n.js @@ -166,7 +166,9 @@ function migrateKeysToFtl() { const messagesJsonPath = path.join(localeJsonDir, "messages.json"); if (!fs.existsSync(messagesJsonPath)) { - console.log(`⚠️ No messages.json found for ${locale}, skipping...`); + console.log( + `⚠️ No messages.json found for ${locale}! You may need to run pnpm i18n:compile first!`, + ); continue; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8bc3845e8..eaaecc579 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -458,12 +458,9 @@ importers: expo-keep-awake: specifier: ^14.0.0 version: 14.1.4(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0) - expo-screen-orientation: - specifier: ^9.0.7 - version: 9.0.7(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)) - expo-sensors: - specifier: ^15.0.7 - version: 15.0.7(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)) + expo-localization: + specifier: '*' + version: 17.0.7(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0) expo-sqlite: specifier: ~15.2.12 version: 15.2.12(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0) @@ -7006,12 +7003,6 @@ packages: expo: '*' react-native: '*' - expo-sensors@15.0.7: - resolution: {integrity: sha512-TGUxRx/Ss7KGgfWo453YF64ENucw6oYryPiu/8I3ZZuf114xQPRxAbsZohPLaVUUGuaUyWbDsb0eRsmuKUzBnQ==} - peerDependencies: - expo: '*' - react-native: '*' - expo-splash-screen@0.30.9: resolution: {integrity: sha512-curHUaZxUTZ2dWvz32ao3xPv5mJr1LBqn5V8xm/IULAehB9RGCn8iKiROMN1PYebSG+56vPMuJmBm9P+ayvJpA==} peerDependencies: @@ -21662,6 +21653,12 @@ snapshots: react: 19.0.0 rtl-detect: 1.1.2 + expo-localization@17.0.7(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0): + dependencies: + expo: 53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10) + react: 19.0.0 + rtl-detect: 1.1.2 + expo-manifests@0.16.5(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10)): dependencies: '@expo/config': 11.0.10 @@ -21704,17 +21701,6 @@ snapshots: expo: 53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10) react-native: 0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10) - expo-screen-orientation@9.0.7(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)): - dependencies: - expo: 53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10) - react-native: 0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10) - - expo-sensors@15.0.7(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)): - dependencies: - expo: 53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10) - invariant: 2.2.4 - react-native: 0.79.3(@babel/core@7.26.0)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10) - expo-splash-screen@0.30.9(expo@53.0.11(@babel/core@7.26.0)(@expo/metro-runtime@5.0.4(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-native-webview@13.15.0(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0))(react-native@0.79.3(@babel/core@7.26.0)(@types/react@18.3.12)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10)): dependencies: '@expo/prebuild-config': 9.0.6 -- knotmirror 0.0.1