diff --git a/App.tsx b/App.tsx index 650e714..bf69a4b 100644 --- a/App.tsx +++ b/App.tsx @@ -1,5 +1,4 @@ import "react-native-gesture-handler"; -import styles from "./src/styles"; import { NavigationContainer } from "@react-navigation/native"; import { createDrawerNavigator } from "@react-navigation/drawer"; import { Provider } from "react-redux"; @@ -22,13 +21,6 @@ import { QueryClientProvider, QueryClient } from "@tanstack/react-query"; import { StatusBar } from "expo-status-bar"; import UserInfoPage from "./src/routes/UserInfoPage/UserInfoPage"; import SubjectsPage from "./src/routes/SubjectsPage/SubjectsPage"; -import ConversationPage from "./src/routes/ConversationPage/ConversationPage"; -import Loading from "./src/routes/Loading/Loading"; -import StartStudying from "./src/routes/StartStudying/StartStudying"; -import { ToastProvider } from "react-native-toast-notifications"; -import InfoIcon from "./src/icons/InfoIcon/InfoIcon"; -import CreateGroup from "./src/routes/CreateGroup/CreateGroup"; -import BackgroundComponent from "./src/components/BackgroundTask/BackgroundTask"; const Drawer = createDrawerNavigator(); @@ -36,7 +28,7 @@ const linking = { prefixes: [Linking.makeUrl("/")], config: { screens: { - Home: "", + Home: "home", Login: "login", Register: "register", Onboarding: "onboarding", @@ -63,36 +55,27 @@ export default function App() { } }, [initialRoute]); return ( - } - textStyle={{ ...styles.text_white_tiny_bold }} - > - - - - + + + - }> - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + ); } diff --git a/app.json b/app.json index 2456397..893a6ba 100644 --- a/app.json +++ b/app.json @@ -42,15 +42,9 @@ [ "expo-location", { - "locationAlwaysAndWhenInUsePermission": "Allow StudE to use your location." + "locationAlwaysAndWhenInUsePermission": "Allow Stud-E to use your location." } - ], - [ - "expo-image-picker", - { - "photosPermission": "Allow StudE to take and send photos for sharing in-app" - } - ] + ] ], "extra": { "eas": { diff --git a/package-lock.json b/package-lock.json index 9820066..2c02127 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,19 +16,13 @@ "@tanstack/react-query": "^4.29.25", "axios": "^1.4.0", "expo": "~48.0.18", - "expo-background-fetch": "~11.1.1", - "expo-file-system": "~15.2.2", - "expo-image-picker": "~14.1.1", "expo-intent-launcher": "~10.5.2", "expo-linking": "~4.0.1", "expo-location": "~15.1.1", - "expo-notifications": "~0.18.1", "expo-status-bar": "~1.4.4", - "expo-task-manager": "~11.1.1", - "moment": "^2.29.4", "moti": "^0.25.3", "react": "18.2.0", - "react-native": "0.71.14", + "react-native": "0.71.8", "react-native-bouncy-checkbox": "^3.0.7", "react-native-dropdown-picker": "^5.4.6", "react-native-gesture-handler": "~2.9.0", @@ -40,7 +34,6 @@ "react-native-screens": "~3.20.0", "react-native-select-dropdown": "^3.3.4", "react-native-svg": "13.4.0", - "react-native-toast-notifications": "^3.3.1", "react-query": "^3.39.3", "react-redux": "^8.1.1", "redux": "^4.2.1" @@ -48,7 +41,6 @@ "devDependencies": { "@babel/core": "^7.20.0", "@types/react": "~18.0.14", - "@types/react-native-fetch-blob": "^0.10.7", "typescript": "^4.9.4" } }, @@ -393,9 +385,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "engines": { "node": ">=6.9.0" } @@ -1866,12 +1858,12 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", - "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", + "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", + "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-transform-flow-strip-types": "^7.22.5" }, "engines": { @@ -1915,9 +1907,9 @@ } }, "node_modules/@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", + "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -3137,11 +3129,6 @@ "@hapi/hoek": "^9.0.0" } }, - "node_modules/@ide/backoff": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@ide/backoff/-/backoff-1.0.0.tgz", - "integrity": "sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==" - }, "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", @@ -3567,13 +3554,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz", + "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==" }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", @@ -3773,16 +3756,16 @@ } }, "node_modules/@react-native-community/cli": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-10.2.4.tgz", - "integrity": "sha512-E9BUDHfLEsnjkjeJqECuCjl4E/1Ox9Nl6hkQBhEqjZm4AaQxgU7M6AyFfOgaXn5v3am16/R4ZOUTrJnGJWS3GA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-10.2.2.tgz", + "integrity": "sha512-aZVcVIqj+OG6CrliR/Yn8wHxrvyzbFBY9cj7n0MvRw/P54QUru2nNqUTSSbqv0Qaa297yHJbe6kFDojDMSTM8Q==", "dependencies": { "@react-native-community/cli-clean": "^10.1.1", "@react-native-community/cli-config": "^10.1.1", "@react-native-community/cli-debugger-ui": "^10.0.0", - "@react-native-community/cli-doctor": "^10.2.4", + "@react-native-community/cli-doctor": "^10.2.2", "@react-native-community/cli-hermes": "^10.2.0", - "@react-native-community/cli-plugin-metro": "^10.2.3", + "@react-native-community/cli-plugin-metro": "^10.2.2", "@react-native-community/cli-server-api": "^10.1.1", "@react-native-community/cli-tools": "^10.1.1", "@react-native-community/cli-types": "^10.0.0", @@ -4313,9 +4296,9 @@ } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.2.4.tgz", - "integrity": "sha512-/6K+jeRhcGojFIJMWMXV2eY5n/In+YUzBr/DKWQOeHBOHkESRNheG310xSAIjgB46YniSSUKhSyeuhalTbm9OQ==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.2.1.tgz", + "integrity": "sha512-hz4zu4Y6eyj7D0lnZx8Mf2c2si8y+zh/zUTgCTaPPLzQD8jSZNNBtUUiA1cARm2razpe8marCZ1QbTMAGbf3mg==", "dependencies": { "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", @@ -4553,6 +4536,108 @@ "node": ">=8" } }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-react-native-babel-preset": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.10.tgz", + "integrity": "sha512-1/dnH4EHwFb2RKEKx34vVDpUS3urt2WEeR8FYim+ogqALg4sTpG7yeQPxWpbgKATezt4rNfqAANpIyH19MS4BQ==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.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.0.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.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.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-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-react-native-babel-transformer": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.10.tgz", + "integrity": "sha512-4G/upwqKdmKEjmsNa92/NEgsOxUWOygBVs+FXWfXWKgybrmcjh3NoqdRYrROo9ZRA/sB9Y/ZXKVkWOGKHtGzgg==", + "dependencies": { + "@babel/core": "^7.20.0", + "babel-preset-fbjs": "^3.4.0", + "hermes-parser": "0.8.0", + "metro-babel-transformer": "0.73.10", + "metro-react-native-babel-preset": "0.73.10", + "metro-source-map": "0.73.10", + "nullthrows": "^1.1.1" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-runtime": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.10.tgz", + "integrity": "sha512-EpVKm4eN0Fgx2PEWpJ5NiMArV8zVoOin866jIIvzFLpmkZz1UEqgjf2JAfUJnjgv3fjSV3JqeGG2vZCaGQBTow==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-source-map": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.10.tgz", + "integrity": "sha512-NAGv14701p/YaFZ76KzyPkacBw/QlEJF1f8elfs23N1tC33YyKLDKvPAzFJiYqjdcFvuuuDCA8JCXd2TgLxNPw==", + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.73.10", + "nullthrows": "^1.1.1", + "ob1": "0.73.10", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/ob1": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.10.tgz", + "integrity": "sha512-aO6EYC+QRRCkZxVJhCWhLKgVjhNuD6Gu1riGjxrIm89CqLsmKgxzYDDEsktmKsoDeRdWGQM5EdMzXDl5xcVfsw==" + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "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", @@ -5226,12 +5311,6 @@ "csstype": "^3.0.2" } }, - "node_modules/@types/react-native-fetch-blob": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@types/react-native-fetch-blob/-/react-native-fetch-blob-0.10.7.tgz", - "integrity": "sha512-9UTvmUvArimShiENeR3xnRO71NcZjpTi7AcFAIbhdTIfqQOO2OK/I/DpUPXcZF/erffLxOoRkoXrZOxyBBWKRQ==", - "dev": true - }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", @@ -5321,9 +5400,9 @@ } }, "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.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "bin": { "acorn": "bin/acorn" }, @@ -5436,6 +5515,30 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -5444,27 +5547,31 @@ "node": ">=8" } }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", "dependencies": { "tslib": "^2.0.1" }, @@ -5503,15 +5610,15 @@ "node": ">= 4.0.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 4.5.0" } }, "node_modules/axios": { @@ -5657,16 +5764,39 @@ "@babel/core": "^7.0.0" } }, - "node_modules/badgin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/badgin/-/badgin-1.2.3.tgz", - "integrity": "sha512-NQGA7LcfCpSzIbGRbkgjgdWkjy7HI+Th5VLxTJfW5EeaAf3fnS+xWQaQOCYiny+q6QSvxqoSO04vCx+4u++EJw==" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6010,6 +6140,25 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -6125,6 +6274,96 @@ "node": ">=8" } }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -6240,6 +6479,18 @@ "node": ">=6" } }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -6329,6 +6580,11 @@ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/component-type": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", @@ -6428,6 +6684,14 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/core-js-compat": { "version": "3.31.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", @@ -6563,9 +6827,9 @@ "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==" }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" }, "node_modules/debug": { "version": "4.3.4", @@ -6646,19 +6910,6 @@ "node": ">=0.8" } }, - "node_modules/define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -6667,20 +6918,16 @@ "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, "node_modules/del": { @@ -6998,6 +7245,131 @@ "node": ">=6" } }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/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/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/expo": { "version": "48.0.19", "resolved": "https://registry.npmjs.org/expo/-/expo-48.0.19.tgz", @@ -7052,17 +7424,6 @@ "url-parse": "^1.5.9" } }, - "node_modules/expo-background-fetch": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/expo-background-fetch/-/expo-background-fetch-11.1.1.tgz", - "integrity": "sha512-5X63ogpCqEqdqXYk4Sl4J8Lt/ZWcQCboS1pq3uprqD1KUi4ICl1P3gwPo+il3rYPV6xYb74Wv1KyyEEYj2vklg==", - "dependencies": { - "expo-task-manager": "~11.1.0" - }, - "peerDependencies": { - "expo": "*" - } - }, "node_modules/expo-constants": { "version": "14.2.1", "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-14.2.1.tgz", @@ -7097,25 +7458,6 @@ "expo": "*" } }, - "node_modules/expo-image-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-4.1.1.tgz", - "integrity": "sha512-ciEHVokU0f6w0eTxdRxLCio6tskMsjxWIoV92+/ZD37qePUJYMfEphPhu1sruyvMBNR8/j5iyOvPFVGTfO8oxA==", - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-image-picker": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/expo-image-picker/-/expo-image-picker-14.1.1.tgz", - "integrity": "sha512-SvWtnkLW7jp5Ntvk3lVcRQmhFYja8psmiR7O6P/+7S6f4llt3vaFwb4I3+pUXqJxxpi7BHc2+95qOLf0SFOIag==", - "dependencies": { - "expo-image-loader": "~4.1.0" - }, - "peerDependencies": { - "expo": "*" - } - }, "node_modules/expo-intent-launcher": { "version": "10.5.2", "resolved": "https://registry.npmjs.org/expo-intent-launcher/-/expo-intent-launcher-10.5.2.tgz", @@ -7273,72 +7615,69 @@ "invariant": "^2.2.4" } }, - "node_modules/expo-notifications": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.18.1.tgz", - "integrity": "sha512-lOEiuPE6ubkS5u7Nj/57gkmUGD/MxsRTC6bg9SGJqXIitBQZk3Tmv9y8bjTrn71n7DsrH8K7xCZTbVwr+kLQGg==", - "dependencies": { - "@expo/image-utils": "^0.3.18", - "@ide/backoff": "^1.0.0", - "abort-controller": "^3.0.0", - "assert": "^2.0.0", - "badgin": "^1.1.5", - "expo-application": "~5.1.0", - "expo-constants": "~14.2.0", - "fs-extra": "^9.1.0", - "uuid": "^3.4.0" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-notifications/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-notifications/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/expo-notifications/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/expo-status-bar": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.4.4.tgz", "integrity": "sha512-5DV0hIEWgatSC3UgQuAZBoQeaS9CqeWRZ3vzBR9R/+IUD87Adbi4FGhU10nymRqFXOizGsureButGZIXPs7zEA==" }, - "node_modules/expo-task-manager": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/expo-task-manager/-/expo-task-manager-11.1.1.tgz", - "integrity": "sha512-Ot4wq0fVd8+I1W7MsJz0rNdX0ma/zdnBvAppxDX1Oo0o0exo4qs1FmgrTnh3OBnn18aB4cX3wBJoXIatIgNMZQ==", + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dependencies": { - "unimodules-app-loader": "~4.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, - "peerDependencies": { - "expo": "*" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/fast-deep-equal": { @@ -7362,17 +7701,17 @@ } }, "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==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, { "type": "paypal", "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" } ], "dependencies": { @@ -7586,12 +7925,12 @@ "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==" }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/form-data": { @@ -7607,6 +7946,17 @@ "node": ">= 6" } }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/framer-motion": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-6.5.1.tgz", @@ -7680,19 +8030,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7747,6 +8084,14 @@ "node": ">=6" } }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/getenv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", @@ -7812,17 +8157,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -7869,17 +8203,6 @@ "node": ">=4" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -7902,18 +8225,62 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { + "node_modules/has-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dependencies": { - "has-symbols": "^1.0.2" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/hermes-estree": { @@ -8179,19 +8546,15 @@ "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "kind-of": "^6.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, "node_modules/is-arrayish": { @@ -8204,17 +8567,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", @@ -8226,6 +8578,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", @@ -8248,6 +8624,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8264,20 +8651,6 @@ "node": ">=4" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -8327,21 +8700,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8401,20 +8759,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -8437,6 +8781,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -9060,9 +9412,9 @@ "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==" }, "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "17.9.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -9109,9 +9461,9 @@ "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==" }, "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", "dependencies": { "@babel/core": "^7.13.16", "@babel/parser": "^7.13.16", @@ -9126,10 +9478,10 @@ "chalk": "^4.1.2", "flow-parser": "0.*", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", + "micromatch": "^3.1.10", "neo-async": "^2.5.0", "node-dir": "^0.1.17", - "recast": "^0.21.0", + "recast": "^0.20.4", "temp": "^0.8.4", "write-file-atomic": "^2.3.0" }, @@ -9154,6 +9506,37 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jscodeshift/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jscodeshift/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -9185,6 +9568,31 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/jscodeshift/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jscodeshift/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -9193,6 +9601,59 @@ "node": ">=8" } }, + "node_modules/jscodeshift/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jscodeshift/node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -9226,6 +9687,18 @@ "node": ">=6.0.0" } }, + "node_modules/jscodeshift/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -9408,9 +9881,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bin": { "semver": "bin/semver" } @@ -9423,6 +9896,25 @@ "tmpl": "1.0.5" } }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/match-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", @@ -9580,6 +10072,34 @@ "nullthrows": "^1.1.1" } }, + "node_modules/metro-babel-transformer/node_modules/metro-source-map": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.10.tgz", + "integrity": "sha512-NAGv14701p/YaFZ76KzyPkacBw/QlEJF1f8elfs23N1tC33YyKLDKvPAzFJiYqjdcFvuuuDCA8JCXd2TgLxNPw==", + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.73.10", + "nullthrows": "^1.1.1", + "ob1": "0.73.10", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/metro-babel-transformer/node_modules/ob1": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.10.tgz", + "integrity": "sha512-aO6EYC+QRRCkZxVJhCWhLKgVjhNuD6Gu1riGjxrIm89CqLsmKgxzYDDEsktmKsoDeRdWGQM5EdMzXDl5xcVfsw==" + }, + "node_modules/metro-babel-transformer/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/metro-cache": { "version": "0.73.10", "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.10.tgz", @@ -9621,6 +10141,15 @@ "metro-runtime": "0.73.10" } }, + "node_modules/metro-config/node_modules/metro-runtime": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.10.tgz", + "integrity": "sha512-EpVKm4eN0Fgx2PEWpJ5NiMArV8zVoOin866jIIvzFLpmkZz1UEqgjf2JAfUJnjgv3fjSV3JqeGG2vZCaGQBTow==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, "node_modules/metro-core": { "version": "0.73.10", "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.10.tgz", @@ -9669,9 +10198,9 @@ } }, "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==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dependencies": { "@types/yargs-parser": "*" } @@ -9943,68 +10472,31 @@ } }, "node_modules/metro-react-native-babel-transformer": { - "version": "0.73.10", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.10.tgz", - "integrity": "sha512-4G/upwqKdmKEjmsNa92/NEgsOxUWOygBVs+FXWfXWKgybrmcjh3NoqdRYrROo9ZRA/sB9Y/ZXKVkWOGKHtGzgg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.9.tgz", + "integrity": "sha512-DSdrEHuQ22ixY7DyipyKkIcqhOJrt5s6h6X7BYJCP9AMUfXOwLe2biY3BcgJz5GOXv8/Akry4vTCvQscVS1otQ==", "dependencies": { "@babel/core": "^7.20.0", "babel-preset-fbjs": "^3.4.0", "hermes-parser": "0.8.0", - "metro-babel-transformer": "0.73.10", - "metro-react-native-babel-preset": "0.73.10", - "metro-source-map": "0.73.10", + "metro-babel-transformer": "0.73.9", + "metro-react-native-babel-preset": "0.73.9", + "metro-source-map": "0.73.9", "nullthrows": "^1.1.1" }, "peerDependencies": { "@babel/core": "*" } }, - "node_modules/metro-react-native-babel-transformer/node_modules/metro-react-native-babel-preset": { - "version": "0.73.10", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.10.tgz", - "integrity": "sha512-1/dnH4EHwFb2RKEKx34vVDpUS3urt2WEeR8FYim+ogqALg4sTpG7yeQPxWpbgKATezt4rNfqAANpIyH19MS4BQ==", + "node_modules/metro-react-native-babel-transformer/node_modules/metro-babel-transformer": { + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.9.tgz", + "integrity": "sha512-DlYwg9wwYIZTHtic7dyD4BP0SDftoltZ3clma76nHu43blMWsCnrImHeHsAVne3XsQ+RJaSRxhN5nkG2VyVHwA==", "dependencies": { "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.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.0.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.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.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-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" + "hermes-parser": "0.8.0", + "metro-source-map": "0.73.9", + "nullthrows": "^1.1.1" } }, "node_modules/metro-resolver": { @@ -10016,29 +10508,48 @@ } }, "node_modules/metro-runtime": { - "version": "0.73.10", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.10.tgz", - "integrity": "sha512-EpVKm4eN0Fgx2PEWpJ5NiMArV8zVoOin866jIIvzFLpmkZz1UEqgjf2JAfUJnjgv3fjSV3JqeGG2vZCaGQBTow==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.9.tgz", + "integrity": "sha512-d5Hs83FpKB9r8q8Vb95+fa6ESpwysmPr4lL1I2rM2qXAFiO7OAPT9Bc23WmXgidkBtD0uUFdB2lG+H1ATz8rZg==", "dependencies": { "@babel/runtime": "^7.0.0", "react-refresh": "^0.4.0" } }, "node_modules/metro-source-map": { - "version": "0.73.10", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.10.tgz", - "integrity": "sha512-NAGv14701p/YaFZ76KzyPkacBw/QlEJF1f8elfs23N1tC33YyKLDKvPAzFJiYqjdcFvuuuDCA8JCXd2TgLxNPw==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.9.tgz", + "integrity": "sha512-l4VZKzdqafipriETYR6lsrwtavCF1+CMhCOY9XbyWeTrpGSNgJQgdeJpttzEZTHQQTLR0csQo0nD1ef3zEP6IQ==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.73.10", + "metro-symbolicate": "0.73.9", "nullthrows": "^1.1.1", - "ob1": "0.73.10", + "ob1": "0.73.9", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, + "node_modules/metro-source-map/node_modules/metro-symbolicate": { + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.9.tgz", + "integrity": "sha512-4TUOwxRHHqbEHxRqRJ3wZY5TA8xq7AHMtXrXcjegMH9FscgYztsrIG9aNBUBS+VLB6g1qc6BYbfIgoAnLjCDyw==", + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.73.9", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=8.3" + } + }, "node_modules/metro-source-map/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -10066,6 +10577,26 @@ "node": ">=8.3" } }, + "node_modules/metro-symbolicate/node_modules/metro-source-map": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.10.tgz", + "integrity": "sha512-NAGv14701p/YaFZ76KzyPkacBw/QlEJF1f8elfs23N1tC33YyKLDKvPAzFJiYqjdcFvuuuDCA8JCXd2TgLxNPw==", + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.73.10", + "nullthrows": "^1.1.1", + "ob1": "0.73.10", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/metro-symbolicate/node_modules/ob1": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.10.tgz", + "integrity": "sha512-aO6EYC+QRRCkZxVJhCWhLKgVjhNuD6Gu1riGjxrIm89CqLsmKgxzYDDEsktmKsoDeRdWGQM5EdMzXDl5xcVfsw==" + }, "node_modules/metro-symbolicate/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -10106,6 +10637,34 @@ "nullthrows": "^1.1.1" } }, + "node_modules/metro-transform-worker/node_modules/metro-source-map": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.10.tgz", + "integrity": "sha512-NAGv14701p/YaFZ76KzyPkacBw/QlEJF1f8elfs23N1tC33YyKLDKvPAzFJiYqjdcFvuuuDCA8JCXd2TgLxNPw==", + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.73.10", + "nullthrows": "^1.1.1", + "ob1": "0.73.10", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/metro-transform-worker/node_modules/ob1": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.10.tgz", + "integrity": "sha512-aO6EYC+QRRCkZxVJhCWhLKgVjhNuD6Gu1riGjxrIm89CqLsmKgxzYDDEsktmKsoDeRdWGQM5EdMzXDl5xcVfsw==" + }, + "node_modules/metro-transform-worker/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/metro/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -10233,11 +10792,40 @@ "@babel/core": "*" } }, + "node_modules/metro/node_modules/metro-runtime": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.10.tgz", + "integrity": "sha512-EpVKm4eN0Fgx2PEWpJ5NiMArV8zVoOin866jIIvzFLpmkZz1UEqgjf2JAfUJnjgv3fjSV3JqeGG2vZCaGQBTow==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "node_modules/metro/node_modules/metro-source-map": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.10.tgz", + "integrity": "sha512-NAGv14701p/YaFZ76KzyPkacBw/QlEJF1f8elfs23N1tC33YyKLDKvPAzFJiYqjdcFvuuuDCA8JCXd2TgLxNPw==", + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.73.10", + "nullthrows": "^1.1.1", + "ob1": "0.73.10", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, "node_modules/metro/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/node_modules/ob1": { + "version": "0.73.10", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.10.tgz", + "integrity": "sha512-aO6EYC+QRRCkZxVJhCWhLKgVjhNuD6Gu1riGjxrIm89CqLsmKgxzYDDEsktmKsoDeRdWGQM5EdMzXDl5xcVfsw==" + }, "node_modules/metro/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -10483,6 +11071,18 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -10494,14 +11094,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, "node_modules/moti": { "version": "0.25.3", "resolved": "https://registry.npmjs.org/moti/-/moti-0.25.3.tgz", @@ -10595,6 +11187,27 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -10750,9 +11363,9 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "node_modules/ob1": { - "version": "0.73.10", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.10.tgz", - "integrity": "sha512-aO6EYC+QRRCkZxVJhCWhLKgVjhNuD6Gu1riGjxrIm89CqLsmKgxzYDDEsktmKsoDeRdWGQM5EdMzXDl5xcVfsw==" + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.9.tgz", + "integrity": "sha512-kHOzCOFXmAM26fy7V/YuXNKne2TyRiXbFAvPBIbuedJCZZWQZHLdPzMeXJI4Egt6IcfDttRzN3jQ90wOwq1iNw==" }, "node_modules/object-assign": { "version": "4.1.1", @@ -10762,6 +11375,84 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -10770,44 +11461,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "isobject": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, "node_modules/oblivious-set": { @@ -10999,6 +11672,14 @@ "node": ">= 0.8" } }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/password-prompt": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", @@ -11239,6 +11920,14 @@ "tslib": "^2.1.0" } }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -11530,20 +12219,19 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-native": { - "version": "0.71.14", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.71.14.tgz", - "integrity": "sha512-7uhzas8aKpU2EARhlONt7yiclh+7PXEOJk469ewpQyId8Owq5WNtZvQm/z3k4mHUriMeQ37vgSGkOInSKcCazw==", + "version": "0.71.8", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.71.8.tgz", + "integrity": "sha512-ftMAuhpgTkbHU9brrqsEyxcNrpYvXKeATY+if22Nfhhg1zW+6wn95w9otwTnA3xHkljPCbng8mUhmmERjGEl7g==", "dependencies": { "@jest/create-cache-key-function": "^29.2.1", - "@react-native-community/cli": "10.2.4", + "@react-native-community/cli": "10.2.2", "@react-native-community/cli-platform-android": "10.2.0", - "@react-native-community/cli-platform-ios": "10.2.4", + "@react-native-community/cli-platform-ios": "10.2.1", "@react-native/assets": "1.0.0", "@react-native/normalize-color": "2.1.0", "@react-native/polyfills": "2.0.0", "abort-controller": "^3.0.0", "anser": "^1.4.9", - "ansi-regex": "^5.0.0", "base64-js": "^1.1.2", "deprecated-react-native-prop-types": "^3.0.1", "event-target-shim": "^5.0.1", @@ -11551,16 +12239,16 @@ "jest-environment-node": "^29.2.1", "jsc-android": "^250231.0.0", "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.73.10", - "metro-runtime": "0.73.10", - "metro-source-map": "0.73.10", + "metro-react-native-babel-transformer": "0.73.9", + "metro-runtime": "0.73.9", + "metro-source-map": "0.73.9", "mkdirp": "^0.5.1", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.3.0", "react-devtools-core": "^4.26.1", - "react-native-codegen": "^0.71.6", - "react-native-gradle-plugin": "^0.71.19", + "react-native-codegen": "^0.71.5", + "react-native-gradle-plugin": "^0.71.18", "react-refresh": "^0.4.0", "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", @@ -11598,13 +12286,13 @@ } }, "node_modules/react-native-codegen": { - "version": "0.71.6", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.71.6.tgz", - "integrity": "sha512-e5pR4VldIhEaFctfSAEgxbng0uG4gjBQxAHes3EKLdosH/Av90pQfSe9IDVdFIngvNPzt8Y14pNjrtqov/yNIg==", + "version": "0.71.5", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.71.5.tgz", + "integrity": "sha512-rfsuc0zkuUuMjFnrT55I1mDZ+pBRp2zAiRwxck3m6qeGJBGK5OV5JH66eDQ4aa+3m0of316CqrJDRzVlYufzIg==", "dependencies": { "@babel/parser": "^7.14.0", "flow-parser": "^0.185.0", - "jscodeshift": "^0.14.0", + "jscodeshift": "^0.13.1", "nullthrows": "^1.1.1" } }, @@ -11737,15 +12425,6 @@ "react-native": "*" } }, - "node_modules/react-native-toast-notifications": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/react-native-toast-notifications/-/react-native-toast-notifications-3.3.1.tgz", - "integrity": "sha512-yc1Q2nOdIYvAf0GAIlmg8q42hiwpEHnLxkxJ6P+tN6jpcKZ1qzMXlgnmNdyF9cm9VOyHQexEP8952IKNAv1Olw==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, "node_modules/react-native/node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -11870,11 +12549,11 @@ "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" }, "node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", "dependencies": { - "ast-types": "0.15.2", + "ast-types": "0.14.2", "esprima": "~4.0.0", "source-map": "~0.6.1", "tslib": "^2.0.1" @@ -11936,6 +12615,18 @@ "@babel/runtime": "^7.8.4" } }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -11981,6 +12672,22 @@ "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==" }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -12057,6 +12764,12 @@ "node": ">=8" } }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, "node_modules/restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -12069,6 +12782,14 @@ "node": ">=4" } }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -12122,6 +12843,14 @@ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", "optional": true }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dependencies": { + "ret": "~0.1.10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -12241,6 +12970,39 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -12375,6 +13137,186 @@ "node": ">=8.0.0" } }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/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/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -12383,6 +13325,19 @@ "node": ">= 8" } }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -12400,6 +13355,12 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -12419,6 +13380,17 @@ "node": ">=6" } }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -12478,6 +13450,94 @@ "node": ">=8" } }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -12837,9 +13897,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.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -12925,6 +13985,42 @@ "node": ">=4" } }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13094,10 +14190,27 @@ "node": ">=4" } }, - "node_modules/unimodules-app-loader": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unimodules-app-loader/-/unimodules-app-loader-4.1.2.tgz", - "integrity": "sha512-DLYUCjNpguFhNpxNsBf47NWZi2OjIfWCVQY4f+r4/bwIqFfR7qQd6lXwCFA8EhHS1ti87CBzjMSbIC5bB0J/0Q==" + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/unique-filename": { "version": "1.1.1", @@ -13151,6 +14264,50 @@ "node": ">= 0.8" } }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -13180,6 +14337,12 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, "node_modules/url-join": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", @@ -13194,6 +14357,14 @@ "requires-port": "^1.0.0" } }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/use-latest-callback": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.6.tgz", @@ -13210,18 +14381,6 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -13326,24 +14485,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wonka": { "version": "4.0.15", "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", diff --git a/package.json b/package.json index 0dd96da..5d4609b 100644 --- a/package.json +++ b/package.json @@ -17,16 +17,13 @@ "@tanstack/react-query": "^4.29.25", "axios": "^1.4.0", "expo": "~48.0.18", - "expo-file-system": "~15.2.2", - "expo-image-picker": "~14.1.1", "expo-intent-launcher": "~10.5.2", "expo-linking": "~4.0.1", "expo-location": "~15.1.1", "expo-status-bar": "~1.4.4", - "moment": "^2.29.4", "moti": "^0.25.3", "react": "18.2.0", - "react-native": "0.71.14", + "react-native": "0.71.8", "react-native-bouncy-checkbox": "^3.0.7", "react-native-dropdown-picker": "^5.4.6", "react-native-gesture-handler": "~2.9.0", @@ -38,18 +35,13 @@ "react-native-screens": "~3.20.0", "react-native-select-dropdown": "^3.3.4", "react-native-svg": "13.4.0", - "react-native-toast-notifications": "^3.3.1", "react-query": "^3.39.3", "react-redux": "^8.1.1", - "redux": "^4.2.1", - "expo-task-manager": "~11.1.1", - "expo-background-fetch": "~11.1.1", - "expo-notifications": "~0.18.1" + "redux": "^4.2.1" }, "devDependencies": { "@babel/core": "^7.20.0", "@types/react": "~18.0.14", - "@types/react-native-fetch-blob": "^0.10.7", "typescript": "^4.9.4" }, "private": true diff --git a/src/components/Api/Api.tsx b/src/components/Api/Api.tsx index f5dc3d2..20a3151 100644 --- a/src/components/Api/Api.tsx +++ b/src/components/Api/Api.tsx @@ -1,29 +1,21 @@ import axios from "axios"; import AsyncStorage from "@react-native-async-storage/async-storage"; import { - ActivationType, - LocationType, - LoginType, - MessagePostType, - OnboardingType, - PatchUserInfoType, - RegistrationType, - StudentStatusPatchType, - StudentStatusType, - StudyGroupCreateType, - StudyGroupType, + ActivationParams, + LoginParams, + OnboardingParams, + PatchStudentData, + RegistrationParams, + StudentData, } from "../../interfaces/Interfaces"; -export let backendURL = "https://stude.keannu1.duckdns.org"; -export let backendURLWebsocket = "ws://stude.keannu1.duckdns.org"; -if (__DEV__) { - backendURL = "http://10.0.10.8:8083"; - backendURLWebsocket = "ws://10.0.10.8:8083"; -} - -// Switch this on if you wanna run production URLs while in development +export let backendURL = ""; +export let backendURLWebsocket = ""; let use_production = true; -if (__DEV__ && use_production) { +if (__DEV__ || !use_production) { + backendURL = "http://10.0.10.8:8000"; + backendURLWebsocket = "ws://10.0.10.8:8000"; +} else { backendURL = "https://stude.keannu1.duckdns.org"; backendURLWebsocket = "ws://stude.keannu1.duckdns.org"; } @@ -33,29 +25,8 @@ const instance = axios.create({ timeout: 1000, }); -console.log("Using backend API:", backendURL); - -// 3rd Party APIs -export const urlProvider = - "https://openstreetmap.keannu1.duckdns.org/tile/{z}/{x}/{y}.png?"; // App APIs -// Error Handling -export function ParseError(error: any) { - if (error.response && error.response.data) { - return JSON.stringify(error.response.data) - .replaceAll(/[{}()"]/g, " ") - .replaceAll(/,/g, "\n") - .replaceAll("[", "") - .replaceAll("]", "") - .replaceAll(".", "") - .replaceAll(/"/g, "") - .replaceAll("non_field_errors", "") - .trim(); - } - return "Unable to reach server"; -} - // Token Handling export async function getAccessToken() { const accessToken = await AsyncStorage.getItem("access_token"); @@ -88,28 +59,40 @@ export async function GetConfig() { } // User APIs -export function UserRegister(register: RegistrationType) { +export function UserRegister(register: RegistrationParams) { + console.log(JSON.stringify(register)); return instance .post("/api/v1/accounts/users/", register) .then(async (response) => { return [true, response.status]; }) .catch((error) => { - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; return [false, error_message]; }); } -export function UserLogin(user: LoginType) { +export function UserLogin(user: LoginParams) { return instance .post("/api/v1/accounts/jwt/create/", user) .then(async (response) => { + /*console.log( + "Access Token:", + response.data.access, + "\nRefresh Token:", + response.data.refresh + );*/ setAccessToken(response.data.access); setRefreshToken(response.data.refresh); return [true]; }) .catch((error) => { - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; + // console.log(error_message); return [false, error_message]; }); } @@ -123,14 +106,21 @@ export async function TokenRefresh() { }) .then(async (response) => { setAccessToken(response.data.access); + /*console.log( + "Token refresh success! New Access Token", + response.data.access + );*/ return true; }) .catch((error) => { - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; + console.log("Token Refresh error:", error_message); return false; }); } -export async function GetUserInfo() { +export async function UserInfo() { const config = await GetConfig(); return instance .get("/api/v1/accounts/users/me/", config) @@ -139,31 +129,37 @@ export async function GetUserInfo() { return [true, response.data]; }) .catch((error) => { - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; return [false, error_message]; }); } -export async function PatchUserInfo(info: PatchUserInfoType) { +export async function PatchUserInfo(info: PatchStudentData) { const config = await GetConfig(); return instance .patch("/api/v1/accounts/users/me/", info, config) .then((response) => { + console.log(JSON.stringify(response.data)); return [true, response.data]; }) .catch((error) => { - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; + // console.log(error_message); return [false, error_message]; }); } -export function UserActivate(activation: ActivationType) { +export function UserActivate(activation: ActivationParams) { return instance .post("/api/v1/accounts/users/activation/", activation) - .then(() => { + .then(async (response) => { return true; }) - .catch(() => { + .catch((error) => { return false; }); } @@ -183,7 +179,9 @@ export async function GetCourses() { return [true, response.data]; }) .catch((error) => { - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; return [false, error_message]; }); } @@ -201,7 +199,9 @@ export async function GetSemesters() { return [true, response.data]; }) .catch((error) => { - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; return [false, error_message]; }); } @@ -215,187 +215,69 @@ export async function GetYearLevels() { return [true, response.data]; }) .catch((error) => { - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; return [false, error_message]; }); } -export async function GetSubjects() { - const config = await GetConfig(); - return instance - .get("/api/v1/subjects/", config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function GetStudentStatus() { - const config = await GetConfig(); - return instance - .get("/api/v1/student_status/self/", config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function PatchStudentStatus(info: StudentStatusPatchType) { - const config = await GetConfig(); - return instance - .patch("/api/v1/student_status/self/", info, config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function GetStudentStatusList() { - const config = await GetConfig(); - return instance - .get("/api/v1/student_status/list/", config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function GetStudentStatusListNear() { - const config = await GetConfig(); - return instance - .get("/api/v1/student_status/near/", config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -// To-do -export async function GetStudentStatusListFilteredCurrentLocation( - location: LocationType +export async function GetSubjects( + byCourseOnly: boolean, + course: string, + year_level?: string, + semester?: string ) { const config = await GetConfig(); - return instance - .post( - "/api/v1/student_status/near_current_location/", - { - location: location, - }, - config - ) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); + console.log("by course only?", byCourseOnly); + // If year level and semester specified, + if (!byCourseOnly && year_level && semester) { + return instance + .get( + "/api/v1/subjects/" + course + "/" + year_level + "/" + semester, + config + ) + .then((response) => { + // console.log(JSON.stringify(response.data)); + return [true, response.data]; + }) + .catch((error) => { + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; + return [false, error_message]; + }); + } + // If only course is specified + else { + return instance + .get("/api/v1/subjects/" + course, config) + .then((response) => { + // console.log(JSON.stringify(response.data)); + return [true, response.data]; + }) + .catch((error) => { + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; + return [false, error_message]; + }); + } } -export async function GetStudyGroupListFiltered() { +export async function OnboardingUpdateStudentInfo(info: OnboardingParams) { const config = await GetConfig(); return instance - .get("/api/v1/study_groups/near/", config) + .patch("/api/v1/accounts/users/me/", info, config) .then((response) => { + console.log(JSON.stringify(response.data)); return [true, response.data]; }) .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function GetStudyGroupList() { - const config = await GetConfig(); - return instance - .get("/api/v1/study_groups/", config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function CreateStudyGroup(info: StudyGroupCreateType) { - const config = await GetConfig(); - // console.log("Creating study group:", info); - return instance - .post("/api/v1/study_groups/create/", info, config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function GetStudyGroup(name: string) { - const config = await GetConfig(); - return instance - .get(`/api/v1/study_groups/${name}`, config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function GetStudyGroupMessages() { - const config = await GetConfig(); - return instance - .get(`/api/v1/messages/`, config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function GetStudyGroupMemberAvatars() { - const config = await GetConfig(); - return instance - .get(`/api/v1/study_groups/member_avatars`, config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - let error_message = ParseError(error); - return [false, error_message]; - }); -} - -export async function PostMessage(info: MessagePostType) { - const config = await GetConfig(); - return instance - .post(`/api/v1/messages/`, info, config) - .then((response) => { - return [true, response.data]; - }) - .catch((error) => { - console.log("Error:", error.response.data); - let error_message = ParseError(error); + let error_message = ""; + if (error.response) error_message = error.response.data; + else error_message = "Unable to reach servers"; + console.log("Error updating onboarding info", error_message); return [false, error_message]; }); } diff --git a/src/components/BackgroundTask/BackgroundTask.tsx b/src/components/BackgroundTask/BackgroundTask.tsx deleted file mode 100644 index b1b366c..0000000 --- a/src/components/BackgroundTask/BackgroundTask.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import React, { useEffect } from "react"; -import { View } from "react-native"; -import * as BackgroundFetch from "expo-background-fetch"; -import * as TaskManager from "expo-task-manager"; -import * as Notifications from "expo-notifications"; -import { - GetStudentStatus, - GetStudyGroupListFiltered, - GetStudyGroupMessages, -} from "../Api/Api"; -import { StudyGroupType } from "../../interfaces/Interfaces"; -import AsyncStorage from "@react-native-async-storage/async-storage"; - -const FETCH_STUDENT_STATUS = "STUDENT_STATUS_TASK"; -const FETCH_GROUP_MESSAGES = "GROUP_MESSAGES_TASK"; - -TaskManager.defineTask(FETCH_GROUP_MESSAGES, async () => { - const data = await GetStudyGroupMessages(); - if (data[0] && data[1]) { - let messages_prev = await JSON.parse( - (await AsyncStorage.getItem("messages")) || "[]" - ); - await AsyncStorage.setItem("messages", JSON.stringify(data[1])); - let message_curr = data[1]; - let difference: Array = messages_prev - .filter( - (x: any) => - !message_curr.some( - (y: any) => JSON.stringify(y) === JSON.stringify(x) - ) - ) - .concat( - message_curr.filter( - (x: any) => - !messages_prev.some( - (y: any) => JSON.stringify(y) === JSON.stringify(x) - ) - ) - ); - - if (difference.length > 0) { - console.log(`${difference.length} unread messages`); - Notifications.scheduleNotificationAsync({ - content: { - title: `${difference.length} unread messages`, - body: `${difference[0].user}: ${difference[0].message_content}`, - }, - trigger: { - seconds: 1, - }, - }); - } - } else { - console.log(data[1].response.data); - } - - return BackgroundFetch.BackgroundFetchResult.NewData; -}); - -TaskManager.defineTask(FETCH_STUDENT_STATUS, async () => { - const data = await GetStudyGroupListFiltered(); - const student_status_data = await GetStudentStatus(); - if (data[0] && data[1]) { - console.log("Fetching nearby study groups..."); - const entryWithLeastDistance = data[1].reduce( - (prev: StudyGroupType, curr: StudyGroupType) => { - return prev.distance < curr.distance ? prev : curr; - } - ); - // Only display a notification if a student isn't in a study group yet - if ( - student_status_data[1].study_group == null || - student_status_data[1].study_group == "" - ) { - console.log( - "User has no study group yet. Found nearby groups, pushing notification" - ); - Notifications.scheduleNotificationAsync({ - content: { - title: "Students are studying nearby", - body: `Nearest study group is ${Math.round( - entryWithLeastDistance.distance * 1000 - )}m away`, - }, - trigger: { - seconds: 1, - }, - }); - } - } else { - console.log(data[1].response.data); - } - - return BackgroundFetch.BackgroundFetchResult.NewData; -}); - -const BackgroundComponent = () => { - const notification_debug = false; - const [Task1_isRegistered, Task1_setIsRegistered] = React.useState(false); - const [Task2_isRegistered, Task2_setIsRegistered] = React.useState(false); - const [status, setStatus] = React.useState(); - const checkStatusAsync = async () => { - let status = await BackgroundFetch.getStatusAsync(); - setStatus(status); - let Task1_isRegistered = await TaskManager.isTaskRegisteredAsync( - FETCH_STUDENT_STATUS - ); - let Task2_isRegistered = await TaskManager.isTaskRegisteredAsync( - FETCH_GROUP_MESSAGES - ); - Task1_setIsRegistered(Task1_isRegistered); - Task2_setIsRegistered(Task2_isRegistered); - }; - - useEffect(() => { - const registerTasks = async () => { - try { - await checkStatusAsync(); - // Nearby students task - if (!Task1_isRegistered) { - await BackgroundFetch.registerTaskAsync(FETCH_STUDENT_STATUS, { - minimumInterval: notification_debug ? 5 : 60 * 3, // Check every 5 seconds in dev & every 3 minutes in production builds - }); - console.log("Task for nearby students check registered"); - } else { - console.log("Task for nearby students check already registered"); - } - // Message Checking Task - if (!Task2_isRegistered) { - await BackgroundFetch.registerTaskAsync(FETCH_GROUP_MESSAGES, { - minimumInterval: notification_debug ? 5 : 30, // Check every 5 seconds in dev & every 30 seconds in production builds - }); - console.log("Task for group messages check registered"); - } else { - console.log("Task for group messages check already registered"); - } - } catch (err) { - console.log("Task Register failed:", err); - } - }; - - registerTasks(); - }, []); - - return ; -}; - -export default BackgroundComponent; diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx index dce7823..ee36630 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -17,10 +17,7 @@ export default function Button({ disabled = false, ...props }: props) { [ - styles.button_template, - { backgroundColor: pressed ? colors.primary_2 : props.color }, - ]} + style={{ ...styles.button_template, ...{ backgroundColor: props.color } }} > {props.children} diff --git a/src/components/DrawerSettings/CustomDrawerContent.tsx b/src/components/DrawerSettings/CustomDrawerContent.tsx index 578d429..738e656 100644 --- a/src/components/DrawerSettings/CustomDrawerContent.tsx +++ b/src/components/DrawerSettings/CustomDrawerContent.tsx @@ -5,10 +5,7 @@ import { Text, View } from "react-native"; import { colors } from "../../styles"; import styles from "../../styles"; -import { - RootDrawerParamList, - StudentStatusPatchType, -} from "../../interfaces/Interfaces"; +import { RootDrawerParamList } from "../../interfaces/Interfaces"; import AppIcon from "../../icons/AppIcon/AppIcon"; import HomeIcon from "../../icons/HomeIcon/HomeIcon"; import LoginIcon from "../../icons/LoginIcon/LoginIcon"; @@ -21,48 +18,11 @@ import { logout } from "../../features/redux/slices/StatusSlice/StatusSlice"; import AsyncStorage from "@react-native-async-storage/async-storage"; import UserIcon from "../../icons/UserIcon/UserIcon"; import SubjectIcon from "../../icons/SubjectIcon/SubjectIcon"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { PatchStudentStatus } from "../Api/Api"; -import { useToast } from "react-native-toast-notifications"; -import MessageIcon from "../../icons/MessageIcon/MessageIcon"; export default function CustomDrawerContent(props: {}) { - const debug = false; const navigation = useNavigation(); const status = useSelector((state: RootState) => state.status); const dispatch = useDispatch(); - const queryClient = useQueryClient(); - const toast = useToast(); - const stop_studying_logout = useMutation({ - mutationFn: async (info: StudentStatusPatchType) => { - const data = await PatchStudentStatus(info); - if (data[0] != true) { - return Promise.reject(new Error()); - } - console.log("DEBUG", data); - return data; - }, - onSuccess: async () => { - toast.show("Logged out. Stopped studying", { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - queryClient.clear(); - dispatch(logout()); - await AsyncStorage.clear(); - navigation.navigate("Login"); - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); if (status.logged_in && status.onboarding) { return ( @@ -78,17 +38,9 @@ export default function CustomDrawerContent(props: {}) { { - // We don't clear student statuses when logging out on debug - if (!debug) { - queryClient.clear(); - dispatch(logout()); - await AsyncStorage.clear(); - navigation.navigate("Login"); - } else { - stop_studying_logout.mutate({ - active: false, - }); - } + dispatch(logout()); + await AsyncStorage.clear(); + navigation.navigate("Login"); }} > @@ -132,27 +84,11 @@ export default function CustomDrawerContent(props: {}) { Subjects - { - navigation.navigate("Conversation"); - }} - > - - Conversation - { - // We don't clear student statuses when logging out on debug - if (debug) { - queryClient.clear(); - dispatch(logout()); - await AsyncStorage.clear(); - navigation.navigate("Login"); - } else { - stop_studying_logout.mutate({ - active: false, - }); - } + dispatch(logout()); + await AsyncStorage.clear(); + navigation.navigate("Login"); }} > @@ -188,6 +124,7 @@ export default function CustomDrawerContent(props: {}) { Register + {/* Debug buttons for accessing revalidation and activation page - - - - Loading... - - - ); -} diff --git a/src/components/MapRenderer/MapRendererFar.tsx b/src/components/MapRenderer/MapRendererFar.tsx deleted file mode 100644 index e65a145..0000000 --- a/src/components/MapRenderer/MapRendererFar.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import * as React from "react"; -import { View, Text } from "react-native"; -import MapView, { UrlTile, Callout, Marker } from "react-native-maps"; -import styles, { Viewport, colors } from "../../styles"; -import { urlProvider } from "../Api/Api"; -import { LocationType, RawLocationType } from "../../interfaces/Interfaces"; -import GetDistance from "../../components/GetDistance/GetDistance"; - -type props = { - location: LocationType; - dist: any; -}; - -export default function MapRendererFar(props: props) { - return ( - <> - - You are too far from USTP {"\n"} - Get closer to use Stud-E - - - - - - - You are here {"\n"} - X: {Math.round(props.location.longitude) + "\n"} - Z: {Math.round(props.location.latitude)} - - - - - - {props.dist}km away from USTP {"\n"} - - - ); -} diff --git a/src/components/ParseError/ParseError.tsx b/src/components/ParseError/ParseError.tsx new file mode 100644 index 0000000..ab55ea6 --- /dev/null +++ b/src/components/ParseError/ParseError.tsx @@ -0,0 +1,24 @@ +export default function ParseError(text: string) { + if (text) { + return text + .replaceAll(/[{}()"]/g, " ") + .replaceAll(/,/g, "\n") + .replaceAll("[", "") + .replaceAll("]", "") + .replaceAll(".", ""); + } + return ""; +} + +export function ParseLoginError(text: string) { + if (text) { + return text + .replaceAll(/[{}()"]/g, " ") + .replaceAll(/,/g, "\n") + .replaceAll("[", "") + .replaceAll("]", "") + .replaceAll(".", "") + .replaceAll("non_field_errors", ""); + } + return ""; +} diff --git a/src/icons/CaretLeftIcon/CaretLeftIcon.tsx b/src/icons/CaretLeftIcon/CaretLeftIcon.tsx deleted file mode 100644 index eb5655e..0000000 --- a/src/icons/CaretLeftIcon/CaretLeftIcon.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from "react"; -import { IconProps } from "../../interfaces/Interfaces"; -import { Svg, Path } from "react-native-svg"; -import { colors } from "../../styles"; - -export default function CaretRightIcon(props: IconProps) { - return ( - <> - - - - - - ); -} diff --git a/src/icons/CaretRightIcon/CaretRightIcon.tsx b/src/icons/CaretRightIcon/CaretRightIcon.tsx deleted file mode 100644 index eb5655e..0000000 --- a/src/icons/CaretRightIcon/CaretRightIcon.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from "react"; -import { IconProps } from "../../interfaces/Interfaces"; -import { Svg, Path } from "react-native-svg"; -import { colors } from "../../styles"; - -export default function CaretRightIcon(props: IconProps) { - return ( - <> - - - - - - ); -} diff --git a/src/icons/CaretUpIcon/CaretUpIcon.tsx b/src/icons/CaretUpIcon/CaretUpIcon.tsx deleted file mode 100644 index 0f5c720..0000000 --- a/src/icons/CaretUpIcon/CaretUpIcon.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import * as React from "react"; -import { IconProps } from "../../interfaces/Interfaces"; -import { Svg, Path } from "react-native-svg"; -import { colors } from "../../styles"; - -export default function CaretUpIcon(props: IconProps) { - return ( - <> - - - - - - ); -} diff --git a/src/icons/CaretDownIcon/CaretDownIcon.tsx b/src/icons/DropdownIcon/DropdownIcon.tsx similarity index 91% rename from src/icons/CaretDownIcon/CaretDownIcon.tsx rename to src/icons/DropdownIcon/DropdownIcon.tsx index 6a34501..27851ab 100644 --- a/src/icons/CaretDownIcon/CaretDownIcon.tsx +++ b/src/icons/DropdownIcon/DropdownIcon.tsx @@ -3,7 +3,7 @@ import { IconProps } from "../../interfaces/Interfaces"; import { Svg, Path } from "react-native-svg"; import { colors } from "../../styles"; -export default function CaretDownIcon(props: IconProps) { +export default function DropdownIcon(props: IconProps) { return ( <> - - - - - - - - ); -} diff --git a/src/icons/MessageIcon/MessageIcon.tsx b/src/icons/MessageIcon/MessageIcon.tsx deleted file mode 100644 index dd88ccb..0000000 --- a/src/icons/MessageIcon/MessageIcon.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import * as React from "react"; -import { IconProps } from "../../interfaces/Interfaces"; - -import { Svg, Path } from "react-native-svg"; -import { colors } from "../../styles"; - -export default function MessageIcon(props: IconProps) { - return ( - <> - - - - - - - - - - ); -} diff --git a/src/icons/RefreshIcon/RefreshIcon.tsx b/src/icons/RefreshIcon/RefreshIcon.tsx deleted file mode 100644 index 0a77560..0000000 --- a/src/icons/RefreshIcon/RefreshIcon.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import * as React from "react"; -import { IconProps } from "../../interfaces/Interfaces"; - -import { Svg, Path } from "react-native-svg"; -import { colors } from "../../styles"; - -export default function RefreshIcon(props: IconProps) { - return ( - <> - - - - - - - ); -} diff --git a/src/interfaces/Interfaces.tsx b/src/interfaces/Interfaces.tsx index 717dc4d..2b6e526 100644 --- a/src/interfaces/Interfaces.tsx +++ b/src/interfaces/Interfaces.tsx @@ -1,7 +1,3 @@ -import * as Location from "expo-location"; -import { GetStudentStatus } from "../components/Api/Api"; -import { Float } from "react-native/Libraries/Types/CodegenTypes"; - export interface IconProps { size: number; } @@ -13,7 +9,6 @@ export interface ResponsiveIconProps { export interface RootDrawerParamList { navigate: any; - replace: any; } // Redux Interfaces @@ -33,7 +28,7 @@ export interface LoggedInUserState { // API Interfaces -export interface RegistrationType { +export interface RegistrationParams { email: string; username: string; password: string; @@ -42,12 +37,12 @@ export interface RegistrationType { student_id_number: string; } -export interface LoginType { +export interface LoginParams { username: string; password: string; } -export interface ActivationType { +export interface ActivationParams { uid: string; token: string; } @@ -58,183 +53,80 @@ export interface OptionType { } // Semester -export interface SemesterType { +export interface Semester { id: string; name: string; shortname: string; } -export type SemestersType = Array; +export type Semesters = Array; -export type SemesterReturnType = [boolean, SemestersType]; +export type SemesterParams = [boolean, Semesters]; // Year Level -export interface YearLevelType { +export interface YearLevel { id: string; name: string; shortname: string; } -export type YearLevelsType = Array; +export type YearLevels = Array; -export type YearLevelReturnType = [boolean, YearLevelsType]; +export type YearLevelParams = [boolean, YearLevels]; // Course -export interface CourseType { +export interface Course { id: string; name: string; shortname: string; } -export type CoursesType = Array; -export type CourseReturnType = [boolean, CoursesType]; +export type Courses = Array; +export type CourseParams = [boolean, Courses]; // Subject -export interface SubjectType { - id: number; +export interface Subject { name: string; code: string; - course: string; - year_level: string; - semester: string; + // courses: any[]; // To-do + // year_levels: any[]; // To-do + // semesters: any[]; // To-do } -export type SubjectsType = Array; -export type SubjectsReturnType = [boolean, SubjectsType]; +export type Subjects = Array; +export type SubjectParams = [boolean, Subjects]; -export type AvatarType = { - uri: string; - type: string; - name: string; -}; // For dropdown menu -export interface OnboardingType { +export interface OnboardingParams { year_level: string; course: string; semester: string; } -export interface PatchUserInfoType { - course?: string; - first_name?: string; - last_name?: string; - semester?: string; - subjects?: string[]; - year_level?: string; - irregular?: boolean; - avatar?: string; +export interface PatchStudentData { + course?: string | null; + first_name?: string | null; + last_name?: string | null; + semester?: string | null; + subjects?: any[] | null; // To-do, replace 'any' with your actual type + year_level?: string | null; } -export interface LocationType { - latitude: Float; - longitude: Float; -} - -export interface StudentStatusType { - subject: string; - location: LocationType; - landmark: string | null; - active: boolean; - study_group: string; -} - -export interface StudentStatusPatchType { - subject?: string; - location?: LocationType; - landmark?: string | null; - active?: boolean; - study_group?: string; -} - -export interface StudentStatusFilterType { - active: boolean; - distance: number; - landmark: string | null; - location: LocationType; - study_group?: string; - subject: string; - user: string; - weight?: number; -} - -export interface StudentStatusFilterTypeFlattened { - active: boolean; - distance: number; - landmark: string | null; - latitude: Float; - longitude: Float; - study_group?: string; - subject: string; - user: string; - weight?: number; -} - -export interface StudyGroupType { - name: string; - students: string[]; - distance: number; - landmark: string | null; - location: LocationType; - subject: string; - radius: number; -} - -export interface StudyGroupCreateType { - name: string; - location: LocationType; - subject: string; -} - -export interface MessageType { - id: number; - user: string; - study_group: string; - message_content: string; - timestamp: string; -} - -export interface MessagePostType { - message_content: string; -} - -export interface GroupMessageAvatarType { - username: string; - avatar: string; -} - -export type GroupMessageAvatarListType = GroupMessageAvatarType[]; -export type GroupMessageAvatarReturnType = [boolean, GroupMessageAvatarType[]]; -export type MessageReturnType = [boolean, MessageType[]]; -export type StudyGroupDetailReturnType = [boolean, StudyGroupType]; -export type StudyGroupReturnType = [boolean, StudyGroupType[]]; -export type StudentStatusReturnType = [boolean, StudentStatusType]; -export type StudentStatusListType = Array; -export type StudentStatusListReturnType = [boolean, StudentStatusListType]; -export type RawLocationType = Location.LocationObject; - -export interface UserInfoType { +export interface StudentData { first_name: string; last_name: string; email: string; avatar: string; student_id_number: string; - irregular: boolean; + is_banned: boolean; semester: string; semester_shortname: string; course: string; course_shortname: string; year_level: string; yearlevel_shortname: string; - subjects: string[]; + subjects: any[]; // To-do username: string; } -export type UserInfoReturnType = [boolean, UserInfoType]; - -export type subjectUserMapType = { - subject: string; - users: string[]; - latitude: Float; - longitude: Float; - radius: Float; -}; +export type UserInfoParams = [boolean, StudentData]; diff --git a/src/routes/Activation/Activation.tsx b/src/routes/Activation/Activation.tsx index c2846c2..10aab6a 100644 --- a/src/routes/Activation/Activation.tsx +++ b/src/routes/Activation/Activation.tsx @@ -6,7 +6,6 @@ import { useNavigation, useRoute } from "@react-navigation/native"; import { useEffect, useState } from "react"; import { UserActivate } from "../../components/Api/Api"; import { RootDrawerParamList } from "../../interfaces/Interfaces"; -import { useToast } from "react-native-toast-notifications"; interface ActivationRouteParams { uid?: string; @@ -17,7 +16,9 @@ export default function Activation() { const route = useRoute(); const { uid, token } = (route.params as ActivationRouteParams) || ""; const navigation = useNavigation(); - const toast = useToast(); + const [state, setState] = useState( + "Activating with UID " + uid + " and Token " + token + ); const [loading, setLoading] = useState(true); useEffect(() => { @@ -27,22 +28,16 @@ export default function Activation() { token: String(token), }); if (result) { - toast.show("Activation successful", { - type: "success", - placement: "top", - duration: 4000, - animationType: "slide-in", - }); + setTimeout(() => { + setState("Activation successful!"); + }, 1000); setTimeout(() => { navigation.navigate("Login"); }, 2000); } else { - toast.show("Activation unsuccessful. Please contact support", { - type: "warning", - placement: "top", - duration: 4000, - animationType: "slide-in", - }); + setTimeout(() => { + setState("Activation unsuccessful\nPlease contact support"); + }, 1000); } setLoading(false); } @@ -68,9 +63,8 @@ export default function Activation() { size={96} color={colors.secondary_1} /> - - {"Activating with UID: " + uid + "\nToken: " + token} - + {state} + {uid + "\n" + token} ); diff --git a/src/routes/ConversationPage/ConversationPage.tsx b/src/routes/ConversationPage/ConversationPage.tsx deleted file mode 100644 index 94cae27..0000000 --- a/src/routes/ConversationPage/ConversationPage.tsx +++ /dev/null @@ -1,365 +0,0 @@ -import * as React from "react"; -import { ActivityIndicator, Image, Pressable } from "react-native"; -import styles from "../../styles"; -import { - View, - Text, - TextInput, - ScrollView, - NativeSyntheticEvent, - TextInputChangeEventData, -} from "react-native"; -import { colors } from "../../styles"; -import { useRef, useState } from "react"; -import { useMutation, useQuery } from "@tanstack/react-query"; -import { - GetStudentStatus, - GetStudyGroup, - GetStudyGroupMemberAvatars, - GetStudyGroupMessages, - PostMessage, -} from "../../components/Api/Api"; -import { - StudentStatusType, - StudentStatusReturnType, - StudyGroupType, - StudyGroupDetailReturnType, - MessageType, - MessageReturnType, - MessagePostType, - GroupMessageAvatarType, - GroupMessageAvatarReturnType, -} from "../../interfaces/Interfaces"; -import { useToast } from "react-native-toast-notifications"; -import { useQueryClient } from "@tanstack/react-query"; -import AnimatedContainer from "../../components/AnimatedContainer/AnimatedContainer"; -import AsyncStorage from "@react-native-async-storage/async-storage"; -import { useSelector } from "react-redux"; -import { RootState } from "../../features/redux/Store/Store"; -import CaretRightIcon from "../../icons/CaretLeftIcon/CaretLeftIcon"; - -export default function ConversationPage() { - const toast = useToast(); - const user = useSelector((state: RootState) => state.user); - // Student Status - const [student_status, setStudentStatus] = useState(); - const StudentStatusQuery = useQuery({ - queryKey: ["user_status"], - queryFn: async () => { - const data = await GetStudentStatus(); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: (data: StudentStatusReturnType) => { - setStudentStatus(data[1]); - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - // Study Group Detail - const [studygroup, setStudyGroup] = useState(); - const StudyGroupQuery = useQuery({ - enabled: - student_status?.study_group != "" && student_status?.study_group != null, - queryKey: ["study_group"], - refetchInterval: 10000, - queryFn: async () => { - const data = await GetStudyGroup(student_status?.study_group || ""); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: (data: StudyGroupDetailReturnType) => { - if (data[1]) { - setStudyGroup(data[1]); - } - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - // Study Group Messages - const [messages, setMessages] = useState([]); - const MessageQuery = useQuery({ - refetchInterval: 3000, - enabled: - !StudentStatusQuery.isLoading && - (student_status?.study_group != null || - student_status?.study_group != ""), - queryKey: ["study_group_messages"], - queryFn: async () => { - const data = await GetStudyGroupMessages(); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: async (data: MessageReturnType) => { - if (data[1]) { - await AsyncStorage.setItem("messages", JSON.stringify(data[1])); - setMessages(data[1]); - } - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - // Avatar List - const [users, setUsers] = useState([]); - const AvatarsQuery = useQuery({ - refetchInterval: 10000, - enabled: - student_status?.study_group != null || - (student_status?.study_group != "" && - studygroup != null && - studygroup.students != null), - queryKey: ["study_group_avatars"], - queryFn: async () => { - const data = await GetStudyGroupMemberAvatars(); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: (data: GroupMessageAvatarReturnType) => { - if (data[1]) { - setUsers(data[1]); - } - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - const scrollViewRef = useRef(null); - const queryClient = useQueryClient(); - const [message, setMessage] = useState(""); - const send_message = useMutation({ - mutationFn: async (info: MessagePostType) => { - const data = await PostMessage(info); - if (data[0] != true) { - return Promise.reject(new Error(data[1])); - } - return data; - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["study_group_messages"] }); - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - if ( - !StudyGroupQuery.isLoading && - !AvatarsQuery.isLoading && - !MessageQuery.isLoading && - student_status && - studygroup && - studygroup.students - ) { - return ( - - - - - - {`Group: ${studygroup?.name ? studygroup.name : "Loading..."}`} - - - {studygroup.landmark ? ( - - {studygroup.landmark} - - ) : ( - <> - )} - - - - {!StudyGroupQuery.isFetching - ? studygroup.students.length + " studying" - : "Loading"} - - {users.map((user: GroupMessageAvatarType, index: number) => { - if (index > 6) { - return ; - } - return ( - - {user.avatar != null && user.avatar != "" ? ( - - ) : ( - - )} - - ); - })} - - - scrollViewRef.current?.scrollToEnd()} - ref={scrollViewRef} - > - {messages.length > 0 ? ( - messages.map((message: MessageType, index: number) => { - let avatar = ""; - users.filter((user: GroupMessageAvatarType) => { - if (user.username == message.user) { - avatar = user.avatar; - } - }); - return ( - - - {avatar != null && avatar != "" ? ( - - ) : ( - - )} - - - {message.user} - - - {message.timestamp} - - - - - {message.message_content} - - - ); - }) - ) : ( - There are no messages - )} - - - - ): void => { - setMessage(e.nativeEvent.text); - }} - onSubmitEditing={() => { - send_message.mutate({ - message_content: message, - }); - setMessage(""); - }} - /> - { - send_message.mutate({ - message_content: message, - }); - setMessage(""); - }} - > - - - - - - ); - } else if (!student_status?.study_group) { - return ( - - - - You are not in a study group. Join one to start a conversation! - - - - ); - } - return ( - - - - Loading... - - - ); -} diff --git a/src/routes/CreateGroup/CreateGroup.tsx b/src/routes/CreateGroup/CreateGroup.tsx deleted file mode 100644 index 26b30de..0000000 --- a/src/routes/CreateGroup/CreateGroup.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import * as React from "react"; -import styles, { Viewport } from "../../styles"; -import { - View, - Text, - TextInput, - NativeSyntheticEvent, - TextInputChangeEventData, - Pressable, -} from "react-native"; -import { useState } from "react"; -import { - RootDrawerParamList, - StudentStatusPatchType, - StudyGroupCreateType, -} from "../../interfaces/Interfaces"; -import Button from "../../components/Button/Button"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { PatchStudentStatus, CreateStudyGroup } from "../../components/Api/Api"; -import { colors } from "../../styles"; -import AnimatedContainerNoScroll from "../../components/AnimatedContainer/AnimatedContainerNoScroll"; -import { urlProvider } from "../../components/Api/Api"; -import MapView, { UrlTile, Marker } from "react-native-maps"; -import { useNavigation } from "@react-navigation/native"; -import { useToast } from "react-native-toast-notifications"; -import CaretLeftIcon from "../../icons/CaretLeftIcon/CaretLeftIcon"; -import AnimatedContainer from "../../components/AnimatedContainer/AnimatedContainer"; - -export default function CreateGroup({ route }: any) { - const { location, subject } = route.params; - const queryClient = useQueryClient(); - const navigation = useNavigation(); - const toast = useToast(); - - const [name, setName] = useState(""); - const study_group_create = useMutation({ - mutationFn: async (info: StudyGroupCreateType) => { - const data = await CreateStudyGroup(info); - if (data[0] != true) { - return Promise.reject(new Error()); - } - return data; - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["user"] }); - queryClient.invalidateQueries({ queryKey: ["user_status"] }); - student_status_patch.mutate({ - study_group: name, - }); - toast.show("Created successfully", { - type: "success", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - const student_status_patch = useMutation({ - mutationFn: async (info: StudentStatusPatchType) => { - const data = await PatchStudentStatus(info); - if (data[0] != true) { - return Promise.reject(new Error()); - } - return data; - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["user"] }); - queryClient.invalidateQueries({ queryKey: ["user_status"] }); - queryClient.invalidateQueries({ queryKey: ["user_status_list"] }); - queryClient.invalidateQueries({ queryKey: ["study_group_list"] }); - toast.show(`Joined group ${name} successfully`, { - type: "success", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - // Set a delay before going back to conversation page to hopefully let the queries refresh in time - setTimeout(() => { - navigation.navigate("Conversation"); - }, 200); - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - if (location) { - return ( - - - - - - - - - - - - - - ): void => { - setName(e.nativeEvent.text); - }} - /> - - - navigation.navigate("Home")}> - - - - - - - - - ); - } - return ; -} diff --git a/src/routes/Home/Home.tsx b/src/routes/Home/Home.tsx index ea7a5a1..f80af2e 100644 --- a/src/routes/Home/Home.tsx +++ b/src/routes/Home/Home.tsx @@ -1,431 +1,127 @@ -import styles, { colors } from "../../styles"; -import { - View, - Text, - Pressable, - ScrollView, - Switch, - ActivityIndicator, - TouchableHighlight, -} from "react-native"; +import styles, { Viewport, colors } from "../../styles"; +import { View, Text } from "react-native"; import AnimatedContainer from "../../components/AnimatedContainer/AnimatedContainer"; import { useState, useEffect } from "react"; -import MapView, { Callout, Circle, Marker, UrlTile } from "react-native-maps"; +import MapView, { Callout, Marker, UrlTile } from "react-native-maps"; import * as Location from "expo-location"; import GetDistance from "../../components/GetDistance/GetDistance"; import Button from "../../components/Button/Button"; -import { - RootDrawerParamList, - StudentStatusReturnType, - RawLocationType, - StudentStatusType, - StudentStatusListReturnType, - StudentStatusListType, - StudentStatusPatchType, - StudyGroupType, - StudyGroupReturnType, - StudentStatusFilterType, -} from "../../interfaces/Interfaces"; -import { useNavigation } from "@react-navigation/native"; -import { - GetStudentStatus, - GetStudentStatusList, - GetStudentStatusListNear, - GetStudyGroupList, - GetStudyGroupListFiltered, - PatchStudentStatus, - urlProvider, -} from "../../components/Api/Api"; -import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; -import { useToast } from "react-native-toast-notifications"; -import React from "react"; -import MapRendererFar from "../../components/MapRenderer/MapRendererFar"; -import GetDistanceFromUSTP from "../../components/GetDistance/GetDistanceFromUSTP"; -import Modal from "react-native-modal"; -import DropdownIcon from "../../icons/CaretDownIcon/CaretDownIcon"; -import CaretUpIcon from "../../icons/CaretUpIcon/CaretUpIcon"; -import RefreshIcon from "../../icons/RefreshIcon/RefreshIcon"; -import AsyncStorage from "@react-native-async-storage/async-storage"; -import AnimatedContainerNoScroll from "../../components/AnimatedContainer/AnimatedContainerNoScroll"; - +import { AnimatedMapView } from "react-native-maps/lib/MapView"; +type LocationType = Location.LocationObject; export default function Home() { - // Switch this condition to see the main map when debugging - const map_distance_override = false; - const navigation = useNavigation(); - const [location, setLocation] = useState(null); - const [locationPermitted, setLocationPermitted] = useState(false); + const [location, setLocation] = useState(null); const [dist, setDist] = useState(null); const [feedback, setFeedback] = useState( "To continue, please allow Stud-E permission to location services" ); - const queryClient = useQueryClient(); - const toast = useToast(); - - const [modalOpen, setModalOpen] = useState(false); - const [modalByGroup, setModalByGroup] = useState(false); - - async function requestLocationPermission() { + const urlProvider = + "https://tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey=0f5cb5930d7642a8a921daea650754d9"; + const ustpCoords = { + latitude: 8.4857, + longitude: 124.6565, + latitudeDelta: 0.000235, + longitudeDelta: 0.000067, + }; + async function requestLocation() { const { status } = await Location.requestForegroundPermissionsAsync(); if (status !== "granted") { - setFeedback("Allow location permissions to continue"); - toast.show( - "Location permission was denied. Please allow in order to use StudE", - { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - } + setFeedback( + "Permission to access location was denied. Please allow permission" ); return; - } else { - setLocationPermitted(true); - } - } - - async function requestLocation() { - if (locationPermitted) { - let newLocation = await Location.getCurrentPositionAsync(); - - setLocation(newLocation); - await DistanceHandler(newLocation); + } + if (status == "granted") { + let location = await Location.getCurrentPositionAsync({}); + if (location) { + setLocation(location); + getDistance(location); + } } } + // Refresh every 10 seconds useEffect(() => { - // console.log("Location Update"); - // console.log(locationPermitted); - requestLocation(); - }, [locationPermitted]); - - useEffect(() => { - requestLocationPermission(); - // Refresh every 30 seconds const interval = setInterval(() => { requestLocation(); - }, 30000); + }, 10000); + return () => clearInterval(interval); + }); + + // Refresh when user moves location + useEffect(() => { + requestLocation(); + }, [location]); + + // Run when screen loads + useEffect(() => { + requestLocation(); }, []); - const [stopping_toofar, setStopping] = useState(false); - async function DistanceHandler(location: RawLocationType) { - let dist = GetDistanceFromUSTP(location.coords); - setDist(dist); - // Deactivate student status if too far away from USTP and still studying - if (dist >= 1 && !map_distance_override && studying && !stopping_toofar) { - stop_studying.mutate({ - active: false, - }); - setStopping(true); - } + async function getDistance(location: LocationType) { + let dist = GetDistance( + location.coords.latitude, + location.coords.longitude, + 8.4857, // LatitudeDelta + 124.6565 // LongitudeDelta + ); + setDist(Math.round(dist)); } - async function clear_messages_notification_cache() { - AsyncStorage.setItem("messages", ""); - } - // Student Status - const [studying, setStudying] = useState(false); - const [subject, setSubject] = useState(""); - const [buttonLabel, setButtonLabel] = useState("Start studying"); - const [student_status, setStudentStatus] = useState(); - const StudentStatusQuery = useQuery({ - queryKey: ["user_status"], - queryFn: async () => { - const data = await GetStudentStatus(); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: (data: StudentStatusReturnType) => { - if (data[1].active == true) { - setButtonLabel("Stop Studying"); - } else if (data[1].active == false) { - setButtonLabel("Start Studying"); - } - setSubject(data[1].subject); - setStudying(data[1].active); - setStudentStatus(data[1]); - // Deactivate student status if too far away from current location you are studying in - if (student_status && location) { - const dist = GetDistance( - student_status.location.latitude, - student_status.location.longitude, - location.coords.latitude, - location.coords.longitude - ); - if (dist > 0.5 && studying && !stopping_toofar) { - console.log("Too far from current studying location"); - stop_studying.mutate({ - active: false, - }); - setStopping(true); - } - } - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - const stop_studying = useMutation({ - mutationFn: async (info: StudentStatusPatchType) => { - const data = await PatchStudentStatus(info); - if (data[0] != true) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: () => { - if (student_status?.study_group) { - // Display separate toast if you stop studying while in a study group - toast.show("You left study group \n" + student_status?.study_group, { - type: "success", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - } - toast.show("You are no longer studying \n" + subject, { - type: "success", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - queryClient.invalidateQueries({ queryKey: ["user_status"] }); - // Delay refetching for study groups since backend still needs to delete groups without students after leaving a study group - setTimeout(() => { - queryClient.invalidateQueries({ queryKey: ["study_group_list"] }); - queryClient.invalidateQueries({ - queryKey: ["study_group_list_global"], - }); - }, 500); - setStudyGroups([]); - setStudying(false); - setStopping(false); - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - const change_study_group = useMutation({ - mutationFn: async (info: StudentStatusPatchType) => { - const data = await PatchStudentStatus(info); - if (data[0] != true) { - return Promise.reject(new Error()); - } - return data; - }, - onSuccess: () => { - if (student_status?.study_group == "") { - // Display separate toast if you stop studying while in a study group - toast.show("You left study group \n" + student_status?.study_group, { - type: "success", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - clear_messages_notification_cache(); - } - - queryClient.invalidateQueries({ queryKey: ["user_status"] }); - - // Delay refetching for study groups since backend still needs to delete groups without students after leaving a study group - setTimeout(() => { - queryClient.invalidateQueries({ queryKey: ["study_group_list"] }); - queryClient.invalidateQueries({ - queryKey: ["study_group_list_global"], - }); - }, 500); - setStudyGroups([]); - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - const [student_statuses, setStudentStatuses] = - useState([]); - // Student Status List - const StudentStatusListQuery = useQuery({ - enabled: studying && !StudentStatusQuery.isLoading, - queryKey: ["user_status_list"], - queryFn: async () => { - const data = await GetStudentStatusListNear(); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: (data: StudentStatusListReturnType) => { - if (data[1] && location) { - // Filter to only include students studying solo - let data_filtered = data[1].filter( - (item: StudentStatusFilterType) => item.study_group == null - ); - setStudentStatuses(data_filtered); - } - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - const [student_statuses_global, setStudentStatusesGlobal] = - useState([]); - // Student Status List Global - const StudentStatusListGlobalQuery = useQuery({ - enabled: !studying && !StudentStatusQuery.isLoading, - queryKey: ["user_status_list_global"], - queryFn: async () => { - const data = await GetStudentStatusList(); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: (data: StudentStatusListReturnType) => { - if (data[1] && location) { - // Filter to only include students studying solo - let data_filtered = data[1].filter( - (item: StudentStatusFilterType) => item.study_group == null - ); - setStudentStatusesGlobal(data_filtered); - } - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - - const [study_groups, setStudyGroups] = useState([]); - // Study Group List - const StudyGroupQuery = useQuery({ - enabled: studying && !StudentStatusQuery.isLoading, - queryKey: ["study_group_list"], - queryFn: async () => { - const data = await GetStudyGroupListFiltered(); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: (data: StudyGroupReturnType) => { - if (data[1] && location) { - setStudyGroups(data[1]); - } - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - const [study_groups_global, setStudyGroupsGlobal] = useState< - StudyGroupType[] - >([]); - // Study Group Global List - const StudyGroupGlobalQuery = useQuery({ - enabled: !studying && !StudentStatusQuery.isLoading, - queryKey: ["study_group_list_global"], - queryFn: async () => { - const data = await GetStudyGroupList(); - if (data[0] == false) { - return Promise.reject(new Error(JSON.stringify(data[1]))); - } - return data; - }, - onSuccess: (data: StudyGroupReturnType) => { - if (data[1] && location) { - setStudyGroupsGlobal(data[1]); - } - }, - onError: (error: Error) => { - toast.show(String(error), { - type: "warning", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - }, - }); - function CustomMap() { - if (!locationPermitted) { - return ( - <> - {feedback} - - - ); - } else if ( - (!StudentStatusQuery.isSuccess && - studying && - !StudentStatusListQuery.isSuccess && - !StudyGroupQuery.isSuccess) || - (!StudentStatusQuery.isSuccess && - !studying && - !StudentStatusListGlobalQuery.isSuccess && - !StudyGroupGlobalQuery.isSuccess) - ) { - return ( - <> - - - Loading... - - ); - } else if ( - study_groups == undefined || - study_groups_global == undefined || - student_statuses == undefined || - student_statuses_global == undefined - ) { - return ( - <> - - - Loading... - - ); - } else if (dist && location) { - if (dist <= 0.25 || map_distance_override) { + if (dist && location) { + if (dist <= 1.5) { + // Just switch this condition for map debugging return ( - <> - + + + + ); + } else { + return ( + + + You are too far from USTP {"\n"} + Get closer to use Stud-E + + - {!studying ? ( - student_statuses_global.map( - (student_status: StudentStatusFilterType, index: number) => { - const randomColorWithOpacity = `rgba(${Math.floor( - Math.random() * 256 - )}, ${Math.floor(Math.random() * 256)}, ${Math.floor( - Math.random() * 256 - )}, 0.7)`; - - return ( - { - toast.hideAll(); - - toast.show( - - - Student: {student_status.user} - - - {`Studying ${student_status.subject}`} - - , - { - type: "normal", - placement: "top", - duration: 2000, - animationType: "slide-in", - style: { - backgroundColor: colors.secondary_2, - borderWidth: 1, - borderColor: colors.primary_1, - }, - } - ); - }} - > - - - Student: {student_status.user} - - - {`Studying ${student_status.subject}`} - - - {`${Math.round( - GetDistance( - student_status.location.latitude, - student_status.location.longitude, - location.coords.latitude, - location.coords.longitude - ) * 1000 - )}m away`} - - - - ); - } - ) - ) : ( - <> - )} - {studying ? ( - student_statuses.map( - (student_status: StudentStatusFilterType, index: number) => { - const randomColorWithOpacity = `rgba(${Math.floor( - Math.random() * 256 - )}, ${Math.floor(Math.random() * 256)}, ${Math.floor( - Math.random() * 256 - )}, 0.7)`; - - return ( - { - toast.hideAll(); - toast.show( - - - Student: {student_status.user} - - - {`Studying ${student_status.subject}`} - - - {`${Math.round( - student_status.distance * 1000 - )}m away`} - - , - { - type: "normal", - placement: "top", - duration: 2000, - animationType: "slide-in", - style: { - backgroundColor: colors.secondary_2, - borderWidth: 1, - borderColor: colors.primary_1, - }, - } - ); - }} - /> - ); - } - ) - ) : ( - <> - )} - {studying ? ( - study_groups.map( - (studygroup: StudyGroupType, index: number) => { - const randomColorWithOpacity = `rgba(${Math.floor( - Math.random() * 256 - )}, ${Math.floor(Math.random() * 256)}, ${Math.floor( - Math.random() * 256 - )}, 0.7)`; - - return ( - - { - toast.hideAll(); - - toast.show( - - - Study Group: {studygroup.name} - - {studygroup.landmark ? ( - - {studygroup.landmark} - - ) : ( - <> - )} - - {`Studying ${studygroup.subject}`} - - - - {`${studygroup.students.length} ${ - studygroup.students.length > 1 - ? "students" - : "student" - } studying`} - - - {`${Math.round( - studygroup.distance * 1000 - )}m away`} - - {student_status?.study_group != - studygroup.name ? ( - - ) : ( - <> - )} - {student_status?.study_group == - studygroup.name ? ( - - ) : ( - <> - )} - , - { - type: "normal", - placement: "top", - duration: 2000, - animationType: "slide-in", - style: { - backgroundColor: colors.secondary_2, - borderWidth: 1, - borderColor: colors.primary_1, - }, - } - ); - }} - > - - - Study Group: {studygroup.name} - - - Studying: {studygroup.subject} - - {studygroup.landmark ? ( - - {studygroup.landmark} - - ) : ( - <> - )} - - {`${studygroup.students.length} ${ - studygroup.students.length > 1 - ? "students" - : "student" - } studying`} - - - {`${Math.round( - studygroup.distance * 1000 - )}m away`} - - - - - - ); - } - ) - ) : ( - <> - )} - {!studying ? ( - study_groups_global.map( - (studygroup: StudyGroupType, index: number) => { - const randomColorWithOpacity = `rgba(${Math.floor( - Math.random() * 256 - )}, ${Math.floor(Math.random() * 256)}, ${Math.floor( - Math.random() * 256 - )}, 0.7)`; - - return ( - - { - toast.hideAll(); - toast.show( - - - Study Group: {studygroup.name} - - {studygroup.landmark ? ( - - {studygroup.landmark} - - ) : ( - <> - )} - - {`Studying ${studygroup.subject}`} - - - {`${studygroup.students.length} ${ - studygroup.students.length > 1 - ? "students" - : "student" - } studying`} - - {student_status?.study_group != - studygroup.name ? ( - - Study nearby to join - - ) : ( - <> - )} - , - { - type: "normal", - placement: "top", - duration: 2000, - animationType: "slide-in", - style: { - backgroundColor: colors.secondary_2, - borderWidth: 1, - borderColor: colors.primary_1, - }, - } - ); - }} - > - - - Study Group: {studygroup.name} - - - Studying: {studygroup.subject} - - {studygroup.landmark ? ( - - {studygroup.landmark} - - ) : ( - <> - )} - - {`${studygroup.students.length} ${ - studygroup.students.length > 1 - ? "students" - : "student" - } studying`} - - - {`${Math.round( - GetDistance( - studygroup.location.latitude, - studygroup.location.longitude, - location.coords.latitude, - location.coords.longitude - ) - )}m away`} - - - - - - ); - } - ) - ) : ( - <> - )} - {!studying || !student_status?.study_group ? ( - { - const newLocation = e.nativeEvent.coordinate; - const distance = GetDistance( - newLocation.latitude, - newLocation.longitude, - location.coords.latitude, - location.coords.longitude - ); - if (distance <= 0.1) { - // If the new location is within 100 meters of the actual location, update the location state - setLocation({ - ...location, - coords: { - ...location.coords, - latitude: newLocation.latitude, - longitude: newLocation.longitude, - }, - }); - } else { - // If the new location is more than 100 meters away from the actual location, reset the marker to the actual location - setLocation({ - ...location, - }); - } - }} - pinColor={colors.primary_1} - onPress={() => { - toast.hideAll(); - toast.show( - - - You are here - - {student_status?.active && - !student_status?.study_group ? ( - <> - - {student_status?.active - ? "Studying " + student_status?.subject - : ""} - - - - ) : ( - <> - )} - {student_status?.study_group ? ( - <> - - {`Studying: ${student_status?.subject}`} - - - {`In group: ${student_status?.study_group}`} - - - ) : ( - <> - )} - , - { - type: "normal", - placement: "top", - duration: 2000, - animationType: "slide-in", - style: { - backgroundColor: colors.secondary_2, - borderWidth: 1, - borderColor: colors.primary_1, - }, - } - ); - }} - > - ) : ( - <> - )} - - - - - { - queryClient.invalidateQueries({ queryKey: ["user"] }); - queryClient.invalidateQueries({ - queryKey: ["user_status"], - }); - queryClient.invalidateQueries({ - queryKey: ["user_status_list"], - }); - queryClient.invalidateQueries({ - queryKey: ["study_group_list"], - }); - toast.show("Refreshed", { - type: "success", - placement: "top", - duration: 2000, - animationType: "slide-in", - }); - requestLocation(); - }} - > - - - - { - setModalOpen(true); - }} - > - - - - {student_status?.active && !student_status?.study_group ? ( - - ) : ( - <> - )} - - + + + X: {Math.round(location.coords.longitude) + "\n"} + Z: {Math.round(location.coords.latitude)} + + + + + + {dist}km away from USTP {"\n"} + + ); - } else { - return ; } } else { - requestLocationPermission(); - requestLocation(); return ( - <> - - - Loading... - + + {feedback} + + ); } } return ( - - - setModalOpen(false)} - > - - - - List View - { - setModalByGroup(!modalByGroup); - }} - style={{ alignSelf: "center" }} - /> - - - - {!modalByGroup ? ( - student_statuses.map( - (student_status: StudentStatusFilterType, index: number) => { - return ( - - - Student: {student_status.user} - - - {`Studying ${student_status.subject}`} - - - {`${Math.round(student_status.distance * 1000)}m away`} - - {location && location.coords ? ( - - {`${Math.round( - GetDistance( - student_status.location.latitude, - student_status.location.longitude, - location.coords.latitude, - location.coords.longitude - ) - )}m away`} - - ) : ( - <> - )} - - ); - } - ) - ) : ( - <> - )} - {modalByGroup ? ( - study_groups.map((studygroup: StudyGroupType, index: number) => { - return ( - - - Group Name: {studygroup.name} - - {studygroup.landmark ? ( - - {studygroup.landmark} - - ) : ( - <> - )} - - {`Studying ${studygroup.subject}`} - - - Students Studying: {studygroup.students.length} - - {student_status?.study_group != studygroup.name ? ( - - {`${Math.round(studygroup.distance * 1000)}m away`} - - ) : ( - <> - )} - {student_status?.study_group != studygroup.name ? ( - { - change_study_group.mutate({ - study_group: studygroup.name, - subject: studygroup.subject, - }); - navigation.navigate("Conversation"); - setModalOpen(!modalOpen); - }} - > - - Join Group - - - ) : ( - <> - )} - {student_status?.study_group == studygroup.name ? ( - { - change_study_group.mutate({ - study_group: "", - }); - setModalOpen(!modalOpen); - }} - > - - Leave Group - - - ) : ( - <> - )} - - ); - }) - ) : ( - <> - )} - - - - - - setModalOpen(false)} - > - - - - List View - { - setModalByGroup(!modalByGroup); - }} - style={{ alignSelf: "center" }} - /> - - - - {!modalByGroup ? ( - student_statuses_global.map( - (student_status: StudentStatusFilterType, index: number) => { - return ( - - - Student: {student_status.user} - - - {`Studying ${student_status.subject}`} - - {location && location.coords ? ( - - {`${Math.round( - GetDistance( - student_status.location.latitude, - student_status.location.longitude, - location.coords.latitude, - location.coords.longitude - ) - )}m away`} - - ) : ( - <> - )} - - ); - } - ) - ) : ( - <> - )} - {modalByGroup ? ( - study_groups_global.map( - (studygroup: StudyGroupType, index: number) => { - return ( - - - Group Name: {studygroup.name} - - {studygroup.landmark ? ( - - {studygroup.landmark} - - ) : ( - <> - )} - - {`Studying ${studygroup.subject}`} - - - Students Studying: {studygroup.students.length} - - {location && location.coords ? ( - - {`${Math.round( - GetDistance( - studygroup.location.latitude, - studygroup.location.longitude, - location.coords.latitude, - location.coords.longitude - ) - )}m away`} - - ) : ( - <> - )} - - ); - } - ) - ) : ( - <> - )} - - - - - - - + ); diff --git a/src/routes/Loading/Loading.tsx b/src/routes/Loading/Loading.tsx deleted file mode 100644 index 9fb7c7c..0000000 --- a/src/routes/Loading/Loading.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import * as React from "react"; -import styles from "../../styles"; -import { View, Text, ActivityIndicator } from "react-native"; -import { colors } from "../../styles"; -import AnimatedContainer from "../../components/AnimatedContainer/AnimatedContainer"; - -export default function Loading() { - return ( - - - - - Loading StudE... - - - ); -} diff --git a/src/routes/Login/Login.tsx b/src/routes/Login/Login.tsx index 7ff7900..34a3d6f 100644 --- a/src/routes/Login/Login.tsx +++ b/src/routes/Login/Login.tsx @@ -7,13 +7,15 @@ import { NativeSyntheticEvent, TextInputChangeEventData, } from "react-native"; -import { useDispatch, useSelector } from "react-redux"; -import { useEffect, useState } from "react"; +import { useDispatch } from "react-redux"; +import { colors } from "../../styles"; +import { useState } from "react"; import LoginIcon from "../../icons/LoginIcon/LoginIcon"; import Button from "../../components/Button/Button"; import { useNavigation } from "@react-navigation/native"; import { RootDrawerParamList } from "../../interfaces/Interfaces"; -import { GetUserInfo, UserLogin } from "../../components/Api/Api"; +import { UserInfo, UserLogin } from "../../components/Api/Api"; +import { ParseLoginError } from "../../components/ParseError/ParseError"; import AnimatedContainer from "../../components/AnimatedContainer/AnimatedContainer"; import { setUser } from "../../features/redux/slices/UserSlice/UserSlice"; import { @@ -21,24 +23,15 @@ import { setOnboarding, unsetOnboarding, } from "../../features/redux/slices/StatusSlice/StatusSlice"; -import { useToast } from "react-native-toast-notifications"; -import { RootState } from "../../features/redux/Store/Store"; export default function Login() { const navigation = useNavigation(); - const status = useSelector((state: RootState) => state.status); - const [logging_in, setLoggingIn] = useState(false); const dispatch = useDispatch(); const [creds, setCreds] = useState({ username: "", password: "", }); - const toast = useToast(); - useEffect(() => { - if (status.logged_in) { - navigation.navigate("Home"); - } - }, []); + const [error, setError] = useState(""); return ( @@ -67,62 +60,44 @@ export default function Login() { placeholderTextColor="white" secureTextEntry={true} value={creds.password} - autoCapitalize={"none"} onChange={( e: NativeSyntheticEvent ): void => { setCreds({ ...creds, password: e.nativeEvent.text }); }} /> + + {error}