diff --git a/Customer App/app.json b/Customer App/app.json index 5e43080..cad721e 100644 --- a/Customer App/app.json +++ b/Customer App/app.json @@ -2,6 +2,7 @@ "expo": { "name": "Enatega", "version": "1.0.16", + "scheme": "enategasinglevendor", "description": "Enatega is a starter kit food ordering app built in React Native using Expo for IOS and Android. It's made keeping good aesthetics in mind as well keeping the best coding practices in mind. Its fully customisable to easily help you in your next food delivery project. https://market.nativebase.io/view/react-native-food-delivery-backend-app", "slug": "enategasinglevendor", "privacy": "public", diff --git a/Customer App/package-lock.json b/Customer App/package-lock.json index 322018d..2f4ff01 100644 --- a/Customer App/package-lock.json +++ b/Customer App/package-lock.json @@ -9,6 +9,7 @@ "version": "5.0.0", "hasInstallScript": true, "dependencies": { + "@amplitude/analytics-react-native": "^1.1.1", "@apollo/react-hooks": "^3.1.3", "@expo/vector-icons": "^13.0.0", "@ptomasroos/react-native-multi-slider": "^2.2.2", @@ -36,6 +37,7 @@ "expo-apple-authentication": "~5.0.1", "expo-application": "~5.0.1", "expo-asset": "~8.7.0", + "expo-auth-session": "~3.8.0", "expo-camera": "~13.1.0", "expo-constants": "~14.0.2", "expo-contacts": "~11.0.1", @@ -48,6 +50,7 @@ "expo-localization": "~14.0.0", "expo-location": "~15.0.1", "expo-notifications": "~0.17.0", + "expo-random": "~13.0.0", "expo-sensors": "~12.0.1", "expo-splash-screen": "~0.17.5", "expo-tracking-transparency": "~3.0.1", @@ -63,7 +66,7 @@ "react-native-button": "^3.0.1", "react-native-flash-message": "^0.4.0", "react-native-flatlist-slider": "^1.0.5", - "react-native-gesture-handler": "~2.8.0", + "react-native-gesture-handler": "~~2.1.0", "react-native-gifted-chat": "^1.1.1", "react-native-i18n": "1.0.0", "react-native-maps": "1.3.2", @@ -102,6 +105,89 @@ "react-test-renderer": "^18.2.0" } }, + "node_modules/@amplitude/analytics-client-common": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-client-common/-/analytics-client-common-0.6.1.tgz", + "integrity": "sha512-P9Zb1xfmbYMFy3QPfY7G+wwvbvTsfIOS5BOWSUiig+P9PduRwxslPe1Uscns0is6SaHcqIqrw47uuH58FEmmcg==", + "dependencies": { + "@amplitude/analytics-connector": "^1.4.5", + "@amplitude/analytics-core": "^0.12.0", + "@amplitude/analytics-types": "^0.17.0", + "tslib": "^2.4.1" + } + }, + "node_modules/@amplitude/analytics-client-common/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/@amplitude/analytics-connector": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-connector/-/analytics-connector-1.4.6.tgz", + "integrity": "sha512-6jD2pOosRD4y8DT8StUCz7yTd5ZDkdOU9/AWnlWKM5qk90Mz7sdZrdZ9H7sA/L3yOJEpQOYZgQplQdWWUzyWug==", + "dependencies": { + "@amplitude/ua-parser-js": "0.7.31" + } + }, + "node_modules/@amplitude/analytics-core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-core/-/analytics-core-0.12.0.tgz", + "integrity": "sha512-Qg5own7VApdEOUtOnKwk7vFKbXubZ/YBQq0COYK+QFMCp0eF1xwLLLEiE4ThYiq49EwptvinH/bziU6IMi205g==", + "dependencies": { + "@amplitude/analytics-types": "^0.17.0", + "tslib": "^2.4.1" + } + }, + "node_modules/@amplitude/analytics-core/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/@amplitude/analytics-react-native": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-react-native/-/analytics-react-native-1.1.1.tgz", + "integrity": "sha512-ybbpCUzjGO1E04J58TOi0vn2YMpCYSiq+nESkV6eVwZ5pyVmiYgtLvdkUg9Kr+vtR78ocD6S5HXKCFTER+cCcA==", + "dependencies": { + "@amplitude/analytics-client-common": "^0.6.1", + "@amplitude/analytics-core": "^0.12.0", + "@amplitude/analytics-types": "^0.17.0", + "@amplitude/ua-parser-js": "^0.7.31", + "@react-native-async-storage/async-storage": "^1.17.11", + "tslib": "^2.4.1" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@amplitude/analytics-react-native/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/@amplitude/analytics-types": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@amplitude/analytics-types/-/analytics-types-0.17.0.tgz", + "integrity": "sha512-J6JdlUkYPaOInsqYBBOjxwhYi+3ZFl+ICE6yG/1SySX/Eu7a7jAJbBbrH1HrYk+0Hzl5sdO/WA2zhHi0j00qTQ==" + }, + "node_modules/@amplitude/ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@amplitude/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-+z8UGRaj13Pt5NDzOnkTBy49HE2CX64jeL0ArB86HAtilpnfkPB7oqkigN7Lf2LxscMg4QhFD7mmCfedh3rqTg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -1991,15 +2077,39 @@ "node": ">=0.8.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", + "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", - "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", + "espree": "^9.5.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -2060,9 +2170,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", - "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3773,16 +3883,16 @@ } }, "node_modules/@jest/console": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", - "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0" }, "engines": { @@ -3860,37 +3970,37 @@ } }, "node_modules/@jest/core": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", - "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", "dev": true, "dependencies": { - "@jest/console": "^29.4.3", - "@jest/reporters": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.4.3", - "jest-config": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-resolve-dependencies": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "jest-watcher": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -3965,9 +4075,9 @@ } }, "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -4009,48 +4119,48 @@ } }, "node_modules/@jest/create-cache-key-function": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.4.3.tgz", - "integrity": "sha512-AJVFQTTy6jnZAQiAZrdOaTAPzJUrvAE/4IMe+Foav6WPhypFszqg7a4lOTyuzYQEEiT5RSrGYg9IY+/ivxiyXw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.5.0.tgz", + "integrity": "sha512-LIDZyZgnZss7uikvBKBB/USWwG+GO8+GnwRWT+YkCGDGsqLQlhm9BC3z6+7+eMs1kUlvXQIWEzBR8Q2Pnvx6lg==", "dependencies": { - "@jest/types": "^29.4.3" + "@jest/types": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.3" + "jest-mock": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", "dev": true, "dependencies": { - "expect": "^29.4.3", - "jest-snapshot": "^29.4.3" + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3" @@ -4060,48 +4170,48 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", - "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/types": "^29.4.3", - "jest-mock": "^29.4.3" + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", - "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", @@ -4114,9 +4224,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -4230,13 +4340,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", - "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", "dev": true, "dependencies": { - "@jest/console": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -4245,14 +4355,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", - "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", "dev": true, "dependencies": { - "@jest/test-result": "^29.4.3", + "@jest/test-result": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "slash": "^3.0.0" }, "engines": { @@ -4260,22 +4370,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", - "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -4362,9 +4472,9 @@ } }, "node_modules/@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", "dependencies": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -5866,9 +5976,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.4.tgz", - "integrity": "sha512-VhCw7I7qO2X49+jaKcAUwi3rR+hbxT5VcYF493+Z5kMLI0DL568b7JI4IDJaxWFH0D/xwmGJNoXisyX+w7GH/g==" + "version": "18.15.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.1.tgz", + "integrity": "sha512-U2TWca8AeHSmbpi314QBESRk7oPjSZjDsR+c+H4ECC1l+kFgpZf8Ydhv3SJpPy51VyZHHqxlb6mTTqYNNRVAIw==" }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -6459,6 +6569,19 @@ "node": ">=0.10.0" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-includes": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", @@ -6840,15 +6963,15 @@ } }, "node_modules/babel-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", - "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", "dev": true, "dependencies": { - "@jest/transform": "^29.4.3", + "@jest/transform": "^29.5.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.3", + "babel-preset-jest": "^29.5.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -6965,9 +7088,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", - "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -7483,12 +7606,12 @@ "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" }, "node_modules/babel-preset-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", - "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.4.3", + "babel-plugin-jest-hoist": "^29.5.0", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -7724,9 +7847,9 @@ } }, "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8105,9 +8228,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001458", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz", - "integrity": "sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w==", + "version": "1.0.30001464", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001464.tgz", + "integrity": "sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==", "funding": [ { "type": "opencollective", @@ -8506,6 +8629,17 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, + "node_modules/compare-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-urls/-/compare-urls-2.0.0.tgz", + "integrity": "sha512-eCJcWn2OYFEIqbm70ta7LQowJOOZZqq1a2YbbFCFI1uwSvj+TWMwXVn7vPR1ceFNcAIt5RSTDbwdlX82gYLTkA==", + "dependencies": { + "normalize-url": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/compare-versions": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", @@ -8632,9 +8766,9 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.0.tgz", - "integrity": "sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==", + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.1.tgz", + "integrity": "sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==", "dependencies": { "browserslist": "^4.21.5" }, @@ -9124,9 +9258,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.317", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.317.tgz", - "integrity": "sha512-JhCRm9v30FMNzQSsjl4kXaygU+qHBD0Yh7mKxyjmF0V8VwYVB6qpBRX28GyAucrM9wDCpSUctT6FpMUQxbyKuA==" + "version": "1.4.328", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz", + "integrity": "sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==" }, "node_modules/emittery": { "version": "0.13.1", @@ -9226,18 +9360,18 @@ } }, "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -9245,8 +9379,8 @@ "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", @@ -9254,11 +9388,12 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", "typed-array-length": "^1.0.4", @@ -9342,13 +9477,15 @@ } }, "node_modules/eslint": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", - "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^2.0.0", - "@eslint/js": "8.35.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -9359,9 +9496,8 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", + "espree": "^9.5.0", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -9383,7 +9519,6 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -9803,6 +9938,7 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "peer": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -9821,6 +9957,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "peer": true, "engines": { "node": ">=10" } @@ -10005,9 +10142,9 @@ } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -10313,16 +10450,16 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.4.3", + "@jest/expect-utils": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10652,6 +10789,38 @@ "url-parse": "^1.5.9" } }, + "node_modules/expo-auth-session": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/expo-auth-session/-/expo-auth-session-3.8.0.tgz", + "integrity": "sha512-pQ8GryTTZL/JKHvifUGD4GGlZWo7RrcoQlvQ0O5m5edYfoa7fMHCg20MBX4Da4P3eVgJlqWZWCHfBC2fZxcRfA==", + "dependencies": { + "expo-constants": "~14.0.0", + "expo-crypto": "~12.0.0", + "expo-linking": "~3.3.0", + "expo-web-browser": "~12.0.0", + "invariant": "^2.2.4", + "qs": "6.9.1" + }, + "peerDependencies": { + "expo-random": "*" + }, + "peerDependenciesMeta": { + "expo-random": { + "optional": true + } + } + }, + "node_modules/expo-auth-session/node_modules/qs": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", + "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/expo-camera": { "version": "13.1.0", "resolved": "https://registry.npmjs.org/expo-camera/-/expo-camera-13.1.0.tgz", @@ -10712,6 +10881,14 @@ "expo": "*" } }, + "node_modules/expo-crypto": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-12.0.0.tgz", + "integrity": "sha512-2KC52eLYsXndDZOVFyr+K3Zs9wDgpqZ7F7fwAiUg+yNbE21CJrHKDFvo/Br0FAaDf/w9pUks5/qi1azB5sDzvg==", + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-device": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/expo-device/-/expo-device-5.0.0.tgz", @@ -11304,6 +11481,17 @@ "node": ">= 10.0.0" } }, + "node_modules/expo-random": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-13.0.0.tgz", + "integrity": "sha512-aGb0vtUmFFuW0TF1rdOgsz89zEVD/RXUPUnnZy5+i3jJeQ2PerJ4uo72/EuWqHpCBNto8/qT+aCzFinmQDeTAA==", + "dependencies": { + "base64-js": "^1.3.0" + }, + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-sensors": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/expo-sensors/-/expo-sensors-12.0.1.tgz", @@ -11373,6 +11561,17 @@ "expo": "*" } }, + "node_modules/expo-web-browser": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-12.0.0.tgz", + "integrity": "sha512-7/RUuE0sv5kf+mTw5/SOnks0Am1ctoxvT1Xi53Nom2EuXTKBV+b2Kf5xAw3ItoW5W4MHJUX3FdNI6qc9sS9+Pw==", + "dependencies": { + "compare-urls": "^2.0.0" + }, + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -13342,15 +13541,15 @@ "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" }, "node_modules/jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", - "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", "dev": true, "dependencies": { - "@jest/core": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", "import-local": "^3.0.2", - "jest-cli": "^29.4.3" + "jest-cli": "^29.5.0" }, "bin": { "jest": "bin/jest.js" @@ -13368,9 +13567,9 @@ } }, "node_modules/jest-changed-files": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", - "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dev": true, "dependencies": { "execa": "^5.0.0", @@ -13440,28 +13639,29 @@ } }, "node_modules/jest-circus": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", - "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", "dev": true, "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "p-limit": "^3.1.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -13528,9 +13728,9 @@ } }, "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -13572,21 +13772,21 @@ } }, "node_modules/jest-cli": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", - "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", "dev": true, "dependencies": { - "@jest/core": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -13676,31 +13876,31 @@ } }, "node_modules/jest-config": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", - "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.3", - "@jest/types": "^29.4.3", - "babel-jest": "^29.4.3", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.4.3", - "jest-environment-node": "^29.4.3", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", "jest-get-type": "^29.4.3", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -13779,9 +13979,9 @@ } }, "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -13823,15 +14023,15 @@ } }, "node_modules/jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13896,9 +14096,9 @@ } }, "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -13952,16 +14152,16 @@ } }, "node_modules/jest-each": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", - "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", - "jest-util": "^29.4.3", - "pretty-format": "^29.4.3" + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14026,9 +14226,9 @@ } }, "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -14070,17 +14270,17 @@ } }, "node_modules/jest-environment-node": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", - "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", "dev": true, "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14096,20 +14296,20 @@ } }, "node_modules/jest-haste-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", - "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", + "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -14121,13 +14321,13 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", - "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14146,9 +14346,9 @@ } }, "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -14166,15 +14366,15 @@ "dev": true }, "node_modules/jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14239,9 +14439,9 @@ } }, "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -14283,18 +14483,18 @@ } }, "node_modules/jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -14361,9 +14561,9 @@ } }, "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -14405,14 +14605,14 @@ } }, "node_modules/jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-util": "^29.4.3" + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14454,17 +14654,17 @@ } }, "node_modules/jest-resolve": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", - "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -14474,13 +14674,13 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", - "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", "dev": true, "dependencies": { "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.4.3" + "jest-snapshot": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14557,30 +14757,30 @@ } }, "node_modules/jest-runner": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", - "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", "dev": true, "dependencies": { - "@jest/console": "^29.4.3", - "@jest/environment": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-leak-detector": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-util": "^29.4.3", - "jest-watcher": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -14659,31 +14859,31 @@ } }, "node_modules/jest-runtime": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", - "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", "dev": true, "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/globals": "^29.4.3", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -14774,9 +14974,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", - "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -14785,23 +14985,22 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.4.3", + "expect": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "semver": "^7.3.5" }, "engines": { @@ -14879,9 +15078,9 @@ } }, "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -14944,12 +15143,12 @@ "dev": true }, "node_modules/jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -15031,17 +15230,17 @@ } }, "node_modules/jest-validate": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", - "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -15118,9 +15317,9 @@ } }, "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", @@ -15162,18 +15361,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", - "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", "dev": true, "dependencies": { - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "string-length": "^4.0.1" }, "engines": { @@ -15251,13 +15450,13 @@ } }, "node_modules/jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -15751,9 +15950,9 @@ } }, "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "engines": { "node": ">=10" @@ -15765,24 +15964,24 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/lint-staged": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.2.tgz", - "integrity": "sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.0.tgz", + "integrity": "sha512-GbyK5iWinax5Dfw5obm2g2ccUiZXNGtAS4mCbJ0Lv4rq6iEtfBSjOYdcbOtAIFtM114t0vdpViDDetjVTSd8Vw==", "dev": true, "dependencies": { + "chalk": "5.2.0", "cli-truncate": "^3.1.0", - "colorette": "^2.0.19", - "commander": "^9.4.1", + "commander": "^10.0.0", "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.6", - "listr2": "^5.0.5", + "execa": "^7.0.0", + "lilconfig": "2.1.0", + "listr2": "^5.0.7", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "pidtree": "^0.6.0", "string-argv": "^0.3.1", - "yaml": "^2.1.3" + "yaml": "^2.2.1" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -15794,24 +15993,36 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true, "engines": { - "node": "^12.20.0 || >=14" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true, + "engines": { + "node": ">=14" } }, "node_modules/lint-staged/node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.0.tgz", + "integrity": "sha512-T6nIJO3LHxUZ6ahVRaxXz9WLEruXLqdcluA+UuTptXmLM7nDAn9lx9IfkxPyzEL21583qSt4RmL44pO71EHaJQ==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", - "human-signals": "^3.0.1", + "human-signals": "^4.3.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", @@ -15820,7 +16031,7 @@ "strip-final-newline": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" @@ -15839,12 +16050,12 @@ } }, "node_modules/lint-staged/node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.0.tgz", + "integrity": "sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ==", "dev": true, "engines": { - "node": ">=12.20.0" + "node": ">=14.18.0" } }, "node_modules/lint-staged/node_modules/is-stream": { @@ -15926,9 +16137,9 @@ } }, "node_modules/listr2": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.7.tgz", - "integrity": "sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", + "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", "dev": true, "dependencies": { "cli-truncate": "^2.1.0", @@ -18038,6 +18249,40 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/normalize-url/node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url/node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-package-arg": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", @@ -19231,6 +19476,14 @@ "node": ">= 0.8.0" } }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" + } + }, "node_modules/prettier": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", @@ -19461,6 +19714,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", + "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/qrcode-terminal": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", @@ -19851,9 +20120,9 @@ "integrity": "sha512-F1C87eGIte9nfBU/MyNI6OOVKR/uCwFMrjVGv2j5u0LZjBm2WoEso96kPF2j0PIG8+XerD7Y2pmtGdCMCWxtcA==" }, "node_modules/react-native-gesture-handler": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.8.0.tgz", - "integrity": "sha512-poOSfz/w0IyD6Qwq7aaIRRfEaVTl1ecQFoyiIbpOpfNTjm2B1niY2FLrdVQIOtIOe+K9nH55Qal04nr4jGkHdQ==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.9.0.tgz", + "integrity": "sha512-a0BcH3Qb1tgVqUutc6d3VuWQkI1AM3+fJx8dkxzZs9t06qA27QgURYFoklpabuWpsUTzuKRpxleykp25E8m7tg==", "dependencies": { "@egjs/hammerjs": "^2.0.17", "hoist-non-react-statics": "^3.3.0", @@ -20636,9 +20905,9 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -20786,9 +21055,9 @@ "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, "node_modules/resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz", + "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==", "dev": true, "engines": { "node": ">=10" @@ -21411,6 +21680,25 @@ "node": ">=0.10.0" } }, + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -21449,9 +21737,9 @@ "deprecated": "See https://github.com/lydell/source-map-url#deprecated" }, "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -21472,9 +21760,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" }, "node_modules/split": { "version": "1.0.1", @@ -21777,6 +22065,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -22005,9 +22310,9 @@ } }, "node_modules/tar/node_modules/minipass": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz", - "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", "engines": { "node": ">=8" } @@ -22370,9 +22675,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.33", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", - "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.34.tgz", + "integrity": "sha512-cJMeh/eOILyGu0ejgTKB95yKT3zOenSe9UGE3vj6WfiOwgGYnmATUsnDixMFvdU+rNMvWih83hrUP8VwhF9yXQ==", "funding": [ { "type": "opencollective", diff --git a/Customer App/package.json b/Customer App/package.json index e34b812..14a84a2 100644 --- a/Customer App/package.json +++ b/Customer App/package.json @@ -24,6 +24,7 @@ ] }, "dependencies": { + "@amplitude/analytics-react-native": "^1.1.1", "@apollo/react-hooks": "^3.1.3", "@expo/vector-icons": "^13.0.0", "@ptomasroos/react-native-multi-slider": "^2.2.2", @@ -51,6 +52,7 @@ "expo-apple-authentication": "~5.0.1", "expo-application": "~5.0.1", "expo-asset": "~8.7.0", + "expo-auth-session": "~3.8.0", "expo-camera": "~13.1.0", "expo-constants": "~14.0.2", "expo-contacts": "~11.0.1", @@ -63,6 +65,7 @@ "expo-localization": "~14.0.0", "expo-location": "~15.0.1", "expo-notifications": "~0.17.0", + "expo-random": "~13.0.0", "expo-sensors": "~12.0.1", "expo-splash-screen": "~0.17.5", "expo-tracking-transparency": "~3.0.1", @@ -78,7 +81,7 @@ "react-native-button": "^3.0.1", "react-native-flash-message": "^0.4.0", "react-native-flatlist-slider": "^1.0.5", - "react-native-gesture-handler": "~2.8.0", + "react-native-gesture-handler": "~~2.1.0", "react-native-gifted-chat": "^1.1.1", "react-native-i18n": "1.0.0", "react-native-maps": "1.3.2", diff --git a/Customer App/src/components/Menu/StatusCard/StatusCard.js b/Customer App/src/components/Menu/StatusCard/StatusCard.js index cce1526..2f476d4 100644 --- a/Customer App/src/components/Menu/StatusCard/StatusCard.js +++ b/Customer App/src/components/Menu/StatusCard/StatusCard.js @@ -1,67 +1,67 @@ -import { useNavigation, useTheme } from '@react-navigation/native' -import React, { useContext } from 'react' -import { FlatList, TouchableOpacity, View } from 'react-native' -import ConfigurationContext from '../../../context/Configuration' -import UserContext from '../../../context/User' -import { alignment } from '../../../utils/alignment' -import { NAVIGATION_SCREEN } from '../../../utils/constant' -import Spinner from '../../Spinner/Spinner' -import TextDefault from '../../Text/TextDefault/TextDefault' -import TextError from '../../Text/TextError/TextError' -import useStyle from './styles' +import { useNavigation, useTheme } from "@react-navigation/native"; +import React, { useContext } from "react"; +import { FlatList, TouchableOpacity, View } from "react-native"; +import ConfigurationContext from "../../../context/Configuration"; +import UserContext from "../../../context/User"; +import { alignment } from "../../../utils/alignment"; +import { NAVIGATION_SCREEN } from "../../../utils/constant"; +import Spinner from "../../Spinner/Spinner"; +import TextDefault from "../../Text/TextDefault/TextDefault"; +import TextError from "../../Text/TextError/TextError"; +import useStyle from "./styles"; export const orderStatuses = [ { - key: 'PENDING', + key: "PENDING", status: 1, - statusText: 'Your order is still pending.' + statusText: "Your order is still pending.", }, { - key: 'ACCEPTED', + key: "ACCEPTED", status: 2, - statusText: 'Restaurant is preparing Food.' + statusText: "Restaurant is preparing Food.", }, { - key: 'PICKED', + key: "PICKED", status: 3, - statusText: 'Rider is on the way.' + statusText: "Rider is on the way.", }, { - key: 'DELIVERED', + key: "DELIVERED", status: 4, - statusText: 'Order is delivered.' + statusText: "Order is delivered.", }, { - key: 'COMPLETED', + key: "COMPLETED", status: 5, - statusText: 'Order is completed.' - } -] + statusText: "Order is completed.", + }, +]; -const orderStatusActive = ['PENDING', 'PICKED', 'ACCEPTED'] +const orderStatusActive = ["PENDING", "PICKED", "ACCEPTED"]; const StatusCard = () => { - const { colors } = useTheme() - const styles = useStyle() - const navigation = useNavigation() + const { colors } = useTheme(); + const styles = useStyle(); + const navigation = useNavigation(); const { loadingOrders, errorOrders, orders, networkStatusOrders, - fetchOrders - } = useContext(UserContext) - const configuration = useContext(ConfigurationContext) + fetchOrders, + } = useContext(UserContext); + const configuration = useContext(ConfigurationContext); - const checkStatus = status => { - const obj = orderStatuses.filter(x => { - return x.key === status - }) - return obj[0] - } + const checkStatus = (status) => { + const obj = orderStatuses.filter((x) => { + return x.key === status; + }); + return obj[0]; + }; - if (loadingOrders) return - if (errorOrders) return {errorOrders.message} + if (loadingOrders) return ; + if (errorOrders) return {errorOrders.message}; return ( { horizontal={true} refreshing={networkStatusOrders === 4} onRefresh={() => networkStatusOrders === 7 && fetchOrders()} - data={orders.filter(o => orderStatusActive.includes(o.order_status))} - keyExtractor={item => item._id} + data={orders.filter((o) => orderStatusActive.includes(o.order_status))} + //keyExtractor={(item) => item._id} + keyExtractor={(item, index) => String(index)} renderItem={({ item, index }) => ( { onPress={() => navigation.navigate(NAVIGATION_SCREEN.OrderDetail, { _id: item._id, - currency_symbol: configuration.currency_symbol + currency_symbol: configuration.currency_symbol, }) - }> + } + > @@ -95,8 +97,8 @@ const StatusCard = () => { Status - - {item.order_status}{' '} + + {item.order_status}{" "} {/* {checkStatus(item.order_status).status}.{' '} */}( {checkStatus(item.order_status).statusText}) @@ -107,7 +109,7 @@ const StatusCard = () => { )} /> - ) -} + ); +}; -export default StatusCard +export default StatusCard; diff --git a/Customer App/src/screens/Addresses/Addresses.js b/Customer App/src/screens/Addresses/Addresses.js index 5af9445..a11b548 100644 --- a/Customer App/src/screens/Addresses/Addresses.js +++ b/Customer App/src/screens/Addresses/Addresses.js @@ -1,59 +1,59 @@ -import { useMutation } from '@apollo/react-hooks' -import { useNavigation, useTheme } from '@react-navigation/native' -import gql from 'graphql-tag' -import React, { useContext, useLayoutEffect } from 'react' -import { FlatList, TouchableOpacity, View } from 'react-native' -import i18n from '../../../i18n' -import { deleteAddress } from '../../apollo/server' -import EmptyAddress from '../../assets/images/SVG/imageComponents/EmptyAddress' +import { useMutation } from "@apollo/react-hooks"; +import { useNavigation, useTheme } from "@react-navigation/native"; +import gql from "graphql-tag"; +import React, { useContext, useLayoutEffect } from "react"; +import { FlatList, TouchableOpacity, View } from "react-native"; +import i18n from "../../../i18n"; +import { deleteAddress } from "../../apollo/server"; +import EmptyAddress from "../../assets/images/SVG/imageComponents/EmptyAddress"; import { CustomIcon, RightButton, TextDefault, - WrapperView -} from '../../components' -import UserContext from '../../context/User' -import { COLORS } from '../../Theme' -import { alignment } from '../../utils/alignment' -import { ICONS_NAME, NAVIGATION_SCREEN } from '../../utils/constant' -import { scale } from '../../utils/scaling' -import useStyle from './styles' + WrapperView, +} from "../../components"; +import UserContext from "../../context/User"; +import { COLORS } from "../../Theme"; +import { alignment } from "../../utils/alignment"; +import { ICONS_NAME, NAVIGATION_SCREEN } from "../../utils/constant"; +import { scale } from "../../utils/scaling"; +import useStyle from "./styles"; const DELETE_ADDRESS = gql` ${deleteAddress} -` +`; function Addresses() { - const styles = useStyle() - const { colors } = useTheme() - const navigation = useNavigation() - const { profile } = useContext(UserContext) - const [mutate, { loading: loadingMutation }] = useMutation(DELETE_ADDRESS) + const styles = useStyle(); + const { colors } = useTheme(); + const navigation = useNavigation(); + const { profile } = useContext(UserContext); + const [mutate, { loading: loadingMutation }] = useMutation(DELETE_ADDRESS); useLayoutEffect(() => { navigation.setOptions({ - title: i18n.t('myAddresses'), + title: i18n.t("myAddresses"), headerRight: () => ( navigation.navigate(NAVIGATION_SCREEN.NewAddress)} /> - ) - }) - }, [navigation]) + ), + }); + }, [navigation]); const addressIcons = { Home: ICONS_NAME.Home, Work: ICONS_NAME.Cart, - Other: ICONS_NAME.Location - } + Other: ICONS_NAME.Location, + }; const colorIcons = { Other: COLORS.primary, Home: COLORS.redishPink, - Work: COLORS.primaryLightBlue - } + Work: COLORS.primaryLightBlue, + }; const emptyView = React.memo(() => { return ( @@ -66,28 +66,30 @@ function Addresses() { textColor={colors.fontMainColor} bold H5 - style={alignment.Msmall}> + style={alignment.Msmall} + > No Addresses found. You haven't saved any address yet. - {'\n'} + {"\n"} Click Add New Address to get started navigation.navigate(NAVIGATION_SCREEN.NewAddress)}> + onPress={() => navigation.navigate(NAVIGATION_SCREEN.NewAddress)} + > Add New Address - ) - }) + ); + }); return ( @@ -101,7 +103,8 @@ function Addresses() { : { flexGrow: 1 } } ListEmptyComponent={emptyView} - keyExtractor={item => item._id} + // keyExtractor={(item) => item._id} + keyExtractor={(item, index) => String(index)} ItemSeparatorComponent={() => } ListHeaderComponent={() => } renderItem={({ item: address }) => ( @@ -110,16 +113,18 @@ function Addresses() { style={styles.width100} onPress={() => { navigation.navigate(NAVIGATION_SCREEN.EditAddress, { - ...address - }) - }}> + ...address, + }); + }} + > + alignItems: "center", + flexDirection: "row", + flex: 1, + }} + > + style={[alignment.MTxSmall, alignment.MLsmall]} + > {address.label} @@ -139,9 +145,10 @@ function Addresses() { style={[styles.iconButton, alignment.MRsmall]} onPress={() => { navigation.navigate(NAVIGATION_SCREEN.EditAddress, { - ...address - }) - }}> + ...address, + }); + }} + > { - mutate({ variables: { id: address._id } }) - }}> + mutate({ variables: { id: address._id } }); + }} + > + style={alignment.MBsmall} + > All rights are reserved by Enatega - ) + ); } -export default React.memo(Addresses) +export default React.memo(Addresses); diff --git a/Customer App/src/screens/CartAddress/CartAddress.js b/Customer App/src/screens/CartAddress/CartAddress.js index 10416b9..2c129ef 100644 --- a/Customer App/src/screens/CartAddress/CartAddress.js +++ b/Customer App/src/screens/CartAddress/CartAddress.js @@ -1,56 +1,56 @@ -import { useMutation } from '@apollo/react-hooks' -import { useNavigation, useTheme } from '@react-navigation/native' -import gql from 'graphql-tag' -import React, { useContext, useLayoutEffect } from 'react' -import { FlatList, TouchableOpacity, View } from 'react-native' -import i18n from '../../../i18n' -import { selectAddress } from '../../apollo/server' +import { useMutation } from "@apollo/react-hooks"; +import { useNavigation, useTheme } from "@react-navigation/native"; +import gql from "graphql-tag"; +import React, { useContext, useLayoutEffect } from "react"; +import { FlatList, TouchableOpacity, View } from "react-native"; +import i18n from "../../../i18n"; +import { selectAddress } from "../../apollo/server"; import { CustomIcon, RightButton, TextDefault, - WrapperView -} from '../../components' -import RadioButton from '../../components/FdRadioBtn/RadioBtn' -import UserContext from '../../context/User' -import { alignment } from '../../utils/alignment' -import { ICONS_NAME, NAVIGATION_SCREEN } from '../../utils/constant' -import { scale } from '../../utils/scaling' -import useStyle from './styles' + WrapperView, +} from "../../components"; +import RadioButton from "../../components/FdRadioBtn/RadioBtn"; +import UserContext from "../../context/User"; +import { alignment } from "../../utils/alignment"; +import { ICONS_NAME, NAVIGATION_SCREEN } from "../../utils/constant"; +import { scale } from "../../utils/scaling"; +import useStyle from "./styles"; const SELECT_ADDRESS = gql` ${selectAddress} -` +`; function CartAddresses() { - const { colors } = useTheme() - const styles = useStyle() - const navigation = useNavigation() - const { profile } = useContext(UserContext) + const { colors } = useTheme(); + const styles = useStyle(); + const navigation = useNavigation(); + const { profile } = useContext(UserContext); - const [mutate] = useMutation(SELECT_ADDRESS, { onError }) + const [mutate] = useMutation(SELECT_ADDRESS, { onError }); useLayoutEffect(() => { navigation.setOptions({ - title: i18n.t('myAddresses'), + title: i18n.t("myAddresses"), headerRight: () => ( navigation.navigate(NAVIGATION_SCREEN.NewAddress)} /> - ) - }) - }, [navigation]) + ), + }); + }, [navigation]); function onError(error) { - console.log(error) + console.log(error); } - const onSelectAddress = address => { - mutate({ variables: { id: address._id } }) - navigation.goBack() - } + const onSelectAddress = (address) => { + mutate({ variables: { id: address._id } }); + navigation.goBack(); + }; return ( @@ -59,7 +59,7 @@ function CartAddresses() { showsVerticalScrollIndicator={false} style={styles.flex} data={profile.addresses} - keyExtractor={item => item._id} + keyExtractor={(item, index) => String(index)} contentContainerStyle={styles.contentContainer} ItemSeparatorComponent={() => } ListHeaderComponent={() => } @@ -69,8 +69,9 @@ function CartAddresses() { activeOpacity={0.7} style={styles.width100} onPress={() => { - onSelectAddress(address) - }}> + onSelectAddress(address); + }} + > @@ -78,14 +79,14 @@ function CartAddresses() { size={10} outerColor={colors.radioOuterColor} innerColor={colors.radioColor} - animation={'bounceIn'} + animation={"bounceIn"} isSelected={address.selected} onPress={() => { - onSelectAddress(address) + onSelectAddress(address); }} /> - + {address.label} navigation.navigate(NAVIGATION_SCREEN.EditAddress, { - ...address + ...address, }) - }> + } + > + bold + > {address.delivery_address} + bold + > {address.details} @@ -125,7 +129,7 @@ function CartAddresses() { /> - ) + ); } -export default CartAddresses +export default CartAddresses; diff --git a/Customer App/src/screens/Chat/Chat.js b/Customer App/src/screens/Chat/Chat.js index fdffb04..be21c99 100644 --- a/Customer App/src/screens/Chat/Chat.js +++ b/Customer App/src/screens/Chat/Chat.js @@ -1,90 +1,90 @@ -import { Feather, FontAwesome } from '@expo/vector-icons' -import { useNavigation, useTheme } from '@react-navigation/native' -import React, { useCallback, useEffect, useState } from 'react' -import { Keyboard, View } from 'react-native' +import { Feather, FontAwesome } from "@expo/vector-icons"; +import { useNavigation, useTheme } from "@react-navigation/native"; +import React, { useCallback, useEffect, useState } from "react"; +import { Keyboard, View } from "react-native"; import { Bubble, GiftedChat, InputToolbar, - Send -} from 'react-native-gifted-chat' -import { TextDefault, WrapperView } from '../../components' -import { alignment } from '../../utils/alignment' -import { scale } from '../../utils/scaling' -import useStyle from './styles' + Send, +} from "react-native-gifted-chat"; +import { TextDefault, WrapperView } from "../../components"; +import { alignment } from "../../utils/alignment"; +import { scale } from "../../utils/scaling"; +import useStyle from "./styles"; const UserInfo = { _id: 1, - name: 'Jason', - active: true -} + name: "Jason", + active: true, +}; function Chat() { - const styles = useStyle() - const { colors } = useTheme() - const navigation = useNavigation() - const [messages, setMessages] = useState([]) - const [isTyping, setIsTyping] = useState(false) + const styles = useStyle(); + const { colors } = useTheme(); + const navigation = useNavigation(); + const [messages, setMessages] = useState([]); + const [isTyping, setIsTyping] = useState(false); useEffect(() => { - Keyboard.addListener('keyboardDidShow', _keyboardDidShow) - Keyboard.addListener('keyboardDidHide', _keyboardDidHide) + Keyboard.addListener("keyboardDidShow", _keyboardDidShow); + Keyboard.addListener("keyboardDidHide", _keyboardDidHide); // cleanup function return () => { - Keyboard.removeListener('keyboardDidShow', _keyboardDidShow) - Keyboard.removeListener('keyboardDidHide', _keyboardDidHide) - } - }, []) + Keyboard.remove("keyboardDidShow", _keyboardDidShow); + Keyboard.remove("keyboardDidHide", _keyboardDidHide); + }; + }, []); - const _keyboardDidShow = () => setIsTyping(true) - const _keyboardDidHide = () => setIsTyping(false) + const _keyboardDidShow = () => setIsTyping(true); + const _keyboardDidHide = () => setIsTyping(false); useEffect(() => { navigation.setOptions({ - title: 'Chat' - }) + title: "Chat", + }); setMessages([ { _id: 1, - text: 'How can I help you?', + text: "How can I help you?", sent: true, received: true, createdAt: new Date(), user: { _id: 2, - name: 'React Native', - avatar: 'https://placeimg.com/140/140/any' - } - } - ]) - }, [navigation]) + name: "React Native", + avatar: "https://placeimg.com/140/140/any", + }, + }, + ]); + }, [navigation]); const onSend = useCallback((messages = []) => { - setMessages(previousMessages => + setMessages((previousMessages) => GiftedChat.append(previousMessages, messages) - ) - }, []) + ); + }, []); - const renderBubble = props => { + const renderBubble = (props) => { return ( - ) - } + ); + }; - const renderSend = props => ( + const renderSend = (props) => ( - ) - const customtInputToolbar = props => { + ); + const customtInputToolbar = (props) => { return ( - ) - } + ); + }; return ( @@ -166,7 +166,7 @@ function Chat() { color={UserInfo.active ? colors.active : colors.fontSecondColor} /> - {UserInfo.active ? UserInfo.name : 'Offline'} + {UserInfo.active ? UserInfo.name : "Offline"} onSend(messages)} + onSend={(messages) => onSend(messages)} renderAvatar={() => null} renderBubble={renderBubble} renderInputToolbar={customtInputToolbar} @@ -192,20 +192,20 @@ function Chat() { // } timeTextStyle={{ left: { - width: '100%', + width: "100%", color: colors.fontMainColor, fontSize: 11, - textAlign: 'right' + textAlign: "right", }, right: { color: colors.fontMainColor, - fontSize: 11 - } + fontSize: 11, + }, }} /> - ) + ); } -export default Chat +export default Chat; diff --git a/Customer App/src/screens/CreateAccount/CreateAccount.js b/Customer App/src/screens/CreateAccount/CreateAccount.js index cca5398..b94b694 100644 --- a/Customer App/src/screens/CreateAccount/CreateAccount.js +++ b/Customer App/src/screens/CreateAccount/CreateAccount.js @@ -1,17 +1,18 @@ -import { useMutation } from '@apollo/react-hooks' -import { FontAwesome } from '@expo/vector-icons' -import { useNavigation, useTheme } from '@react-navigation/native' -import * as AppAuth from 'expo-app-auth' -import * as AppleAuthentication from 'expo-apple-authentication' -import Constants from 'expo-constants' -import * as Facebook from 'expo-facebook' -import * as Google from 'expo-google-app-auth' -import * as Notifications from 'expo-notifications' -import gql from 'graphql-tag' -import React, { useContext, useEffect, useState } from 'react' -import { Platform, TouchableOpacity, View } from 'react-native' -import getEnvVars from '../../../environment' -import { login } from '../../apollo/server' +import { useMutation } from "@apollo/react-hooks"; +import { FontAwesome } from "@expo/vector-icons"; +import { useNavigation, useTheme } from "@react-navigation/native"; +import * as AppAuth from "expo-app-auth"; +import * as AppleAuthentication from "expo-apple-authentication"; +import Constants from "expo-constants"; +import * as Facebook from "expo-facebook"; +//import * as Google from 'expo-google-app-auth' +import * as Google from "expo-auth-session/providers/google"; +import * as Notifications from "expo-notifications"; +import gql from "graphql-tag"; +import React, { useContext, useEffect, useState } from "react"; +import { Platform, TouchableOpacity, View } from "react-native"; +import getEnvVars from "../../../environment"; +import { login } from "../../apollo/server"; import { EnategaImage, FdEmailBtn, @@ -21,132 +22,137 @@ import { RegistrationHeader, Spinner, TextDefault, - WrapperView -} from '../../components' -import UserContext from '../../context/User' -import { alignment } from '../../utils/alignment' -import Analytics from '../../utils/analytics' -import { NAVIGATION_SCREEN } from '../../utils/constant' -import { scale } from '../../utils/scaling' -import useStyle from './styles' + WrapperView, +} from "../../components"; +import UserContext from "../../context/User"; +import { alignment } from "../../utils/alignment"; +import Analytics from "../../utils/analytics"; +import { NAVIGATION_SCREEN } from "../../utils/constant"; +import { scale } from "../../utils/scaling"; +import useStyle from "./styles"; -const { IOS_CLIENT_ID_GOOGLE, ANDROID_CLIENT_ID_GOOGLE, FACEBOOK_APP_ID } = - getEnvVars() +const { + IOS_CLIENT_ID_GOOGLE, + ANDROID_CLIENT_ID_GOOGLE, + FACEBOOK_APP_ID, + Expo_CLIENT_ID_GOOGLE, +} = getEnvVars(); const LOGIN = gql` ${login} -` +`; -const Logo = require('../../../assets/logo.png') +const Logo = require("../../../assets/logo.png"); const CreateAccount = () => { - const styles = useStyle() - const { colors } = useTheme() - const navigation = useNavigation() - const [enableApple, setEnableApple] = useState(false) - const [loginButton, loginButtonSetter] = useState(null) - const [loading, setLoading] = useState(false) + const styles = useStyle(); + const { colors } = useTheme(); + const navigation = useNavigation(); + const [enableApple, setEnableApple] = useState(false); + const [loginButton, loginButtonSetter] = useState(null); + const [loading, setLoading] = useState(false); - const { setTokenAsync } = useContext(UserContext) + const { setTokenAsync } = useContext(UserContext); useEffect(() => { - checkIfSupportsAppleAuthentication() - }, []) + checkIfSupportsAppleAuthentication(); + }, []); - const [mutate] = useMutation(LOGIN, { onCompleted, onError }) + const [mutate] = useMutation(LOGIN, { onCompleted, onError }); async function checkIfSupportsAppleAuthentication() { - setEnableApple(await AppleAuthentication.isAvailableAsync()) + setEnableApple(await AppleAuthentication.isAvailableAsync()); } async function onCompleted(data) { try { const trackingOpts = { id: data.login.userId, - usernameOrEmail: data.login.email - } - Analytics.identify(data.login.userId, trackingOpts) - Analytics.track(Analytics.events.USER_CREATED_ACCOUNT, trackingOpts) - setTokenAsync(data.login.token) - navigation.navigate(NAVIGATION_SCREEN.Menu) + usernameOrEmail: data.login.email, + }; + Analytics.identify(data.login.userId, trackingOpts); + Analytics.track(Analytics.events.USER_CREATED_ACCOUNT, trackingOpts); + setTokenAsync(data.login.token); + navigation.navigate(NAVIGATION_SCREEN.Menu); } catch (e) { - console.log(e) + console.log(e); } finally { - setLoading(false) + setLoading(false); } } function onError(error) { try { - console.log(JSON.stringify(error)) + console.log(JSON.stringify(error)); FlashMessage({ - message: error.graphQLErrors[0].message - }) - loginButtonSetter(null) + message: error.graphQLErrors[0].message, + }); + loginButtonSetter(null); } catch (e) { - console.log(e) + console.log(e); } finally { - setLoading(false) + setLoading(false); } } async function mutateLogin(user) { - setLoading(true) - let notificationToken = null + setLoading(true); + let notificationToken = null; if (Constants.isDevice) { const { status: existingStatus } = - await Notifications.getPermissionsAsync() - if (existingStatus === 'granted') { - notificationToken = (await Notifications.getExpoPushTokenAsync()).data + await Notifications.getPermissionsAsync(); + if (existingStatus === "granted") { + notificationToken = (await Notifications.getExpoPushTokenAsync()).data; } } - mutate({ variables: { ...user, notificationToken } }) + mutate({ variables: { ...user, notificationToken } }); } function renderAppleAction() { - if (loading && loginButton === 'Apple') { + if (loading && loginButton === "Apple") { return ( - ) + ); } return ( { + onPress={async () => { try { const credential = await AppleAuthentication.signInAsync({ requestedScopes: [ AppleAuthentication.AppleAuthenticationScope.FULL_NAME, - AppleAuthentication.AppleAuthenticationScope.EMAIL - ] - }) + AppleAuthentication.AppleAuthenticationScope.EMAIL, + ], + }); if (credential) { const user = { appleId: credential.user, - phone: '', + phone: "", email: credential.email, - password: '', + password: "", name: credential.fullName.givenName + - ' ' + + " " + credential.fullName.familyName, - picture: '', - type: 'apple' - } - mutateLogin(user) + picture: "", + type: "apple", + }; + mutateLogin(user); } - loginButtonSetter('Apple') + loginButtonSetter("Apple"); // signed in } catch (e) { - if (e.code === 'ERR_CANCELLED') { + if (e.code === "ERR_CANCELLED") { // handle that the user canceled the sign-in flow - loginButtonSetter(null) + loginButtonSetter(null); } else { // handle other errors - loginButtonSetter(null) + loginButtonSetter(null); } } - }}> + }} + > { Signup with Apple - ) + ); } async function _facebookSignup() { try { - await Facebook.initializeAsync({ appId: FACEBOOK_APP_ID }) + await Facebook.initializeAsync({ appId: FACEBOOK_APP_ID }); } catch (err) { - console.log('err', err) + console.log("err", err); } try { const { type, token } = await Facebook.logInWithReadPermissionsAsync({ - permissions: ['public_profile', 'email'] - }) - if (type === 'success') { + permissions: ["public_profile", "email"], + }); + if (type === "success") { // Get the user's name using Facebook's Graph API const response = await fetch( `https://graph.facebook.com/me?access_token=${token}&fields=email,name` - ) - const user = await response.json() - return user + ); + const user = await response.json(); + return user; } } catch (err) { - console.log('error', err) + console.log("error", err); } } - async function _googleSignup() { - try { - const { type, user } = await Google.logInAsync({ - iosClientId: IOS_CLIENT_ID_GOOGLE, - iosStandaloneAppClientId: IOS_CLIENT_ID_GOOGLE, - androidClientId: ANDROID_CLIENT_ID_GOOGLE, - androidStandaloneAppClientId: ANDROID_CLIENT_ID_GOOGLE, - redirectUrl: `${AppAuth.OAuthRedirect}:/oauth2redirect/google`, - scopes: ['profile', 'email'] - }) - if (type === 'success') { - /* `accessToken` is now valid and can be used to get data from the Google API with HTTP requests */ - return user - } - } catch (err) { - console.log('err', err) + + const [googleRequest, googleResponse, googlePromptAsync] = + Google.useAuthRequest({ + expoClientId: Expo_CLIENT_ID_GOOGLE, + iosClientId: IOS_CLIENT_ID_GOOGLE, + iosStandaloneAppClientId: IOS_CLIENT_ID_GOOGLE, + androidClientId: ANDROID_CLIENT_ID_GOOGLE, + androidStandaloneAppClientId: ANDROID_CLIENT_ID_GOOGLE, + //redirectUrl: `${AuthSession.OAuthRedirect}:/oauth2redirect/google`, + scopes: ["profile", "email"], + ...{ useProxy: true }, + }); + + const googleSignUp = () => { + if (googleResponse?.type === "success") { + const { authentication } = googleResponse; + console.log(authentication.accessToken); + (async () => { + const userInfoResponse = await fetch( + "https://www.googleapis.com/oauth2/v1/userinfo?alt=json", + { + headers: { Authorization: `Bearer ${authentication.accessToken}` }, + } + ); + const googleUser = await userInfoResponse.json(); + const user = { + phone: "", + email: googleUser.email, + password: "", + name: googleUser.name, + picture: googleUser.picture, + type: "google", + }; + mutateLogin(user); + })(); } - } + }; + + useEffect(() => { + googleSignUp(); + }, [googleResponse]); function renderFacebookAction() { return ( { - loginButtonSetter('Facebook') + loginButtonSetter("Facebook"); }} - onPress={async() => { - const facebookUser = await _facebookSignup() + onPress={async () => { + const facebookUser = await _facebookSignup(); if (facebookUser) { const user = { facebookId: facebookUser.id, - phone: '', + phone: "", email: facebookUser.email, - password: '', + password: "", name: facebookUser.name, - picture: '', - type: 'facebook' - } - mutateLogin(user) + picture: "", + type: "facebook", + }; + mutateLogin(user); } }} /> - ) + ); } function renderGoogleAction() { return ( { - loginButtonSetter('Google') - }} - onPress={async() => { - const googleUser = await _googleSignup() - if (googleUser) { - const user = { - phone: '', - email: googleUser.email, - password: '', - name: googleUser.name, - picture: googleUser.photoUrl, - type: 'google' - } - mutateLogin(user) - } + loginButtonSetter("Google"); }} + disabled={!googleRequest} + onPress={() => googlePromptAsync()} /> - ) + ); } function renderEmailAction() { return ( { - loginButtonSetter('Email') - navigation.navigate(NAVIGATION_SCREEN.Register) + loginButtonSetter("Email"); + navigation.navigate(NAVIGATION_SCREEN.Register); }} /> - ) + ); } return ( - + { /> - {Platform.OS === 'ios' && renderFacebookAction()} + {Platform.OS === "ios" && renderFacebookAction()} {renderGoogleAction()} {enableApple && ( {renderAppleAction()} @@ -286,7 +303,8 @@ const CreateAccount = () => { navigation.navigate(NAVIGATION_SCREEN.Login)}> + onPress={() => navigation.navigate(NAVIGATION_SCREEN.Login)} + > Already a member? Log in @@ -295,6 +313,6 @@ const CreateAccount = () => { - ) -} -export default CreateAccount + ); +}; +export default CreateAccount; diff --git a/Customer App/src/screens/Menu/Menu.js b/Customer App/src/screens/Menu/Menu.js index b744306..6c3735c 100755 --- a/Customer App/src/screens/Menu/Menu.js +++ b/Customer App/src/screens/Menu/Menu.js @@ -1,51 +1,51 @@ -import { useQuery } from '@apollo/react-hooks' -import { useNavigation } from '@react-navigation/native' -import gql from 'graphql-tag' -import React, { useContext, useLayoutEffect } from 'react' -import { FlatList, View } from 'react-native' -import { categories } from '../../apollo/server' -import EmptyFood from '../../assets/images/SVG/imageComponents/EmptyFood' +import { useQuery } from "@apollo/react-hooks"; +import { useNavigation } from "@react-navigation/native"; +import gql from "graphql-tag"; +import React, { useContext, useLayoutEffect } from "react"; +import { FlatList, View } from "react-native"; +import { categories } from "../../apollo/server"; +import EmptyFood from "../../assets/images/SVG/imageComponents/EmptyFood"; import { MenuCard, Spinner, StatusCard, TextDefault, TextError, - WrapperView -} from '../../components' -import UserContext from '../../context/User' -import { alignment } from '../../utils/alignment' -import { NAVIGATION_SCREEN } from '../../utils/constant' -import { scale } from '../../utils/scaling' -import useStyle from './styles' + WrapperView, +} from "../../components"; +import UserContext from "../../context/User"; +import { alignment } from "../../utils/alignment"; +import { NAVIGATION_SCREEN } from "../../utils/constant"; +import { scale } from "../../utils/scaling"; +import useStyle from "./styles"; // constants const CATEGORIES = gql` ${categories} -` +`; function Menu() { - const styles = useStyle() - const navigation = useNavigation() - const { isLoggedIn, profile } = useContext(UserContext) - const { data, refetch, networkStatus, loading, error } = useQuery(CATEGORIES) + const styles = useStyle(); + const navigation = useNavigation(); + const { isLoggedIn, profile } = useContext(UserContext); + const { data, refetch, networkStatus, loading, error } = useQuery(CATEGORIES); useLayoutEffect(() => { navigation.setOptions({ - title: 'Home' - }) - }, []) + title: "Home", + }); + }, []); function emptyView() { if (loading) { - return + return ; } else if (error) { return ( - ) + ); } else { return ( @@ -54,7 +54,7 @@ function Menu() { No item found - ) + ); } } @@ -65,7 +65,7 @@ function Menu() { style={styles.flex} contentContainerStyle={styles.contentContainer} showsVerticalScrollIndicator={false} - keyExtractor={item => item._id} + keyExtractor={(item, index) => String(index)} ListEmptyComponent={emptyView()} data={loading ? [] : error ? [] : data.categories} refreshing={networkStatus === 4} @@ -80,28 +80,28 @@ function Menu() { Featured - ) + ); } - return null + return null; }} renderItem={({ item }) => ( navigation.navigate(NAVIGATION_SCREEN.MenuItems, { - ...item + ...item, }) } title={item.title} description={item.description} - image={item.img_menu || ''} + image={item.img_menu || ""} /> )} /> - ) + ); } -export default React.memo(Menu) +export default React.memo(Menu); diff --git a/Customer App/src/screens/MenuItems/MenuItems.js b/Customer App/src/screens/MenuItems/MenuItems.js index dbdecf1..2cbf3b3 100755 --- a/Customer App/src/screens/MenuItems/MenuItems.js +++ b/Customer App/src/screens/MenuItems/MenuItems.js @@ -247,7 +247,7 @@ function MenuItems() { contentContainerStyle={styles.contentContaienr} showsVerticalScrollIndicator={false} ListHeaderComponent={renderListHeader()} - keyExtractor={(item) => item._id} + keyExtractor={(item, index) => String(index)} ListEmptyComponent={emptyView} data={loading ? [] : error ? [] : sortData(data.foodByCategory)} refreshing={networkStatus === 4} diff --git a/Customer App/src/screens/MyOrders/MyOrders.js b/Customer App/src/screens/MyOrders/MyOrders.js index 986c050..7897fc0 100755 --- a/Customer App/src/screens/MyOrders/MyOrders.js +++ b/Customer App/src/screens/MyOrders/MyOrders.js @@ -1,10 +1,10 @@ -import { useApolloClient } from '@apollo/react-hooks' -import { useNavigation, useTheme } from '@react-navigation/native' -import React, { useContext, useLayoutEffect } from 'react' -import { FlatList, TouchableOpacity, View } from 'react-native' -import uuid from 'uuid' -import i18n from '../../../i18n' -import EmptyOrder from '../../assets/images/SVG/imageComponents/EmptyOrder' +import { useApolloClient } from "@apollo/react-hooks"; +import { useNavigation, useTheme } from "@react-navigation/native"; +import React, { useContext, useLayoutEffect } from "react"; +import { FlatList, TouchableOpacity, View } from "react-native"; +import uuid from "uuid"; +import i18n from "../../../i18n"; +import EmptyOrder from "../../assets/images/SVG/imageComponents/EmptyOrder"; import { ActiveOrders, CustomIcon, @@ -12,24 +12,24 @@ import { Spinner, TextDefault, TextError, - WrapperView -} from '../../components' -import ConfigurationContext from '../../context/Configuration' -import UserContext from '../../context/User' -import { alignment } from '../../utils/alignment' -import { ICONS_NAME, NAVIGATION_SCREEN } from '../../utils/constant' -import { scale } from '../../utils/scaling' -import useStyle from './style' + WrapperView, +} from "../../components"; +import ConfigurationContext from "../../context/Configuration"; +import UserContext from "../../context/User"; +import { alignment } from "../../utils/alignment"; +import { ICONS_NAME, NAVIGATION_SCREEN } from "../../utils/constant"; +import { scale } from "../../utils/scaling"; +import useStyle from "./style"; -const orderStatusActive = ['PENDING', 'PICKED', 'ACCEPTED'] -const orderStatusInactive = ['DELIVERED', 'COMPLETED'] +const orderStatusActive = ["PENDING", "PICKED", "ACCEPTED"]; +const orderStatusInactive = ["DELIVERED", "COMPLETED"]; function MyOrders() { - const styles = useStyle() - const { colors } = useTheme() - const client = useApolloClient() - const navigation = useNavigation() - const configuration = useContext(ConfigurationContext) + const styles = useStyle(); + const { colors } = useTheme(); + const client = useApolloClient(); + const navigation = useNavigation(); + const configuration = useContext(ConfigurationContext); const { orders, loadingOrders, @@ -37,47 +37,47 @@ function MyOrders() { fetchOrders, fetchMoreOrdersFunc, networkStatusOrders, - updateCart - } = useContext(UserContext) + updateCart, + } = useContext(UserContext); useLayoutEffect(() => { navigation.setOptions({ - headerTitle: i18n.t('titleOrders'), - headerRight: null - }) - }, [navigation]) + headerTitle: i18n.t("titleOrders"), + headerRight: null, + }); + }, [navigation]); // add items to cart and navigate to cart screen async function onReOrder({ order }) { const data = { - cartItems: order.items.map(item => { + cartItems: order.items.map((item) => { return { ...item.food, key: uuid.v4(), - __typename: 'CartItem', + __typename: "CartItem", variation: { - __typename: 'ItemVariation', - _id: item.variation._id + __typename: "ItemVariation", + _id: item.variation._id, }, quantity: item.quantity, - addons: item.addons.map(addon => ({ + addons: item.addons.map((addon) => ({ ...addon, - __typename: 'ItemAddon', + __typename: "ItemAddon", options: addon.options.map(({ _id }) => ({ _id, - __typename: 'ItemOption' - })) - })) - } - }) - } - await updateCart(data.cartItems) - navigation.navigate(NAVIGATION_SCREEN.Cart) + __typename: "ItemOption", + })), + })), + }; + }), + }; + await updateCart(data.cartItems); + navigation.navigate(NAVIGATION_SCREEN.Cart); } function emptyView() { - if (loadingOrders) return - if (errorOrders) return + if (loadingOrders) return ; + if (errorOrders) return ; else { return ( @@ -92,13 +92,14 @@ function MyOrders() { navigation.navigate(NAVIGATION_SCREEN.Menu)}> + onPress={() => navigation.navigate(NAVIGATION_SCREEN.Menu)} + > Start Shopping - ) + ); } } @@ -108,7 +109,7 @@ function MyOrders() { data={ loadingOrders || errorOrders ? [] - : orders.filter(o => orderStatusInactive.includes(o.order_status)) + : orders.filter((o) => orderStatusInactive.includes(o.order_status)) } style={styles.container} contentContainerStyle={styles.contentContainer} @@ -116,17 +117,18 @@ function MyOrders() { ListHeaderComponent={ + activeOrders={orders.filter((o) => orderStatusActive.includes(o.order_status) )} - pastOrders={orders.filter(o => + pastOrders={orders.filter((o) => orderStatusInactive.includes(o.order_status) )} loading={loadingOrders} error={errorOrders} /> } - keyExtractor={item => item._id} + //keyExtractor={(item) => item._id} + keyExtractor={(item, index) => String(index)} refreshing={networkStatusOrders === 4} onRefresh={() => networkStatusOrders === 7 && fetchOrders()} renderItem={({ item }) => ( @@ -135,9 +137,10 @@ function MyOrders() { onPress={() => navigation.navigate(NAVIGATION_SCREEN.OrderDetail, { _id: item._id, - currency_symbol: configuration.currency_symbol + currency_symbol: configuration.currency_symbol, }) - }> + } + > - {'ID: '} + {"ID: "} {item.order_id} @@ -163,9 +166,10 @@ function MyOrders() { onReOrder({ order: item, client })} - style={styles.subContainerRight}> + style={styles.subContainerRight} + > - + - {'Re-Order'} + center + > + {"Re-Order"} @@ -187,7 +192,7 @@ function MyOrders() { onEndReached={fetchMoreOrdersFunc} /> - ) + ); } -export default MyOrders +export default MyOrders; diff --git a/Customer App/src/screens/Settings/Settings.js b/Customer App/src/screens/Settings/Settings.js index 2f25a10..73a5b78 100644 --- a/Customer App/src/screens/Settings/Settings.js +++ b/Customer App/src/screens/Settings/Settings.js @@ -1,207 +1,207 @@ -import { useMutation } from '@apollo/react-hooks' -import AsyncStorage from '@react-native-async-storage/async-storage' -import { useNavigation, useTheme } from '@react-navigation/native' -import Constants from 'expo-constants' -import * as Device from 'expo-device' -import * as Localization from 'expo-localization' -import * as Notifications from 'expo-notifications' -import * as Updates from 'expo-updates' -import gql from 'graphql-tag' -import React, { useContext, useEffect, useRef, useState } from 'react' +import { useMutation } from "@apollo/react-hooks"; +import AsyncStorage from "@react-native-async-storage/async-storage"; +import { useNavigation, useTheme } from "@react-navigation/native"; +import Constants from "expo-constants"; +import * as Device from "expo-device"; +import * as Localization from "expo-localization"; +import * as Notifications from "expo-notifications"; +import * as Updates from "expo-updates"; +import gql from "graphql-tag"; +import React, { useContext, useEffect, useRef, useState } from "react"; import { AppState, Linking, Platform, StyleSheet, TouchableOpacity, - View -} from 'react-native' -import { Modalize } from 'react-native-modalize' -import i18n from '../../../i18n' + View, +} from "react-native"; +import { Modalize } from "react-native-modalize"; +import i18n from "../../../i18n"; import { profile, pushToken, - updateNotificationStatus -} from '../../apollo/server' + updateNotificationStatus, +} from "../../apollo/server"; import { CustomIcon, FlashMessage, Spinner, TextDefault, - WrapperView -} from '../../components' -import SwitchBtn from '../../components/FdSwitch/SwitchBtn' -import UserContext from '../../context/User' -import { alignment } from '../../utils/alignment' -import { ICONS_NAME } from '../../utils/constant' -import { scale } from '../../utils/scaling' -import SettingModal from './components/SettingModal' -import useStyle from './styles' + WrapperView, +} from "../../components"; +import SwitchBtn from "../../components/FdSwitch/SwitchBtn"; +import UserContext from "../../context/User"; +import { alignment } from "../../utils/alignment"; +import { ICONS_NAME } from "../../utils/constant"; +import { scale } from "../../utils/scaling"; +import SettingModal from "./components/SettingModal"; +import useStyle from "./styles"; const languageTypes = [ - { value: 'English', code: 'en', index: 0 }, - { value: 'français', code: 'fr', index: 1 }, - { value: 'ភាសាខ្មែរ', code: 'km', index: 2 }, - { value: '中文', code: 'zh', index: 3 }, - { value: 'Deutsche', code: 'de', index: 4 } -] + { value: "English", code: "en", index: 0 }, + { value: "français", code: "fr", index: 1 }, + { value: "ភាសាខ្មែរ", code: "km", index: 2 }, + { value: "中文", code: "zh", index: 3 }, + { value: "Deutsche", code: "de", index: 4 }, +]; const PUSH_TOKEN = gql` ${pushToken} -` +`; const UPDATE_NOTIFICATION_TOKEN = gql` ${updateNotificationStatus} -` +`; const PROFILE = gql` ${profile} -` +`; function Settings() { - const styles = useStyle() - const { colors } = useTheme() - const navigation = useNavigation() - const { profile } = useContext(UserContext) + const styles = useStyle(); + const { colors } = useTheme(); + const navigation = useNavigation(); + const { profile } = useContext(UserContext); - const [languageName, languageNameSetter] = useState('English') + const [languageName, languageNameSetter] = useState("English"); const [offerNotification, offerNotificationSetter] = useState( profile.is_offer_notification - ) + ); const [orderNotification, orderNotificationSetter] = useState( profile.is_order_notification - ) - const [activeRadio, activeRadioSetter] = useState(languageTypes[0].index) + ); + const [activeRadio, activeRadioSetter] = useState(languageTypes[0].index); // eslint-disable-next-line no-unused-vars - const [appState, setAppState] = useState(AppState.currentState) - const [uploadToken] = useMutation(PUSH_TOKEN) + const [appState, setAppState] = useState(AppState.currentState); + const [uploadToken] = useMutation(PUSH_TOKEN); const [mutate, { loading }] = useMutation(UPDATE_NOTIFICATION_TOKEN, { onCompleted, onError, - refetchQueries: [{ query: PROFILE }] - }) - const modalizeRef = useRef(null) + refetchQueries: [{ query: PROFILE }], + }); + const modalizeRef = useRef(null); useEffect(() => { navigation.setOptions({ - headerTitle: i18n.t('titleSettings'), - headerRight: null - }) - selectLanguage() - checkPermission() - }, [navigation]) + headerTitle: i18n.t("titleSettings"), + headerRight: null, + }); + selectLanguage(); + checkPermission(); + }, [navigation]); - const _handleAppStateChange = async nextAppState => { - if (nextAppState === 'active') { - let token = null - const permission = await getPermission() - if (permission === 'granted') { + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState === "active") { + let token = null; + const permission = await getPermission(); + if (permission === "granted") { if (!profile.notificationToken) { - token = (await Notifications.getExpoPushTokenAsync()).data - uploadToken({ variables: { token } }) + token = (await Notifications.getExpoPushTokenAsync()).data; + uploadToken({ variables: { token } }); } - offerNotificationSetter(profile.is_offer_notification) - orderNotificationSetter(profile.is_order_notification) + offerNotificationSetter(profile.is_offer_notification); + orderNotificationSetter(profile.is_order_notification); } else { - offerNotificationSetter(false) - orderNotificationSetter(false) + offerNotificationSetter(false); + orderNotificationSetter(false); } } - setAppState(nextAppState) - } + setAppState(nextAppState); + }; useEffect(() => { - AppState.addEventListener('change', _handleAppStateChange) + AppState.addEventListener("change", _handleAppStateChange); return () => { - AppState.removeEventListener('change', _handleAppStateChange) - } - }, []) + AppState.remove("change", _handleAppStateChange); + }; + }, []); async function checkPermission() { - const permission = await getPermission() - if (permission !== 'granted') { - offerNotificationSetter(false) - orderNotificationSetter(false) + const permission = await getPermission(); + if (permission !== "granted") { + offerNotificationSetter(false); + orderNotificationSetter(false); } else { - offerNotificationSetter(profile.is_offer_notification) - orderNotificationSetter(profile.is_order_notification) + offerNotificationSetter(profile.is_offer_notification); + orderNotificationSetter(profile.is_order_notification); } } async function getPermission() { - const { status } = await Notifications.getPermissionsAsync() - return status + const { status } = await Notifications.getPermissionsAsync(); + return status; } async function selectLanguage() { - const lang = await AsyncStorage.getItem('enatega-language') + const lang = await AsyncStorage.getItem("enatega-language"); if (lang) { - const defLang = languageTypes.findIndex(el => el.code === lang) - const langName = languageTypes[defLang].value - activeRadioSetter(defLang) - languageNameSetter(langName) + const defLang = languageTypes.findIndex((el) => el.code === lang); + const langName = languageTypes[defLang].value; + activeRadioSetter(defLang); + languageNameSetter(langName); } } - const onSelectedLanguage = async active => { - const languageInd = active - if (Platform.OS === 'android') { - const localization = await Localization.getLocalizationAsync() - localization.locale = languageTypes[languageInd].code + const onSelectedLanguage = async (active) => { + const languageInd = active; + if (Platform.OS === "android") { + const localization = await Localization.getLocalizationAsync(); + localization.locale = languageTypes[languageInd].code; await AsyncStorage.setItem( - 'enatega-language', + "enatega-language", languageTypes[languageInd].code - ) - Updates.reloadAsync() + ); + Updates.reloadAsync(); } - } + }; const onClose = () => { - modalizeRef.current.close() - } + modalizeRef.current.close(); + }; function onCompleted() { FlashMessage({ - message: 'Notification Status Updated' - }) + message: "Notification Status Updated", + }); } function onError(error) { try { FlashMessage({ - message: error.networkError.result.errors[0].message - }) + message: error.networkError.result.errors[0].message, + }); } catch (err) {} } async function updateNotificationStatus(notificationCheck) { - let orderNotify, offerNotify + let orderNotify, offerNotify; if (!Device.isDevice) { FlashMessage({ - message: 'Notification do not work on simulator' - }) - return + message: "Notification do not work on simulator", + }); + return; } - const permission = await getPermission() - if (!profile.notificationToken || permission !== 'granted') { - Linking.openSettings() + const permission = await getPermission(); + if (!profile.notificationToken || permission !== "granted") { + Linking.openSettings(); } - if (notificationCheck === 'offer') { - offerNotificationSetter(!offerNotification) - orderNotify = orderNotification - offerNotify = !offerNotification + if (notificationCheck === "offer") { + offerNotificationSetter(!offerNotification); + orderNotify = orderNotification; + offerNotify = !offerNotification; } - if (notificationCheck === 'order') { - orderNotificationSetter(!orderNotification) - orderNotify = !orderNotification - offerNotify = offerNotification + if (notificationCheck === "order") { + orderNotificationSetter(!orderNotification); + orderNotify = !orderNotification; + offerNotify = offerNotification; } mutate({ variables: { offerNotification: offerNotify, - orderNotification: orderNotify - } - }) + orderNotification: orderNotify, + }, + }); } return ( @@ -213,7 +213,7 @@ function Settings() { )} - {Platform.OS === 'android' && ( + {Platform.OS === "android" && ( @@ -221,7 +221,8 @@ function Settings() { numberOfLines={1} textColor={colors.fontSecondColor} medium - H5> + H5 + > Language @@ -230,8 +231,9 @@ function Settings() { modalizeRef.current.open('top')} - style={styles.button}> + onPress={() => modalizeRef.current.open("top")} + style={styles.button} + > { - updateNotificationStatus('offer') + updateNotificationStatus("offer"); }} - style={[styles.notificationContainer, styles.shadow]}> + style={[styles.notificationContainer, styles.shadow]} + > - {' '} - Receive Special Offers{' '} + textColor={colors.statusSecondColor} + > + {" "} + Receive Special Offers{" "} { - updateNotificationStatus('offer') + updateNotificationStatus("offer"); }} /> @@ -265,20 +269,22 @@ function Settings() { { - updateNotificationStatus('order') + updateNotificationStatus("order"); }} - style={[styles.notificationContainer, styles.shadow]}> + style={[styles.notificationContainer, styles.shadow]} + > - {' '} - Get updates on your order status!{' '} + textColor={colors.statusSecondColor} + > + {" "} + Get updates on your order status!{" "} { - updateNotificationStatus('order') + updateNotificationStatus("order"); }} /> @@ -293,7 +299,8 @@ function Settings() { + center + > All rights are reserved by Enatega @@ -304,10 +311,11 @@ function Settings() { handlePosition="inside" avoidKeyboardLikeIOS={Platform.select({ ios: true, - android: false + android: false, })} keyboardAvoidingOffset={2} - keyboardAvoidingBehavior="height"> + keyboardAvoidingBehavior="height" + > - ) + ); } -export default Settings +export default Settings; diff --git a/Customer App/src/utils/analytics.js b/Customer App/src/utils/analytics.js index 9db3946..2ed465d 100644 --- a/Customer App/src/utils/analytics.js +++ b/Customer App/src/utils/analytics.js @@ -1,15 +1,16 @@ -import * as Amplitude from 'expo-analytics-amplitude' -import { normalizeTrackingOptions } from './analyticsUtils' -import getEnvVars from '../../environment' -import { getTrackingPermissions } from './useAppTrackingTransparency' -const { AMPLITUDE_API_KEY } = getEnvVars() +//import * as Amplitude from 'expo-analytics-amplitude' +import * as Amplitude from "@amplitude/analytics-react-native"; +import { normalizeTrackingOptions } from "./analyticsUtils"; +import getEnvVars from "../../environment"; +import { getTrackingPermissions } from "./useAppTrackingTransparency"; +const { AMPLITUDE_API_KEY } = getEnvVars(); -let isInitialized = false +let isInitialized = false; export const events = { - USER_LOGGED_IN: 'USER_LOGGED_IN', - USER_LOGGED_OUT: 'USER_LOGGED_OUT', - USER_CREATED_ACCOUNT: 'USER_CREATED_ACCOUNT', + USER_LOGGED_IN: "USER_LOGGED_IN", + USER_LOGGED_OUT: "USER_LOGGED_OUT", + USER_CREATED_ACCOUNT: "USER_CREATED_ACCOUNT", // USER_RESET_PASSWORD: 'USER_RESET_PASSWORD', // USER_LINKED_SOCIAL: 'USER_LINKED_SOCIAL', // USER_UPDATED_EMAIL: 'USER_UPDATED_EMAIL', @@ -20,40 +21,41 @@ export const events = { // USER_REMOVED_PROJECT: 'USER_REMOVED_PROJECT', // USER_OPENED_CREATION: 'USER_OPENED_CREATION', // USER_UPDATED_SETTINGS: 'USER_UPDATED_SETTINGS', - USER_PLACED_ORDER: 'USER_PLACED_ORDER' -} + USER_PLACED_ORDER: "USER_PLACED_ORDER", +}; export async function initialize() { - const trackingStatus = await getTrackingPermissions() - if (isInitialized || !AMPLITUDE_API_KEY || trackingStatus !== 'granted') { - return + const trackingStatus = await getTrackingPermissions(); + if (isInitialized || !AMPLITUDE_API_KEY || trackingStatus !== "granted") { + return; } - await Amplitude.initializeAsync(AMPLITUDE_API_KEY) - isInitialized = true + Amplitude.init(AMPLITUDE_API_KEY); + isInitialized = true; } export async function identify(id, options) { - initialize() - const properties = normalizeTrackingOptions(options) + initialize(); + const properties = normalizeTrackingOptions(options); - if (id) { - await Amplitude.setUserIdAsync(id) - if (properties) { - await Amplitude.setUserPropertiesAsync(properties) - } + if (properties) { + Amplitude.Identify(properties); + //await Amplitude.setUserPropertiesAsync(properties) } else { - await Amplitude.clearUserPropertiesAsync() + //await Amplitude.clearUserPropertiesAsync() + const identifyObj = new Amplitude.Identify(); + identifyObj.remove(properties); + Amplitude.Identify(identifyObj); } } export async function track(event, options) { - initialize() - const properties = normalizeTrackingOptions(options) + initialize(); + const properties = normalizeTrackingOptions(options); if (properties) { - await Amplitude.logEventWithPropertiesAsync(event, properties) + Amplitude.track(event, properties); } else { - await Amplitude.logEventAsync(event) + Amplitude.track(event); } } @@ -61,5 +63,5 @@ export default { events, initialize, identify, - track -} + track, +}; diff --git a/Customer App/src/utils/androidBackButton.js b/Customer App/src/utils/androidBackButton.js index ba67644..d5e347b 100644 --- a/Customer App/src/utils/androidBackButton.js +++ b/Customer App/src/utils/androidBackButton.js @@ -1,34 +1,35 @@ // packages -import { BackHandler, Alert } from 'react-native' +import { BackHandler, Alert } from "react-native"; /** * Attaches an event listener that handles the android-only hardware * back button * @param {Function} callback The function to call on click */ -const handleAndroidBackButton = callback => { - BackHandler.addEventListener('hardwareBackPress', () => { - callback() - return true - }) -} +const handleAndroidBackButton = (callback) => { + BackHandler.addEventListener("hardwareBackPress", () => { + callback(); + return true; + }); +}; /** * Removes the event listener in order not to add a new one * every time the view component re-mounts */ const removeAndroidBackButtonHandler = () => { - BackHandler.removeEventListener('hardwareBackPress') -} + // BackHandler.removeEventListener('hardwareBackPress') + BackHandler.remove("hardwareBackPress"); +}; const exitAlert = () => { - Alert.alert('Confirm exit', 'Do you want to quit the app?', [ - { text: 'CANCEL', style: 'cancel' }, + Alert.alert("Confirm exit", "Do you want to quit the app?", [ + { text: "CANCEL", style: "cancel" }, { - text: 'OK', + text: "OK", onPress: () => { - BackHandler.exitApp() - } - } - ]) - return true -} + BackHandler.exitApp(); + }, + }, + ]); + return true; +}; -export { handleAndroidBackButton, removeAndroidBackButtonHandler, exitAlert } +export { handleAndroidBackButton, removeAndroidBackButtonHandler, exitAlert };