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.
-
+
### 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')}
+
- }
- mt="2"
- shadow={2}
- onPressOut={() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)}
- _pressed={{
- style: {
- transform: [{
- scale: 0.99,
- }],
- },
- }}
- _loading={{
- bg: 'primary.50',
- _text: {
+
+ }
+ mt="2"
+ shadow={2}
+ onPressOut={() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)}
+ _pressed={{
+ style: {
+ transform: [{
+ scale: 0.99,
+ }],
+ },
+ }}
+ _loading={{
+ bg: 'primary.50',
+ _text: {
+ color: 'white',
+ },
+ alignItems: 'flex-start',
+ opacity: 1,
+ }}
+ _spinner={{
color: 'white',
- },
- alignItems: 'flex-start',
- opacity: 1,
- }}
- _spinner={{
- color: 'white',
- size: 10,
- }}
- colorScheme="primary"
- isDisabled={!isValidHttpUrl(backendURL) || !isMinimumRequirement()}
- isLoading={loading}
- isLoadingText={translate('auth_form_submit_button_loading')}
- onPress={handleLogin}
- testID="auth_form_submit_button_initial"
- >
- {translate('auth_form_submit_button_initial')}
-
- {faceId && (
- }
- mt="2"
- shadow={2}
- onTouchStart={() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)}
- _pressed={{
- style: {
- transform: [{
- scale: 0.99,
- }],
- },
- }}
- _loading={{
- _text: {
+ size: 10,
+ }}
+ colorScheme="primary"
+ isDisabled={!isValidHttpUrl(config.backendURL) || !isMinimumRequirement()}
+ isLoading={loading}
+ isLoadingText={translate('auth_form_submit_button_loading')}
+ onPress={handleLogin}
+ testID="auth_form_submit_button_initial"
+ >
+ {translate('auth_form_submit_button_initial')}
+
+ {useBiometricAuth && (
+ }
+ mt="2"
+ shadow={2}
+ onTouchStart={() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)}
+ _pressed={{
+ style: {
+ transform: [{
+ scale: 0.99,
+ }],
+ },
+ }}
+ _loading={{
+ _text: {
+ color: 'white',
+ },
+ alignItems: 'flex-start',
+ opacity: 1,
+ }}
+ _spinner={{
color: 'white',
- },
- alignItems: 'flex-start',
- opacity: 1,
- }}
- _spinner={{
- color: 'white',
- size: 10,
- }}
- colorScheme="coolGray"
- isLoading={loading}
- onPress={() => faceIdCheck()}
- >
- {translate('auth_form_biometrics_lock')}
-
- )}
-
-
+ 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 }) {
)}
}
+ leftIcon={}
_pressed={{
style: {
transform: [{
@@ -176,17 +176,20 @@ export default function TransactionForm({
return useMemo(
() => (
-
-
-
+
+
+
+
+
),
[],
diff --git a/src/components/Forms/TransactionSplitForm.tsx b/src/components/Forms/TransactionSplitForm.tsx
index e1756b2..08d71e6 100644
--- a/src/components/Forms/TransactionSplitForm.tsx
+++ b/src/components/Forms/TransactionSplitForm.tsx
@@ -21,7 +21,7 @@ import translate from '../../i18n/locale';
import { useThemeColors } from '../../lib/common';
import AutocompleteField from './Fields/AutocompleteField';
import { RootDispatch } from '../../store';
-import { TransactionSplitType } from '../../models/transactions';
+import { TransactionSplitType, types } from '../../models/transactions';
export default function TransactionSplitForm({
index,
@@ -72,21 +72,6 @@ export default function TransactionSplitForm({
});
};
- 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 colorItemTypes = {
withdrawal: colors.red,
deposit: colors.green,
@@ -320,7 +305,7 @@ export default function TransactionSplitForm({
/>
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(() => (
+
+ {selectedAccountIds?.length > 0 && (
+
+
+ {`+${selectedAccountIds.length}`}
+
+
+ )}
+ {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/ConfigurationScreen.tsx b/src/components/Screens/ConfigurationScreen.tsx
index 9bf5d61..6b80144 100644
--- a/src/components/Screens/ConfigurationScreen.tsx
+++ b/src/components/Screens/ConfigurationScreen.tsx
@@ -2,7 +2,8 @@ import React from 'react';
import {
ScrollView,
Alert,
- Text, Platform,
+ Text,
+ Platform,
} from 'react-native';
import {
Box,
@@ -14,6 +15,7 @@ import {
} from 'native-base';
import * as Linking from 'expo-linking';
import * as Application from 'expo-application';
+import * as LocalAuthentication from 'expo-local-authentication';
import {
Octicons,
FontAwesome,
@@ -27,50 +29,90 @@ import { CommonActions } from '@react-navigation/native';
import translate from '../../i18n/locale';
import { useThemeColors } from '../../lib/common';
import { RootDispatch, RootState } from '../../store';
-import { ScreenType } from './types';
+import { ScreenType } from '../../types/screen';
+import { AText } from '../UI/ALibrary';
export default function ConfigurationScreen({ navigation }: ScreenType) {
const { colors } = useThemeColors();
- const {
- backendURL,
- faceId,
- } = useSelector((state: RootState) => state.configuration);
+ const backendURL = useSelector((state: RootState) => state.configuration.backendURL);
+ const useBiometricAuth = useSelector((state: RootState) => state.configuration.useBiometricAuth);
const {
configuration: {
- setFaceId,
- resetAllStorage,
+ setUseBiometricAuth,
+ resetAllStates,
},
} = useDispatch();
+ const bioAuthCallback = async (callback) => {
+ const bioAuth = await LocalAuthentication.authenticateAsync();
+ if (bioAuth.success) {
+ callback();
+ }
+ };
+
const reviewApp = async () => {
if (await StoreReview.isAvailableAsync()) {
await StoreReview.requestReview();
}
};
- const resetApp = async () => {
- await resetAllStorage();
+ const resetCache = async () => {
+ await resetAllStates();
navigation.dispatch(
CommonActions.reset({
index: 0,
routes: [
- { name: 'oauth' },
+ { name: 'dashboard' },
],
}),
);
};
- const showAlert = () => Alert.alert(
+ const showResetCacheAlert = () => Alert.alert(
translate('configuration_clear_alert_title'),
translate('configuration_clear_alert_text'),
[
{
text: translate('configuration_clear_confirm_button'),
- onPress: () => resetApp(),
+ onPress: () => resetCache(),
+ style: 'destructive',
+ },
+ {
+ text: translate('cancel'),
+ style: 'cancel',
+ },
+ ],
+ );
+
+ const goToAccounts = () => navigation.dispatch(
+ CommonActions.navigate({
+ name: 'CredentialsScreen',
+ }),
+ );
+
+ const goToCredentials = async () => {
+ await resetAllStates();
+ navigation.dispatch(
+ CommonActions.reset({
+ index: 0,
+ routes: [
+ { name: 'credentials' },
+ ],
+ }),
+ );
+ };
+
+ const showLogoutAlert = () => Alert.alert(
+ translate('configuration_clear_alert_title'),
+ '',
+ [
+ {
+ text: 'OK',
+ onPress: () => goToCredentials(),
style: 'destructive',
},
{
- text: translate('configuration_clear_cancel_button'),
+ text: translate('cancel'),
style: 'cancel',
},
],
@@ -100,12 +142,16 @@ export default function ConfigurationScreen({ navigation }: ScreenType) {
- URL
- Linking.openURL(backendURL)}>{backendURL}
+ URL
+ Linking.openURL(backendURL)} underline>{backendURL}
+
+ {translate('configuration_manage_credentials')}
+
+
- {translate('auth_form_biometrics_lock')}
-
+ {translate('auth_form_biometrics_lock')}
+ bioAuthCallback(setUseBiometricAuth)} colorScheme="primary" />
@@ -123,24 +169,24 @@ export default function ConfigurationScreen({ navigation }: ScreenType) {
- {translate('configuration_app_version')}
- {Application.nativeApplicationVersion}
+ {translate('configuration_app_version')}
+ {Application.nativeApplicationVersion}
Linking.openURL('https://github.com/victorbalssa/abacus/discussions/')} pr={4} ml={4} py={2} h={45} alignItems="center" justifyContent="space-between" flexDirection="row" borderBottomWidth={0.5} borderColor={colors.listBorderColor}>
- {translate('configuration_share_feedback')}
+ {translate('configuration_share_feedback')}
Linking.openURL('https://github.com/victorbalssa/abacus/issues/new')} pr={4} ml={4} py={2} h={45} alignItems="center" justifyContent="space-between" flexDirection="row" borderBottomWidth={0.5} borderColor={colors.listBorderColor}>
- {translate('configuration_report_issue')}
+ {translate('configuration_report_issue')}
Linking.openURL('https://github.com/victorbalssa/abacus')} pr={4} ml={4} py={2} h={45} alignItems="center" justifyContent="space-between" flexDirection="row" borderBottomWidth={0.5} borderColor={colors.listBorderColor}>
- {translate('configuration_sources')}
+ {translate('configuration_sources')}
- {translate(Platform.select({ ios: 'configuration_review_app_ios', android: 'configuration_review_app_android' }))}
-
+ {translate(Platform.select({ ios: 'configuration_review_app_ios', android: 'configuration_review_app_android' }))}
+
@@ -158,11 +204,15 @@ export default function ConfigurationScreen({ navigation }: ScreenType) {
Linking.openURL('https://github.com/victorbalssa/abacus/blob/master/.github/HELP.md')} pr={4} ml={4} py={2} h={45} alignItems="center" justifyContent="space-between" flexDirection="row" borderBottomWidth={0.5} borderColor={colors.listBorderColor}>
- {translate('configuration_get_help')}
+ {translate('configuration_get_help')}
+
+
+
+ {translate('configuration_clear_option')}
-
- {translate('configuration_clear_option')}
+
+ {translate('go_to_credentials')}
diff --git a/src/components/Screens/CredentialCreateScreen.tsx b/src/components/Screens/CredentialCreateScreen.tsx
new file mode 100644
index 0000000..7d8102e
--- /dev/null
+++ b/src/components/Screens/CredentialCreateScreen.tsx
@@ -0,0 +1,104 @@
+import React, { useState, useEffect } from 'react';
+import { useDispatch } from 'react-redux';
+import axios from 'axios';
+import { useAuthRequest } from 'expo-auth-session';
+import { Alert, Keyboard } from 'react-native';
+
+import OauthForm from '../Forms/OauthForm';
+import {
+ discovery,
+ redirectUri,
+ addCredential,
+} from '../../lib/oauth';
+import { RootDispatch } from '../../store';
+import { OauthConfigType, ScreenType } from '../../types/screen';
+
+import translate from '../../i18n/locale';
+import { TCredential } from '../../types/credential';
+
+export default function CredentialCreateScreen({ navigation }: ScreenType) {
+ const dispatch = useDispatch();
+
+ const [config, setConfig] = useState({
+ backendURL: 'https://',
+ oauthClientId: '',
+ oauthClientSecret: '',
+ personalAccessToken: '',
+ });
+
+ const {
+ backendURL,
+ oauthClientId,
+ oauthClientSecret,
+ } = config;
+
+ const [request, result, promptAsync] = useAuthRequest(
+ {
+ clientId: oauthClientId,
+ clientSecret: oauthClientSecret,
+ redirectUri,
+ },
+ discovery(backendURL),
+ );
+
+ useEffect(() => {
+ (async () => {
+ if (result?.type === 'success') {
+ try {
+ const { code } = result.params;
+
+ const payload = {
+ backendURL,
+ oauthClientId,
+ oauthClientSecret,
+ codeVerifier: request.codeVerifier,
+ code,
+ };
+ Keyboard.dismiss();
+
+ await dispatch.firefly.getNewAccessToken(payload);
+
+ navigation.goBack();
+ } catch (e) {
+ Alert.alert(
+ translate('oauth_token_error_title'),
+ `${translate('oauth_token_error_description')}, ${e.message}`,
+ );
+ }
+ }
+ })();
+ }, [result]);
+
+ const tokenLogin = async () => {
+ try {
+ // test personal token and get user email
+ axios.defaults.headers.Authorization = `Bearer ${config.personalAccessToken}`;
+ dispatch.configuration.setBackendURL(backendURL);
+ const email = await dispatch.configuration.getCurrentUserEmail();
+
+ // save new credential
+ const credential: TCredential = {
+ email,
+ backendURL,
+ accessToken: config.personalAccessToken,
+ };
+ await addCredential(credential);
+
+ navigation.goBack();
+ } catch (_) {
+ Alert.alert(
+ translate('oauth_token_error_title'),
+ translate('oauth_wrong_token_error_description'),
+ );
+ }
+ };
+
+ return (
+ promptAsync()}
+ tokenLogin={tokenLogin}
+ />
+ );
+}
diff --git a/src/components/Screens/CredentialsScreen.tsx b/src/components/Screens/CredentialsScreen.tsx
new file mode 100644
index 0000000..fcfe135
--- /dev/null
+++ b/src/components/Screens/CredentialsScreen.tsx
@@ -0,0 +1,232 @@
+import React, { useCallback, useState } from 'react';
+import { useRoute, CommonActions, useFocusEffect } from '@react-navigation/native';
+import { AntDesign, Ionicons } from '@expo/vector-icons';
+import * as LocalAuthentication from 'expo-local-authentication';
+import { Button } from 'native-base';
+import { useDispatch, useSelector } from 'react-redux';
+import axios from 'axios';
+import { Alert, Platform } from 'react-native';
+import {
+ AView,
+ AText,
+ APressable,
+ AScrollView,
+ AStackFlex,
+} from '../UI/ALibrary';
+
+import translate from '../../i18n/locale';
+import { useThemeColors } from '../../lib/common';
+import {
+ deleteCredential, deleteOldSecureStore, getCredentials, isTokenFresh,
+} from '../../lib/oauth';
+import { TCredential } from '../../types/credential';
+import { ScreenType } from '../../types/screen';
+import { RootDispatch, RootState } from '../../store';
+import AButton from '../UI/ALibrary/AButton';
+
+export default function CredentialsScreen({ navigation }: ScreenType) {
+ const { colors } = useThemeColors();
+ const { name: routeName } = useRoute();
+ const useBiometricAuth = useSelector((state: RootState) => state.configuration.useBiometricAuth);
+ const [credentials, setCredentials] = useState([]);
+ const [editMode, setEditMode] = useState(false);
+ const [authenticated, setAuthenticated] = useState(false);
+ const dispatch = useDispatch();
+
+ const bioAuthCheck = async () => {
+ if (useBiometricAuth && !authenticated) {
+ const bioAuth = await LocalAuthentication.authenticateAsync();
+ if (bioAuth.success) {
+ setAuthenticated(true);
+ }
+ } else {
+ setAuthenticated(true);
+ }
+ };
+
+ useFocusEffect(
+ useCallback(() => {
+ bioAuthCheck().catch();
+ // delete old secure store keys
+ deleteOldSecureStore().catch();
+ getCredentials().then((c) => setCredentials(c));
+ }, [authenticated]),
+ );
+
+ const goToCredentialCreateScreen = () => navigation.dispatch(
+ CommonActions.navigate({
+ name: 'CredentialCreateScreen',
+ }),
+ );
+
+ const loginWithCredential = async (credential: TCredential) => {
+ const {
+ backendURL: currentBackendURL,
+ accessToken,
+ accessTokenExpiresIn: expiresIn,
+ refreshToken,
+ } = credential;
+
+ axios.defaults.headers.Authorization = `Bearer ${accessToken}`;
+ dispatch.configuration.setBackendURL(currentBackendURL);
+ dispatch.currencies.setCurrentCode('');
+
+ if (!isTokenFresh(expiresIn) && refreshToken) {
+ await dispatch.firefly.getFreshAccessToken(credential);
+ }
+
+ navigation.dispatch(
+ CommonActions.reset({
+ index: 0,
+ routes: [
+ { name: 'dashboard' },
+ ],
+ }),
+ );
+ };
+
+ const handleDeleteCredential = async (index: number) => {
+ await dispatch.configuration.resetAllStates();
+ await deleteCredential(index);
+ setCredentials((c) => c.filter((_, i) => i !== index));
+ setEditMode(!editMode);
+ };
+
+ const showAlert = (index: number) => Alert.alert(
+ translate('credential_clear_alert_title'),
+ '',
+ [
+ {
+ text: translate('credential_clear_confirm_button'),
+ onPress: () => handleDeleteCredential(index),
+ style: 'destructive',
+ },
+ {
+ text: translate('credential_clear_cancel_button'),
+ onPress: () => setEditMode(!editMode),
+ style: 'cancel',
+ },
+ ],
+ );
+
+ if (!authenticated) {
+ return (
+
+
+
+
+ {translate('auth_form_biometrics_lock')}
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+ {translate('configuration_credentials')}
+
+ {(credentials.length > 0 && routeName === 'credentials') ? (
+ setEditMode(!editMode)}
+ >
+ {editMode ? 'Done' : 'Edit'}
+
+ ) : }
+
+
+ {credentials.map((c, index) => (
+ loginWithCredential(c)}
+ disabled={editMode}
+ >
+
+
+ showAlert(index)} name="minuscircle" size={17} color="red" />
+
+
+
+ {c.email}
+ {c.backendURL}
+
+ {c.accessTokenExpiresIn ? '(OAuth)' : '(Personal Access Token)'}
+
+
+
+ ))}
+
+
+ {!editMode && (
+
+ }
+ onPress={goToCredentialCreateScreen}
+ colorScheme="coolGray"
+ >
+ {translate('configuration_credentials_add_button')}
+
+
+ )}
+
+
+
+
+ );
+}
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)) && (
-
+
}
- onPress={loadMore}
+ onPress={onLoadMore}
>
Load More
-
+
)}
-
+
), [
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) {