diff --git a/.eslintrc.json b/.eslintrc.json index 288766f..b79c18c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -17,7 +17,7 @@ "tsx": true, "modules": true }, - "ecmaVersion": 6, + "ecmaVersion": 11, "project": "./tsconfig.json", "sourceType": "module" }, diff --git a/.github/HELP.md b/.github/HELP.md index 660f200..4c1e619 100644 --- a/.github/HELP.md +++ b/.github/HELP.md @@ -2,17 +2,17 @@ ### If you're using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only. -![img_1.png](img_1.png) +![img_1.png](HELP/img_1.png) 1. Go to `/profile` 2. Create a new Oauth client with redirect URI: `abacusfiiiapp://redirect` -![img.png](img.png) +![img.png](HELP/img.png) 3. Copy and paste `Oauth Client ID` it will be a number (required, Example: `4`). 4. No need to use the secret client but if you do so copy and paste it in the `Oauth Client Secret` field. -img_2.jpeg +img_2.jpeg ### Personal Access Token diff --git a/.github/img.png b/.github/HELP/img.png similarity index 100% rename from .github/img.png rename to .github/HELP/img.png diff --git a/.github/img_1.png b/.github/HELP/img_1.png similarity index 100% rename from .github/img_1.png rename to .github/HELP/img_1.png diff --git a/.github/img_2.jpeg b/.github/HELP/img_2.jpeg similarity index 100% rename from .github/img_2.jpeg rename to .github/HELP/img_2.jpeg diff --git a/.github/img_2.png b/.github/HELP/img_2.png similarity index 100% rename from .github/img_2.png rename to .github/HELP/img_2.png diff --git a/.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE/BUG_REPORT.md similarity index 83% rename from .github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE/BUG_REPORT.md index 7ccaaf8..0fc43a1 100644 --- a/.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.md @@ -1,9 +1,9 @@ --- name: Bug report about: Create a report to help us improve -title: BUG_ +title: 'Bug: ' labels: bug -assignees: victorbalssa +assignees: 'victorbalssa' --- @@ -24,9 +24,9 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Version [e.g. 22] + - Device: [e.g. iPhone 15] + - OS: [e.g. iOS 17] + - Version [e.g. 0.11.0] **Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/CUSTOM.md similarity index 100% rename from .github/ISSUE_TEMPLATE/custom.md rename to .github/ISSUE_TEMPLATE/CUSTOM.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md similarity index 87% rename from .github/ISSUE_TEMPLATE/feature_request.md rename to .github/ISSUE_TEMPLATE/FEATURE_REQUEST.md index bbcbbe7..18c018a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md @@ -1,9 +1,9 @@ --- name: Feature request about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' +title: 'Feature Request: ' +labels: 'feature request' +assignees: 'victorbalssa' --- diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1e9a893..3050965 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,20 +1,3 @@ ---- -name: Pull request -about: Suggest an idea for this project -title: FEATURE_ -labels: feature -assignees: victorbalssa - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. +**Summary** +A clear and concise description of what you created. +- diff --git a/.github/img/chart.jpeg b/.github/img/chart.jpeg deleted file mode 100644 index 81b4f71..0000000 Binary files a/.github/img/chart.jpeg and /dev/null differ diff --git a/.github/img/demo-old-2022.gif b/.github/img/demo-old-2022.gif deleted file mode 100644 index fac7382..0000000 Binary files a/.github/img/demo-old-2022.gif and /dev/null differ diff --git a/.github/img/transaction.jpeg b/.github/img/transaction.jpeg deleted file mode 100644 index f1ca6ba..0000000 Binary files a/.github/img/transaction.jpeg and /dev/null differ diff --git a/.github/img/transactions-list.jpeg b/.github/img/transactions-list.jpeg deleted file mode 100644 index e671b36..0000000 Binary files a/.github/img/transactions-list.jpeg and /dev/null differ diff --git a/README.md b/README.md index 995b3d4..be70c78 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ ![size](https://img.shields.io/github/repo-size/victorbalssa/abacus?style=for-the-badge) ![licence](https://img.shields.io/github/license/victorbalssa/abacus?style=for-the-badge) ![stars](https://img.shields.io/github/stars/victorbalssa/abacus?style=for-the-badge) -[![sdk](https://img.shields.io/badge/SDK-49.0.0-purple?style=for-the-badge&label=EXPO%20SDK)](https://www.npmjs.com/package/expo) +[![sdk](https://img.shields.io/badge/SDK-50.0.7-purple?style=for-the-badge&label=EXPO%20SDK)](https://www.npmjs.com/package/expo) [![pr](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge)](http://makeapullrequest.com) [![sponsor](https://img.shields.io/github/sponsors/victorbalssa?style=for-the-badge&color=ff69b4)](https://github.com/sponsors/victorbalssa) @@ -64,20 +64,16 @@ No external API calls nor Analytics API, not even sentry / crashlytics. ### 📡 Technologies -- __Expo SDK 49__ Framework and a Platform for universal React applications. [docs.expo.io](https://docs.expo.io/) +- __Expo SDK 50__ Framework and a Platform for universal React applications. [docs.expo.io](https://docs.expo.io/) - __Routing and navigation__ React Navigation V6. [https://reactnavigation.org/docs](https://reactnavigation.org/docs/getting-started) - __Tests__ on simulator/emulator before each EAS build with [@wix/Detox](https://github.com/wix/Detox) -- __Redux architecture__ +- __Store arch__ - Rematch core [@rematch/core](https://github.com/rematch/rematch) - - Rematch plugin [@rematch/loading](https://rematchjs.org/docs/plugins/loading) - - Rematch persist [@rematch/persist](https://rematchjs.org/docs/plugins/persist) -- __UX/UI Library__ - - Native Base [https://nativebase.io](https://nativebase.io/) + - Loading plugin [@rematch/loading](https://rematchjs.org/docs/plugins/loading) + - Persist plugin [@rematch/persist](https://rematchjs.org/docs/plugins/persist) - __Linting__ - Airbnb's Linting : [https://github.com/airbnb/javascript](https://github.com/airbnb/javascript) -- __Splash Screen Animated__ - - React Native Splash Screen : [npmjs](https://www.npmjs.com/package/react-native-animated-splash-screen) --- diff --git a/app.json b/app.json index e1c3051..a7d141c 100644 --- a/app.json +++ b/app.json @@ -6,10 +6,9 @@ "privacy": "public", "platforms": [ "ios", - "android", - "web" + "android" ], - "version": "0.11.1", + "version": "0.12.4", "orientation": "portrait", "updates": { "enabled": true, @@ -35,7 +34,7 @@ "usesNonExemptEncryption": false }, "bundleIdentifier": "abacus.ios.app", - "buildNumber": "0.11.1" + "buildNumber": "0.12.4" }, "android": { "icon": "./src/images/icon-abacus.png", @@ -53,7 +52,7 @@ }, "playStoreUrl": "https://play.google.com/store/apps/details?id=abacus.fireflyiii.android.app", "package": "abacus.fireflyiii.android.app", - "versionCode": 13 + "versionCode": 18 }, "web": { "bundler": "metro" @@ -71,7 +70,7 @@ "plugins": [ "expo-localization", "./plugins/withAndroidManifest", - "@config-plugins/detox" + "expo-build-properties" ], "userInterfaceStyle": "automatic" } diff --git a/babel.config.js b/babel.config.js index d28c3f8..f826552 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,4 +1,4 @@ -module.exports = (api) => { +module.exports = function async(api) { api.cache(true); return { presets: ['babel-preset-expo'], diff --git a/metro.config.js b/metro.config.mjs similarity index 64% rename from metro.config.js rename to metro.config.mjs index d584095..3e46002 100644 --- a/metro.config.js +++ b/metro.config.mjs @@ -1,6 +1,4 @@ -// Learn more https://docs.expo.io/guides/customizing-metro -// eslint-disable-next-line @typescript-eslint/no-var-requires -const { getDefaultConfig } = require('expo/metro-config'); +import { getDefaultConfig } from 'expo/metro-config'; /** @type {import('expo/metro-config').MetroConfig} */ const config = getDefaultConfig(__dirname, { diff --git a/package-lock.json b/package-lock.json index 783a85e..e2c44f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,18 @@ { "name": "abacus", - "version": "0.11.1", + "version": "0.12.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "abacus", - "version": "0.11.1", + "version": "0.12.4", "dependencies": { - "@expo/config-plugins": "~7.2.5", - "@expo/vector-icons": "^13.0.0", - "@react-native-async-storage/async-storage": "1.18.2", - "@react-native-community/datetimepicker": "7.2.0", + "@expo/config-plugins": "~7.8.0", + "@expo/metro-runtime": "~3.1.3", + "@expo/vector-icons": "^14.0.0", + "@react-native-async-storage/async-storage": "1.21.0", + "@react-native-community/datetimepicker": "7.6.1", "@react-navigation/bottom-tabs": "^6.2.0", "@react-navigation/native": "^6.0.8", "@react-navigation/native-stack": "^6.9.13", @@ -21,29 +22,30 @@ "axios": "^1.6.0", "babel-polyfill": "^6.26.0", "bootstrap": "^4.4.1", - "expo": "^49.0.21", - "expo-application": "~5.3.0", - "expo-asset": "~8.10.1", - "expo-auth-session": "~5.0.2", - "expo-blur": "~12.4.1", - "expo-build-properties": "~0.8.3", - "expo-clipboard": "~4.3.1", - "expo-crypto": "~12.4.1", - "expo-device": "~5.4.0", - "expo-font": "~11.4.0", - "expo-haptics": "~12.4.0", - "expo-linear-gradient": "~12.3.0", - "expo-linking": "~5.0.2", - "expo-local-authentication": "~13.4.1", - "expo-localization": "~14.3.0", - "expo-random": "~13.2.0", - "expo-secure-store": "~12.3.1", - "expo-splash-screen": "~0.20.5", - "expo-status-bar": "~1.6.0", - "expo-store-review": "~6.4.0", - "expo-system-ui": "~2.4.0", - "expo-updates": "~0.18.19", - "expo-web-browser": "~12.3.2", + "expo": "~50.0.7", + "expo-application": "~5.8.3", + "expo-asset": "~9.0.2", + "expo-auth-session": "~5.4.0", + "expo-blur": "~12.9.2", + "expo-build-properties": "~0.11.1", + "expo-clipboard": "~5.0.1", + "expo-crypto": "~12.8.1", + "expo-dev-client": "~3.3.8", + "expo-device": "~5.9.3", + "expo-font": "~11.10.2", + "expo-haptics": "~12.8.1", + "expo-linear-gradient": "~12.7.2", + "expo-linking": "~6.2.2", + "expo-local-authentication": "~13.8.0", + "expo-localization": "~14.8.3", + "expo-random": "~13.6.0", + "expo-secure-store": "~12.8.1", + "expo-splash-screen": "~0.26.4", + "expo-status-bar": "~1.11.1", + "expo-store-review": "~6.8.3", + "expo-system-ui": "~2.9.3", + "expo-updates": "~0.24.11", + "expo-web-browser": "~12.8.2", "globally": "^0.0.0", "i18n-js": "^4.1.1", "lodash": "^4.17.21", @@ -54,16 +56,16 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-helmet": "^5.2.1", - "react-native": "0.72.6", + "react-native": "0.73.4", "react-native-animated-splash-screen": "^2.0.5", - "react-native-gesture-handler": "~2.12.0", + "react-native-gesture-handler": "~2.14.0", "react-native-gradle-plugin": "^0.71.19", "react-native-modal": "^11.5.6", - "react-native-pager-view": "6.2.0", - "react-native-reanimated": "~3.3.0", - "react-native-safe-area-context": "4.6.3", - "react-native-screens": "~3.22.0", - "react-native-svg": "13.9.0", + "react-native-pager-view": "6.2.3", + "react-native-reanimated": "~3.6.2", + "react-native-safe-area-context": "4.8.2", + "react-native-screens": "~3.29.0", + "react-native-svg": "14.1.0", "react-native-swipe-list-view": "^3.2.9", "react-native-web": "~0.19.7", "react-redux": "^9.0.4", @@ -76,14 +78,13 @@ }, "devDependencies": { "@babel/core": "^7.23.2", - "@config-plugins/detox": "^6.0.0", "@types/jest": "^29.5.8", "@types/lodash": "^4.14.197", "@types/node": "^20.9.0", - "@types/react": "~18.2.14", + "@types/react": "~18.2.45", "@typescript-eslint/eslint-plugin": "^5.30.0", "@typescript-eslint/parser": "^5.62.0", - "babel-preset-expo": "^9.5.0", + "babel-preset-expo": "^10.0.0", "detox": "20.13.5", "dotenv": "^16.3.1", "eslint": "^7.32.0", @@ -92,11 +93,11 @@ "eslint-plugin-jest": "^27.2.3", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-react": "^7.33.1", - "jest-expo": "^49.0.0", + "jest-expo": "~50.0.2", "node-sass": "^9.0.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^5.2.2" + "typescript": "^5.3.0" } }, "node_modules/@ampproject/remapping": { @@ -188,11 +189,11 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -233,19 +234,19 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.1.tgz", - "integrity": "sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.22.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.22.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6", - "semver": "^6.3.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -342,11 +343,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.3.tgz", - "integrity": "sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dependencies": { - "@babel/types": "^7.22.3" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -382,11 +383,11 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -418,19 +419,19 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.1.tgz", - "integrity": "sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-member-expression-to-functions": "^7.22.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { @@ -445,11 +446,11 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dependencies": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -467,9 +468,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } @@ -636,21 +637,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", @@ -925,11 +911,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1278,11 +1264,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.3.tgz", - "integrity": "sha512-5Ti1cHLTDnt3vX61P9KZ5IG09bFXp4cDVFJIAeCZuxu9OXXJJZp5iP0n/rzM2+iAutJY+KWEyyHcRaHlpQ/P5g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1596,11 +1582,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.3.tgz", - "integrity": "sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1610,12 +1596,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.3.tgz", - "integrity": "sha512-fC7jtjBPFqhqpPAE+O4LKwnLq7gGkD3ZmC2E3i4qWH34mH3gOg2Xrq5YMHUq6DM30xhqM1DNftiRaSqVjEG+ug==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1625,13 +1611,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.3.tgz", - "integrity": "sha512-C7MMl4qWLpgVCbXfj3UW8rR1xeCnisQ0cU7YJHV//8oNBS0aCIVg1vFnZXxOckHhEpQyqNNkWmvSEWnMLlc+Vw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.22.1", - "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1656,11 +1642,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1670,15 +1656,29 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.3.tgz", - "integrity": "sha512-JEulRWG2f04a7L8VWaOngWiK6p+JOSpB+DAtwfJgOaej1qdbNxqtK7MwTBHjUA10NeFcszlFNqCdbRcirzh2uQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/types": "^7.22.3" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1715,6 +1715,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", + "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", @@ -2050,6 +2065,25 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-react": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", + "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-react-display-name": "^7.23.3", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-typescript": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz", @@ -2170,11 +2204,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -2189,18 +2223,6 @@ "dev": true, "peer": true }, - "node_modules/@config-plugins/detox": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@config-plugins/detox/-/detox-6.0.0.tgz", - "integrity": "sha512-WUpMYU1gbkynPhCAEnzlyJYjNgSYHxJq6QEy2Bkm/g/9UALqf9wCZw16LJysF6gWuq7WUYSx1kmfGPWkSpFJog==", - "dev": true, - "dependencies": { - "expo-build-properties": "~0.8.3" - }, - "peerDependencies": { - "expo": "^49" - } - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2352,66 +2374,80 @@ } }, "node_modules/@expo/cli": { - "version": "0.10.16", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.10.16.tgz", - "integrity": "sha512-EwgnRN5AMElg0JJjFLJTPk5hYkVXxnNMLIvZBiTfGoCq+rDw6u7Mg5l2Bbm/geSHOoplaHyPZ/Wr23FAuZWehA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.5.tgz", + "integrity": "sha512-9cMquL/5bBfV73CbZcWipk3KZSo8mBqdgvkoWCtEtnnlm/879ayxzMWjVIgT5yV4w+X7+N6KkBSUIIj4t9Xqew==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/dev-server": "0.5.5", + "@expo/config": "~8.5.0", + "@expo/config-plugins": "~7.8.0", "@expo/devcert": "^1.0.0", - "@expo/env": "0.0.5", + "@expo/env": "~0.2.0", + "@expo/image-utils": "^0.4.0", "@expo/json-file": "^8.2.37", - "@expo/metro-config": "~0.10.0", + "@expo/metro-config": "~0.17.0", "@expo/osascript": "^2.0.31", - "@expo/package-manager": "~1.1.0", - "@expo/plist": "^0.0.20", - "@expo/prebuild-config": "6.2.6", + "@expo/package-manager": "^1.1.1", + "@expo/plist": "^0.1.0", + "@expo/prebuild-config": "6.7.4", "@expo/rudder-sdk-node": "1.1.1", "@expo/spawn-async": "1.5.0", - "@expo/xcpretty": "^4.2.1", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "^0.73.6", "@urql/core": "2.3.6", "@urql/exchange-retry": "0.3.0", "accepts": "^1.3.8", - "arg": "4.1.0", + "arg": "5.0.2", "better-opn": "~3.0.2", "bplist-parser": "^0.3.1", "cacache": "^15.3.0", "chalk": "^4.0.0", "ci-info": "^3.3.0", + "connect": "^3.7.0", "debug": "^4.3.4", "env-editor": "^0.4.1", + "find-yarn-workspace-root": "~2.0.0", "form-data": "^3.0.1", "freeport-async": "2.0.0", "fs-extra": "~8.1.0", "getenv": "^1.0.0", + "glob": "^7.1.7", "graphql": "15.8.0", "graphql-tag": "^2.10.1", "https-proxy-agent": "^5.0.1", "internal-ip": "4.3.0", + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1", "js-yaml": "^3.13.1", "json-schema-deref-sync": "^0.13.0", - "md5-file": "^3.2.3", + "lodash.debounce": "^4.0.8", "md5hex": "^1.0.0", - "minipass": "3.1.6", + "minimatch": "^3.0.4", + "minipass": "3.3.6", "node-fetch": "^2.6.7", "node-forge": "^1.3.1", "npm-package-arg": "^7.0.0", + "open": "^8.3.0", "ora": "3.4.0", + "picomatch": "^3.0.1", "pretty-bytes": "5.6.0", "progress": "2.0.3", "prompts": "^2.3.2", "qrcode-terminal": "0.11.0", "require-from-string": "^2.0.2", "requireg": "^0.2.2", + "resolve": "^1.22.2", "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.2", "semver": "^7.5.3", "send": "^0.18.0", "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "tar": "^6.0.5", + "temp-dir": "^2.0.0", "tempy": "^0.7.1", "terminal-link": "^2.1.1", "text-table": "^0.2.0", @@ -2437,6 +2473,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@expo/cli/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, "node_modules/@expo/cli/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2481,6 +2522,25 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/@expo/cli/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2497,6 +2557,26 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/@expo/cli/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@expo/cli/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/@expo/cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2517,9 +2597,9 @@ } }, "node_modules/@expo/cli/node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -2546,13 +2626,13 @@ } }, "node_modules/@expo/config": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.1.2.tgz", - "integrity": "sha512-4e7hzPj50mQIlsrzOH6XZ36O094mPfPTIDIH4yv49bWNMc7GFLTofB/lcT+QyxiLaJuC0Wlk9yOLB8DIqmtwug==", + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz", + "integrity": "sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q==", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", + "@expo/config-plugins": "~7.8.2", + "@expo/config-types": "^50.0.0", "@expo/json-file": "^8.2.37", "getenv": "^1.0.0", "glob": "7.1.6", @@ -2560,17 +2640,18 @@ "resolve-from": "^5.0.0", "semver": "7.5.3", "slugify": "^1.3.4", - "sucrase": "^3.20.0" + "sucrase": "3.34.0" } }, "node_modules/@expo/config-plugins": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.2.5.tgz", - "integrity": "sha512-w+5ccu1IxBHgyQk9CPFKLZOk8yZQEyTjbJwOzESK1eR7QwosbcsLkN1c1WWUZYiCXwORu3UTwJYll4+X2xxJhQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz", + "integrity": "sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg==", "dependencies": { - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "~8.2.37", - "@expo/plist": "^0.0.20", + "@expo/config-types": "^50.0.0-alpha.1", + "@expo/fingerprint": "^0.6.0", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", "@expo/sdk-runtime-versions": "^1.0.0", "@react-native/normalize-color": "^2.0.0", "chalk": "^4.1.2", @@ -2581,6 +2662,7 @@ "resolve-from": "^5.0.0", "semver": "^7.5.3", "slash": "^3.0.0", + "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } @@ -2658,9 +2740,9 @@ } }, "node_modules/@expo/config-types": { - "version": "49.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-49.0.0.tgz", - "integrity": "sha512-8eyREVi+K2acnMBe/rTIu1dOfyR2+AMnTLHlut+YpMV9OZPdeKV0Bs9BxAewGqBA2slslbQ9N39IS2CuTKpXkA==" + "version": "50.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz", + "integrity": "sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw==" }, "node_modules/@expo/config/node_modules/@babel/code-frame": { "version": "7.10.4", @@ -2700,29 +2782,47 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/@expo/dev-server": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.5.5.tgz", - "integrity": "sha512-t0fT8xH1exwYsH5hh7bAt85VF+gXxg24qrbny2rR/iKoPTWFCd2JNQV8pvfLg51hvrywQ3YCBuT3lU1w7aZxFA==", + "node_modules/@expo/devcert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.0.tgz", + "integrity": "sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA==", + "dependencies": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "rimraf": "^2.6.2", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^2.4.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/env": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.1.tgz", + "integrity": "sha512-deZmRS7Dvp18VM8s559dq/ZjPlV1D9vtLoLXwHmCK/JYOvtNptdKsfxcWjI7ewmo6ln2PqgNI9HRI74q6Wk2eA==", "dependencies": { - "@expo/bunyan": "4.0.0", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "2.0.33", - "@expo/spawn-async": "^1.5.0", - "body-parser": "^1.20.1", "chalk": "^4.0.0", - "connect": "^3.7.0", - "fs-extra": "9.0.0", - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1", - "node-fetch": "^2.6.0", - "open": "^8.3.0", - "resolve-from": "^5.0.0", - "serialize-error": "6.0.0", - "temp-dir": "^2.0.0" + "debug": "^4.3.4", + "dotenv": "~16.0.3", + "dotenv-expand": "~10.0.0", + "getenv": "^1.0.0" } }, - "node_modules/@expo/dev-server/node_modules/ansi-styles": { + "node_modules/@expo/env/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -2736,7 +2836,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/dev-server/node_modules/chalk": { + "node_modules/@expo/env/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2751,7 +2851,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/dev-server/node_modules/color-convert": { + "node_modules/@expo/env/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -2762,26 +2862,20 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/dev-server/node_modules/color-name": { + "node_modules/@expo/env/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/dev-server/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, + "node_modules/@expo/env/node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@expo/dev-server/node_modules/has-flag": { + "node_modules/@expo/env/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -2789,21 +2883,7 @@ "node": ">=8" } }, - "node_modules/@expo/dev-server/node_modules/serialize-error": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", - "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", - "dependencies": { - "type-fest": "^0.12.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/dev-server/node_modules/supports-color": { + "node_modules/@expo/env/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -2814,66 +2894,24 @@ "node": ">=8" } }, - "node_modules/@expo/dev-server/node_modules/type-fest": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", - "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", - "engines": { - "node": ">=10" + "node_modules/@expo/fingerprint": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.6.0.tgz", + "integrity": "sha512-KfpoVRTMwMNJ/Cf5o+Ou8M/Y0EGSTqK+rbi70M2Y0K2qgWNfMJ1gm6sYO9uc8lcTr7YSYM1Rme3dk7QXhpScNA==", + "dependencies": { + "@expo/spawn-async": "^1.5.0", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "find-up": "^5.0.0", + "minimatch": "^3.0.4", + "p-limit": "^3.1.0", + "resolve-from": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/dev-server/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "engines": { - "node": ">= 10.0.0" + "bin": { + "fingerprint": "bin/cli.js" } }, - "node_modules/@expo/devcert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.0.tgz", - "integrity": "sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA==", - "dependencies": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "rimraf": "^2.6.2", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^2.4.0" - } - }, - "node_modules/@expo/devcert/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@expo/env": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.0.5.tgz", - "integrity": "sha512-UXuKAqyXfhMQC3gP0OyjXmFX08Z1fkVWiGBN7bYzfoX8LHatjeHrDtI6w5nDvd8XPxPvmqaZoEDw1lW3+dz3oQ==", - "dependencies": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", - "getenv": "^1.0.0" - } - }, - "node_modules/@expo/env/node_modules/ansi-styles": { + "node_modules/@expo/fingerprint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -2887,7 +2925,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/env/node_modules/chalk": { + "node_modules/@expo/fingerprint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2902,7 +2940,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/env/node_modules/color-convert": { + "node_modules/@expo/fingerprint/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -2913,20 +2951,12 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/env/node_modules/color-name": { + "node_modules/@expo/fingerprint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/env/node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/env/node_modules/has-flag": { + "node_modules/@expo/fingerprint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -2934,7 +2964,7 @@ "node": ">=8" } }, - "node_modules/@expo/env/node_modules/supports-color": { + "node_modules/@expo/fingerprint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -2946,16 +2976,15 @@ } }, "node_modules/@expo/image-utils": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.22.tgz", - "integrity": "sha512-uzq+RERAtkWypOFOLssFnXXqEqKjNj9eXN7e97d/EXUAojNcLDoXc0sL+F5B1I4qtlsnhX01kcpoIBBZD8wZNQ==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.4.1.tgz", + "integrity": "sha512-EZb+VHSmw+a5s2hS9qksTcWylY0FDaIAVufcxoaRS9tHIXLjW5zcKW7Rhj9dSEbZbRVy9yXXdHKa3GQdUQIOFw==", "dependencies": { "@expo/spawn-async": "1.5.0", "chalk": "^4.0.0", "fs-extra": "9.0.0", "getenv": "^1.0.0", "jimp-compact": "0.16.1", - "mime": "^2.4.4", "node-fetch": "^2.6.0", "parse-png": "^2.1.0", "resolve-from": "^5.0.0", @@ -3109,9 +3138,9 @@ } }, "node_modules/@expo/json-file": { - "version": "8.2.37", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.37.tgz", - "integrity": "sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz", + "integrity": "sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g==", "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.2", @@ -3127,22 +3156,44 @@ } }, "node_modules/@expo/metro-config": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.10.7.tgz", - "integrity": "sha512-uACymEiyX0447hI4unt+2cemLQkTZXKvTev936NhtsgVnql45EP0V0pzmo/0H0WlHaAGXgvOBZJl8wFqcJ3CbQ==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.4.tgz", + "integrity": "sha512-PxqDMuVjXQeboa6Aj8kNj4iTxIpwpfoYlF803qOjf1LE1ePlREnWNwqy65ESCBnCmekYIO5hhm1Nksa+xCvuyg==", "dependencies": { - "@expo/config": "~8.1.0", - "@expo/env": "0.0.5", - "@expo/json-file": "~8.2.37", + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~8.5.0", + "@expo/env": "~0.2.0", + "@expo/json-file": "~8.3.0", + "@expo/spawn-async": "^1.7.2", + "babel-preset-fbjs": "^3.4.0", "chalk": "^4.1.0", "debug": "^4.3.2", "find-yarn-workspace-root": "~2.0.0", + "fs-extra": "^9.1.0", "getenv": "^1.0.0", + "glob": "^7.2.3", "jsc-safe-url": "^0.2.4", "lightningcss": "~1.19.0", - "postcss": "~8.4.21", + "postcss": "~8.4.32", "resolve-from": "^5.0.0", - "sucrase": "^3.20.0" + "sucrase": "3.34.0" + }, + "peerDependencies": { + "@react-native/babel-preset": "*" + } + }, + "node_modules/@expo/metro-config/node_modules/@expo/spawn-async": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "dependencies": { + "cross-spawn": "^7.0.3" + }, + "engines": { + "node": ">=12" } }, "node_modules/@expo/metro-config/node_modules/ansi-styles": { @@ -3190,6 +3241,52 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/@expo/metro-config/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@expo/metro-config/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/metro-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/metro-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3198,6 +3295,25 @@ "node": ">=8" } }, + "node_modules/@expo/metro-config/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/metro-config/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, "node_modules/@expo/metro-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3209,10 +3325,32 @@ "node": ">=8" } }, + "node_modules/@expo/metro-config/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@expo/metro-runtime": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.1.3.tgz", + "integrity": "sha512-u1CaQJJlSgvxBB5NJ6YMVvSDTTRzjT71dHpEBnKPZhpFv5ebVry52FZ2sEeEEA6mHG5zGxWXmHImW3hNKHh8EA==", + "peerDependencies": { + "react-native": "*" + } + }, "node_modules/@expo/osascript": { - "version": "2.0.33", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", - "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.0.tgz", + "integrity": "sha512-bOhuFnlRaS7CU33+rFFIWdcET/Vkyn1vsN8BYFwCDEF5P1fVVvYN7bFOsQLTMD3nvi35C1AGmtqUr/Wfv8Xaow==", "dependencies": { "@expo/spawn-async": "^1.5.0", "exec-async": "^2.2.0" @@ -3222,9 +3360,9 @@ } }, "node_modules/@expo/package-manager": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.1.2.tgz", - "integrity": "sha512-JI9XzrxB0QVXysyuJ996FPCJGDCYRkbUvgG4QmMTTMFA1T+mv8YzazC3T9C1pHQUAAveVCre1+Pqv0nZXN24Xg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.4.2.tgz", + "integrity": "sha512-LKdo/6y4W7llZ6ghsg1kdx2CeH/qR/c6QI/JI8oPUvppsZoeIYjSkdflce978fAMfR8IXoi0wt0jA2w0kWpwbg==", "dependencies": { "@expo/json-file": "^8.2.37", "@expo/spawn-async": "^1.5.0", @@ -3235,6 +3373,7 @@ "js-yaml": "^3.13.1", "micromatch": "^4.0.2", "npm-package-arg": "^7.0.0", + "ora": "^3.4.0", "split": "^1.0.1", "sudo-prompt": "9.1.1" } @@ -3309,9 +3448,9 @@ } }, "node_modules/@expo/plist": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.20.tgz", - "integrity": "sha512-UXQ4LXCfTZ580LDHGJ5q62jSTwJFFJ1GqBu8duQMThiHKWbMJ+gajJh6rsB6EJ3aLUr9wcauxneL5LVRFxwBEA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz", + "integrity": "sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g==", "dependencies": { "@xmldom/xmldom": "~0.7.7", "base64-js": "^1.2.3", @@ -3319,14 +3458,14 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "6.2.6", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.2.6.tgz", - "integrity": "sha512-uFVvDAm9dPg9p1qpnr4CVnpo2hmkZIL5FQz+VlIdXXJpe7ySh/qTGHtKWY/lWUshQkAJ0nwbKGPztGWdABns/Q==", - "dependencies": { - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/image-utils": "0.3.22", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.4.tgz", + "integrity": "sha512-x8EUdCa8DTMZ/dtEXjHAdlP+ljf6oSeSKNzhycXiHhpMSMG9jEhV28ocCwc6cKsjK5GziweEiHwvrj6+vsBlhA==", + "dependencies": { + "@expo/config": "~8.5.0", + "@expo/config-plugins": "~7.8.0", + "@expo/config-types": "^50.0.0-alpha.1", + "@expo/image-utils": "^0.4.0", "@expo/json-file": "^8.2.37", "debug": "^4.3.1", "fs-extra": "^9.0.0", @@ -3447,14 +3586,14 @@ } }, "node_modules/@expo/vector-icons": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", - "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==" + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.0.tgz", + "integrity": "sha512-5orm59pdnBQlovhU9k4DbjMUZBHNlku7IRgFY56f7pcaaCnXq9yaLJoOQl9sMwNdFzf4gnkTyHmR5uN10mI9rA==" }, "node_modules/@expo/xcpretty": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.2.2.tgz", - "integrity": "sha512-Lke/geldJqUV0Dfxg5/QIOugOzdqZ/rQ9yHKSgGbjZtG1uiSqWyFwWvXmrdd3/sIdX33eykGvIcf+OrvvcXVUw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", + "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", "dependencies": { "@babel/code-frame": "7.10.4", "chalk": "^4.1.0", @@ -3676,6 +3815,14 @@ "@swc/helpers": "^0.4.14" } }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "engines": { + "node": ">=12" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -3993,25 +4140,25 @@ } }, "node_modules/@jest/create-cache-key-function": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.5.0.tgz", - "integrity": "sha512-LIDZyZgnZss7uikvBKBB/USWwG+GO8+GnwRWT+YkCGDGsqLQlhm9BC3z6+7+eMs1kUlvXQIWEzBR8Q2Pnvx6lg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", "dependencies": { - "@jest/types": "^29.5.0" + "@jest/types": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.5.0" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4044,16 +4191,16 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4206,11 +4353,11 @@ } }, "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4397,11 +4544,11 @@ } }, "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -5177,55 +5324,55 @@ } }, "node_modules/@react-native-async-storage/async-storage": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.18.2.tgz", - "integrity": "sha512-dM8AfdoeIxlh+zqgr0o5+vCTPQ0Ru1mrPzONZMsr7ufp5h+6WgNxQNza7t0r5qQ6b04AJqTlBNixTWZxqP649Q==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", + "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", "dependencies": { "merge-options": "^3.0.4" }, "peerDependencies": { - "react-native": "^0.0.0-0 || 0.60 - 0.72 || 1000.0.0" + "react-native": "^0.0.0-0 || >=0.60 <1.0" } }, "node_modules/@react-native-community/cli": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.7.tgz", - "integrity": "sha512-Ou8eDlF+yh2rzXeCTpMPYJ2fuqsusNOhmpYPYNQJQ2h6PvaF30kPomflgRILems+EBBuggRtcT+I+1YH4o/q6w==", - "dependencies": { - "@react-native-community/cli-clean": "11.3.7", - "@react-native-community/cli-config": "11.3.7", - "@react-native-community/cli-debugger-ui": "11.3.7", - "@react-native-community/cli-doctor": "11.3.7", - "@react-native-community/cli-hermes": "11.3.7", - "@react-native-community/cli-plugin-metro": "11.3.7", - "@react-native-community/cli-server-api": "11.3.7", - "@react-native-community/cli-tools": "11.3.7", - "@react-native-community/cli-types": "11.3.7", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.2.tgz", + "integrity": "sha512-WgoUWwLDcf/G1Su2COUUVs3RzAwnV/vUTdISSpAUGgSc57mPabaAoUctKTnfYEhCnE3j02k3VtaVPwCAFRO3TQ==", + "dependencies": { + "@react-native-community/cli-clean": "12.3.2", + "@react-native-community/cli-config": "12.3.2", + "@react-native-community/cli-debugger-ui": "12.3.2", + "@react-native-community/cli-doctor": "12.3.2", + "@react-native-community/cli-hermes": "12.3.2", + "@react-native-community/cli-plugin-metro": "12.3.2", + "@react-native-community/cli-server-api": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", + "@react-native-community/cli-types": "12.3.2", "chalk": "^4.1.2", "commander": "^9.4.1", + "deepmerge": "^4.3.0", "execa": "^5.0.0", "find-up": "^4.1.0", "fs-extra": "^8.1.0", "graceful-fs": "^4.1.3", - "prompts": "^2.4.0", + "prompts": "^2.4.2", "semver": "^7.5.2" }, "bin": { "react-native": "build/bin.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@react-native-community/cli-clean": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-11.3.7.tgz", - "integrity": "sha512-twtsv54ohcRyWVzPXL3F9VHGb4Qhn3slqqRs3wEuRzjR7cTmV2TIO2b1VhaqF4HlCgNd+cGuirvLtK2JJyaxMg==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.2.tgz", + "integrity": "sha512-90k2hCX0ddSFPT7EN7h5SZj0XZPXP0+y/++v262hssoey3nhurwF57NGWN0XAR0o9BSW7+mBfeInfabzDraO6A==", "dependencies": { - "@react-native-community/cli-tools": "11.3.7", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", - "execa": "^5.0.0", - "prompts": "^2.4.0" + "execa": "^5.0.0" } }, "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { @@ -5293,11 +5440,11 @@ } }, "node_modules/@react-native-community/cli-config": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-11.3.7.tgz", - "integrity": "sha512-FDBLku9xskS+bx0YFJFLCmUJhEZ4/MMSC9qPYOGBollWYdgE7k/TWI0IeYFmMALAnbCdKQAYP5N29N55Tad8lg==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.2.tgz", + "integrity": "sha512-UUCzDjQgvAVL/57rL7eOuFUhd+d+6qfM7V8uOegQFeFEmSmvUUDLYoXpBa5vAK9JgQtSqMBJ1Shmwao+/oElxQ==", "dependencies": { - "@react-native-community/cli-tools": "11.3.7", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "cosmiconfig": "^5.1.0", "deepmerge": "^4.3.0", @@ -5370,34 +5517,33 @@ } }, "node_modules/@react-native-community/cli-debugger-ui": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-11.3.7.tgz", - "integrity": "sha512-aVmKuPKHZENR8SrflkMurZqeyLwbKieHdOvaZCh1Nn/0UC5CxWcyST2DB2XQboZwsvr3/WXKJkSUO+SZ1J9qTQ==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.2.tgz", + "integrity": "sha512-nSWQUL+51J682DlfcC1bjkUbQbGvHCC25jpqTwHIjmmVjYCX1uHuhPSqQKgPNdvtfOkrkACxczd7kVMmetxY2Q==", "dependencies": { "serve-static": "^1.13.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-11.3.7.tgz", - "integrity": "sha512-YEHUqWISOHnsl5+NM14KHelKh68Sr5/HeEZvvNdIcvcKtZic3FU7Xd1WcbNdo3gCq5JvzGFfufx02Tabh5zmrg==", - "dependencies": { - "@react-native-community/cli-config": "11.3.7", - "@react-native-community/cli-platform-android": "11.3.7", - "@react-native-community/cli-platform-ios": "11.3.7", - "@react-native-community/cli-tools": "11.3.7", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.2.tgz", + "integrity": "sha512-GrAabdY4qtBX49knHFvEAdLtCjkmndjTeqhYO6BhsbAeKOtspcLT/0WRgdLIaKODRa61ADNB3K5Zm4dU0QrZOg==", + "dependencies": { + "@react-native-community/cli-config": "12.3.2", + "@react-native-community/cli-platform-android": "12.3.2", + "@react-native-community/cli-platform-ios": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "command-exists": "^1.2.8", - "envinfo": "^7.7.2", + "deepmerge": "^4.3.0", + "envinfo": "^7.10.0", "execa": "^5.0.0", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5", "node-stream-zip": "^1.9.1", "ora": "^5.4.1", - "prompts": "^2.4.0", "semver": "^7.5.2", "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", "wcwidth": "^1.0.1", "yaml": "^2.2.1" } @@ -5545,11 +5691,6 @@ "node": ">=6" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" - }, "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5562,12 +5703,12 @@ } }, "node_modules/@react-native-community/cli-hermes": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-11.3.7.tgz", - "integrity": "sha512-chkKd8n/xeZkinRvtH6QcYA8rjNOKU3S3Lw/3Psxgx+hAYV0Gyk95qJHTalx7iu+PwjOOqqvCkJo5jCkYLkoqw==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.2.tgz", + "integrity": "sha512-SL6F9O8ghp4ESBFH2YAPLtIN39jdnvGBKnK4FGKpDCjtB3DnUmDsGFlH46S+GGt5M6VzfG2eeKEOKf3pZ6jUzA==", "dependencies": { - "@react-native-community/cli-platform-android": "11.3.7", - "@react-native-community/cli-tools": "11.3.7", + "@react-native-community/cli-platform-android": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" @@ -5638,13 +5779,14 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-11.3.7.tgz", - "integrity": "sha512-WGtXI/Rm178UQb8bu1TAeFC/RJvYGnbHpULXvE20GkmeJ1HIrMjkagyk6kkY3Ej25JAP2R878gv+TJ/XiRhaEg==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.2.tgz", + "integrity": "sha512-MZ5nO8yi/N+Fj2i9BJcJ9C/ez+9/Ir7lQt49DWRo9YDmzye66mYLr/P2l/qxsixllbbDi7BXrlLpxaEhMrDopg==", "dependencies": { - "@react-native-community/cli-tools": "11.3.7", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "execa": "^5.0.0", + "fast-xml-parser": "^4.2.4", "glob": "^7.1.3", "logkitty": "^0.7.1" } @@ -5714,11 +5856,11 @@ } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-11.3.7.tgz", - "integrity": "sha512-Z/8rseBput49EldX7MogvN6zJlWzZ/4M97s2P+zjS09ZoBU7I0eOKLi0N9wx+95FNBvGQQ/0P62bB9UaFQH2jw==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.2.tgz", + "integrity": "sha512-OcWEAbkev1IL6SUiQnM6DQdsvfsKZhRZtoBNSj9MfdmwotVZSOEZJ+IjZ1FR9ChvMWayO9ns/o8LgoQxr1ZXeg==", "dependencies": { - "@react-native-community/cli-tools": "11.3.7", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "execa": "^5.0.0", "fast-xml-parser": "^4.0.12", @@ -5851,94 +5993,17 @@ } }, "node_modules/@react-native-community/cli-plugin-metro": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-11.3.7.tgz", - "integrity": "sha512-0WhgoBVGF1f9jXcuagQmtxpwpfP+2LbLZH4qMyo6OtYLWLG13n2uRep+8tdGzfNzl1bIuUTeE9yZSAdnf9LfYQ==", - "dependencies": { - "@react-native-community/cli-server-api": "11.3.7", - "@react-native-community/cli-tools": "11.3.7", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "metro": "0.76.8", - "metro-config": "0.76.8", - "metro-core": "0.76.8", - "metro-react-native-babel-transformer": "0.76.8", - "metro-resolver": "0.76.8", - "metro-runtime": "0.76.8", - "readline": "^1.3.0" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.2.tgz", + "integrity": "sha512-FpFBwu+d2E7KRhYPTkKvQsWb2/JKsJv+t1tcqgQkn+oByhp+qGyXBobFB8/R3yYvRRDCSDhS+atWTJzk9TjM8g==" }, "node_modules/@react-native-community/cli-server-api": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-11.3.7.tgz", - "integrity": "sha512-yoFyGdvR3HxCnU6i9vFqKmmSqFzCbnFSnJ29a+5dppgPRetN+d//O8ard/YHqHzToFnXutAFf2neONn23qcJAg==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.2.tgz", + "integrity": "sha512-iwa7EO9XFA/OjI5pPLLpI/6mFVqv8L73kNck3CNOJIUCCveGXBKK0VMyOkXaf/BYnihgQrXh+x5cxbDbggr7+Q==", "dependencies": { - "@react-native-community/cli-debugger-ui": "11.3.7", - "@react-native-community/cli-tools": "11.3.7", + "@react-native-community/cli-debugger-ui": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.1", @@ -5964,9 +6029,9 @@ } }, "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { - "version": "15.0.16", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", - "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dependencies": { "@types/yargs-parser": "*" } @@ -6055,9 +6120,9 @@ } }, "node_modules/@react-native-community/cli-tools": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-11.3.7.tgz", - "integrity": "sha512-peyhP4TV6Ps1hk+MBHTFaIR1eI3u+OfGBvr5r0wPwo3FAJvldRinMgcB/TcCcOBXVORu7ba1XYjkubPeYcqAyA==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.2.tgz", + "integrity": "sha512-nDH7vuEicHI2TI0jac/DjT3fr977iWXRdgVAqPZFFczlbs7A8GQvEdGnZ1G8dqRUmg+kptw0e4hwczAOG89JzQ==", "dependencies": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", @@ -6067,7 +6132,8 @@ "open": "^6.2.0", "ora": "^5.4.1", "semver": "^7.5.2", - "shell-quote": "^1.7.3" + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" } }, "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { @@ -6202,6 +6268,11 @@ "node": ">=8" } }, + "node_modules/@react-native-community/cli-tools/node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" + }, "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6214,9 +6285,9 @@ } }, "node_modules/@react-native-community/cli-types": { - "version": "11.3.7", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-11.3.7.tgz", - "integrity": "sha512-OhSr/TiDQkXjL5YOs8+hvGSB+HltLn5ZI0+A3DCiMsjUgTTsYh+Z63OtyMpNjrdCEFcg0MpfdU2uxstCS6Dc5g==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.2.tgz", + "integrity": "sha512-9D0UEFqLW8JmS16mjHJxUJWX8E+zJddrHILSH8AJHZ0NNHv4u2DXKdb0wFLMobFxGNxPT+VSOjc60fGvXzWHog==", "dependencies": { "joi": "^17.2.1" } @@ -6379,41 +6450,280 @@ } }, "node_modules/@react-native-community/datetimepicker": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-7.2.0.tgz", - "integrity": "sha512-dO1sQy83M/EvnHE2egto05iwXZX7EYn5f/VDMp6afZFRFXRiRo7CzB3VFg4B55gJRJMNBv06NYMLPM3SlpnEGQ==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-7.6.1.tgz", + "integrity": "sha512-g66Q2Kd9Uw3eRL7kkrTsGhi+eXxNoPDRFYH6z78sZQuYjPkUQgJDDMUYgBmaBsQx/fKMtemPrCj1ulGmyi0OSw==", "dependencies": { "invariant": "^2.2.4" } }, "node_modules/@react-native/assets-registry": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.72.0.tgz", - "integrity": "sha512-Im93xRJuHHxb1wniGhBMsxLwcfzdYreSZVQGDoMJgkd6+Iky61LInGEHnQCTN0fKNYF1Dvcofb4uMmE1RQHXHQ==" + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz", + "integrity": "sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", + "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", + "dependencies": { + "@react-native/codegen": "0.73.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-preset": { + "version": "0.73.21", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", + "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.73.4", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } }, "node_modules/@react-native/codegen": { - "version": "0.72.7", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.72.7.tgz", - "integrity": "sha512-O7xNcGeXGbY+VoqBGNlZ3O05gxfATlwE1Q1qQf5E38dK+tXn5BY4u0jaQ9DPjfE8pBba8g/BYI1N44lynidMtg==", + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", + "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", "dependencies": { "@babel/parser": "^7.20.0", "flow-parser": "^0.206.0", + "glob": "^7.1.1", + "invariant": "^2.2.4", "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", "nullthrows": "^1.1.1" }, + "engines": { + "node": ">=18" + }, "peerDependencies": { "@babel/preset-env": "^7.1.6" } }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.73.16", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.16.tgz", + "integrity": "sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ==", + "dependencies": { + "@react-native-community/cli-server-api": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", + "@react-native/dev-middleware": "0.73.7", + "@react-native/metro-babel-transformer": "0.73.15", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "metro": "^0.80.3", + "metro-config": "^0.80.3", + "metro-core": "^0.80.3", + "node-fetch": "^2.2.0", + "readline": "^1.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz", + "integrity": "sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.73.7", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz", + "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.73.3", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^1.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "open": "^7.0.3", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/@react-native/dev-middleware/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@react-native/gradle-plugin": { - "version": "0.72.11", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.72.11.tgz", - "integrity": "sha512-P9iRnxiR2w7EHcZ0mJ+fmbPzMby77ZzV6y9sJI3lVLJzF7TLSdbwcQyD3lwMsiL+q5lKUHoZJS4sYmih+P2HXw==" + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", + "integrity": "sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==", + "engines": { + "node": ">=18" + } }, "node_modules/@react-native/js-polyfills": { - "version": "0.72.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.72.1.tgz", - "integrity": "sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA==" + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz", + "integrity": "sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.73.15", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz", + "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==", + "dependencies": { + "@babel/core": "^7.20.0", + "@react-native/babel-preset": "0.73.21", + "hermes-parser": "0.15.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } }, "node_modules/@react-native/normalize-color": { "version": "2.1.0", @@ -6421,18 +6731,21 @@ "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==" }, "node_modules/@react-native/normalize-colors": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.72.0.tgz", - "integrity": "sha512-285lfdqSXaqKuBbbtP9qL2tDrfxdOFtIMvkKadtleRQkdOxx+uzGvFr82KHmc/sSiMtfXGp7JnFYWVh4sFl7Yw==" + "version": "0.73.2", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz", + "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==" }, "node_modules/@react-native/virtualized-lists": { - "version": "0.72.8", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz", - "integrity": "sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==", + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz", + "integrity": "sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==", "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" }, + "engines": { + "node": ">=18" + }, "peerDependencies": { "react-native": "*" } @@ -6978,9 +7291,9 @@ } }, "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -6996,9 +7309,9 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sinonjs/commons": { "version": "3.0.0", @@ -7258,15 +7571,10 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, "node_modules/@types/react": { - "version": "18.2.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.43.tgz", - "integrity": "sha512-nvOV01ZdBdd/KW6FahSbcNplt2jCJfyWdTos61RYHV+FVv5L/g9AOX1bmbVcWcLFL8+KHQfh1zVIQrud6ihyQA==", + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -8054,11 +8362,6 @@ "node": ">=4" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, "node_modules/async-foreach": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", @@ -8292,58 +8595,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-module-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz", - "integrity": "sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==", - "dependencies": { - "find-babel-config": "^2.0.0", - "glob": "^8.0.3", - "pkg-up": "^3.1.0", - "reselect": "^4.1.7", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">= 16" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", @@ -8440,18 +8691,19 @@ } }, "node_modules/babel-preset-expo": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.5.2.tgz", - "integrity": "sha512-hU1G1TDiikuXV6UDZjPnX+WdbjbtidDiYhftMEVrZQSst45pDPVBWbM41TUKrpJMwv4FypsLzK+378gnMPRVWQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-10.0.1.tgz", + "integrity": "sha512-uWIGmLfbP3dS5+8nesxaW6mQs41d4iP7X82ZwRdisB/wAhKQmuJM9Y1jQe4006uNYkw6Phf2TT03ykLVro7KuQ==", "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.17", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.22.15", "@babel/preset-env": "^7.20.0", - "babel-plugin-module-resolver": "^5.0.0", + "@babel/preset-react": "^7.22.15", + "@react-native/babel-preset": "^0.73.18", "babel-plugin-react-native-web": "~0.18.10", - "metro-react-native-babel-preset": "0.76.8" + "react-refresh": "0.14.0" } }, "node_modules/babel-preset-fbjs": { @@ -8606,42 +8858,6 @@ "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -8930,9 +9146,9 @@ } }, "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "engines": { "node": ">= 0.8" } @@ -9165,17 +9381,72 @@ "node": ">=10" } }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-edge-launcher/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { "node": ">=8" } }, @@ -9379,11 +9650,6 @@ "node": ">=6" } }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" - }, "node_modules/component-type": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", @@ -9420,14 +9686,6 @@ "node": ">= 0.8.0" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -9485,14 +9743,6 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -10183,13 +10433,16 @@ } }, "node_modules/deprecated-react-native-prop-types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-4.1.0.tgz", - "integrity": "sha512-WfepZHmRbbdTvhcolb8aOKEvQdcmTMn5tKLbqbXmkBvjFjRVWAYqsXk/DBsV8TZxws8SdGHLuHaJrHSQUPRdfw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-5.0.0.tgz", + "integrity": "sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==", "dependencies": { - "@react-native/normalize-colors": "*", - "invariant": "*", - "prop-types": "*" + "@react-native/normalize-colors": "^0.73.0", + "invariant": "^2.2.4", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=18" } }, "node_modules/dequal": { @@ -10666,9 +10919,9 @@ } }, "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", + "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", "bin": { "envinfo": "dist/cli.js" }, @@ -11738,82 +11991,76 @@ } }, "node_modules/expo": { - "version": "49.0.21", - "resolved": "https://registry.npmjs.org/expo/-/expo-49.0.21.tgz", - "integrity": "sha512-JpHL6V0yt8/fzsmkAdPdtsah+lU6Si4ac7MDklLYvzEil7HAFEsN/pf06wQ21ax4C+BL27hI6JJoD34tzXUCJA==", + "version": "50.0.7", + "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.7.tgz", + "integrity": "sha512-lTqIrKOUTKHLdTuAaJzZihi1v7F8Ix1dOXVWMpToDy9zPC/s+fet0fbyXdFUxYsCUyuEDIB9tvejrTYZk8Hm0Q==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.10.16", - "@expo/config": "8.1.2", - "@expo/config-plugins": "7.2.5", - "@expo/vector-icons": "^13.0.0", - "babel-preset-expo": "~9.5.2", - "expo-application": "~5.3.0", - "expo-asset": "~8.10.1", - "expo-constants": "~14.4.2", - "expo-file-system": "~15.4.5", - "expo-font": "~11.4.0", - "expo-keep-awake": "~12.3.0", - "expo-modules-autolinking": "1.5.1", - "expo-modules-core": "1.5.12", + "@expo/cli": "0.17.5", + "@expo/config": "8.5.4", + "@expo/config-plugins": "7.8.4", + "@expo/metro-config": "0.17.4", + "@expo/vector-icons": "^14.0.0", + "babel-preset-expo": "~10.0.1", + "expo-asset": "~9.0.2", + "expo-file-system": "~16.0.6", + "expo-font": "~11.10.3", + "expo-keep-awake": "~12.8.2", + "expo-modules-autolinking": "1.10.3", + "expo-modules-core": "1.11.9", "fbemitter": "^3.0.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "node-fetch": "^2.6.7", - "pretty-format": "^26.5.2", - "uuid": "^3.4.0" + "whatwg-url-without-unicode": "8.0.0-3" }, "bin": { "expo": "bin/cli" } }, "node_modules/expo-application": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-5.3.1.tgz", - "integrity": "sha512-HR2+K+Hm33vLw/TfbFaHrvUbRRNRco8R+3QaCKy7eJC2LFfT05kZ15ynGaKfB5DJ/oqPV3mxXVR/EfwmE++hoA==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-5.8.3.tgz", + "integrity": "sha512-IISxzpPX+Xe4ynnwX8yY52T6dm1g9sME1GCj4lvUlrdc5xeTPM6U35x7Wj82V7lLWBaVGe+/Tg9EeKqfylCEwA==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-asset": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.10.1.tgz", - "integrity": "sha512-5VMTESxgY9GBsspO/esY25SKEa7RyascVkLe/OcL1WgblNFm7xCCEEUIW8VWS1nHJQGYxpMZPr3bEfjMpdWdyA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-9.0.2.tgz", + "integrity": "sha512-PzYKME1MgUOoUvwtdzhAyXkjXOXGiSYqGKG/MsXwWr0Ef5wlBaBm2DCO9V6KYbng5tBPFu6hTjoRNil1tBOSow==", "dependencies": { + "@react-native/assets-registry": "~0.73.1", "blueimp-md5": "^2.10.0", - "expo-constants": "~14.4.2", - "expo-file-system": "~15.4.0", + "expo-constants": "~15.4.0", + "expo-file-system": "~16.0.0", "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "path-browserify": "^1.0.0", - "url-parse": "^1.5.9" + "md5-file": "^3.2.3" } }, "node_modules/expo-auth-session": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/expo-auth-session/-/expo-auth-session-5.0.2.tgz", - "integrity": "sha512-hzuIGATiyZ4ICuzSnCTTQLUA74eHGd1aaPydsSAQEAkMnNT2bMoIYLq1rp971xF+eqWz0lzMVboRYTnxuvEKJg==", - "dependencies": { - "expo-constants": "~14.4.2", - "expo-crypto": "~12.4.0", - "expo-linking": "~5.0.0", - "expo-web-browser": "~12.3.0", - "invariant": "^2.2.4", - "qs": "^6.11.0" + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/expo-auth-session/-/expo-auth-session-5.4.0.tgz", + "integrity": "sha512-ZwjPMsMgCqdMi+vnhDbtjOAF12Y9+y1bYvorn/jQs47aFg6yeIRHycSOM/WL4hpFr+fAxycP3mIJeHVYfF3zuQ==", + "dependencies": { + "expo-application": "~5.8.0", + "expo-constants": "~15.4.0", + "expo-crypto": "~12.8.0", + "expo-linking": "~6.2.0", + "expo-web-browser": "~12.8.0", + "invariant": "^2.2.4" } }, "node_modules/expo-blur": { - "version": "12.4.1", - "resolved": "https://registry.npmjs.org/expo-blur/-/expo-blur-12.4.1.tgz", - "integrity": "sha512-lGN8FS9LuGUlEriULTC62cCWyg5V7zSVQeJ6Duh1wSq8aAETinZ2/7wrT6o+Uhd/XVVxFNON2T25AGCOtMG6ew==", + "version": "12.9.2", + "resolved": "https://registry.npmjs.org/expo-blur/-/expo-blur-12.9.2.tgz", + "integrity": "sha512-q+EIOkXw7OCE3VBTLRANsUIdMxtFWDTFpaMulJEXMwtxNQaCcAvzHZvwWP9dlI96FM4A6UdX2/slBNfNJzJcCQ==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-build-properties": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/expo-build-properties/-/expo-build-properties-0.8.3.tgz", - "integrity": "sha512-kEDDuAadHqJTkvCGK4fXYHVrePiJO1DjyW95AicmwuGwQvGJydYFbuoauf9ybAU+4UH4arhbce8gHI3ZpIj3Jw==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/expo-build-properties/-/expo-build-properties-0.11.1.tgz", + "integrity": "sha512-m4j4aEjFaDuBE6KWYMxDhWgLzzSmpE7uHKAwtvXyNmRK+6JKF0gjiXi0sXgI5ngNppDQpsyPFMvqG7uQpRuCuw==", "dependencies": { "ajv": "^8.11.0", "semver": "^7.5.3" @@ -11823,38 +12070,28 @@ } }, "node_modules/expo-clipboard": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/expo-clipboard/-/expo-clipboard-4.3.1.tgz", - "integrity": "sha512-WIsjvAsr2+/NZRa84mKxjui1EdPpdKbQIC2LN/KMBNuT7g4GQYL3oo9WO9G/C7doKQ7f7pnfdvO3N6fUnoRoJw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/expo-clipboard/-/expo-clipboard-5.0.1.tgz", + "integrity": "sha512-JH853QJPr5W3h87If3aDTnMK+ESSIrwzU2TdfZrqZttVDY2pMIf/w37mVHHNYodXM4ATHXadtOkjKbAa0DWwUg==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-constants": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-14.4.2.tgz", - "integrity": "sha512-nOB122DOAjk+KrJT69lFQAoYVQGQjFHSigCPVBzVdko9S1xGsfiOH9+X5dygTsZTIlVLpQJDdmZ7ONiv3i+26w==", + "version": "15.4.5", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-15.4.5.tgz", + "integrity": "sha512-1pVVjwk733hbbIjtQcvUFCme540v4gFemdNlaxM2UXKbfRCOh2hzgKN5joHMOysoXQe736TTUrRj7UaZI5Yyhg==", "dependencies": { - "@expo/config": "~8.1.0", - "uuid": "^3.3.2" + "@expo/config": "~8.5.0" }, "peerDependencies": { "expo": "*" } }, - "node_modules/expo-constants/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/expo-crypto": { - "version": "12.4.1", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-12.4.1.tgz", - "integrity": "sha512-/en03oPNAX6gP0bKpwA1EyLBnGG9uv0+Q7uvGYyOXaQQEvj31a+8cEvNPkv75x6GuK1hcaBfO25RtX9AGOMwVA==", + "version": "12.8.1", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-12.8.1.tgz", + "integrity": "sha512-EJEzmfBUSkGfALTlZRKUbh1RMKF7mWI12vkhO2w6bhGO4bjgGB8XzUHgLfrvSjphDFMx/lwaR6bAQDmXKO9UkQ==", "dependencies": { "base64-js": "^1.3.0" }, @@ -11862,10 +12099,75 @@ "expo": "*" } }, + "node_modules/expo-dev-client": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-3.3.8.tgz", + "integrity": "sha512-6JpcxncWiWwq1w6SPrePpTa20z3D1qmAMMHd8f05lSCUPVBn4jTwpzrKEpGaA3EubLE5SEdxPVmvmyWw/oFFMQ==", + "dependencies": { + "expo-dev-launcher": "3.6.6", + "expo-dev-menu": "4.5.5", + "expo-dev-menu-interface": "1.7.2", + "expo-manifests": "~0.13.0", + "expo-updates-interface": "~0.15.1" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-launcher": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-3.6.6.tgz", + "integrity": "sha512-jVI1YZS1YJTrniIL53BOxSZUMyJCeDLuS9SlRx1vC3tnTTN3srg5pU/zCK/DifwbF7i6NtA1iLPSBVu2K4040A==", + "dependencies": { + "ajv": "8.11.0", + "expo-dev-menu": "4.5.5", + "expo-manifests": "~0.13.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-launcher/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/expo-dev-menu": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-4.5.5.tgz", + "integrity": "sha512-PcbI/SqAvueOIEtR1O0s+WvVD7yizQSqXisDSkBrTym3u8XZSN+K730kz2Z64ukY9YIPG4qWR4sd+9rcjsbMWw==", + "dependencies": { + "expo-dev-menu-interface": "1.7.2", + "semver": "^7.5.3" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-menu-interface": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/expo-dev-menu-interface/-/expo-dev-menu-interface-1.7.2.tgz", + "integrity": "sha512-V/geSB9rW0IPTR+d7E5CcvkV0uVUCE7SMHZqE/J0/dH06Wo8AahB16fimXeh5/hTL2Qztq8CQ41xpFUBoA9TEw==", + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-device": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/expo-device/-/expo-device-5.4.0.tgz", - "integrity": "sha512-TQxSVPrC6njCbzZ9Cqpc1lGLIjPmO1zBIbqW7CTqBPD1dOIMrgQvt7lZZhkHh3pWzoZznH283sSYqCvy3XcURw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/expo-device/-/expo-device-5.9.3.tgz", + "integrity": "sha512-azH5rz8krDZUJb/arqkcA6oZGaX2T5s4aaXIMFsDDzvq8TW0CttZZy2HFp6itmFdiKGdRpFX3/Gj0n6ZmPoJ/w==", "dependencies": { "ua-parser-js": "^0.7.33" }, @@ -11892,34 +12194,22 @@ } }, "node_modules/expo-eas-client": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/expo-eas-client/-/expo-eas-client-0.6.0.tgz", - "integrity": "sha512-FSPy0ThcJBvzEzOZVhpOrYyHgQ8U1jJ4v7u7tr1x0KOVRqyf25APEQZFxxRPn3zAYW0tQ+uDTCbrwNymFqhQfw==" + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/expo-eas-client/-/expo-eas-client-0.11.2.tgz", + "integrity": "sha512-SY7rVFxb4ut/OMTgR7A39Jg+8+hXwQNRpZd+RBpB+B5XV2STj/pWXHnGFhBayEF4umI4SxrOvisY90rlPWVO9Q==" }, "node_modules/expo-file-system": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-15.4.5.tgz", - "integrity": "sha512-xy61KaTaDgXhT/dllwYDHm3ch026EyO8j4eC6wSVr/yE12MMMxAC09yGwy4f7kkOs6ztGVQF5j7ldRzNLN4l0Q==", - "dependencies": { - "uuid": "^3.4.0" - }, + "version": "16.0.6", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.6.tgz", + "integrity": "sha512-ATCHL7nEg2WwKeamW/SDTR9jBEqM5wncFq594ftKS5QFmhKIrX48d9jyPFGnNq+6h8AGPg4QKh2KCA4OY49L4g==", "peerDependencies": { "expo": "*" } }, - "node_modules/expo-file-system/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/expo-font": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.4.0.tgz", - "integrity": "sha512-nkmezCFD7gR/I6R+e3/ry18uEfF8uYrr6h+PdBJu+3dawoLOpo+wFb/RG9bHUekU1/cPanR58LR7G5MEMKHR2w==", + "version": "11.10.3", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.10.3.tgz", + "integrity": "sha512-q1Td2zUvmLbCA9GV4OG4nLPw5gJuNY1VrPycsnemN1m8XWTzzs8nyECQQqrcBhgulCgcKZZJJ6U0kC2iuSoQHQ==", "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -11928,50 +12218,47 @@ } }, "node_modules/expo-haptics": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-12.4.0.tgz", - "integrity": "sha512-eELhZOO64oJa6AtEUxosatjSENE/tQgF2rVJxDsvRdx8Vgd3uFC+FRoM3nbMVJkxDgAaP3EKOPT1zVM41sNurw==", + "version": "12.8.1", + "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-12.8.1.tgz", + "integrity": "sha512-ntLsHkfle8K8w9MW8pZEw92ZN3sguaGUSSIxv30fPKNeQFu7Cq/h47Qv3tONv2MO3wU48N9FbKnant6XlfptpA==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-json-utils": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.7.1.tgz", - "integrity": "sha512-L0lyH8diXQtV0q5BLbFlcoxTqPF5im79xDHPhybB0j36xYdm65hjwRJ4yMrPIN5lR18hj48FUZeONiDHRyEvIg==" + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.12.3.tgz", + "integrity": "sha512-4pypQdinpNc6XY9wsZk56njvzDh+B/9mISr7FPP3CVk1QGB1nSLh883/BCDSgnsephATZkC5HG+cdE60kCAR6A==" }, "node_modules/expo-keep-awake": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-12.3.0.tgz", - "integrity": "sha512-ujiJg1p9EdCOYS05jh5PtUrfiZnK0yyLy+UewzqrjUqIT8eAGMQbkfOn3C3fHE7AKd5AefSMzJnS3lYZcZYHDw==", + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-12.8.2.tgz", + "integrity": "sha512-uiQdGbSX24Pt8nGbnmBtrKq6xL/Tm3+DuDRGBk/3ZE/HlizzNosGRIufIMJ/4B4FRw4dw8KU81h2RLuTjbay6g==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-linear-gradient": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-12.3.0.tgz", - "integrity": "sha512-f9e+Oxe5z7fNQarTBZXilMyswlkbYWQHONVfq8MqmiEnW3h9XsxxmVJLG8uVQSQPUsbW+x1UUT/tnU6mkMWeLg==", + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-12.7.2.tgz", + "integrity": "sha512-Wwb2EF18ywgrlTodcXJ6Yt/UEcKitRMdXPNyP/IokmeKh4emoq9DxZJpZdkXm3HUTLlbRpi6/t32jrFVqXB9AQ==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-linking": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-5.0.2.tgz", - "integrity": "sha512-SPQus0+tYGx9c69Uw4wmdo3rkKX8vRT1vyJz/mvkpSlZN986s0NmP/V0M5vDv5Zv2qZzVdqJyuITFe0Pg5aI+A==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-6.2.2.tgz", + "integrity": "sha512-FEe6lP4f7xFT/vjoHRG+tt6EPVtkEGaWNK1smpaUevmNdyCJKqW0PDB8o8sfG6y7fly8ULe8qg3HhKh5J7aqUQ==", "dependencies": { - "@types/qs": "^6.9.7", - "expo-constants": "~14.4.2", - "invariant": "^2.2.4", - "qs": "^6.11.0", - "url-parse": "^1.5.9" + "expo-constants": "~15.4.3", + "invariant": "^2.2.4" } }, "node_modules/expo-local-authentication": { - "version": "13.4.1", - "resolved": "https://registry.npmjs.org/expo-local-authentication/-/expo-local-authentication-13.4.1.tgz", - "integrity": "sha512-FWTUkMNo9aDT3cg02SWAcSFjTiDu20izhCn5CGwdtFNCBpPQUD0BJ/czhjrIFE70teMzE5wZUdbJuSKYonUaWA==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/expo-local-authentication/-/expo-local-authentication-13.8.0.tgz", + "integrity": "sha512-h0YA7grVdo3834AS70EUCsalaXrrEnoq+yTvIhRTxiPmzWxUv7rNo5ff+XsIEYNElKPmT/wh/xPV1yo3l3fhGg==", "dependencies": { "invariant": "^2.2.4" }, @@ -11980,9 +12267,9 @@ } }, "node_modules/expo-localization": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/expo-localization/-/expo-localization-14.3.0.tgz", - "integrity": "sha512-TML3TeVtwpfuSNwbhBspC9XsGJaa0TWJNh+UaR/35YP9fQiaJfVWUMSrAq84ba6rY1Pm3kti07LV8UUa505oqg==", + "version": "14.8.3", + "resolved": "https://registry.npmjs.org/expo-localization/-/expo-localization-14.8.3.tgz", + "integrity": "sha512-leg1e+7ocUgfNWa7Men/g16waXtdSpBMR9tCdv3CG4wztmFU8C+87VAnnVkvHi4CCUkTLzhP3y0FcE6KIWTwdw==", "dependencies": { "rtl-detect": "^1.0.2" }, @@ -11991,19 +12278,23 @@ } }, "node_modules/expo-manifests": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-0.7.1.tgz", - "integrity": "sha512-9+pTMWkQx3hPEmc7D3MzWM+fCqN4DnPxStfmO7daL562yw+VCiJ4gfmkioOW/optqj4AE9jWoEOVv/iXOZbPWw==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-0.13.2.tgz", + "integrity": "sha512-l0Sia1WmLULx8V41K8RzGLsFoTe4qqthPRGpHjItsYn8ZB6lRrdTBM9OYp2McIflgqN1HAimUCQMFIwJyH+UmA==", "dependencies": { - "expo-json-utils": "~0.7.0" + "@expo/config": "~8.5.0", + "expo-json-utils": "~0.12.0" + }, + "peerDependencies": { + "expo": "*" } }, "node_modules/expo-modules-autolinking": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.5.1.tgz", - "integrity": "sha512-yt5a1VCp2BF9CrsO689PCD5oXKP14MMhnOanQMvDn4BDpURYfzAlDVGC5fZrNQKtwn/eq3bcrxIwZ7D9QjVVRg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.3.tgz", + "integrity": "sha512-pn4n2Dl4iRh/zUeiChjRIe1C7EqOw1qhccr85viQV7W6l5vgRpY0osE51ij5LKg/kJmGRcJfs12+PwbdTplbKw==", "dependencies": { - "@expo/config": "~8.1.0", + "@expo/config": "~8.5.0", "chalk": "^4.1.0", "commander": "^7.2.0", "fast-glob": "^3.2.5", @@ -12093,18 +12384,17 @@ } }, "node_modules/expo-modules-core": { - "version": "1.5.12", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.5.12.tgz", - "integrity": "sha512-mY4wTDU458dhwk7IVxLNkePlYXjs9BTgk4NQHBUXf0LapXsvr+i711qPZaFNO4egf5qq6fQV+Yfd/KUguHstnQ==", + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.9.tgz", + "integrity": "sha512-GTUb81vcPaF+5MtlBI1u9IjrZbGdF1ZUwz3u8Gc+rOLBblkZ7pYsj2mU/tu+k0khTckI9vcH4ZBksXWvE1ncjQ==", "dependencies": { - "compare-versions": "^3.4.0", "invariant": "^2.2.4" } }, "node_modules/expo-random": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-13.2.0.tgz", - "integrity": "sha512-ZamtB6Yuly8VLr8frQfh7PxMtvXmP9YDdce4JxWEFp9TaHGZep7MJ73SUo7PsMA61PVmHWJuZOw6big6dweloA==", + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-13.6.0.tgz", + "integrity": "sha512-c4Ikio+a2sUyJC0386K6JplqjVDelsyqQfjiy4yCx+0epEu44AP99ipF+HsmZVOvsWsWkd/lkpq5kGnJON5EfA==", "dependencies": { "base64-js": "^1.3.0" }, @@ -12113,46 +12403,46 @@ } }, "node_modules/expo-secure-store": { - "version": "12.3.1", - "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-12.3.1.tgz", - "integrity": "sha512-XLIgWDiIuiR0c+AA4NCWWibAMHCZUyRcy+lQBU49U6rvG+xmd3YrBJfQjfqAPyLroEqnLPGTWUX57GyRsfDOQw==", + "version": "12.8.1", + "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-12.8.1.tgz", + "integrity": "sha512-Ju3jmkHby4w7rIzdYAt9kQyQ7HhHJ0qRaiQOInknhOLIltftHjEgF4I1UmzKc7P5RCfGNmVbEH729Pncp/sHXQ==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-splash-screen": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.20.5.tgz", - "integrity": "sha512-nTALYdjHpeEA30rdOWSguxn72ctv8WM8ptuUgpfRgsWyn4i6rwYds/rBXisX69XO5fg+XjHAQqijGx/b28+3tg==", + "version": "0.26.4", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.26.4.tgz", + "integrity": "sha512-2DwofTQ0FFQCsvDysm/msENsbyNsJiAJwK3qK/oXeizECAPqD7bK19J4z9kuEbr7ORPX9MLnTQYKl6kmX3keUg==", "dependencies": { - "@expo/prebuild-config": "6.2.6" + "@expo/prebuild-config": "6.7.4" }, "peerDependencies": { "expo": "*" } }, "node_modules/expo-status-bar": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.6.0.tgz", - "integrity": "sha512-e//Oi2WPdomMlMDD3skE4+1ZarKCJ/suvcB4Jo/nO427niKug5oppcPNYO+csR6y3ZglGuypS+3pp/hJ+Xp6fQ==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.11.1.tgz", + "integrity": "sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==" }, "node_modules/expo-store-review": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/expo-store-review/-/expo-store-review-6.4.0.tgz", - "integrity": "sha512-aD06KSOO9syeecaP9NfJO++FzmfQjg49HY7qeUQ9r826YqswW/FPAcnXY0RJLhfJTqeAPRSl/xzPLZA5vwdqLQ==", + "version": "6.8.3", + "resolved": "https://registry.npmjs.org/expo-store-review/-/expo-store-review-6.8.3.tgz", + "integrity": "sha512-RuZ1P0AO9BT37FnVQgK93KtxGoriLfG0uH0HqYyWdN2GQAKHtm1Ucu6sfwrHkdXpOXs+xqbTd669k4D6HC/+0w==", "peerDependencies": { "expo": "*" } }, "node_modules/expo-structured-headers": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-3.3.0.tgz", - "integrity": "sha512-t+h5Zqaukd3Tn97LaWPpibVsmiC/TFP8F+8sAUliwCSMzgcb5TATRs2NcAB+JcIr8EP3JJDyYXJrZle1cjs4mQ==" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-3.7.2.tgz", + "integrity": "sha512-/nGOyeWUXSUy4aIYKJTwQOznRNs0yKqKPAyEE6jtwvOl9qvfDWx9xskNtShioggBhFAssFkV6RBbPn+xZMQtvw==" }, "node_modules/expo-system-ui": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-2.4.0.tgz", - "integrity": "sha512-uaBAYeQtFzyE8WVcch2V3G243xvOf7vJkLzrIJ3rJ8NA3uZRmxF0lMMe75oMrAaLVXyr1Z+ZE6UZwh7x49FuIg==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-2.9.3.tgz", + "integrity": "sha512-RNFNBLJ9lhnjOGrHhtfDc15Ry/lF+SA4kwulmHzYGqaTeYvsL9q0K0+m9qmxuDdrbKJkuurvzvjVylDNnKNFVg==", "dependencies": { "@react-native/normalize-color": "^2.0.0", "debug": "^4.3.2" @@ -12162,19 +12452,19 @@ } }, "node_modules/expo-updates": { - "version": "0.18.19", - "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.18.19.tgz", - "integrity": "sha512-dakYQ7XhZtBKMLcim08wum108ZUQcNigurijb/6PKdg3QHn21IzOr/27n6x54DctcoW8w1B8w8y1Xw2svVsx4w==", + "version": "0.24.11", + "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.24.11.tgz", + "integrity": "sha512-SWpjZj7VGWBZJtbVj0gbGY7uZYrE7b+sRRoj/K1ma2ckHwXtAAB8gYI95Zp0joBdRNAbEtoMHYXP66Nrj5l8Ng==", "dependencies": { "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", + "@expo/config": "~8.5.0", + "@expo/config-plugins": "~7.8.0", "arg": "4.1.0", "chalk": "^4.1.2", - "expo-eas-client": "~0.6.0", - "expo-manifests": "~0.7.0", - "expo-structured-headers": "~3.3.0", - "expo-updates-interface": "~0.10.0", + "expo-eas-client": "~0.11.0", + "expo-manifests": "~0.13.0", + "expo-structured-headers": "~3.7.0", + "expo-updates-interface": "~0.15.1", "fbemitter": "^3.0.0", "resolve-from": "^5.0.0" }, @@ -12186,9 +12476,9 @@ } }, "node_modules/expo-updates-interface": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-0.10.1.tgz", - "integrity": "sha512-I6JMR7EgjXwckrydDmrkBEX/iw750dcqpzQVsjznYWfi0HTEOxajLHB90fBFqQkUV5i5s4Fd3hYQ1Cn0oMzUbA==", + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-0.15.3.tgz", + "integrity": "sha512-uLvsbaCmUsXgJqeen8rYH/jPr874ZUCXEvWpKHxrCv5/XATPlYEaDuecbNSGQ+cu78i6MdtB4BHOwZmoH2d47A==", "peerDependencies": { "expo": "*" } @@ -12258,9 +12548,9 @@ } }, "node_modules/expo-web-browser": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-12.3.2.tgz", - "integrity": "sha512-ohBf+vnRnGzlTleY8EQ2XQU0vRdRwqMJtKkzM9MZRPDOK5QyJYPJjpk6ixGhxdeoUG2Ogj0InvhhgX9NUn4jkg==", + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-12.8.2.tgz", + "integrity": "sha512-Mw8WoFMSADecNjtC4PZVsVj1/lYdxIAH1jOVV+F8v8SEWYxORWofoShfXg7oUxRLu0iUG8JETfO5y4m8+fOgdg==", "dependencies": { "compare-urls": "^2.0.0", "url": "^0.11.0" @@ -12269,196 +12559,81 @@ "expo": "*" } }, - "node_modules/expo/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">= 10.14.2" + "node": ">=8.6.0" } }, - "node_modules/expo/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dependencies": { - "@types/yargs-parser": "*" - } + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, - "node_modules/expo/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-loops": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz", + "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" + }, + "node_modules/fast-xml-parser": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.4.tgz", + "integrity": "sha512-utnwm92SyozgA3hhH2I8qldf2lBqm6qHOICawRNRFu1qMe3+oqr+GcXjGqTmXTMGE5T4eC03kr/rlh5C1IRdZA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "strnum": "^1.0.5" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/expo/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "reusify": "^1.0.4" } }, - "node_modules/expo/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expo/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/expo/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/expo/node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/expo/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/expo/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/expo/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-loops": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz", - "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" - }, - "node_modules/fast-xml-parser": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", - "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dependencies": { "bser": "2.1.1" } @@ -12567,26 +12742,6 @@ "node": ">= 0.8" } }, - "node_modules/find-babel-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.0.0.tgz", - "integrity": "sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==", - "dependencies": { - "json5": "^2.1.1", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/find-babel-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", @@ -12754,9 +12909,9 @@ "dev": true }, "node_modules/flow-enums-runtime": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.5.tgz", - "integrity": "sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ==" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" }, "node_modules/flow-parser": { "version": "0.206.0", @@ -13293,16 +13448,16 @@ } }, "node_modules/hermes-estree": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.12.0.tgz", - "integrity": "sha512-+e8xR6SCen0wyAKrMT3UD0ZCCLymKhRgjEB5sS28rKiFir/fXgLoeRilRUssFCILmGHb+OvHDUlhxs0+IEyvQw==" + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", + "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" }, "node_modules/hermes-parser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.12.0.tgz", - "integrity": "sha512-d4PHnwq6SnDLhYl3LHNHvOg7nQ6rcI7QVil418REYksv0Mh3cEkHDcuhGxNQ3vgnLSLl4QSvDrFCwQNYdpWlzw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", + "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", "dependencies": { - "hermes-estree": "0.12.0" + "hermes-estree": "0.15.0" } }, "node_modules/hermes-profile-transformer": { @@ -13468,17 +13623,6 @@ "make-plural": "*" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -13507,9 +13651,9 @@ } }, "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", "dependencies": { "queue": "6.0.2" }, @@ -13517,7 +13661,7 @@ "image-size": "bin/image-size.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.x" } }, "node_modules/import-fresh": { @@ -14922,28 +15066,29 @@ } }, "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-expo": { - "version": "49.0.0", - "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-49.0.0.tgz", - "integrity": "sha512-nglYg6QPYSqCsrsOFiGosQi+m1rrqmYluPbFXNnXNEOrB2MvxMOgQJeWfMHDExHMX1ymLWX+7y8mYo6XVJpBJQ==", + "version": "50.0.2", + "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-50.0.2.tgz", + "integrity": "sha512-g9Vq4Cpndp6M+bWGNJfyxw+iiZm7o1XpaOEHgtyC1evdy4B9IsEWql1Y2xBH7uD79FwSKhaIz+xCQHZNhnSlAg==", "dev": true, "dependencies": { - "@expo/config": "~8.1.0", + "@expo/config": "~8.5.0", + "@expo/json-file": "^8.2.37", "@jest/create-cache-key-function": "^29.2.1", "babel-jest": "^29.2.1", "find-up": "^5.0.0", @@ -14952,16 +15097,17 @@ "jest-watch-typeahead": "2.2.1", "json5": "^2.2.3", "lodash": "^4.17.19", - "react-test-renderer": "18.2.0" + "react-test-renderer": "18.2.0", + "stacktrace-js": "^2.0.2" }, "bin": { "jest": "bin/jest.js" } }, "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -15091,17 +15237,17 @@ } }, "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -15182,13 +15328,13 @@ } }, "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.5.0" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -15683,11 +15829,11 @@ } }, "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -15763,16 +15909,16 @@ } }, "node_modules/jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.5.0" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -16191,13 +16337,12 @@ } }, "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dependencies": { "@types/node": "*", - "jest-util": "^29.5.0", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -16209,7 +16354,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -16218,7 +16362,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16235,13 +16378,13 @@ "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==" }, "node_modules/joi": { - "version": "17.10.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.10.2.tgz", - "integrity": "sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA==", + "version": "17.12.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.1.tgz", + "integrity": "sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } @@ -16666,6 +16809,28 @@ "node": ">= 0.8.0" } }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/lightningcss": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", @@ -16710,6 +16875,139 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lightningcss/node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -17142,6 +17440,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" + }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -17176,14 +17479,6 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", @@ -17266,9 +17561,9 @@ } }, "node_modules/metro": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.76.8.tgz", - "integrity": "sha512-oQA3gLzrrYv3qKtuWArMgHPbHu8odZOD9AoavrqSFllkPgOtmkBvNNDLCELqv5SjBfqjISNffypg+5UGG3y0pg==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.5.tgz", + "integrity": "sha512-OE/CGbOgbi8BlTN1QqJgKOBaC27dS0JBQw473JcivrpgVnqIsluROA7AavEaTVUrB9wPUZvoNVDROn5uiM2jfw==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -17278,7 +17573,6 @@ "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "accepts": "^1.3.7", - "async": "^3.2.2", "chalk": "^4.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", @@ -17286,28 +17580,24 @@ "denodeify": "^1.2.1", "error-stack-parser": "^2.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.12.0", + "hermes-parser": "0.18.2", "image-size": "^1.0.2", "invariant": "^2.2.4", - "jest-worker": "^27.2.0", + "jest-worker": "^29.6.3", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.76.8", - "metro-cache": "0.76.8", - "metro-cache-key": "0.76.8", - "metro-config": "0.76.8", - "metro-core": "0.76.8", - "metro-file-map": "0.76.8", - "metro-inspector-proxy": "0.76.8", - "metro-minify-terser": "0.76.8", - "metro-minify-uglify": "0.76.8", - "metro-react-native-babel-preset": "0.76.8", - "metro-resolver": "0.76.8", - "metro-runtime": "0.76.8", - "metro-source-map": "0.76.8", - "metro-symbolicate": "0.76.8", - "metro-transform-plugins": "0.76.8", - "metro-transform-worker": "0.76.8", + "metro-babel-transformer": "0.80.5", + "metro-cache": "0.80.5", + "metro-cache-key": "0.80.5", + "metro-config": "0.80.5", + "metro-core": "0.80.5", + "metro-file-map": "0.80.5", + "metro-resolver": "0.80.5", + "metro-runtime": "0.80.5", + "metro-source-map": "0.80.5", + "metro-symbolicate": "0.80.5", + "metro-transform-plugins": "0.80.5", + "metro-transform-worker": "0.80.5", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -17323,40 +17613,53 @@ "metro": "src/cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-babel-transformer": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.76.8.tgz", - "integrity": "sha512-Hh6PW34Ug/nShlBGxkwQJSgPGAzSJ9FwQXhUImkzdsDgVu6zj5bx258J8cJVSandjNoQ8nbaHK6CaHlnbZKbyA==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.5.tgz", + "integrity": "sha512-sxH6hcWCorhTbk4kaShCWsadzu99WBL4Nvq4m/sDTbp32//iGuxtAnUK+ZV+6IEygr2u9Z0/4XoZ8Sbcl71MpA==", "dependencies": { "@babel/core": "^7.20.0", - "hermes-parser": "0.12.0", + "hermes-parser": "0.18.2", "nullthrows": "^1.1.1" }, "engines": { - "node": ">=16" + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz", + "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==" + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz", + "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==", + "dependencies": { + "hermes-estree": "0.18.2" } }, "node_modules/metro-cache": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.76.8.tgz", - "integrity": "sha512-QBJSJIVNH7Hc/Yo6br/U/qQDUpiUdRgZ2ZBJmvAbmAKp2XDzsapnMwK/3BGj8JNWJF7OLrqrYHsRsukSbUBpvQ==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.5.tgz", + "integrity": "sha512-2u+dQ4PZwmC7eZo9uMBNhQQMig9f+w4QWBZwXCdVy/RYOHM0eObgGdMEOwODo73uxie82T9lWzxr3aZOZ+Nqtw==", "dependencies": { - "metro-core": "0.76.8", + "metro-core": "0.80.5", "rimraf": "^3.0.2" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-cache-key": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.76.8.tgz", - "integrity": "sha512-buKQ5xentPig9G6T37Ww/R/bC+/V1MA5xU/D8zjnhlelsrPG6w6LtHUS61ID3zZcMZqYaELWk5UIadIdDsaaLw==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.5.tgz", + "integrity": "sha512-fr3QLZUarsB3tRbVcmr34kCBsTHk0Sh9JXGvBY/w3b2lbre+Lq5gtgLyFElHPecGF7o4z1eK9r3ubxtScHWcbA==", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-cache/node_modules/rimraf": { @@ -17374,229 +17677,58 @@ } }, "node_modules/metro-config": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.76.8.tgz", - "integrity": "sha512-SL1lfKB0qGHALcAk2zBqVgQZpazDYvYFGwCK1ikz0S6Y/CM2i2/HwuZN31kpX6z3mqjv/6KvlzaKoTb1otuSAA==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.5.tgz", + "integrity": "sha512-elqo/lwvF+VjZ1OPyvmW/9hSiGlmcqu+rQvDKw5F5WMX48ZC+ySTD1WcaD7e97pkgAlJHVYqZ98FCjRAYOAFRQ==", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", - "jest-validate": "^29.2.1", - "metro": "0.76.8", - "metro-cache": "0.76.8", - "metro-core": "0.76.8", - "metro-runtime": "0.76.8" + "jest-validate": "^29.6.3", + "metro": "0.80.5", + "metro-cache": "0.80.5", + "metro-core": "0.80.5", + "metro-runtime": "0.80.5" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-core": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.76.8.tgz", - "integrity": "sha512-sl2QLFI3d1b1XUUGxwzw/KbaXXU/bvFYrSKz6Sg19AdYGWFyzsgZ1VISRIDf+HWm4R/TJXluhWMEkEtZuqi3qA==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.5.tgz", + "integrity": "sha512-vkLuaBhnZxTVpaZO8ZJVEHzjaqSXpOdpAiztSZ+NDaYM6jEFgle3/XIbLW91jTSf2+T8Pj5yB1G7KuOX+BcVwg==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.76.8" + "metro-resolver": "0.80.5" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-file-map": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.76.8.tgz", - "integrity": "sha512-A/xP1YNEVwO1SUV9/YYo6/Y1MmzhL4ZnVgcJC3VmHp/BYVOXVStzgVbWv2wILe56IIMkfXU+jpXrGKKYhFyHVw==", - "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/metro-file-map/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/@types/yargs": { - "version": "16.0.6", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.6.tgz", - "integrity": "sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/metro-file-map/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/metro-file-map/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/metro-file-map/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/metro-file-map/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-file-map/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-file-map/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/metro-file-map/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.76.8.tgz", - "integrity": "sha512-Us5o5UEd4Smgn1+TfHX4LvVPoWVo9VsVMn4Ldbk0g5CQx3Gu0ygc/ei2AKPGTwsOZmKxJeACj7yMH2kgxQP/iw==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.5.tgz", + "integrity": "sha512-bKCvJ05drjq6QhQxnDUt3I8x7bTcHo3IIKVobEr14BK++nmxFGn/BmFLRzVBlghM6an3gqwpNEYxS5qNc+VKcg==", "dependencies": { - "connect": "^3.6.5", + "anymatch": "^3.0.3", "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "bin": { - "metro-inspector-proxy": "src/cli.js" + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "micromatch": "^4.0.4", + "node-abort-controller": "^3.1.1", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" }, "engines": { - "node": ">=16" + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/metro-inspector-proxy/node_modules/debug": { + "node_modules/metro-file-map/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", @@ -17604,139 +17736,57 @@ "ms": "2.0.0" } }, - "node_modules/metro-inspector-proxy/node_modules/ms": { + "node_modules/metro-file-map/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro-minify-terser": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.76.8.tgz", - "integrity": "sha512-Orbvg18qXHCrSj1KbaeSDVYRy/gkro2PC7Fy2tDSH1c9RB4aH8tuMOIXnKJE+1SXxBtjWmQ5Yirwkth2DyyEZA==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.5.tgz", + "integrity": "sha512-S7oZLLcab6YXUT6jYFX/ZDMN7Fq6xBGGAG8liMFU1UljX6cTcEC2u+UIafYgCLrdVexp/+ClxrIetVPZ5LtL/g==", "dependencies": { "terser": "^5.15.0" }, "engines": { - "node": ">=16" - } - }, - "node_modules/metro-minify-uglify": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.76.8.tgz", - "integrity": "sha512-6l8/bEvtVaTSuhG1FqS0+Mc8lZ3Bl4RI8SeRIifVLC21eeSDp4CEBUWSGjpFyUDfi6R5dXzYaFnSgMNyfxADiQ==", - "dependencies": { - "uglify-es": "^3.1.9" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.8.tgz", - "integrity": "sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg==", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-react-native-babel-transformer": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.76.8.tgz", - "integrity": "sha512-3h+LfS1WG1PAzhq8QF0kfXjxuXetbY/lgz8vYMQhgrMMp17WM1DNJD0gjx8tOGYbpbBC1qesJ45KMS4o5TA73A==", - "dependencies": { - "@babel/core": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.12.0", - "metro-react-native-babel-preset": "0.76.8", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@babel/core": "*" + "node": ">=18" } }, "node_modules/metro-resolver": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.76.8.tgz", - "integrity": "sha512-KccOqc10vrzS7ZhG2NSnL2dh3uVydarB7nOhjreQ7C4zyWuiW9XpLC4h47KtGQv3Rnv/NDLJYeDqaJ4/+140HQ==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.5.tgz", + "integrity": "sha512-haJ/Hveio3zv/Fr4eXVdKzjUeHHDogYok7OpRqPSXGhTXisNXB+sLN7CpcUrCddFRUDLnVaqQOYwhYsFndgUwA==", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-runtime": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.76.8.tgz", - "integrity": "sha512-XKahvB+iuYJSCr3QqCpROli4B4zASAYpkK+j3a0CJmokxCDNbgyI4Fp88uIL6rNaZfN0Mv35S0b99SdFXIfHjg==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.5.tgz", + "integrity": "sha512-L0syTWJUdWzfUmKgkScr6fSBVTh6QDr8eKEkRtn40OBd8LPagrJGySBboWSgbyn9eIb4ayW3Y347HxgXBSAjmg==", "dependencies": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" + "@babel/runtime": "^7.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-source-map": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.76.8.tgz", - "integrity": "sha512-Hh0ncPsHPVf6wXQSqJqB3K9Zbudht4aUtNpNXYXSxH+pteWqGAXnjtPsRAnCsCWl38wL0jYF0rJDdMajUI3BDw==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.5.tgz", + "integrity": "sha512-DwSF4l03mKPNqCtyQ6K23I43qzU1BViAXnuH81eYWdHglP+sDlPpY+/7rUahXEo6qXEHXfAJgVoo1sirbXbmsQ==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.76.8", + "metro-symbolicate": "0.80.5", "nullthrows": "^1.1.1", - "ob1": "0.76.8", + "ob1": "0.80.5", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-source-map/node_modules/source-map": { @@ -17748,12 +17798,12 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.76.8.tgz", - "integrity": "sha512-LrRL3uy2VkzrIXVlxoPtqb40J6Bf1mlPNmUQewipc3qfKKFgtPHBackqDy1YL0njDsWopCKcfGtFYLn0PTUn3w==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.5.tgz", + "integrity": "sha512-IsM4mTYvmo9JvIqwEkCZ5+YeDVPST78Q17ZgljfLdHLSpIivOHp9oVoiwQ/YGbLx0xRHRIS/tKiXueWBnj3UWA==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.76.8", + "metro-source-map": "0.80.5", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -17763,7 +17813,7 @@ "metro-symbolicate": "src/index.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-symbolicate/node_modules/source-map": { @@ -17775,9 +17825,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.76.8.tgz", - "integrity": "sha512-PlkGTQNqS51Bx4vuufSQCdSn2R2rt7korzngo+b5GCkeX5pjinPjnO2kNhQ8l+5bO0iUD/WZ9nsM2PGGKIkWFA==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.5.tgz", + "integrity": "sha512-7IdlTqK/k5+qE3RvIU5QdCJUPk4tHWEqgVuYZu8exeW+s6qOJ66hGIJjXY/P7ccucqF+D4nsbAAW5unkoUdS6g==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -17786,29 +17836,29 @@ "nullthrows": "^1.1.1" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro-transform-worker": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.76.8.tgz", - "integrity": "sha512-mE1fxVAnJKmwwJyDtThildxxos9+DGs9+vTrx2ktSFMEVTtXS/bIv2W6hux1pqivqAfyJpTeACXHk5u2DgGvIQ==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.5.tgz", + "integrity": "sha512-Q1oM7hfP+RBgAtzRFBDjPhArELUJF8iRCZ8OidqCpYzQJVGuJZ7InSnIf3hn1JyqiUQwv2f1LXBO78i2rAjzyA==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "metro": "0.76.8", - "metro-babel-transformer": "0.76.8", - "metro-cache": "0.76.8", - "metro-cache-key": "0.76.8", - "metro-source-map": "0.76.8", - "metro-transform-plugins": "0.76.8", + "metro": "0.80.5", + "metro-babel-transformer": "0.80.5", + "metro-cache": "0.80.5", + "metro-cache-key": "0.80.5", + "metro-minify-terser": "0.80.5", + "metro-source-map": "0.80.5", + "metro-transform-plugins": "0.80.5", "nullthrows": "^1.1.1" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/metro/node_modules/ansi-styles": { @@ -17877,31 +17927,17 @@ "node": ">=8" } }, - "node_modules/metro/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz", + "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==" }, - "node_modules/metro/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz", + "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "hermes-estree": "0.18.2" } }, "node_modules/metro/node_modules/ms": { @@ -18063,9 +18099,9 @@ } }, "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { "yallist": "^4.0.0" }, @@ -18261,9 +18297,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -19290,11 +19326,11 @@ "dev": true }, "node_modules/ob1": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.76.8.tgz", - "integrity": "sha512-dlBkJJV5M/msj9KYA9upc+nUWVwuOFFTbu28X6kZeGwcuW+JxaHSBZ70SYQnk5M+j5JbNLR6yKHmgW4M5E7X5g==", + "version": "0.80.5", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.5.tgz", + "integrity": "sha512-zYDMnnNrFi/1Tqh0vo3PE4p97Tpl9/4MP2k2ECvkbLOZzQuAYZJLTUYVLZb7hJhbhjT+JJxAwBGS8iu5hCSd1w==", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/object-assign": { @@ -19729,11 +19765,6 @@ "node": ">= 8" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -19882,65 +19913,6 @@ "node": ">=8" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/plist": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", @@ -19973,9 +19945,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "funding": [ { "type": "opencollective", @@ -19991,7 +19963,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -20102,11 +20074,11 @@ } }, "node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -20268,9 +20240,9 @@ } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dependencies": { "side-channel": "^1.0.4" }, @@ -20298,19 +20270,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, "node_modules/queue": { "version": "6.0.2", @@ -20361,20 +20325,6 @@ "node": ">= 0.6" } }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -20476,43 +20426,45 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { - "version": "0.72.6", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.72.6.tgz", - "integrity": "sha512-RafPY2gM7mcrFySS8TL8x+TIO3q7oAlHpzEmC7Im6pmXni6n1AuufGaVh0Narbr1daxstw7yW7T9BKW5dpVc2A==", - "dependencies": { - "@jest/create-cache-key-function": "^29.2.1", - "@react-native-community/cli": "11.3.7", - "@react-native-community/cli-platform-android": "11.3.7", - "@react-native-community/cli-platform-ios": "11.3.7", - "@react-native/assets-registry": "^0.72.0", - "@react-native/codegen": "^0.72.7", - "@react-native/gradle-plugin": "^0.72.11", - "@react-native/js-polyfills": "^0.72.1", - "@react-native/normalize-colors": "^0.72.0", - "@react-native/virtualized-lists": "^0.72.8", + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.4.tgz", + "integrity": "sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg==", + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native-community/cli": "12.3.2", + "@react-native-community/cli-platform-android": "12.3.2", + "@react-native-community/cli-platform-ios": "12.3.2", + "@react-native/assets-registry": "0.73.1", + "@react-native/codegen": "0.73.3", + "@react-native/community-cli-plugin": "0.73.16", + "@react-native/gradle-plugin": "0.73.4", + "@react-native/js-polyfills": "0.73.1", + "@react-native/normalize-colors": "0.73.2", + "@react-native/virtualized-lists": "0.73.4", "abort-controller": "^3.0.0", "anser": "^1.4.9", - "base64-js": "^1.1.2", - "deprecated-react-native-prop-types": "4.1.0", + "ansi-regex": "^5.0.0", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "deprecated-react-native-prop-types": "^5.0.0", "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.5", + "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "jest-environment-node": "^29.2.1", + "jest-environment-node": "^29.6.3", "jsc-android": "^250231.0.0", "memoize-one": "^5.0.0", - "metro-runtime": "0.76.8", - "metro-source-map": "0.76.8", + "metro-runtime": "^0.80.3", + "metro-source-map": "^0.80.3", "mkdirp": "^0.5.1", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.3.0", - "react-devtools-core": "^4.27.2", - "react-refresh": "^0.4.0", + "react-devtools-core": "^4.27.7", + "react-refresh": "^0.14.0", "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.24.0-canary-efb381bbf-20230505", "stacktrace-parser": "^0.1.10", - "use-sync-external-store": "^1.0.0", "whatwg-fetch": "^3.0.0", "ws": "^6.2.2", "yargs": "^17.6.2" @@ -20521,7 +20473,7 @@ "react-native": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { "react": "18.2.0" @@ -20544,9 +20496,9 @@ } }, "node_modules/react-native-gesture-handler": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.12.1.tgz", - "integrity": "sha512-deqh36bw82CFUV9EC4tTo2PP1i9HfCOORGS3Zmv71UYhEZEHkzZv18IZNPB+2Awzj45vLIidZxGYGFxHlDSQ5A==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.14.1.tgz", + "integrity": "sha512-YiM1BApV4aKeuwsM6O4C2ufwewYEKk6VMXOt0YqEZFMwABBFWhXLySFZYjBSNRU2USGppJbfHP1q1DfFQpKhdA==", "dependencies": { "@egjs/hammerjs": "^2.0.17", "hoist-non-react-statics": "^3.3.0", @@ -20578,18 +20530,18 @@ } }, "node_modules/react-native-pager-view": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.2.0.tgz", - "integrity": "sha512-pf9OnL/Tkr+5s4Gjmsn7xh91PtJLDa6qxYa/bmtUhd/+s4cQdWQ8DIFoOFghwZIHHHwVdWtoXkp6HtpjN+r20g==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.2.3.tgz", + "integrity": "sha512-dqVpXWFtPNfD3D2QQQr8BP+ullS5MhjRJuF8Z/qml4QTILcrWaW8F5iAxKkQR3Jl0ikcEryG/+SQlNcwlo0Ggg==", "peerDependencies": { "react": "*", "react-native": "*" } }, "node_modules/react-native-reanimated": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.3.0.tgz", - "integrity": "sha512-LzfpPZ1qXBGy5BcUHqw3pBC0qSd22qXS3t8hWSbozXNrBkzMhhOrcILE/nEg/PHpNNp1xvGOW8NwpAMF006roQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.6.2.tgz", + "integrity": "sha512-IIMREMOrxhtK35drfpzh2UhxNqAOHnuvGgtMofj7yHcMj16tmWZR2zFvMUf6z2MfmXv+aVgFQ6TRZ6yKYf7LNA==", "dependencies": { "@babel/plugin-transform-object-assign": "^7.16.7", "@babel/preset-typescript": "^7.16.7", @@ -20613,18 +20565,18 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/react-native-safe-area-context": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.6.3.tgz", - "integrity": "sha512-3CeZM9HFXkuqiU9HqhOQp1yxhXw6q99axPWrT+VJkITd67gnPSU03+U27Xk2/cr9XrLUnakM07kj7H0hdPnFiQ==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.8.2.tgz", + "integrity": "sha512-ffUOv8BJQ6RqO3nLml5gxJ6ab3EestPiyWekxdzO/1MQ7NF8fW1Mzh1C5QE9yq573Xefnc7FuzGXjtesZGv7cQ==", "peerDependencies": { "react": "*", "react-native": "*" } }, "node_modules/react-native-screens": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.22.1.tgz", - "integrity": "sha512-ffzwUdVKf+iLqhWSzN5DXBm0s2w5sN0P+TaHHPAx42LT7+DT0g8PkHT1QDvxpR5vCEPSS1i3EswyVK4HCuhTYg==", + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.29.0.tgz", + "integrity": "sha512-yB1GoAMamFAcYf4ku94uBPn0/ani9QG7NdI98beJ5cet2YFESYYzuEIuU+kt+CNRcO8qqKeugxlfgAa3HyTqlg==", "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" @@ -20635,9 +20587,9 @@ } }, "node_modules/react-native-svg": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-13.9.0.tgz", - "integrity": "sha512-Ey18POH0dA0ob/QiwCBVrxIiwflhYuw0P0hBlOHeY4J5cdbs8ngdKHeWC/Kt9+ryP6fNoEQ1PUgPYw2Bs/rp5Q==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-14.1.0.tgz", + "integrity": "sha512-HeseElmEk+AXGwFZl3h56s0LtYD9HyGdrpg8yd9QM26X+d7kjETrRQ9vCjtxuT5dCZEIQ5uggU1dQhzasnsCWA==", "dependencies": { "css-select": "^5.1.0", "css-tree": "^1.1.3" @@ -20843,9 +20795,9 @@ } }, "node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "engines": { "node": ">=0.10.0" } @@ -21247,12 +21199,8 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "node_modules/resolve": { "version": "1.22.8", @@ -21295,8 +21243,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "peer": true, "engines": { "node": ">=10" } @@ -21434,7 +21380,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true }, "node_modules/sanitize-filename": { "version": "1.6.3", @@ -22101,6 +22048,15 @@ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.2.tgz", "integrity": "sha512-tPwQ3c1rLIwbJpq59duoznegEbmgfV630C2n4R4G96LKBFljgK8j+O9AxjqB6cAzu4gE7s4pByrLWtZel8E+Mg==" }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -22125,6 +22081,36 @@ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "dev": true, + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "dev": true, + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, "node_modules/stacktrace-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", @@ -22389,9 +22375,9 @@ "integrity": "sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==" }, "node_modules/sucrase": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", - "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -22745,9 +22731,9 @@ } }, "node_modules/terser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", - "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -22762,9 +22748,9 @@ } }, "node_modules/terser/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -22940,9 +22926,12 @@ } }, "node_modules/traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -23175,18 +23164,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", @@ -23253,9 +23230,9 @@ } }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -23283,27 +23260,6 @@ "node": "*" } }, - "node_modules/uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", - "dependencies": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-es/node_modules/commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" - }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -23441,12 +23397,12 @@ } }, "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "punycode": "^1.4.1", + "qs": "^6.11.2" } }, "node_modules/url-join": { @@ -23458,15 +23414,16 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "node_modules/use-latest-callback": { "version": "0.1.6", @@ -24196,6 +24153,27 @@ "node": ">=12" } }, + "node_modules/whatwg-url-without-unicode": { + "version": "8.0.0-3", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "dependencies": { + "buffer": "^5.4.3", + "punycode": "^2.1.1", + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -24477,9 +24455,9 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "engines": { "node": ">= 14" } diff --git a/package.json b/package.json index be27604..a757646 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "abacus", "homepage": "https://github.com/victorbalssa/abacus", - "version": "0.11.1", + "version": "0.12.4", "private": true, "jest": { "preset": "jest-expo", @@ -18,10 +18,11 @@ "debug": "open 'rndebugger://set-debugger-loc?host=localhost&port=19001'" }, "dependencies": { - "@expo/config-plugins": "~7.2.5", - "@expo/vector-icons": "^13.0.0", - "@react-native-async-storage/async-storage": "1.18.2", - "@react-native-community/datetimepicker": "7.2.0", + "@expo/config-plugins": "~7.8.0", + "@expo/metro-runtime": "~3.1.3", + "@expo/vector-icons": "^14.0.0", + "@react-native-async-storage/async-storage": "1.21.0", + "@react-native-community/datetimepicker": "7.6.1", "@react-navigation/bottom-tabs": "^6.2.0", "@react-navigation/native": "^6.0.8", "@react-navigation/native-stack": "^6.9.13", @@ -31,29 +32,29 @@ "axios": "^1.6.0", "babel-polyfill": "^6.26.0", "bootstrap": "^4.4.1", - "expo": "^49.0.21", - "expo-application": "~5.3.0", - "expo-asset": "~8.10.1", - "expo-auth-session": "~5.0.2", - "expo-blur": "~12.4.1", - "expo-build-properties": "~0.8.3", - "expo-clipboard": "~4.3.1", - "expo-crypto": "~12.4.1", - "expo-device": "~5.4.0", - "expo-font": "~11.4.0", - "expo-haptics": "~12.4.0", - "expo-linear-gradient": "~12.3.0", - "expo-linking": "~5.0.2", - "expo-local-authentication": "~13.4.1", - "expo-localization": "~14.3.0", - "expo-random": "~13.2.0", - "expo-secure-store": "~12.3.1", - "expo-splash-screen": "~0.20.5", - "expo-status-bar": "~1.6.0", - "expo-store-review": "~6.4.0", - "expo-system-ui": "~2.4.0", - "expo-updates": "~0.18.19", - "expo-web-browser": "~12.3.2", + "expo": "~50.0.7", + "expo-application": "~5.8.3", + "expo-asset": "~9.0.2", + "expo-auth-session": "~5.4.0", + "expo-blur": "~12.9.2", + "expo-build-properties": "~0.11.1", + "expo-clipboard": "~5.0.1", + "expo-crypto": "~12.8.1", + "expo-device": "~5.9.3", + "expo-font": "~11.10.2", + "expo-haptics": "~12.8.1", + "expo-linear-gradient": "~12.7.2", + "expo-linking": "~6.2.2", + "expo-local-authentication": "~13.8.0", + "expo-localization": "~14.8.3", + "expo-random": "~13.6.0", + "expo-secure-store": "~12.8.1", + "expo-splash-screen": "~0.26.4", + "expo-status-bar": "~1.11.1", + "expo-store-review": "~6.8.3", + "expo-system-ui": "~2.9.3", + "expo-updates": "~0.24.11", + "expo-web-browser": "~12.8.2", "globally": "^0.0.0", "i18n-js": "^4.1.1", "lodash": "^4.17.21", @@ -64,16 +65,16 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-helmet": "^5.2.1", - "react-native": "0.72.6", + "react-native": "0.73.4", "react-native-animated-splash-screen": "^2.0.5", - "react-native-gesture-handler": "~2.12.0", + "react-native-gesture-handler": "~2.14.0", "react-native-gradle-plugin": "^0.71.19", "react-native-modal": "^11.5.6", - "react-native-pager-view": "6.2.0", - "react-native-reanimated": "~3.3.0", - "react-native-safe-area-context": "4.6.3", - "react-native-screens": "~3.22.0", - "react-native-svg": "13.9.0", + "react-native-pager-view": "6.2.3", + "react-native-reanimated": "~3.6.2", + "react-native-safe-area-context": "4.8.2", + "react-native-screens": "~3.29.0", + "react-native-svg": "14.1.0", "react-native-swipe-list-view": "^3.2.9", "react-native-web": "~0.19.7", "react-redux": "^9.0.4", @@ -82,18 +83,18 @@ "semver": "^7.5.4", "sharp-cli": "^4.2.0", "slash": "^5.1.0", - "victory-native": "^36.6.11" + "victory-native": "^36.6.11", + "expo-dev-client": "~3.3.8" }, "devDependencies": { "@babel/core": "^7.23.2", - "@config-plugins/detox": "^6.0.0", "@types/jest": "^29.5.8", "@types/lodash": "^4.14.197", "@types/node": "^20.9.0", - "@types/react": "~18.2.14", + "@types/react": "~18.2.45", "@typescript-eslint/eslint-plugin": "^5.30.0", "@typescript-eslint/parser": "^5.62.0", - "babel-preset-expo": "^9.5.0", + "babel-preset-expo": "^10.0.0", "detox": "20.13.5", "dotenv": "^16.3.1", "eslint": "^7.32.0", @@ -102,10 +103,10 @@ "eslint-plugin-jest": "^27.2.3", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-react": "^7.33.1", - "jest-expo": "^49.0.0", + "jest-expo": "~50.0.2", "node-sass": "^9.0.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^5.2.2" + "typescript": "^5.3.0" } } diff --git a/plugins/withAndroidManifest.js b/plugins/withAndroidManifest.js index d4ef117..7c85b27 100644 --- a/plugins/withAndroidManifest.js +++ b/plugins/withAndroidManifest.js @@ -2,18 +2,20 @@ const { withAndroidManifest } = require('@expo/config-plugins'); function removeNetworkSecurityConfig(androidManifest) { - const manifest = { ...androidManifest }; + const newManifest = { ...androidManifest }; - manifest.manifest.application[0].$['android:networkSecurityConfig'] = undefined; - manifest.manifest.application[0].$['android:usesCleartextTraffic'] = 'true'; + newManifest.manifest.application[0].$['android:networkSecurityConfig'] = undefined; + newManifest.manifest.application[0].$['android:usesCleartextTraffic'] = 'true'; - return manifest; + return newManifest; } module.exports = function withAndroidManifestUpdate(configuration) { return withAndroidManifest(configuration, (config) => { - // eslint-disable-next-line no-param-reassign - config.modResults = removeNetworkSecurityConfig(config.modResults); - return config; + const newConfig = { ...config }; + + newConfig.modResults = removeNetworkSecurityConfig(newConfig.modResults); + + return newConfig; }); }; diff --git a/src/components/Charts/AssetsHistoryChart.tsx b/src/components/Charts/AssetsHistoryChart.tsx index cd50132..0e1299d 100644 --- a/src/components/Charts/AssetsHistoryChart.tsx +++ b/src/components/Charts/AssetsHistoryChart.tsx @@ -13,7 +13,7 @@ import { useDispatch, useSelector } from 'react-redux'; import * as Localization from 'expo-localization'; import { Pressable, View, ScrollView } from 'react-native'; import { - AStack, + AStackFlex, AText, } from '../UI/ALibrary'; @@ -52,7 +52,7 @@ function Cursor({ }) { return ( <> - - {`${(yPoint).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,') || ''}`} - + ); })} - - + + ( - - - + {loading && ( - - + + - - + + )} {!loading && ( )} {accounts.length > 4 && ()} - + diff --git a/src/components/Charts/BalanceHistoryChart.tsx b/src/components/Charts/BalanceHistoryChart.tsx index 4dcba7b..b77143a 100644 --- a/src/components/Charts/BalanceHistoryChart.tsx +++ b/src/components/Charts/BalanceHistoryChart.tsx @@ -17,7 +17,7 @@ import Loading from '../UI/Loading'; import { useThemeColors } from '../../lib/common'; import { RootDispatch, RootState } from '../../store'; import translate from '../../i18n/locale'; -import { AStack, AText } from '../UI/ALibrary'; +import { AStackFlex, AText } from '../UI/ALibrary'; import ErrorBoundary from '../UI/ErrorBoundary'; export default function BalanceHistoryChart() { @@ -46,7 +46,7 @@ export default function BalanceHistoryChart() { return ( - - - + {loading && ( - - + + - - + + )} {!loading && (!isEmpty(spentChart) || !isEmpty(earnedChart)) && ( {translate('balance_history_chart_no_data')} )} - + diff --git a/src/components/Forms/OauthForm.tsx b/src/components/Forms/OauthForm.tsx index fe387df..1004c93 100644 --- a/src/components/Forms/OauthForm.tsx +++ b/src/components/Forms/OauthForm.tsx @@ -1,29 +1,28 @@ import React, { useState } from 'react'; import { Input, - Box, FormControl, Button, - HStack, - Stack, - Text, Switch, - ScrollView, } from 'native-base'; import { - View, - Pressable, KeyboardAvoidingView, Platform, Alert, + ScrollView, } from 'react-native'; import * as Haptics from 'expo-haptics'; import * as Clipboard from 'expo-clipboard'; import { Ionicons } from '@expo/vector-icons'; import * as Linking from 'expo-linking'; +import { useSelector } from 'react-redux'; import { isValidHttpUrl, useThemeColors } from '../../lib/common'; import translate from '../../i18n/locale'; +import { RootState } from '../../store'; +import { + APressable, AStackFlex, AText, AView, +} from '../UI/ALibrary'; const copyToClipboard = async () => { await Clipboard.setStringAsync('abacusfiiiapp://redirect'); @@ -31,17 +30,15 @@ const copyToClipboard = async () => { }; export default function OauthForm({ - loading, - faceId, - faceIdCheck, config, setConfig, oauthLogin, tokenLogin, - backendURL, - setBackendURL, + useBiometricAuth = false, + biometricCheck = () => {}, }) { const { colors } = useThemeColors(); + const loading = useSelector((state: RootState) => state.loading.effects.firefly.getNewAccessToken?.loading); const [isOauth, setIsAuth] = useState(true); const toggleIsOauth = () => setIsAuth((value) => !value); const isMinimumRequirement = () => { @@ -69,16 +66,23 @@ export default function OauthForm({ style={{ flex: 1 }} behavior={Platform.select({ ios: 'padding', android: 'height' })} > - - + + {translate('auth_form_url_label')} setConfig({ + ...config, + backendURL: v, + })} testID="auth_form_url_input" /> @@ -86,50 +90,47 @@ export default function OauthForm({ - {translate('auth_external_heads_up')} + {translate('auth_external_heads_up')} - - - {translate('auth_use_personal_access_token')} - - - + + {translate('auth_use_personal_access_token')} + + {isOauth && ( - <> - - - ‣ - {' '} - {translate('auth_create_new_oauth_client')} - {' '} - Linking.openURL(`${backendURL}/profile`)} underline> - {`${isValidHttpUrl(backendURL) ? backendURL : '[Firefly III URL]'}/profile`} - - - - - + + + ‣ + {' '} + {translate('auth_create_new_oauth_client')} + {' '} + Linking.openURL(`${config.backendURL}/profile`)} underline> + {`${isValidHttpUrl(config.backendURL) ? config.backendURL : '[Firefly III URL]'}/profile`} + + + + ‣ {' '} {translate('auth_form_set_redirect')} - + - - abacusfiiiapp://redirect - - + abacusfiiiapp://redirect + + {translate('auth_form_oauth_clientId')} - + )} {!isOauth && ( - <> - Linking.openURL(`${backendURL}/profile`)}> - ‣ - {' '} - {translate('auth_create_new_personal_access_token')} - {' '} - Linking.openURL(`${backendURL}/profile`)} underline> - {isValidHttpUrl(backendURL) ? backendURL : '[Firefly III URL]'} - /profile - - - - {translate('auth_form_personal_access_token_label')} - setConfig({ - ...config, - personalAccessToken: v, - })} - testID="auth_form_personal_access_token_input" - /> - - {translate('auth_form_secrets_help_message')} - - - + + Linking.openURL(`${config.backendURL}/profile`)}> + ‣ + {' '} + {translate('auth_create_new_personal_access_token')} + {' '} + Linking.openURL(`${config.backendURL}/profile`)} underline> + {isValidHttpUrl(config.backendURL) ? config.backendURL : '[Firefly III URL]'} + /profile + + + + {translate('auth_form_personal_access_token_label')} + setConfig({ + ...config, + personalAccessToken: v, + })} + testID="auth_form_personal_access_token_input" + /> + + {translate('auth_form_secrets_help_message')} + + + )} - - Linking.openURL('https://github.com/victorbalssa/abacus/blob/master/.github/HELP.md')} underline>{translate('auth_form_need_help')} - + Linking.openURL('https://github.com/victorbalssa/abacus/blob/master/.github/HELP.md')} underline>{translate('auth_form_need_help')} + - - {faceId && ( - + {useBiometricAuth && ( + - )} - - + size: 10, + }} + colorScheme="coolGray" + isLoading={loading} + onPress={() => biometricCheck()} + > + {translate('auth_form_biometrics_lock')} + + )} + + + ); diff --git a/src/components/Forms/TransactionForm.tsx b/src/components/Forms/TransactionForm.tsx index a1839ee..404fef4 100644 --- a/src/components/Forms/TransactionForm.tsx +++ b/src/components/Forms/TransactionForm.tsx @@ -1,9 +1,8 @@ import React, { useEffect, useMemo, useState } from 'react'; -import { Keyboard, Platform, View } from 'react-native'; import { - Button, - KeyboardAvoidingView, -} from 'native-base'; + Keyboard, Platform, View, KeyboardAvoidingView, ScrollView, +} from 'react-native'; +import { Button } from 'native-base'; import { useDispatch, useSelector } from 'react-redux'; import * as Haptics from 'expo-haptics'; import * as Crypto from 'expo-crypto'; @@ -17,6 +16,7 @@ import GroupTitle from './Fields/GroupTitle'; import Loading from '../UI/Loading'; import { initialSplit } from '../../models/transactions'; +import { AView } from '../UI/ALibrary'; function MultipleTransactionSplitForm({ isNew, splits, title }) { const [splitNumber, setSplitNumber] = useState([]); @@ -113,7 +113,7 @@ function TransactionFormButtons({ navigation, handleSubmit }) { )} + + )} + + + + + ); +} diff --git a/src/components/Screens/FilterScreen.tsx b/src/components/Screens/FilterScreen.tsx new file mode 100644 index 0000000..a87b180 --- /dev/null +++ b/src/components/Screens/FilterScreen.tsx @@ -0,0 +1,145 @@ +import React, { useMemo } from 'react'; +import { useSelector } from 'react-redux'; +import { + TouchableOpacity, + View, + ScrollView, +} from 'react-native'; + +import { AStackFlex, AText, AView } from '../UI/ALibrary'; +import { RootState } from '../../store'; +import { useThemeColors } from '../../lib/common'; +import { ScreenType } from '../../types/screen'; +import { types } from '../../models/transactions'; + +export default function FilterScreen({ navigation, route }: ScreenType) { + const { colors } = useThemeColors(); + const { + filterType, + selectFilter, + } = route.params; + const currencies = useSelector((state: RootState) => state.currencies.currencies); + const range = useSelector((state: RootState) => state.firefly.rangeDetails.range); + const accounts = useSelector((state: RootState) => state.accounts.accounts); + const selectedAccountIds = useSelector((state: RootState) => state.accounts.selectedAccountIds); + + React.useLayoutEffect(() => { + navigation.setOptions({ + headerTitle: filterType, + }); + }, [navigation, filterType]); + + return useMemo(() => ( + + {filterType === 'Type' && ( + + {types.map((type) => ( + { + selectFilter(type.type); + navigation.goBack(); + }} + > + + + {type.name} + + + + ))} + + )} + {filterType === 'Currency' && ( + + {currencies.map((currency) => ( + { + selectFilter(currency.attributes.code); + navigation.goBack(); + }} + > + + + {`${currency?.attributes.code} ${currency?.attributes.symbol}`} + + + + ))} + + )} + + {/* {filterType === 'Period' ? ( + <> + + {translate('period')} + + + + {[1, 3, 6, 12].map((period) => ( + { + selectFilter({ start, end, title }); + navigation.goBack(); + }} + > + + {range === period ? ( + + ) : ( + + {`${period}M`} + + )} + + + ))} + + + ) : null} */} + + + ), [ + range, + currencies, + accounts, + selectedAccountIds, + ]); +} diff --git a/src/components/Screens/FiltersScreen.tsx b/src/components/Screens/FiltersScreen.tsx index 8c1cfb8..11da2a6 100644 --- a/src/components/Screens/FiltersScreen.tsx +++ b/src/components/Screens/FiltersScreen.tsx @@ -3,7 +3,7 @@ import { View } from 'react-native'; import Filters from '../UI/Filters'; -export default function TransactionCreateScreen() { +export default function FiltersScreen() { return ( diff --git a/src/components/Screens/HomeScreen.tsx b/src/components/Screens/HomeScreen.tsx index 52b7a73..275bf29 100644 --- a/src/components/Screens/HomeScreen.tsx +++ b/src/components/Screens/HomeScreen.tsx @@ -12,12 +12,11 @@ import { Skeleton, Stack, Text, - useToast, View, VStack, } from 'native-base'; import { useSelector, useDispatch } from 'react-redux'; -import { CommonActions, useFocusEffect, useScrollToTop } from '@react-navigation/native'; +import { useFocusEffect, useScrollToTop } from '@react-navigation/native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { RefreshControl, @@ -25,7 +24,6 @@ import { Animated, Switch, } from 'react-native'; -import * as SecureStore from 'expo-secure-store'; import axios from 'axios'; import type { PagerViewOnPageScrollEventData } from 'react-native-pager-view'; import PagerView from 'react-native-pager-view'; @@ -33,14 +31,11 @@ import PagerView from 'react-native-pager-view'; import { FontAwesome, Ionicons, MaterialCommunityIcons } from '@expo/vector-icons'; import { LinearGradient } from 'expo-linear-gradient'; import { RootDispatch, RootState } from '../../store'; -import secureKeys from '../../constants/oauth'; -import ToastAlert from '../UI/ToastAlert'; import translate from '../../i18n/locale'; import { localNumberFormat, useThemeColors } from '../../lib/common'; -import { ScreenType } from './types'; import Pagination from '../UI/Pagination'; -import { AStack } from '../UI/ALibrary'; +import { AStackFlex } from '../UI/ALibrary'; const AnimatedPagerView = Animated.createAnimatedComponent(PagerView); @@ -71,7 +66,7 @@ function AssetsAccounts() { )} > - + - + {accounts && accounts.filter((a) => a.display || displayAllAccounts).map((account, index) => ( state.firefly.rangeDetails.start); const end = useSelector((state: RootState) => state.firefly.rangeDetails.end); const currentCode = useSelector((state: RootState) => state.currencies.currentCode); - const backendURL = useSelector((state: RootState) => state.configuration.backendURL); const dispatch = useDispatch(); const renderIcons = [ - , - , + , + , , ]; - const goToOauth = () => navigation.dispatch( - CommonActions.reset({ - index: 0, - routes: [ - { name: 'oauth' }, - ], - }), - ); - useEffect(() => { (async () => { - const accessToken = await SecureStore.getItemAsync(secureKeys.accessToken); - if (accessToken && backendURL) { - axios.defaults.headers.Authorization = `Bearer ${accessToken}`; - - try { - dispatch.configuration.testAccessToken(); - dispatch.currencies.getCurrencies(); - } catch (e) { - toast.show({ - render: ({ id }) => ( - toast.close(id)} - title={translate('home_container_error_title')} - status="error" - variant="solid" - description={`${translate('home_container_error_description')}, ${e.message}`} - /> - ), - }); - } - } else { - goToOauth(); - } + await Promise.all([ + dispatch.currencies.getCurrencies(), + dispatch.configuration.getCurrentApiVersion(), + ]); })(); }, []); diff --git a/src/components/Screens/OauthScreen.tsx b/src/components/Screens/OauthScreen.tsx deleted file mode 100644 index ebdcaf2..0000000 --- a/src/components/Screens/OauthScreen.tsx +++ /dev/null @@ -1,218 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import * as SecureStore from 'expo-secure-store'; -import axios from 'axios'; -import { useAuthRequest } from 'expo-auth-session'; -import { CommonActions } from '@react-navigation/native'; -import { useToast } from 'native-base'; -import { Keyboard } from 'react-native'; - -import * as LocalAuthentication from 'expo-local-authentication'; -import OauthForm from '../Forms/OauthForm'; -import secureKeys from '../../constants/oauth'; -import { discovery, redirectUri } from '../../lib/oauth'; -import { RootState, RootDispatch } from '../../store'; -import { OauthConfigType, ScreenType } from './types'; -import ToastAlert from '../UI/ToastAlert'; - -import translate from '../../i18n/locale'; - -export default function OauthScreen({ navigation }: ScreenType) { - const toast = useToast(); - const loading = useSelector((state: RootState) => state.loading.effects.firefly.getNewAccessToken?.loading); - const configuration = useSelector((state: RootState) => state.configuration); - const dispatch = useDispatch(); - - const { - backendURL, - faceId, - } = configuration; - - const [config, setConfig] = useState({ - oauthClientId: '', - oauthClientSecret: '', - personalAccessToken: '', - }); - - const { - oauthClientId, - oauthClientSecret, - } = config; - - const [request, result, promptAsync] = useAuthRequest( - { - clientId: oauthClientId, - clientSecret: oauthClientSecret, - redirectUri, - }, - discovery(backendURL), - ); - - const goToHome = () => navigation.dispatch( - CommonActions.reset({ - index: 0, - routes: [ - { name: 'dashboard' }, - ], - }), - ); - - const faceIdCheck = async () => { - if (faceId) { - const bioAuth = await LocalAuthentication.authenticateAsync(); - if (bioAuth.success) { - goToHome(); - } - } else { - goToHome(); - } - }; - - const isTokenFresh = (expiresIn: string): boolean => { - if (expiresIn && parseInt(expiresIn, 10) > 0) { - const now = Math.floor(Date.now() / 1000); - return now < parseInt(expiresIn, 10); - } - // if there is no expiration time, it is assumed to never expire. - return true; - }; - - useEffect(() => { - (async () => { - let accessToken = await SecureStore.getItemAsync(secureKeys.accessToken); - const refreshToken = await SecureStore.getItemAsync(secureKeys.refreshToken); - const expiresIn = await SecureStore.getItemAsync(secureKeys.accessTokenExpiresIn); - - if (!isTokenFresh(expiresIn) && refreshToken) { - accessToken = await dispatch.firefly.getFreshAccessToken(refreshToken); - } - - if (accessToken && backendURL) { - axios.defaults.headers.Authorization = `Bearer ${accessToken}`; - - try { - await faceIdCheck(); - } catch (e) { - toast.show({ - render: ({ id }) => ( - toast.close(id)} - title={translate('oauth_token_error_title')} - status="error" - variant="solid" - description={`${translate('oauth_token_error_description')}, ${e.message}`} - /> - ), - }); - } - } - })(); - }, []); - - useEffect(() => { - (async () => { - if (result?.type === 'cancel') { - toast.show({ - render: ({ id }) => ( - toast.close(id)} - title={translate('oauth_token_info_title')} - status="info" - variant="solid" - description={translate('oauth_token_info_description')} - /> - ), - }); - } - if (result?.type === 'success') { - try { - const { code } = result.params; - - const payload = { - oauthClientId, - oauthClientSecret, - codeVerifier: request.codeVerifier, - code, - }; - Keyboard.dismiss(); - - await dispatch.firefly.getNewAccessToken(payload); - - toast.show({ - render: ({ id }) => ( - toast.close(id)} - title={translate('oauth_token_success_title')} - status="success" - variant="solid" - description={translate('oauth_token_success_description')} - /> - ), - }); - goToHome(); - } catch (e) { - await toast.show({ - render: ({ id }) => ( - toast.close(id)} - title={translate('oauth_token_error_title')} - status="error" - variant="solid" - description={`${translate('oauth_token_error_description')}, ${e.message}`} - /> - ), - }); - } - } - })(); - }, [result]); - - const tokenLogin = async () => { - try { - axios.defaults.headers.Authorization = `Bearer ${config.personalAccessToken}`; - - // test personal token - await axios.get(`${backendURL}/api/v1/about/user`); - await SecureStore.setItemAsync(secureKeys.accessToken, config.personalAccessToken); - - toast.show({ - render: ({ id }) => ( - toast.close(id)} - title={translate('oauth_token_success_title')} - status="success" - variant="solid" - description={translate('oauth_token_success_description')} - /> - ), - }); - goToHome(); - } catch (_) { - toast.show({ - render: ({ id }) => ( - toast.close(id)} - title={translate('oauth_token_error_title')} - status="error" - variant="solid" - description={`${translate('oauth_wrong_token_error_description')}`} - /> - ), - }); - } - }; - - return ( - promptAsync()} - tokenLogin={tokenLogin} - setBackendURL={dispatch.configuration.setBackendURL} - /> - ); -} diff --git a/src/components/Screens/TransactionCreateScreen.tsx b/src/components/Screens/TransactionCreateScreen.tsx index e3fd0a2..ed39b37 100644 --- a/src/components/Screens/TransactionCreateScreen.tsx +++ b/src/components/Screens/TransactionCreateScreen.tsx @@ -1,27 +1,23 @@ import React from 'react'; -import { ScrollView } from 'native-base'; -import { ScreenType } from './types'; +import { ScreenType } from '../../types/screen'; import TransactionForm from '../Forms/TransactionForm'; export default function TransactionCreateScreen({ navigation, route }: ScreenType) { - const { params } = route; - const payload = params?.payload; + const { + params: { + payload: { + groupTitle, + splits, + } = {}, + } = {}, + } = route; return ( - - - + ); } diff --git a/src/components/Screens/TransactionDetailScreen.tsx b/src/components/Screens/TransactionDetailScreen.tsx index b55a3d9..7d473b0 100644 --- a/src/components/Screens/TransactionDetailScreen.tsx +++ b/src/components/Screens/TransactionDetailScreen.tsx @@ -1,26 +1,25 @@ import React from 'react'; -import { ScrollView } from 'react-native'; +import { ScreenType } from '../../types/screen'; import TransactionForm from '../Forms/TransactionForm'; -import { ScreenType } from './types'; export default function TransactionDetailScreen({ navigation, route }: ScreenType) { - const { payload } = route.params; + const { + params: { + id, + payload: { + groupTitle, + splits, + }, + }, + } = route; return ( - - - + ); } diff --git a/src/components/Screens/TransactionsScreen.tsx b/src/components/Screens/TransactionsScreen.tsx index 81887e0..358aa1d 100644 --- a/src/components/Screens/TransactionsScreen.tsx +++ b/src/components/Screens/TransactionsScreen.tsx @@ -1,27 +1,23 @@ import React, { useCallback, useMemo, - useRef, + useLayoutEffect, + useEffect, useState, } from 'react'; import { - Alert, Platform, + Alert, RefreshControl, } from 'react-native'; import { - Badge, - Box, Button, - HStack, - Icon, - Pressable, Skeleton, - Text, - VStack, } from 'native-base'; import moment from 'moment'; import { SwipeListView } from 'react-native-swipe-list-view'; -import { Ionicons, MaterialCommunityIcons, MaterialIcons } from '@expo/vector-icons'; +import { + EvilIcons, Ionicons, MaterialCommunityIcons, MaterialIcons, +} from '@expo/vector-icons'; import * as Haptics from 'expo-haptics'; import { useDispatch, useSelector } from 'react-redux'; import { @@ -30,11 +26,15 @@ import { useNavigation, } from '@react-navigation/native'; -import { TransactionSplitType, TransactionType } from '../../models/transactions'; +import { GetTransactionsPayload, TransactionSplitType, TransactionType } from '../../models/transactions'; import { RootDispatch, RootState } from '../../store'; import translate from '../../i18n/locale'; import { D_WIDTH, localNumberFormat, useThemeColors } from '../../lib/common'; -import { ScreenType } from './types'; +import { ScreenType } from '../../types/screen'; +import { + APressable, AStackFlex, AText, AView, +} from '../UI/ALibrary'; +import AFilterButton from '../UI/ALibrary/AFilterButton'; const ITEM_HEIGHT = 90; @@ -43,39 +43,42 @@ const resetTransactionsDates = (transactions: TransactionSplitType[]) => transac date: new Date().toISOString(), })); -function ListFooterComponent({ loadMore, initLoading }) { +function ListFooterComponent({ onLoadMore, initLoading }) { const { colors } = useThemeColors(); const loading = useSelector((state: RootState) => state.loading.effects.transactions.getMoreTransactions?.loading); const { page, totalPages } = useSelector((state: RootState) => state.transactions); - return useMemo(() => (loading || (page < totalPages)) && ( - (loading || initLoading || (page < totalPages)) && ( + - {(loading) && ( - - + {(loading || initLoading) && ( + + - + - + )} {(!initLoading && !loading && (page < totalPages)) && ( - + - + )} - + ), [ colors, page, @@ -85,7 +88,7 @@ function ListFooterComponent({ loadMore, initLoading }) { ]); } -function RenderItem({ item }: { item: TransactionType }) { +function RenderItem({ item }) { const { colors } = useThemeColors(); const navigation = useNavigation(); @@ -144,12 +147,14 @@ function RenderItem({ item }: { item: TransactionType }) { }; return useMemo(() => ( - { goToEdit(item.id, { splits: item.attributes.transactions, @@ -164,84 +169,78 @@ function RenderItem({ item }: { item: TransactionType }) { }); }} > - - - + + - - - + + + {item.attributes.groupTitle} {item.attributes.groupTitle?.length > 0 ? ': ' : ''} {item.attributes.transactions[0].description} - + - - {`${item.attributes.transactions[0].type === 'withdrawal' ? `${item.attributes.transactions[0].sourceName}` : `${item.attributes.transactions[0].destinationName}`}`} - + + {item.attributes.transactions[0].type === 'withdrawal' + ? item.attributes.transactions[0].sourceName + : item.attributes.transactions[0].destinationName} + - + {`${moment(item.attributes.transactions[0].date).format('ll')} • ${item.attributes.transactions[0].categoryName || ''}`} - - - {item.attributes.transactions[0].tags.filter((_, index) => index < 2).map((tag) => ( - - {tag} - - ))} - - - - + {item.attributes.transactions[0].tags.length > 0 && ( + + {item.attributes.transactions[0].tags.filter((_, index) => index < 2).map((tag) => ( + + + {tag} + + ))} + + )} + + + - + {`${getTransactionTypeAttributes(item.attributes.transactions[0].type).prefix}${localNumberFormat(item.attributes.transactions[0].currencyCode, item.attributes.transactions.reduce((total, split) => total + parseFloat(split.amount), 0))}`} - - - - + + + + ), [item, colors]); } @@ -271,53 +270,60 @@ function RenderHiddenItem({ handleOnPressCopy, handleOnPressDelete }) { const { colors } = useThemeColors(); return useMemo(() => ( - - + - - } color="white" size="sm" /> - - {translate('transaction_clone')} - - - - + + + + {translate('transaction_clone')} + + + + + - - } color="white" size="sm" /> - - {translate('transaction_delete')} - - - - + + + + + {translate('transaction_delete')} + + + + + ), [handleOnPressCopy, handleOnPressDelete]); } export default function TransactionsScreen({ navigation, route }: ScreenType) { const { params } = route; - const start = useSelector((state: RootState) => state.firefly.rangeDetails.start); - const end = useSelector((state: RootState) => state.firefly.rangeDetails.end); - const currentCode = useSelector((state: RootState) => state.currencies.currentCode); + const { colors } = useThemeColors(); const [loading, setLoading] = useState(false); const [transactions, setTransactions] = useState([]); + const [search, setSearch] = React.useState(''); + const [{ start, end }] = React.useState({ start: '', end: '', title: '' }); + const [type, setType] = React.useState<'' | 'withdrawal' | 'deposit' | 'transfer'>(''); + const [currentCode, setCurrentCode] = React.useState(''); const { transactions: { getMoreTransactions, @@ -326,41 +332,69 @@ export default function TransactionsScreen({ navigation, route }: ScreenType) { }, } = useDispatch(); - const onRefresh = async () => { + const onLoadMore = async () => { + const payload: GetTransactionsPayload = { + start, + end, + type, + currentCode, + search, + }; + const effectTransactions = await getMoreTransactions(payload); + setTransactions([...transactions, ...effectTransactions]); + }; + + const onLoad = async () => { + const payload: GetTransactionsPayload = { + start, + end, + type, + currentCode, + search, + }; setLoading(true); - const effectTransactions = await getTransactions(); + const effectTransactions = await getTransactions(payload); setTransactions(effectTransactions); setLoading(false); }; - const prevFiltersRef = useRef(); + useLayoutEffect(() => { + navigation.setOptions({ + headerSearchBarOptions: { + autoCapitalize: 'none', + placeholder: 'Search transactions...', + headerIconColor: colors.text, + textColor: colors.text, + hintTextColor: colors.text, + onChangeText: (event) => setSearch(event.nativeEvent.text), + onBlur: () => onLoad(), + onSearchButtonPress: () => onLoad(), + disableBackButtonOverride: true, + shouldShowHintSearchIcon: false, + }, + }); + }, [navigation, search]); + useFocusEffect( useCallback(() => { let isActive = true; - if (prevFiltersRef.current !== `${start}-${end}-${currentCode}` || params?.forceRefresh === true) { + if (params?.forceRefresh === true) { if (isActive) { - onRefresh().catch(); + onLoad().catch(); navigation.setParams({ forceRefresh: false }); } - prevFiltersRef.current = `${start}-${end}-${currentCode}`; } return () => { isActive = false; }; - }, [ - params, - start, - end, - currentCode, - ]), + }, [params, currentCode, type]), ); - const loadMore = useCallback(async () => { - const effectTransactions = await getMoreTransactions(); - setTransactions([...transactions, ...effectTransactions]); - }, [transactions, getMoreTransactions]); + useEffect(() => { + onLoad().catch(); + }, [type, currentCode]); const closeRow = (rowKey: string | number, rowMap: { [x: string]: { closeRow: () => void; }; }) => { if (rowMap[rowKey]) { @@ -382,62 +416,92 @@ export default function TransactionsScreen({ navigation, route }: ScreenType) { }), ); - return useMemo( - () => ( - - )} - contentInset={{ top: 100 }} - initialNumToRender={15} - maxToRenderPerBatch={10} - keyExtractor={(item: TransactionType) => item.id} - data={transactions} - showsVerticalScrollIndicator - renderItem={({ item }) => } - renderHiddenItem={(data, rowMap) => ( - { - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy).catch(); - goToDuplicate({ - splits: resetTransactionsDates(data.item.attributes.transactions), - groupTitle: data.item.attributes.groupTitle || '', - }); + const resetFilters = () => { + setType(''); + setCurrentCode(''); + setSearch(''); + }; + + return ( + + )} + ListHeaderComponent={( + + deleteAlert(data.item, rowMap, closeRow, deleteRow)} - /> - )} - rightOpenValue={-90} - stopRightSwipe={-190} - rightActivationValue={-170} - onRightActionStatusChange={({ - key, - isActivated, - }) => (isActivated ? deleteAlert(transactions.find((t) => t.id === key), [], closeRow, deleteRow) : null)} - leftOpenValue={90} - stopLeftSwipe={190} - leftActivationValue={170} - onLeftActionStatusChange={({ - key, - isActivated, - }) => (isActivated ? goToDuplicate({ - splits: resetTransactionsDates(transactions.find((t) => t.id === key).attributes.transactions), - groupTitle: transactions.find((t) => t.id === key).attributes.groupTitle || '', - }) : null)} - contentContainerStyle={{ paddingBottom: 100, paddingTop: Platform.select({ android: 90, ios: 0 }) }} - getItemLayout={(_, index: number) => ({ length: ITEM_HEIGHT + 1, offset: (ITEM_HEIGHT + 1) * index, index })} - ListFooterComponent={() => } - /> - ), - [ - transactions, - loading, - ], + > + {(type !== '' || currentCode !== '') && ( + + + + )} + setType(selected)} navigation={navigation} /> + setCurrentCode(selected)} navigation={navigation} /> + {/* + setCurrentCode(selected)} navigation={navigation} /> +*/} + + + )} + initialNumToRender={15} + keyExtractor={(item: TransactionType) => item.id} + data={!loading ? transactions : []} + showsVerticalScrollIndicator + renderItem={({ item }) => } + renderHiddenItem={(data, rowMap) => ( + { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy).catch(); + goToDuplicate({ + splits: resetTransactionsDates(data.item.attributes.transactions), + groupTitle: data.item.attributes.groupTitle || '', + }); + }} + handleOnPressDelete={() => deleteAlert(data.item, rowMap, closeRow, deleteRow)} + /> + )} + rightOpenValue={-90} + stopRightSwipe={-190} + rightActivationValue={-170} + onRightActionStatusChange={({ + key, + isActivated, + }) => (isActivated ? deleteAlert(transactions.find((t) => t.id === key), [], closeRow, deleteRow) : null)} + leftOpenValue={90} + stopLeftSwipe={190} + leftActivationValue={170} + onLeftActionStatusChange={({ + key, + isActivated, + }) => (isActivated ? goToDuplicate({ + splits: resetTransactionsDates(transactions.find((t) => t.id === key).attributes.transactions), + groupTitle: transactions.find((t) => t.id === key).attributes.groupTitle || '', + }) : null)} + contentContainerStyle={{ paddingBottom: 100 }} + getItemLayout={(_, index: number) => ({ length: ITEM_HEIGHT + 1, offset: (ITEM_HEIGHT + 1) * index, index })} + ListFooterComponent={ListFooterComponent({ onLoadMore, initLoading: loading })} + /> ); } diff --git a/src/components/Screens/types.ts b/src/components/Screens/types.ts deleted file mode 100644 index 6d33c50..0000000 --- a/src/components/Screens/types.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { TransactionSplitType } from '../../models/transactions'; - -export type ScreenType = { - navigation: { - dispatch: (action) => void, - setParams: (params) => void, - }, - route?: { - params?: { - payload?: { - splits?: TransactionSplitType[] - groupTitle?: string - } - id?: string - forceRefresh?: boolean | undefined - } - } -} - -export type OauthConfigType = { - oauthClientId: string, - oauthClientSecret: string, - personalAccessToken: string, -} diff --git a/src/components/UI/ALibrary/AButton.tsx b/src/components/UI/ALibrary/AButton.tsx new file mode 100644 index 0000000..546b996 --- /dev/null +++ b/src/components/UI/ALibrary/AButton.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { Pressable } from 'react-native'; +import { AStyle } from './types'; +import { useThemeColors } from '../../../lib/common'; + +interface AButtonType { + style?: AStyle + disabled?: boolean + children?: React.ReactNode + onPress: () => void + mx?: number + px?: number +} + +export default function AButton({ + onPress, + mx = 0, + px = 0, + disabled = false, + style = null, + children = null, +}: AButtonType) { + const { colors } = useThemeColors(); + + return ( + ({ + backgroundColor: pressed ? colors.filterBorderColor : colors.tileBackgroundColor, + borderRadius: 10, + marginBottom: 10, + flexDirection: 'row', + alignItems: 'center', + height: 75, + marginHorizontal: mx, + paddingHorizontal: px, + ...style, + })} + > + {children} + + ); +} diff --git a/src/components/UI/ALibrary/AFilterButton.tsx b/src/components/UI/ALibrary/AFilterButton.tsx new file mode 100644 index 0000000..4d5f27c --- /dev/null +++ b/src/components/UI/ALibrary/AFilterButton.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { TouchableOpacity } from 'react-native'; +import { Ionicons } from '@expo/vector-icons'; + +import { AText, AView } from './index'; +import { NavigationType } from '../../../types/screen'; +import { useThemeColors } from '../../../lib/common'; + +interface AFilterButtonType { + filterType: string; + navigation: NavigationType; + selected: string; + selectFilter: (filter: string) => void; +} + +export default function AFilterButton({ + selected, + navigation, + filterType, + selectFilter, +}: AFilterButtonType) { + const { colors } = useThemeColors(); + + return ( + navigation.navigate('FilterScreen', { + filterType, + selectFilter, + })} + > + + + {selected || filterType} + + + + + ); +} diff --git a/src/components/UI/ALibrary/AIconButton.tsx b/src/components/UI/ALibrary/AIconButton.tsx index ce1670d..7aebff4 100644 --- a/src/components/UI/ALibrary/AIconButton.tsx +++ b/src/components/UI/ALibrary/AIconButton.tsx @@ -1,7 +1,6 @@ import React from 'react'; -import { Pressable } from 'react-native'; -import { View } from 'native-base'; -import { AStyle } from './AStack'; +import { View, Pressable } from 'react-native'; +import { AStyle } from './types'; type AIconButtonType = { icon: React.ReactNode diff --git a/src/components/UI/ALibrary/APressable.tsx b/src/components/UI/ALibrary/APressable.tsx new file mode 100644 index 0000000..fbbdaf5 --- /dev/null +++ b/src/components/UI/ALibrary/APressable.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { Pressable } from 'react-native'; +import { AStyle } from './types'; +import { useThemeColors } from '../../../lib/common'; + +type APressableType = { + style?: AStyle + disabled?: boolean + children?: React.ReactNode + onPress: () => void + onLongPress?: () => void +} + +export default function APressable({ + onPress, + onLongPress, + disabled = false, + style = null, + children = null, +}: APressableType) { + const { colors } = useThemeColors(); + + return ( + ({ + backgroundColor: pressed ? colors.listPressed : 'transparent', + alignItems: 'center', + flexDirection: 'row', + ...style, + })} + > + {children} + + ); +} diff --git a/src/components/UI/ALibrary/AScrollView.tsx b/src/components/UI/ALibrary/AScrollView.tsx new file mode 100644 index 0000000..72a96b4 --- /dev/null +++ b/src/components/UI/ALibrary/AScrollView.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { ScrollView } from 'react-native'; +import { AStyle } from './types'; + +type AScrollViewType = { + bounces?: boolean + showsVerticalScrollIndicator?: boolean + style?: AStyle + children?: React.ReactNode +} + +export default function AScrollView({ + bounces = true, + showsVerticalScrollIndicator = true, + style = null, + children = null, +}: AScrollViewType) { + return ( + + {children} + + ); +} diff --git a/src/components/UI/ALibrary/AStack.tsx b/src/components/UI/ALibrary/AStack.tsx index e110d4c..854f7a8 100644 --- a/src/components/UI/ALibrary/AStack.tsx +++ b/src/components/UI/ALibrary/AStack.tsx @@ -1,29 +1,9 @@ import React from 'react'; import { FlexAlignType, - View, + SafeAreaView, } from 'react-native'; - -export type AStyle = { - height?: number - width?: number | '100%' - margin?: number - padding?: number - top?: number - left?: number - right?: number - bottom?: number - position?: 'absolute' | 'relative' - borderTopWidth?: number - borderBottomWidth?: number - borderColor?: string - borderWidth?: number - paddingTop?: number - paddingBottom?: number - paddingHorizontal?: number - paddingVertical?: number - backgroundColor?: string -} +import { AStyle } from './types'; type AStackType = { px?: number @@ -31,7 +11,6 @@ type AStackType = { mx?: number my?: number row?: boolean - flex?: number justifyContent?: 'center' | 'flex-start' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly' alignItems?: FlexAlignType backgroundColor?: string @@ -45,7 +24,6 @@ export default function AStack({ py = 0, mx = 0, my = 0, - flex = 1, row = false, justifyContent = 'center', alignItems = 'center', @@ -55,10 +33,8 @@ export default function AStack({ children, }: AStackType) { return ( - {children} - + ); } diff --git a/src/components/UI/ALibrary/AStackFlex.tsx b/src/components/UI/ALibrary/AStackFlex.tsx new file mode 100644 index 0000000..30c087c --- /dev/null +++ b/src/components/UI/ALibrary/AStackFlex.tsx @@ -0,0 +1,57 @@ +import React from 'react'; +import { + FlexAlignType, + SafeAreaView, +} from 'react-native'; +import { AStyle } from './types'; + +type AStackFlexType = { + px?: number + py?: number + mx?: number + my?: number + row?: boolean + flex?: number + justifyContent?: 'center' | 'flex-start' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly' + alignItems?: FlexAlignType + backgroundColor?: string + flexWrap?: 'wrap' | 'nowrap' + style?: AStyle + children: React.ReactNode +} + +export default function AStackFlex({ + px = 0, + py = 0, + mx = 0, + my = 0, + flex = 1, + row = false, + justifyContent = 'center', + alignItems = 'center', + backgroundColor = 'transparent', + flexWrap = 'nowrap', + style = {}, + children, +}: AStackFlexType) { + return ( + + {children} + + ); +} diff --git a/src/components/UI/ALibrary/AText.tsx b/src/components/UI/ALibrary/AText.tsx index 1d6def4..5324ba5 100644 --- a/src/components/UI/ALibrary/AText.tsx +++ b/src/components/UI/ALibrary/AText.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Text } from 'react-native'; import { useThemeColors } from '../../../lib/common'; -import { AStyle } from './AStack'; +import { AStyle } from './types'; type ATextType = { px?: number @@ -9,6 +9,8 @@ type ATextType = { color?: string, fontSize?: number lineHeight?: number + maxWidth?: number + bold?: boolean fontFamily?: 'Montserrat_Bold' | 'Montserrat' numberOfLines?: number underline?: boolean @@ -23,6 +25,8 @@ export default function AText({ color, fontSize = 11, lineHeight, + maxWidth, + bold = false, fontFamily = 'Montserrat', numberOfLines, underline = false, @@ -40,7 +44,8 @@ export default function AText({ color: color || colors.text, lineHeight, fontSize, - fontFamily, + maxWidth, + fontFamily: bold ? `${fontFamily}_Bold` : fontFamily, paddingHorizontal: px, paddingVertical: py, textDecorationLine: underline ? 'underline' : 'none', diff --git a/src/components/UI/ALibrary/AView.tsx b/src/components/UI/ALibrary/AView.tsx new file mode 100644 index 0000000..389a9ee --- /dev/null +++ b/src/components/UI/ALibrary/AView.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { View } from 'react-native'; +import { AStyle } from './types'; + +type AViewType = { + style?: AStyle + children?: React.ReactNode +} + +export default function AView({ + style = null, + children = null, +}: AViewType) { + return ( + + {children} + + ); +} diff --git a/src/components/UI/ALibrary/index.ts b/src/components/UI/ALibrary/index.ts index a78fe13..2f2c4bc 100644 --- a/src/components/UI/ALibrary/index.ts +++ b/src/components/UI/ALibrary/index.ts @@ -1,4 +1,8 @@ export { default as ABlurView } from './ABlurView'; export { default as AIconButton } from './AIconButton'; +export { default as AStackFlex } from './AStackFlex'; export { default as AStack } from './AStack'; export { default as AText } from './AText'; +export { default as AView } from './AView'; +export { default as APressable } from './APressable'; +export { default as AScrollView } from './AScrollView'; diff --git a/src/components/UI/ALibrary/types.ts b/src/components/UI/ALibrary/types.ts new file mode 100644 index 0000000..05747be --- /dev/null +++ b/src/components/UI/ALibrary/types.ts @@ -0,0 +1,36 @@ +import { FlexAlignType } from 'react-native'; + +export interface AStyle { + flex?: number + display?: 'flex' | 'none' + height?: number + width?: number | '100%' | '90%' | '80%' | '70%' | '60%' | '50%' + margin?: number + padding?: number + top?: number + left?: number + right?: number + bottom?: number + position?: 'absolute' | 'relative' + borderRadius?: number + borderTopWidth?: number + borderBottomWidth?: number + borderColor?: string + borderWidth?: number + paddingTop?: number + paddingRight?: number + paddingLeft?: number + paddingBottom?: number + paddingHorizontal?: number + paddingVertical?: number + marginTop?: number + marginRight?: number + marginLeft?: number + marginBottom?: number + marginHorizontal?: number + marginVertical?: number + backgroundColor?: string + alignItems?: FlexAlignType + justifyContent?: 'center' | 'flex-start' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly' + flexDirection?: 'row' | 'column' +} diff --git a/src/components/UI/ErrorWidget.tsx b/src/components/UI/ErrorWidget.tsx index 2976d2f..e16aebc 100644 --- a/src/components/UI/ErrorWidget.tsx +++ b/src/components/UI/ErrorWidget.tsx @@ -5,11 +5,9 @@ import { AxiosError } from 'axios'; import { useNavigation, CommonActions } from '@react-navigation/native'; import { View } from 'react-native'; -import * as SecureStore from 'expo-secure-store'; import { RootState } from '../../store'; import ToastAlert from './ToastAlert'; import translate from '../../i18n/locale'; -import secureKeys from '../../constants/oauth'; export default function ErrorWidget() { const toast = useToast(); @@ -20,7 +18,7 @@ export default function ErrorWidget() { CommonActions.reset({ index: 0, routes: [ - { name: 'oauth' }, + { name: 'credentials' }, ], }), ); @@ -41,7 +39,7 @@ export default function ErrorWidget() { } if (error && (error as AxiosError).response?.status && (error as AxiosError).response?.status === 401) { - Promise.all([SecureStore.deleteItemAsync(secureKeys.accessToken)]).then(goToOauth); + goToOauth(); } }, [error]); diff --git a/src/components/UI/Filters.tsx b/src/components/UI/Filters.tsx index 4352591..7914665 100644 --- a/src/components/UI/Filters.tsx +++ b/src/components/UI/Filters.tsx @@ -9,7 +9,7 @@ import { import { useNavigation } from '@react-navigation/native'; import { AntDesign, Ionicons } from '@expo/vector-icons'; -import { AStack } from './ALibrary'; +import { AStackFlex, AText } from './ALibrary'; import { RootDispatch, RootState } from '../../store'; import translate from '../../i18n/locale'; import { useThemeColors } from '../../lib/common'; @@ -57,7 +57,7 @@ export default function Filters() { {translate('currency')} - + {currencies.map((currency) => ( - + {`${currency?.attributes.code} ${currency?.attributes.symbol}`} - + ))} - + - + {[1, 3, 6, 12].map((period) => ( ))} - + {translate('home_accounts')} - + {accounts.map((account) => ( - + ), [ diff --git a/src/components/UI/NavigationHeader.tsx b/src/components/UI/NavigationHeader.tsx index 4fad407..a41d3ba 100644 --- a/src/components/UI/NavigationHeader.tsx +++ b/src/components/UI/NavigationHeader.tsx @@ -23,131 +23,101 @@ import { useThemeColors } from '../../lib/common'; export default function NavigationHeader({ navigation }): React.ReactNode { const { colors } = useThemeColors(); const safeAreaInsets = useSafeAreaInsets(); - const navigationStateIndex = navigation.getState().index; - const isStack = navigation.getState().key.startsWith('stack-'); const currentCode = useSelector((state: RootState) => state.currencies.currentCode); const title = useSelector((state: RootState) => state.firefly.rangeDetails.title); const range = useSelector((state: RootState) => state.firefly.rangeDetails.range); const start = useSelector((state: RootState) => state.firefly.rangeDetails.start); const end = useSelector((state: RootState) => state.firefly.rangeDetails.end); - const selectedAccountIds = useSelector((state: RootState) => state.accounts.selectedAccountIds); const { firefly: { setRange } } = useDispatch(); - if (![0, 1].includes(navigationStateIndex)) { - return useMemo(() => null, [ - navigationStateIndex, - selectedAccountIds, - isStack, - currentCode, - title, - range, - start, - end, - colors, - ]); - } - return useMemo(() => ( - - } - onPress={() => { - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light).catch(); - setRange({ direction: -1 }); + } + onPress={() => { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light).catch(); + setRange({ direction: -1 }); + }} + /> + + + {title} + + + {range === 1 ? `${moment(start).format('MMMM D')} - ${moment(end).format('D')}` : `${moment(start).format('MMMM D')} - ${moment(end).format('MMMM D')}`} + + {(currentCode && range) && ( + + - - - {title} - - - {range === 1 ? `${moment(start).format('MMMM D')} - ${moment(end).format('D')}` : `${moment(start).format('MMMM D')} - ${moment(end).format('MMMM D')}`} - - - - - {currentCode} - - - - - {`${range}M`} - - - {selectedAccountIds?.length > 0 && ( - - - {`+${selectedAccountIds.length}`} - - - )} - - - - + + {currentCode} + + + navigation.dispatch( - CommonActions.navigate({ - name: 'FiltersScreen', - }), - )} - > - - + > + + {`${range}M`} + + + + )} + - } - onPress={() => { - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light).catch(); - setRange({ direction: +1 }); - }} - /> + navigation.dispatch( + CommonActions.navigate({ + name: 'FiltersScreen', + }), + )} + > + + + + } + onPress={() => { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light).catch(); + setRange({ direction: +1 }); + }} + /> - ), [ - navigationStateIndex, - selectedAccountIds, - isStack, currentCode, title, range, diff --git a/src/components/UI/ToastAlert.tsx b/src/components/UI/ToastAlert.tsx index a5b1303..8a0111b 100644 --- a/src/components/UI/ToastAlert.tsx +++ b/src/components/UI/ToastAlert.tsx @@ -2,7 +2,10 @@ import React from 'react'; import { Text, IconButton, - HStack, Alert, VStack, CloseIcon, + HStack, + Alert, + VStack, + CloseIcon, } from 'native-base'; export default function ToastAlert({ diff --git a/src/constants/colors.ts b/src/constants/colors.ts index 3d1f5a5..1271125 100644 --- a/src/constants/colors.ts +++ b/src/constants/colors.ts @@ -21,6 +21,7 @@ export default { green: '#15803d', warmGray100: '#3b3b3b', blurAndroidHeader: 'rgba(40,40,40,0.16)', + brandNeutralFix: '#e3e3e3', dark: { text: 'white', textOpposite: 'black', diff --git a/src/constants/credentialKey.ts b/src/constants/credentialKey.ts new file mode 100644 index 0000000..99dfa2a --- /dev/null +++ b/src/constants/credentialKey.ts @@ -0,0 +1 @@ +export default 'FireflyIIIOAuthCredentials'; diff --git a/src/constants/oauth.ts b/src/constants/oauth.ts deleted file mode 100644 index 7f08bb5..0000000 --- a/src/constants/oauth.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default { - accessToken: 'FireflyIIIOAuthAccessToken', - accessTokenExpiresIn: 'FireflyIIIOAuthAccessTokenExpiresIn', - refreshToken: 'FireflyIIIOAuthRefreshToken', - oauthConfig: 'FireflyIIIOAuthConfig', -}; diff --git a/src/i18n/locale/translations/de-DE.ts b/src/i18n/locale/translations/de-DE.ts index d0b2d0c..a269eb5 100644 --- a/src/i18n/locale/translations/de-DE.ts +++ b/src/i18n/locale/translations/de-DE.ts @@ -8,7 +8,7 @@ export default { + 'lokale Konfigurationen\n' + 'Oauth Client ID & Secret\n' + 'URL Ihrer Instanz', - configuration_clear_cancel_button: 'Abbrechen', + cancel: 'Abbrechen', configuration_security: 'Sicherheit', configuration_share_feedback: 'Feedback teilen', configuration_report_issue: 'Problem melden', diff --git a/src/i18n/locale/translations/en-US.ts b/src/i18n/locale/translations/en-US.ts index 401149c..a581b13 100644 --- a/src/i18n/locale/translations/en-US.ts +++ b/src/i18n/locale/translations/en-US.ts @@ -1,14 +1,11 @@ export default { configuration_app_version: 'App Version', configuration_about: 'About', - configuration_clear_option: 'Clear & Reset Application', + configuration_clear_option: 'Clear cache', configuration_clear_confirm_button: 'Clear now', configuration_clear_alert_title: 'Are you sure?', - configuration_clear_alert_text: 'Clearing cache will remove:\n' - + 'local configurations\n' - + 'Oauth Client ID & Secret\n' - + 'URL of your instance', - configuration_clear_cancel_button: 'Cancel', + configuration_clear_alert_text: 'Clearing cache will remove all your data from the app. Are you sure you want to continue?', + cancel: 'Cancel', configuration_security: 'Security', configuration_share_feedback: 'Share Feedback', configuration_report_issue: 'Report Issue', @@ -130,4 +127,19 @@ export default { router_back_button: 'Back', transaction_clone: 'Clone', transaction_delete: 'Delete', + + // from 0.11.0 + configuration_credentials: 'Credentials', + configuration_manage_credentials: 'Manage Credentials', + configuration_credentials_add_button: 'Add Credential', + logout: 'Logout', + + // from 0.12.0 + credential_clear_confirm_button: 'Delete', + credential_clear_alert_title: 'Are you sure?', + credential_clear_cancel_button: 'Cancel', + go_to_credentials: 'Go to Credentials', + + configuration_logout_alert_title: 'Logout', + }; diff --git a/src/i18n/locale/translations/es-ES.ts b/src/i18n/locale/translations/es-ES.ts index 152469d..81637e8 100644 --- a/src/i18n/locale/translations/es-ES.ts +++ b/src/i18n/locale/translations/es-ES.ts @@ -8,7 +8,7 @@ export default { + 'configuraciones locales\n' + 'Secreto & ID del Oauth Client\n' + 'URL de tu instancia', - configuration_clear_cancel_button: 'Cancelar', + cancel: 'Cancelar', configuration_security: 'Seguridad', configuration_share_feedback: 'Compartir Feedback', configuration_report_issue: 'Reportar Problema', diff --git a/src/i18n/locale/translations/fr-FR.ts b/src/i18n/locale/translations/fr-FR.ts index e3ac261..62eb1ca 100644 --- a/src/i18n/locale/translations/fr-FR.ts +++ b/src/i18n/locale/translations/fr-FR.ts @@ -8,7 +8,7 @@ export default { + 'Les configurations locales\n' + 'ID & secret du client Oauth\n' + 'L\'URL de votre instance', - configuration_clear_cancel_button: 'Annuler', + cancel: 'Annuler', configuration_security: 'Sécurité', configuration_share_feedback: 'Feedback', configuration_report_issue: 'Rapport d\'Erreur', diff --git a/src/i18n/locale/translations/id-ID.ts b/src/i18n/locale/translations/id-ID.ts index 5fb33f3..b699a9c 100644 --- a/src/i18n/locale/translations/id-ID.ts +++ b/src/i18n/locale/translations/id-ID.ts @@ -8,7 +8,7 @@ export default { + 'konfigurasi lokal\n' + 'Oauth Client ID & Secret\n' + 'URL dari instansimu', - configuration_clear_cancel_button: 'Batal', + cancel: 'Batal', configuration_security: 'Keamanan', configuration_share_feedback: 'Berikan Umpan Balik', configuration_report_issue: 'Laporkan Masalah', diff --git a/src/i18n/locale/translations/index.ts b/src/i18n/locale/translations/index.ts index 6d389ee..d43cb3f 100644 --- a/src/i18n/locale/translations/index.ts +++ b/src/i18n/locale/translations/index.ts @@ -27,6 +27,9 @@ import 'moment/locale/sl'; import ruRU from './ru-RU'; import 'moment/locale/ru'; +import viVN from './vi-VN'; +import 'moment/locale/vi'; + export default { de: deDE, en: enUS, @@ -38,4 +41,5 @@ export default { it: itIT, sl: slSI, ru: ruRU, + vi: viVN, }; diff --git a/src/i18n/locale/translations/it-IT.ts b/src/i18n/locale/translations/it-IT.ts index 4176d78..2a65988 100644 --- a/src/i18n/locale/translations/it-IT.ts +++ b/src/i18n/locale/translations/it-IT.ts @@ -8,7 +8,7 @@ export default { + 'Configurazione Locale\n' + 'Oauth Client ID & Secret\n' + 'URL della tua instanza', - configuration_clear_cancel_button: 'Cancella', + cancel: 'Cancella', configuration_security: 'Sicurezza', configuration_share_feedback: 'Condividi un Feedback', configuration_report_issue: 'Segnala un Issue', diff --git a/src/i18n/locale/translations/pt-BR.ts b/src/i18n/locale/translations/pt-BR.ts index 8b10753..cda4380 100644 --- a/src/i18n/locale/translations/pt-BR.ts +++ b/src/i18n/locale/translations/pt-BR.ts @@ -8,7 +8,7 @@ export default { + 'configurações locais\n' + 'ID do Cliente e Segredo Oauth\n' + 'URL da sua instância', - configuration_clear_cancel_button: 'Cancelar', + cancel: 'Cancelar', configuration_security: 'Segurança', configuration_share_feedback: 'Enviar Feedback', configuration_report_issue: 'Reportar um problema', diff --git a/src/i18n/locale/translations/ru-RU.ts b/src/i18n/locale/translations/ru-RU.ts index 046742f..0508a39 100644 --- a/src/i18n/locale/translations/ru-RU.ts +++ b/src/i18n/locale/translations/ru-RU.ts @@ -8,7 +8,7 @@ export default { + 'Локальные настройки\n' + 'Oauth Client ID & Secret\n' + 'URL вашего экземпляра', - configuration_clear_cancel_button: 'Отмена', + cancel: 'Отмена', configuration_security: 'Безопасность', configuration_share_feedback: 'Оставить отзыв', configuration_report_issue: 'Сообщить о проблеме', diff --git a/src/i18n/locale/translations/sl-SI.ts b/src/i18n/locale/translations/sl-SI.ts index 3069de2..05f8de4 100644 --- a/src/i18n/locale/translations/sl-SI.ts +++ b/src/i18n/locale/translations/sl-SI.ts @@ -8,7 +8,7 @@ export default { + 'lokalne nastavitve\n' + 'Oauth ID odjemalca & skriti ključ\n' + 'URL naslov do vaše namestitve', - configuration_clear_cancel_button: 'Prekliči', + cancel: 'Prekliči', configuration_security: 'Varnost', configuration_share_feedback: 'Delite povratne informacije', configuration_report_issue: 'Prijavite težavo', diff --git a/src/i18n/locale/translations/vi-VN.ts b/src/i18n/locale/translations/vi-VN.ts new file mode 100644 index 0000000..6721128 --- /dev/null +++ b/src/i18n/locale/translations/vi-VN.ts @@ -0,0 +1,133 @@ +export default { + configuration_app_version: 'Phiên bản', + configuration_about: 'Giới thiệu', + configuration_clear_option: 'Xoá dữ liệu và cấu hình', + configuration_clear_confirm_button: 'Xoá', + configuration_clear_alert_title: 'Bạn có chắc chắn không?', + configuration_clear_alert_text: 'Xoá các dữ liệu sau:\n' + + 'Cấu hình ứng dụng\n' + + 'Oauth Client ID & Secret\n' + + 'URL máy chủ Firefly', + configuration_clear_cancel_button: 'Huỷ', + configuration_security: 'Bảo mật', + configuration_share_feedback: 'Chia sẻ ý kiến', + configuration_report_issue: 'Báo cáo vấn đề', + configuration_sources: 'Mã nguồn', + configuration_debug: 'Gỡ lỗi', + configuration_get_help: 'Hỗ trợ', + assetsHistoryCharts_chart_works: 'Biểu đồ này phù hợp với 4 tài khoản.', + assetsHistoryCharts_change_preferences: 'click vào đây', + assetsHistoryCharts_choose_preferences_text: 'để chọn tài khoản ưa thích trong cấu hình Firefly III:', + assetsHistoryCharts_home_screen: 'Trang chủ', + transaction_form_description_required: 'Cần nhập Mô tả.', + transaction_form_description_short: 'Mô tả quá ngắn.', + transaction_form_amount_required: 'Cần nhập số tiền.', + transaction_form_description_label: 'Mô tả', + transaction_form_sourceAccount_label: 'Tài khoản nguồn', + transaction_form_destinationAccount_label: 'Tài khoản đích', + transaction_form_date_label: 'Ngày', + transaction_form_amount_label: 'Số tiền', + transaction_form_foreign_amount_label: 'Số tiền ngoại tệ', + transaction_form_notes_label: 'Ghi chú', + transaction_form_category_label: 'Phân loại', + transaction_form_budget_label: 'Ngân sách', + transaction_form_tags_label: 'Tags', + transaction_form_reset_button: 'Đặt lại', + transaction_form_submit_button: 'Nhập', + transaction_form_new_split_button: 'Chia giao dịch', + transaction_list_alert_title: 'Bạn có chắc chắn không?', + transaction_list_alert_text: 'Giao dịch này sẽ bị xoá vĩnh viễn:', + transaction_list_delete_button: 'Xoá', + transaction_list_cancel_button: 'Huỷ', + auth_form_url_label: 'URL máy chủ Firefly III', + auth_form_url_help: "không có ký tự '/' ở cuối.", + auth_form_url_placeholder: "URL máy chủ Firefly III (không có ký tự '/' ở cuối)", + auth_form_oauth_clientId: 'Oauth Client ID', + auth_form_oauth_client_secret: 'Oauth Client Secret', + auth_form_secrets_help_message: 'Tất cả các giá trị secret sẽ được lưu an toàn trong bộ nhớ thiết bị.', + auth_form_set_redirect: 'Đặt giá trị chuyển hướng (redirect URI) thành:', + auth_form_need_help: 'Bạn cần được hỗ trợ?', + auth_form_submit_button_initial: 'Đăng nhập', + auth_form_submit_button_loading: 'Đang đăng nhập...', + auth_form_biometrics_lock: 'Khoá sinh trắc học', + home_accounts: 'Tài khoản', + layout_new_update_header: 'Có bản cập nhật mới', + layout_new_update_body_text: 'Bạn có thể cập nhật sau trong phần Cài đặt.', + layout_new_update_cancel_button: 'Huỷ', + layout_new_update_update_button: 'Cập nhật', + + // from version 0.31 + transaction_screen_title: 'Giao dịch mới', + navigation_home_tab: 'Trang chủ', + navigation_chart_tab: 'Biểu đồ', + navigation_create_tab: 'Tạo', + navigation_transactions_tab: 'Giao dịch', + navigation_settings_tab: 'Cài đặt', + transaction_form_type_withdraw: 'Rút tiền', + transaction_form_type_deposit: 'Gửi tiền', + transaction_form_type_transfer: 'Chuyển tiền', + + // from 0.4.1 + period_switcher_monthly: 'Hàng tháng', + period_switcher_quarterly: 'Hàng quý', + period_switcher_semiannually: 'Mỗi 6 tháng', + period_switcher_yearly: 'Hàng năm', + error_widget_title: 'Có lỗi xảy ra', + home_container_error_title: 'Có lỗi xảy ra', + home_container_error_description: 'Không lấy được accessToken', + oauth_token_error_title: 'Có lỗi xảy ra', + oauth_token_error_description: 'Không lấy được accessToken', + oauth_token_info_title: 'Thông tin', + oauth_token_info_description: 'Xác thực lỗi, kiểm tra lại Client ID & backend URL.', + oauth_token_success_title: 'Thành công', + oauth_token_success_description: 'Kết nối thành công tới máy chủ Firefly III.', + transaction_form_success_title: 'Thành công', + transaction_form_success_description: 'Tạo giao dịch thành công. Chạm để xem danh sách giao dịch.', + transaction_form_error_title: 'Lỗi', + home_header_time_range_year: 'Năm', + home_header_time_range_q: 'Q', // Put an abbreviation that best represents a quarter + home_header_time_range_s: '6T', // Put an abbreviation that best represents a semiannual + + // from 0.6.0 + balance: 'Số tiền', + history: 'Lịch sử', + home_categories: 'Phân loại', + home_net_worth: 'Tài sản ròng', + + // from 0.7.0 + home_budgets: 'Ngân sách', + configuration_ui: 'Giao diện', + configuration_color_mode: 'Dark Mode', + auth_form_personal_access_token_label: 'Personal Access Token', + auth_use_personal_access_token: 'Sử dụng Personal Access Token', + auth_external_heads_up: '❗️Nếu bạn sử dụng các ứng dụng xác thực thứ 3 như Authelia, Keycloak, Cloudflare Tunnels, etc. thì sẽ không sử dụng được OAuth Client. Chỉ có thể sử dụng Personal Access Tokens.', + auth_create_new_oauth_client: 'Tạo Oauth client trong tab OAuth tại đây:', + auth_create_new_personal_access_token: 'Tạo Personal Access Token trong tab OAuth tại đây:', + oauth_wrong_token_error_description: 'Không thể xác minh accessToken, vui lòng kiểm tra lại accessToken hoặc URL.', + transaction_screen_edit_title: 'Sửa giao dịch', + + // from 0.9.0 + transaction_form_foreign_currency_label: 'Foreign currency', + transaction_form_group_title_label: 'Description of the split transaction', + transaction_form_group_title_placeholder: 'Title', + transaction_form_group_title_helper: 'If you create a split transaction, there must be a global description for all splits of the transaction.', + configuration_review_app_ios: 'Review Abacus on the AppStore', + configuration_review_app_android: 'Review Abacus on Google Play', + + // from 0.9.2 + assets_history_chart: 'Accounts chart', + balance_history_chart: 'Net Worth chart', + balance_history_chart_no_data: 'To access this graph, please update FireflyIII to the latest version.', + account_not_included_in_net_worth: '* Account not included in Net Worth.', + + // from 0.10.0 + period: 'Period', + currency: 'Currency', + + home_all_accounts: 'All Accounts', + + // from 0.10.3 + router_back_button: 'Back', + transaction_clone: 'Clone', + transaction_delete: 'Delete', +}; diff --git a/src/i18n/locale/translations/zh-CN.ts b/src/i18n/locale/translations/zh-CN.ts index 4a8f4fd..db9835e 100644 --- a/src/i18n/locale/translations/zh-CN.ts +++ b/src/i18n/locale/translations/zh-CN.ts @@ -8,7 +8,7 @@ export default { + '本地配置\n' + 'Oauth 客户端 ID 和 密钥\n' + 'Firefly III 后端网址', - configuration_clear_cancel_button: '取消', + cancel: '取消', configuration_security: '安全', configuration_share_feedback: '发送反馈', configuration_report_issue: '报告问题', diff --git a/src/lib/common.ts b/src/lib/common.ts index a1aa328..1cf1ac3 100644 --- a/src/lib/common.ts +++ b/src/lib/common.ts @@ -3,6 +3,7 @@ import { getLocales } from 'expo-localization'; import moment from 'moment/moment'; import colors from '../constants/colors'; import translate from '../i18n/locale'; +import { TCredential } from '../types/credential'; export const { height: D_HEIGHT, width: D_WIDTH } = (() => { const { width, height } = Dimensions.get('window'); @@ -51,6 +52,8 @@ export const isValidHttpUrl = (string) => { return !!pattern.test(string); }; +export const isValidCredential = (credential: TCredential) => isValidHttpUrl(credential.backendURL) && credential.accessToken; + export const localNumberFormat = (currencyCode: string, num: number | bigint) => { const [locale] = getLocales(); const subLocales = ['CA', 'IN']; diff --git a/src/lib/oauth.ts b/src/lib/oauth.ts index 4844024..bdf2e22 100644 --- a/src/lib/oauth.ts +++ b/src/lib/oauth.ts @@ -1,6 +1,10 @@ import { makeRedirectUri } from 'expo-auth-session'; +import * as SecureStore from 'expo-secure-store'; +import _ from 'lodash'; +import credentialKey from '../constants/credentialKey'; +import { TCredential } from '../types/credential'; -export const discovery = (url) => ({ +export const discovery = (url: string) => ({ authorizationEndpoint: `${url}/oauth/authorize`, tokenEndpoint: `${url}/oauth/token`, }); @@ -8,3 +12,57 @@ export const discovery = (url) => ({ export const redirectUri = makeRedirectUri({ path: 'redirect', }); + +export const isTokenFresh = (expiresIn: string): boolean => { + if (expiresIn && parseInt(expiresIn, 10) > 0) { + const now = Math.floor(Date.now() / 1000); + return now < parseInt(expiresIn, 10); + } + // if there is no expiration time, it is assumed to never expire. + return true; +}; + +export const getCredentials = async () => { + const jsonCredentials = await SecureStore.getItemAsync(credentialKey); + const credentials: TCredential[] = JSON.parse(jsonCredentials); + + if (_.isEmpty(credentials)) { + return []; + } + + return credentials; +}; + +const setCredentials = async (credentials: TCredential[]) => { + const jsonCredentials = JSON.stringify(credentials); + await SecureStore.setItemAsync(credentialKey, jsonCredentials); +}; + +export const addCredential = async (credential: TCredential) => { + const credentials = await getCredentials(); + const newCredentials = [...credentials, credential]; + await setCredentials(newCredentials); +}; + +export const deleteCredential = async (index: number) => { + const credentials = await getCredentials(); + const newCredentials = [...credentials]; + newCredentials.splice(index, 1); + await setCredentials(newCredentials); +}; + +export const deleteOldSecureStore = async () => { + await Promise.all([ + SecureStore.deleteItemAsync('FireflyIIIOAuthAccessToken'), + SecureStore.deleteItemAsync('FireflyIIIOAuthAccessTokenExpiresIn'), + SecureStore.deleteItemAsync('FireflyIIIOAuthRefreshToken'), + SecureStore.deleteItemAsync('FireflyIIIOAuthConfig'), + ]); +}; + +export const deleteAccessToken = async (index: number) => { + const credentials = await getCredentials(); + const newCredentials = [...credentials]; + newCredentials[index].accessToken = ''; + await setCredentials(newCredentials); +}; diff --git a/src/models/configuration.ts b/src/models/configuration.ts index 9541225..c9fc44f 100644 --- a/src/models/configuration.ts +++ b/src/models/configuration.ts @@ -1,17 +1,14 @@ import { createModel } from '@rematch/core'; -import * as SecureStore from 'expo-secure-store'; import axios, { AxiosResponse } from 'axios'; -import secureKeys from '../constants/oauth'; import { RootModel } from './index'; import { convertKeysToCamelCase } from '../lib/common'; type ConfigurationStateType = { backendURL: string - scrollEnabled: boolean hideBalance: boolean displayAllAccounts: boolean - faceId: boolean + useBiometricAuth: boolean apiVersion: string serverVersion: string } @@ -33,12 +30,19 @@ type AboutType = { } } +type AboutUserType = { + data: { + attributes: { + email: string + } + } +} + const INITIAL_STATE = { - backendURL: 'https://', - scrollEnabled: true, + backendURL: '', hideBalance: false, displayAllAccounts: false, - faceId: false, + useBiometricAuth: false, apiVersion: '', serverVersion: '', } as ConfigurationStateType; @@ -63,24 +67,10 @@ export default createModel()({ }; }, - setFaceId(state): ConfigurationStateType { - return { - ...state, - faceId: !state.faceId, - }; - }, - - disableScroll(state): ConfigurationStateType { + setUseBiometricAuth(state): ConfigurationStateType { return { ...state, - scrollEnabled: false, - }; - }, - - enableScroll(state): ConfigurationStateType { - return { - ...state, - scrollEnabled: true, + useBiometricAuth: !state.useBiometricAuth, }; }, @@ -104,9 +94,7 @@ export default createModel()({ }, effects: (dispatch) => ({ - /** - * @returns {Promise} - */ + async apiFetch({ url, config }, rootState): Promise { const { configuration: { @@ -134,9 +122,6 @@ export default createModel()({ throw new Error('No backend URL defined.'); }, - /** - * @returns {Promise} - */ async apiPost({ url, body, config }, rootState): Promise { const { configuration: { @@ -154,9 +139,6 @@ export default createModel()({ throw new Error('No backend URL defined.'); }, - /** - * @returns {Promise} - */ async apiPut({ url, body, config }, rootState): Promise { const { configuration: { @@ -174,9 +156,6 @@ export default createModel()({ throw new Error('No backend URL defined.'); }, - /** - * @returns {Promise} - */ async apiDelete({ url }, rootState): Promise { const { configuration: { @@ -194,12 +173,7 @@ export default createModel()({ throw new Error('No backend URL defined.'); }, - /** - * Test the accessToken - * - * @returns {Promise} - */ - async testAccessToken(): Promise { + async getCurrentApiVersion(): Promise { const { data } = await dispatch.configuration.apiFetch({ url: '/api/v1/about' }) as AboutType; if (data.apiVersion && data.version) { @@ -210,21 +184,17 @@ export default createModel()({ } }, - /** - * Reset all storage from app - * - * @returns {Promise} - */ - async resetAllStorage(): Promise { + async getCurrentUserEmail(): Promise { + const { data } = await dispatch.configuration.apiFetch({ url: '/api/v1/about/user' }) as AboutUserType; + + return data.attributes.email; + }, + + async resetAllStates(): Promise { await Promise.all([ - SecureStore.deleteItemAsync(secureKeys.accessToken), - SecureStore.deleteItemAsync(secureKeys.accessTokenExpiresIn), - SecureStore.deleteItemAsync(secureKeys.refreshToken), - SecureStore.deleteItemAsync(secureKeys.oauthConfig), dispatch.accounts.resetState(), dispatch.budgets.resetState(), dispatch.categories.resetState(), - dispatch.configuration.resetState(), dispatch.currencies.resetState(), dispatch.firefly.resetState(), dispatch.transactions.resetState(), diff --git a/src/models/firefly.ts b/src/models/firefly.ts index c2b56ee..2871ec7 100644 --- a/src/models/firefly.ts +++ b/src/models/firefly.ts @@ -1,16 +1,19 @@ import { createModel } from '@rematch/core'; import moment from 'moment'; import { exchangeCodeAsync, refreshAsync } from 'expo-auth-session'; -import * as SecureStore from 'expo-secure-store'; -import axios from 'axios'; import { maxBy, minBy } from 'lodash'; import semver from 'semver'; -import secureKeys from '../constants/oauth'; -import { discovery, redirectUri } from '../lib/oauth'; +import axios from 'axios'; +import { + discovery, + redirectUri, + addCredential, +} from '../lib/oauth'; import colors from '../constants/colors'; import { RootModel } from './index'; import { generateRangeTitle } from '../lib/common'; import { AccountType } from './accounts'; +import { TCredential } from '../types/credential'; export type HomeDisplayType = { title: string, @@ -372,47 +375,36 @@ export default createModel()({ } }, - async getFreshAccessToken(payload, rootState): Promise { - const { - configuration: { - backendURL, - }, - } = rootState; - const oauthConfig = await SecureStore.getItemAsync(secureKeys.oauthConfig); - const oauthConfigStorageValue = JSON.parse(oauthConfig); - + async getFreshAccessToken(credential: TCredential): Promise { const response = await refreshAsync( { - clientId: oauthConfigStorageValue.oauthClientId, - refreshToken: payload, + clientId: credential.oauthClientId, + refreshToken: credential.refreshToken, extraParams: { - client_secret: oauthConfigStorageValue.oauthClientSecret || undefined, + client_secret: credential.oauthClientSecret, }, }, - discovery(backendURL), + discovery(credential.backendURL), ); if (!response.accessToken) { throw new Error('Failed to get accessToken with the refresh token. Please restart the Sign In process.'); } - await SecureStore.setItemAsync(secureKeys.accessToken, response.accessToken); - await SecureStore.setItemAsync(secureKeys.refreshToken, response.refreshToken); - if (response.issuedAt && response.expiresIn) { - await SecureStore.setItemAsync(secureKeys.accessTokenExpiresIn, (response.issuedAt + response.expiresIn + -600).toString()); - } + const newCredential = { ...credential }; + newCredential.accessToken = response.accessToken; + newCredential.refreshToken = response.refreshToken; + newCredential.accessTokenExpiresIn = (response.issuedAt && response.expiresIn) + ? (response.issuedAt + response.expiresIn + -600).toString() : ''; + await addCredential(newCredential); - return response.accessToken; + // set backend url and access token for this session + axios.defaults.headers.Authorization = `Bearer ${response.accessToken}`; }, - async getNewAccessToken(payload, rootState): Promise { - const { - configuration: { - backendURL, - }, - } = rootState; - + async getNewAccessToken(payload): Promise { const { + backendURL, oauthClientId, oauthClientSecret, codeVerifier, @@ -436,21 +428,23 @@ export default createModel()({ throw new Error('Please check Oauth Client ID / Secret.'); } - const oauthConfigStorageValue = JSON.stringify({ + // test personal token and get user email + axios.defaults.headers.Authorization = `Bearer ${response.accessToken}`; + dispatch.configuration.setBackendURL(backendURL); + const email = await dispatch.configuration.getCurrentUserEmail(); + + const credential: TCredential = { + email, + backendURL, + accessToken: response.accessToken, + accessTokenExpiresIn: (response.issuedAt && response.expiresIn) + ? (response.issuedAt + response.expiresIn + -600).toString() : '', oauthClientId, oauthClientSecret, - }); - await Promise.all([ - SecureStore.setItemAsync(secureKeys.accessToken, response.accessToken), - SecureStore.setItemAsync(secureKeys.refreshToken, response.refreshToken), - SecureStore.setItemAsync(secureKeys.oauthConfig, oauthConfigStorageValue), - ]); - - if (response.issuedAt && response.expiresIn) { - await SecureStore.setItemAsync(secureKeys.accessTokenExpiresIn, (response.issuedAt + response.expiresIn + -600).toString()); - } + refreshToken: response.refreshToken, + }; - axios.defaults.headers.Authorization = `Bearer ${response.accessToken}`; + await addCredential(credential); }, }), diff --git a/src/models/transactions.ts b/src/models/transactions.ts index c46f847..fafeab2 100644 --- a/src/models/transactions.ts +++ b/src/models/transactions.ts @@ -1,6 +1,7 @@ import { createModel } from '@rematch/core'; import { AxiosResponse } from 'axios'; import { RootModel } from './index'; +import translate from '../i18n/locale'; export type TransactionSplitType = { order?: number @@ -60,6 +61,15 @@ export type ErrorStateType = { notes: string } +export type GetTransactionsPayload = { + type: '' | 'withdrawal' | 'deposit' | 'transfer' + search?: string + start?: string + end?: string + currentCode?: string + accountIds?: number[] +} + export const initialSplit = () => ({ type: 'withdrawal', amount: '', @@ -79,6 +89,21 @@ export const initialSplit = () => ({ notes: '', }) as TransactionSplitType; +export const types = [ + { + type: 'withdrawal', + name: translate('transaction_form_type_withdraw'), + }, + { + type: 'deposit', + name: translate('transaction_form_type_deposit'), + }, + { + type: 'transfer', + name: translate('transaction_form_type_transfer'), + }, +]; + const INITIAL_STATE = { page: 1, totalPages: 1, @@ -221,25 +246,29 @@ export default createModel()({ }, effects: (dispatch) => ({ - async getTransactions(_: void, rootState): Promise { + async getTransactions(payload: GetTransactionsPayload): Promise { const { - firefly: { - rangeDetails: { - start, - end, - }, - }, - currencies: { - currentCode, - }, - } = rootState; + type, + start, + end, + currentCode, + search: searchQuery, + } = payload; - const type = 'all'; const currentPage = 1; + const today = new Date().toISOString().split('T')[0]; + let search = searchQuery || ' '; + search += (end && start) ? ` date_before:${end} date_after:${start}` : ` date_before:${today}`; + search += (currentCode) ? ` currency_is:${currentCode}` : ''; + search += (type) ? ` type:${type}` : ''; + const { data: transactions, meta, - } = await dispatch.configuration.apiFetch({ url: `/api/v1/currencies/${currentCode}/transactions?limit=10&page=${currentPage}&start=${start}&end=${end}&type=${type}` }) as { data: TransactionType[], meta }; + } = await dispatch.configuration.apiFetch({ url: `/api/v1/search/transactions?limit=15&page=${currentPage}&query=${search}` }) as { + data: TransactionType[], + meta + }; dispatch.transactions.setMetaPagination({ page: meta.pagination.currentPage, @@ -248,30 +277,38 @@ export default createModel()({ return transactions; }, - async getMoreTransactions(_: void, rootState): Promise { + + async getMoreTransactions(payload: GetTransactionsPayload, rootState): Promise { const { - firefly: { - rangeDetails: { - start, - end, - }, - }, transactions: { page = 1, totalPages = 1, }, - currencies: { - currentCode, - }, } = rootState; - const type = 'all'; + const { + type, + start, + end, + currentCode, + search: searchQuery, + } = payload; + const currentPage = (page < totalPages) ? page + 1 : 1; if (page < totalPages) { + const today = new Date().toISOString().split('T')[0]; + let search = searchQuery || ' '; + search += (end && start) ? ` date_before:${end} date_after:${start}` : ` date_before:${today}`; + search += (currentCode) ? ` currency_is:${currentCode}` : ''; + search += (type) ? ` type:${type}` : ''; + const { data: transactions, meta, - } = await dispatch.configuration.apiFetch({ url: `/api/v1/currencies/${currentCode}/transactions?limit=10&page=${currentPage}&start=${start}&end=${end}&type=${type}` }) as { data: TransactionType[], meta }; + } = await dispatch.configuration.apiFetch({ url: `/api/v1/search/transactions?limit=15&page=${currentPage}&query=${search}` }) as { + data: TransactionType[], + meta + }; dispatch.transactions.setMetaPagination({ page: meta.pagination.currentPage, @@ -283,6 +320,7 @@ export default createModel()({ return []; }, + async upsertTransaction({ id = '-1' }, rootState): Promise { const { transactions: { diff --git a/src/routes/index.tsx b/src/routes/index.tsx index c259fd8..37cb84e 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -8,7 +8,9 @@ import { BottomTabBar, createBottomTabNavigator, } from '@react-navigation/bottom-tabs'; -import { AntDesign, Foundation, FontAwesome } from '@expo/vector-icons'; +import { + AntDesign, Foundation, Ionicons, +} from '@expo/vector-icons'; import { Box, IconButton } from 'native-base'; import { StyleSheet, Platform, View } from 'react-native'; @@ -16,19 +18,22 @@ import translate from '../i18n/locale'; import { useThemeColors } from '../lib/common'; // Screens -import OauthScreen from '../components/Screens/OauthScreen'; import HomeScreen from '../components/Screens/HomeScreen'; import FiltersScreen from '../components/Screens/FiltersScreen'; +import FilterScreen from '../components/Screens/FilterScreen'; +import CredentialCreateScreen from '../components/Screens/CredentialCreateScreen'; import ChartScreen from '../components/Screens/ChartScreen'; import TransactionCreateScreen from '../components/Screens/TransactionCreateScreen'; import TransactionsScreen from '../components/Screens/TransactionsScreen'; import TransactionDetailScreen from '../components/Screens/TransactionDetailScreen'; import ConfigurationScreen from '../components/Screens/ConfigurationScreen'; +import CredentialsScreen from '../components/Screens/CredentialsScreen'; // UI components import ABlurView from '../components/UI/ALibrary/ABlurView'; import NavigationHeader from '../components/UI/NavigationHeader'; import ErrorWidget from '../components/UI/ErrorWidget'; +import { APressable } from '../components/UI/ALibrary'; const Stack = createNativeStackNavigator(); const TransactionStack = createNativeStackNavigator(); @@ -115,7 +120,6 @@ function TabBarComponent({ insets={insets} /> - ); @@ -161,19 +165,14 @@ function TabBarConfigurationScreenIcon({ color }) { ); } -function headerRightComp() { +export function HeaderClose() { + const { colors } = useThemeColors(); const navigation = useNavigation(); return ( - + + + ); } @@ -187,8 +186,21 @@ function TransactionsStack() { component={TransactionsScreen} initialParams={{ forceRefresh: false }} options={{ - headerShown: true, - header: NavigationHeader, + headerTitle: 'Transactions', + headerLargeTitle: true, + headerTransparent: Platform.select({ ios: true, android: false }), + headerBlurEffect: Platform.select({ ios: 'regular' }), + headerTintColor: colors.text, + headerShadowVisible: false, + headerStyle: { + backgroundColor: colors.tileBackgroundColor, + }, + headerTitleStyle: { + fontFamily: 'Montserrat_Bold', + }, + headerLargeTitleStyle: { + fontFamily: 'Montserrat_Bold', + }, }} /> , + headerTransparent: true, tabBarIcon: TabBarHomeScreenIcon, tabBarTestID: 'navigation_home_tab', }} @@ -260,6 +274,10 @@ function Home() { name={translate('navigation_chart_tab')} component={ChartScreen} options={{ + headerShown: true, + // eslint-disable-next-line react/no-unstable-nested-components + header: ({ navigation }) => , + headerTransparent: true, tabBarIcon: TabBarChartScreenIcon, tabBarTestID: 'navigation_chart_tab', }} @@ -306,12 +324,12 @@ export default function Index() { }} > + + + diff --git a/src/types/credential.ts b/src/types/credential.ts new file mode 100644 index 0000000..ff4480e --- /dev/null +++ b/src/types/credential.ts @@ -0,0 +1,9 @@ +export type TCredential = { + email: string; + backendURL: string; + accessToken: string; + accessTokenExpiresIn?: string; + refreshToken?: string; + oauthClientId?: string; + oauthClientSecret?: string; +} diff --git a/src/types/screen.ts b/src/types/screen.ts new file mode 100644 index 0000000..a300705 --- /dev/null +++ b/src/types/screen.ts @@ -0,0 +1,36 @@ +import { TransactionSplitType } from '../models/transactions'; + +interface filterScreenParamsType { + filterType: string; + selectFilter: (filter: string) => void; +} +export interface NavigationType { + dispatch: (action) => void; + setParams: (params) => void; + goBack: () => void; + setOptions: (options) => void; + navigate: (screen: string, params: filterScreenParamsType) => void; +} + +export interface ScreenType { + navigation: NavigationType; + route?: { + params?: { + payload?: { + splits?: TransactionSplitType[]; + groupTitle?: string + }; + id?: string; + forceRefresh?: boolean | undefined; + filterType?: string; + selectFilter?: (filter: string) => void; + } + } +} + +export interface OauthConfigType { + backendURL: string; + oauthClientId: string; + oauthClientSecret: string; + personalAccessToken: string; +} diff --git a/tsconfig.json b/tsconfig.json index 0e6371f..5a05690 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,3 +2,4 @@ "compilerOptions": {}, "extends": "expo/tsconfig.base" } + diff --git a/webpack.config.js b/webpack.config.mjs similarity index 72% rename from webpack.config.js rename to webpack.config.mjs index 2a5482b..0a4a04a 100644 --- a/webpack.config.js +++ b/webpack.config.mjs @@ -1,5 +1,4 @@ -// eslint-disable-next-line @typescript-eslint/no-var-requires -const createExpoWebpackConfigAsync = require('@expo/webpack-config'); +import createExpoWebpackConfigAsync from '@expo/webpack-config'; // eslint-disable-next-line func-names module.exports = async function (env, argv) {