diff --git a/.eslintrc.json b/.eslintrc.json index 30f5a54..fe2a47f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -17,7 +17,7 @@ "tsx": true, "modules": true }, - "ecmaVersion": 11, + "ecmaVersion": 14, "project": "./tsconfig.json", "sourceType": "module" }, diff --git a/app.config.js b/app.config.js index 8e8d777..19da853 100644 --- a/app.config.js +++ b/app.config.js @@ -9,7 +9,7 @@ export default { 'ios', 'android', ], - version: '0.20.0', + version: '0.20.1', orientation: 'portrait', updates: { enabled: true, @@ -38,7 +38,7 @@ export default { usesNonExemptEncryption: false, }, bundleIdentifier: IS_DEV ? 'abacus.fireflyiii.ios.app.dev' : 'abacus.ios.app', - buildNumber: '0.20.0', + buildNumber: '0.20.1', }, android: { icon: './src/images/icon-abacus.png', @@ -56,7 +56,7 @@ export default { }, playStoreUrl: 'https://play.google.com/store/apps/details?id=abacus.fireflyiii.android.app', package: IS_DEV ? 'abacus.fireflyiii.android.app.dev' : 'abacus.fireflyiii.android.app', - versionCode: 31, + versionCode: 32, }, scheme: 'abacusfiiiapp', githubUrl: 'https://github.com/victorbalssa/abacus', diff --git a/package-lock.json b/package-lock.json index 21268ff..4f1af52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "abacus", - "version": "0.20.0", + "version": "0.20.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "abacus", - "version": "0.20.0", + "version": "0.20.1", "dependencies": { "@expo/config-plugins": "~8.0.0", - "@expo/metro-runtime": "~3.2.1", + "@expo/metro-runtime": "~3.2.3", "@expo/vector-icons": "^14.0.2", "@react-native-async-storage/async-storage": "1.23.1", "@react-native-community/datetimepicker": "8.0.1", @@ -24,14 +24,14 @@ "babel-polyfill": "^6.26.0", "base-64": "^1.0.0", "bootstrap": "^4.4.1", - "expo": "~51.0.22", + "expo": "~51.0.36", "expo-application": "~5.9.1", "expo-asset": "~10.0.6", "expo-auth-session": "~5.5.2", "expo-blur": "~13.0.2", "expo-clipboard": "~6.0.3", "expo-crypto": "~13.0.2", - "expo-dev-client": "~4.0.20", + "expo-dev-client": "~4.0.27", "expo-device": "~6.0.2", "expo-font": "~12.0.5", "expo-haptics": "~13.0.1", @@ -44,7 +44,7 @@ "expo-status-bar": "~1.12.1", "expo-store-review": "~7.0.2", "expo-system-ui": "~3.0.7", - "expo-updates": "~0.25.21", + "expo-updates": "~0.25.26", "globally": "^0.0.0", "i18n-js": "^4.1.1", "lodash": "^4.17.21", @@ -52,7 +52,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-helmet": "^5.2.1", - "react-native": "0.74.3", + "react-native": "0.74.5", "react-native-gesture-handler": "~2.16.1", "react-native-pager-view": "6.3.0", "react-native-reanimated": "~3.10.1", @@ -85,7 +85,7 @@ "eslint-plugin-jest": "^27.2.3", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-react": "^7.33.1", - "jest-expo": "~51.0.3", + "jest-expo": "~51.0.4", "node-sass": "9.0.0", "ts-jest": "29.1.2", "ts-node": "10.9.1", @@ -2188,9 +2188,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", - "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2392,24 +2392,20 @@ } }, "node_modules/@expo/bunyan": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", - "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", - "engines": [ - "node >=0.10.0" - ], + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz", + "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==", "dependencies": { "uuid": "^8.0.0" }, - "optionalDependencies": { - "mv": "~2", - "safe-json-stringify": "~1" + "engines": { + "node": ">=0.10.0" } }, "node_modules/@expo/cli": { - "version": "0.18.25", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.25.tgz", - "integrity": "sha512-Kh0uZGCxwu58Pu7Jto9T/ABlBR7nkx8QC0Wv8pI3YtISyQZIKtbtNNeTPWYbVK1ddswKwtBUj+MNhKoDL49TLg==", + "version": "0.18.30", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.30.tgz", + "integrity": "sha512-V90TUJh9Ly8stYo8nwqIqNWCsYjE28GlVFWEhAFCUOp99foiQr8HSTpiiX5GIrprcPoWmlGoY+J5fQA29R4lFg==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "0.0.5", @@ -2419,11 +2415,11 @@ "@expo/env": "~0.3.0", "@expo/image-utils": "^0.5.0", "@expo/json-file": "^8.3.0", - "@expo/metro-config": "~0.18.6", + "@expo/metro-config": "0.18.11", "@expo/osascript": "^2.0.31", "@expo/package-manager": "^1.5.0", "@expo/plist": "^0.1.0", - "@expo/prebuild-config": "7.0.8", + "@expo/prebuild-config": "7.0.9", "@expo/rudder-sdk-node": "1.1.1", "@expo/spawn-async": "^1.7.2", "@expo/xcpretty": "^4.3.0", @@ -2811,13 +2807,13 @@ } }, "node_modules/@expo/config": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.3.tgz", - "integrity": "sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.4.tgz", + "integrity": "sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==", "dependencies": { "@babel/code-frame": "~7.10.4", "@expo/config-plugins": "~8.0.8", - "@expo/config-types": "^51.0.0-unreleased", + "@expo/config-types": "^51.0.3", "@expo/json-file": "^8.3.0", "getenv": "^1.0.0", "glob": "7.1.6", @@ -2829,11 +2825,11 @@ } }, "node_modules/@expo/config-plugins": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.8.tgz", - "integrity": "sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw==", + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.10.tgz", + "integrity": "sha512-KG1fnSKRmsudPU9BWkl59PyE0byrE2HTnqbOrgwr2FAhqh7tfr9nRs6A9oLS/ntpGzmFxccTEcsV0L4apsuxxg==", "dependencies": { - "@expo/config-types": "^51.0.0-unreleased", + "@expo/config-types": "^51.0.3", "@expo/json-file": "~8.3.0", "@expo/plist": "^0.1.0", "@expo/sdk-runtime-versions": "^1.0.0", @@ -2923,9 +2919,9 @@ } }, "node_modules/@expo/config-types": { - "version": "51.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.0.tgz", - "integrity": "sha512-acn03/u8mQvBhdTQtA7CNhevMltUhbSrpI01FYBJwpVntufkU++ncQujWKlgY/OwIajcfygk1AY4xcNZ5ImkRA==" + "version": "51.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz", + "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==" }, "node_modules/@expo/config/node_modules/@babel/code-frame": { "version": "7.10.4", @@ -2936,25 +2932,32 @@ } }, "node_modules/@expo/devcert": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.2.tgz", - "integrity": "sha512-FyWghLu7rUaZEZSTLt/XNRukm0c9GFfwP0iFaswoDWpV6alvVg+zRAfCLdIVQEz1SVcQ3zo1hMZFDrnKGvkCuQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", + "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", "dependencies": { "application-config-path": "^0.1.0", "command-exists": "^1.2.4", "debug": "^3.1.0", "eol": "^0.9.1", "get-port": "^3.2.0", - "glob": "^7.1.2", + "glob": "^10.4.2", "lodash": "^4.17.21", "mkdirp": "^0.5.1", "password-prompt": "^1.0.4", - "rimraf": "^2.6.2", "sudo-prompt": "^8.2.0", "tmp": "^0.0.33", "tslib": "^2.4.0" } }, + "node_modules/@expo/devcert/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@expo/devcert/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -2963,6 +2966,47 @@ "ms": "^2.1.1" } }, + "node_modules/@expo/devcert/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/devcert/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/devcert/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@expo/env": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", @@ -3291,9 +3335,9 @@ } }, "node_modules/@expo/metro-config": { - "version": "0.18.9", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.9.tgz", - "integrity": "sha512-kcqT/wuO43zxuFeR5AR/pMuq/O9qtIyuTI1wYvBY97blHAYU/wfPJKW3xFL14fDkPqQOc87hEEhjlJiXoebvcw==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.11.tgz", + "integrity": "sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", @@ -3414,9 +3458,9 @@ } }, "node_modules/@expo/metro-runtime": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.1.tgz", - "integrity": "sha512-L7xNo5SmK+rcuXDm/+VBBImpA7FZsVB+m/rNr3fNl5or+1+yrZe99ViF7LZ8DOoVqAqcb4aCAXvGrP2JNYo1/Q==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.3.tgz", + "integrity": "sha512-v5ji+fAGi7B9YavrxvekuF8gXEV/5fz0+PhaED5AaFDnbGB4IJIbpaiqK9nqZV1axjGZNQSw6Q8TsnFetCR3bQ==", "peerDependencies": { "react-native": "*" } @@ -3532,13 +3576,13 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.8.tgz", - "integrity": "sha512-wH9NVg6HiwF5y9x0TxiMEeBF+ITPGDXy5/i6OUheSrKpPgb0lF1Mwzl/f2fLPXBEpl+ZXOQ8LlLW32b7K9lrNg==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.9.tgz", + "integrity": "sha512-9i6Cg7jInpnGEHN0jxnW0P+0BexnePiBzmbUvzSbRXpdXihYUX2AKMu73jgzxn5P1hXOSkzNS7umaY+BZ+aBag==", "dependencies": { "@expo/config": "~9.0.0-beta.0", "@expo/config-plugins": "~8.0.8", - "@expo/config-types": "^51.0.0-unreleased", + "@expo/config-types": "^51.0.3", "@expo/image-utils": "^0.5.0", "@expo/json-file": "^8.3.0", "@react-native/normalize-colors": "0.74.85", @@ -3627,9 +3671,9 @@ } }, "node_modules/@expo/vector-icons": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.2.tgz", - "integrity": "sha512-70LpmXQu4xa8cMxjp1fydgRPsalefnHaXLzIwaHMEzcZhnyjw2acZz8azRrZOslPVAWlxItOa2Dd7WtD/kI+CA==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.4.tgz", + "integrity": "sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==", "dependencies": { "prop-types": "^15.8.1" } @@ -3806,9 +3850,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -4801,21 +4845,6 @@ "node": ">=10" } }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -5981,28 +6010,28 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.85.tgz", - "integrity": "sha512-59YmIQxfGDw4aP9S/nAM+sjSFdW8fUP6fsqczCcXgL2YVEjyER9XCaUT0J1K+PdHep8pi05KUgIKUds8P3jbmA==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.87.tgz", + "integrity": "sha512-1XmRhqQchN+pXPKEKYdpJlwESxVomJOxtEnIkbo7GAlaN2sym84fHEGDXAjLilih5GVPpcpSmFzTy8jx3LtaFg==", "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.85.tgz", - "integrity": "sha512-48TSDclRB5OMXiImiJkLxyCfRyLsqkCgI8buugCZzvXcYslfV7gCvcyFyQldtcOmerV+CK4RAj7QS4hmB5Mr8Q==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.87.tgz", + "integrity": "sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw==", "dependencies": { - "@react-native/codegen": "0.74.85" + "@react-native/codegen": "0.74.87" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.85.tgz", - "integrity": "sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.87.tgz", + "integrity": "sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg==", "dependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -6044,7 +6073,7 @@ "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.74.85", + "@react-native/babel-plugin-codegen": "0.74.87", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -6056,9 +6085,9 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.85.tgz", - "integrity": "sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.87.tgz", + "integrity": "sha512-GMSYDiD+86zLKgMMgz9z0k6FxmRn+z6cimYZKkucW4soGbxWsbjUAZoZ56sJwt2FJ3XVRgXCrnOCgXoH/Bkhcg==", "dependencies": { "@babel/parser": "^7.20.0", "glob": "^7.1.1", @@ -6076,14 +6105,14 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.85.tgz", - "integrity": "sha512-ODzND33eA2owAY3g9jgCdqB+BjAh8qJ7dvmSotXgrgDYr3MJMpd8gvHTIPe2fg4Kab+wk8uipRhrE0i0RYMwtQ==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.87.tgz", + "integrity": "sha512-EgJG9lSr8x3X67dHQKQvU6EkO+3ksVlJHYIVv6U/AmW9dN80BEFxgYbSJ7icXS4wri7m4kHdgeq2PQ7/3vvrTQ==", "dependencies": { "@react-native-community/cli-server-api": "13.6.9", "@react-native-community/cli-tools": "13.6.9", - "@react-native/dev-middleware": "0.74.85", - "@react-native/metro-babel-transformer": "0.74.85", + "@react-native/dev-middleware": "0.74.87", + "@react-native/metro-babel-transformer": "0.74.87", "chalk": "^4.0.0", "execa": "^5.1.1", "metro": "^0.80.3", @@ -6097,6 +6126,37 @@ "node": ">=18" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.87.tgz", + "integrity": "sha512-MN95DJLYTv4EqJc+9JajA3AJZSBYJz2QEJ3uWlHrOky2vKrbbRVaW1ityTmaZa2OXIvNc6CZwSRSE7xCoHbXhQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.87.tgz", + "integrity": "sha512-7TmZ3hTHwooYgIHqc/z87BMe1ryrIqAUi+AF7vsD+EHCGxHFdMjSpf1BZ2SUPXuLnF2cTiTfV2RwhbPzx0tYIA==", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.74.87", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", + "chrome-launcher": "^0.15.2", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", + "ws": "^6.2.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -6142,6 +6202,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6150,6 +6218,26 @@ "node": ">=8" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/@react-native/community-cli-plugin/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6161,6 +6249,14 @@ "node": ">=8" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/@react-native/debugger-frontend": { "version": "0.74.85", "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz", @@ -6229,28 +6325,28 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.85.tgz", - "integrity": "sha512-1VQSLukJzaVMn1MYcs8Weo1nUW8xCas2XU1KuoV7OJPk6xPnEBFJmapmEGP5mWeEy7kcTXJmddEgy1wwW0tcig==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.87.tgz", + "integrity": "sha512-T+VX0N1qP+U9V4oAtn7FTX7pfsoVkd1ocyw9swYXgJqU2fK7hC9famW7b3s3ZiufPGPr1VPJe2TVGtSopBjL6A==", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.85.tgz", - "integrity": "sha512-gp4Rg9le3lVZeW7Cie6qLfekvRKZuhJ3LKgi1SFB4N154z1wIclypAJXVXgWBsy8JKJfTwRI+sffC4qZDlvzrg==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.87.tgz", + "integrity": "sha512-M5Evdn76CuVEF0GsaXiGi95CBZ4IWubHqwXxV9vG9CC9kq0PSkoM2Pn7Lx7dgyp4vT7ccJ8a3IwHbe+5KJRnpw==", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.85.tgz", - "integrity": "sha512-JIrXqEwhTvWPtGArgMptIPGstMdXQIkwSjKVYt+7VC4a9Pw1GurIWanIJheEW6ZuCVvTc0VZkwglFz9JVjzDjA==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.87.tgz", + "integrity": "sha512-UsJCO24sNax2NSPBmV1zLEVVNkS88kcgAiYrZHtYSwSjpl4WZ656tIeedBfiySdJ94Hr3kQmBYLipV5zk0NI1A==", "dependencies": { "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.74.85", + "@react-native/babel-preset": "0.74.87", "hermes-parser": "0.19.1", "nullthrows": "^1.1.1" }, @@ -6267,9 +6363,9 @@ "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==" }, "node_modules/@react-native/virtualized-lists": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.85.tgz", - "integrity": "sha512-jx2Zw0qlZteoQ+0KxRc7s4drsljLBEP534FaNZ950e9+CN9nVkLsV6rigcTjDR8wjKMSBWhKf0C0C3egYz7Ehg==", + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.87.tgz", + "integrity": "sha512-lsGxoFMb0lyK/MiplNKJpD+A1EoEUumkLrCjH4Ht+ZlG8S0BfCxmskLZ6qXn3BiDSkLjfjI/qyZ3pnxNBvkXpQ==", "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" @@ -6437,20 +6533,6 @@ "node": ">=10" } }, - "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@segment/loosely-validate-event": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", @@ -7883,9 +7965,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "11.0.12", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.12.tgz", - "integrity": "sha512-hUuKdzSo8+H1oXQvKvlHRMHTxl+nN6YhFGlKiIxPa0E+gYfMEp8FnnStc/2Hwmip5rgJzQs6KF63KKRUc75xAg==", + "version": "11.0.14", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.14.tgz", + "integrity": "sha512-4BVYR0Sc2sSNxYTiE/OLSnPiOp+weFNy8eV+hX3aD6YAIbBnw+VubKRWqJV/sOJauzOLz0SgYAYyFciYMqizRA==", "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-transform-export-namespace-from": "^7.22.11", @@ -7893,7 +7975,7 @@ "@babel/plugin-transform-parameters": "^7.22.15", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-preset": "0.74.85", + "@react-native/babel-preset": "0.74.87", "babel-plugin-react-compiler": "^0.0.0-experimental-592953e-20240517", "babel-plugin-react-native-web": "~0.19.10", "react-refresh": "^0.14.2" @@ -8430,21 +8512,6 @@ "node": ">=10" } }, - "node_modules/cacache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacache/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -9617,21 +9684,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/del/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -11230,23 +11282,23 @@ } }, "node_modules/expo": { - "version": "51.0.22", - "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.22.tgz", - "integrity": "sha512-AtdqmtKNRC+cRBTsYGfwQFMLWAWWC531V2V+bAO3S9wVSTP2eLh34V06/IsBIjCCAJQPaaeR05XcST8U3apXFw==", + "version": "51.0.36", + "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.36.tgz", + "integrity": "sha512-eQIC0l6fz3p4cU/hV8+QcyKSacyROhaoA1oohfCD6I3F09dxmC8b3SESpzGqHfuq8wsgcUc4q8ckX7ec25IV1g==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.18.25", - "@expo/config": "9.0.3", - "@expo/config-plugins": "8.0.8", - "@expo/metro-config": "0.18.9", - "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~11.0.12", + "@expo/cli": "0.18.30", + "@expo/config": "9.0.4", + "@expo/config-plugins": "8.0.10", + "@expo/metro-config": "0.18.11", + "@expo/vector-icons": "^14.0.3", + "babel-preset-expo": "~11.0.14", "expo-asset": "~10.0.10", "expo-file-system": "~17.0.1", - "expo-font": "~12.0.9", + "expo-font": "~12.0.10", "expo-keep-awake": "~13.0.2", - "expo-modules-autolinking": "1.11.1", - "expo-modules-core": "1.12.19", + "expo-modules-autolinking": "1.11.3", + "expo-modules-core": "1.12.25", "fbemitter": "^3.0.0", "whatwg-url-without-unicode": "8.0.0-3" }, @@ -11327,12 +11379,12 @@ } }, "node_modules/expo-dev-client": { - "version": "4.0.20", - "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-4.0.20.tgz", - "integrity": "sha512-lSr5PoJSqXD2srzWyPY3sb8kcwRaLWNCVemdQryW796tglm6sTnSbRhmUGtUPvrm6Bk+rZAmQNFsqKh1sjHfqg==", + "version": "4.0.27", + "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-4.0.27.tgz", + "integrity": "sha512-4f0eO7GTdGzYYg3qABR98Vc2iiCBA2HICh8namVAvqkcVCuh44I9lOctaAEe/932+lLugEW4+Mv29pdEHq3/FA==", "dependencies": { - "expo-dev-launcher": "4.0.22", - "expo-dev-menu": "5.0.16", + "expo-dev-launcher": "4.0.27", + "expo-dev-menu": "5.0.21", "expo-dev-menu-interface": "1.8.3", "expo-manifests": "~0.14.0", "expo-updates-interface": "~0.16.2" @@ -11342,12 +11394,12 @@ } }, "node_modules/expo-dev-launcher": { - "version": "4.0.22", - "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-4.0.22.tgz", - "integrity": "sha512-U8SR4MphP+QatjmD+sQ7AWtKwy7faPpW2PcaPBPnfzBiDc3yk8Kc2sf6/JyN7bUmvA6PFqTnsSJMlZEWi917OQ==", + "version": "4.0.27", + "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-4.0.27.tgz", + "integrity": "sha512-n+uUkcr5f5v5VR0sDw/sGna4aut2nTu3EiOqA0ijb8fBuelpgqYiBp2x7Su6wT6InoBHZxTBgVlyzgLNFGSdDw==", "dependencies": { "ajv": "8.11.0", - "expo-dev-menu": "5.0.16", + "expo-dev-menu": "5.0.21", "expo-manifests": "~0.14.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" @@ -11372,9 +11424,9 @@ } }, "node_modules/expo-dev-menu": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-5.0.16.tgz", - "integrity": "sha512-zsUiVCvVWT9ve5EsYEGHGu0dJac13NoEQkmzOjhmvcQXb7+OnKgwtBiNAX6rvponfnx9il506rnyZ+0M9CbwYQ==", + "version": "5.0.21", + "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-5.0.21.tgz", + "integrity": "sha512-i7kOaxOeBksqgeUDvb5vb2cZIVLZhAX2rjLJNH3fBifiAWISeCBAQsKN9vAkMPQGqL9F88vjMyy14ca6Vo+fEw==", "dependencies": { "expo-dev-menu-interface": "1.8.3", "semver": "^7.5.4" @@ -11426,9 +11478,9 @@ "integrity": "sha512-Jkww9Cwpv0z7DdLYiRX0r4fqBEcI9cKqTn7cHx63S09JaZ2rcwEE4zYHgrXwjahO+tU2VW8zqH+AJl6RhhW4zA==" }, "node_modules/expo-font": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.9.tgz", - "integrity": "sha512-seTCyf0tbgkAnp3ZI9ZfK9QVtURQUgFnuj+GuJ5TSnN0XsOtVe1s2RxTvmMgkfuvfkzcjJ69gyRpsZS1cC8hjw==", + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.10.tgz", + "integrity": "sha512-Q1i2NuYri3jy32zdnBaHHCya1wH1yMAsI+3CCmj9zlQzlhsS9Bdwcj2W3c5eU5FvH2hsNQy4O+O1NnM6o/pDaQ==", "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -11509,15 +11561,17 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", - "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.3.tgz", + "integrity": "sha512-oYh8EZEvYF5TYppxEKUTTJmbr8j7eRRnrIxzZtMvxLTXoujThVPMFS/cbnSnf2bFm1lq50TdDNABhmEi7z0ngQ==", "dependencies": { "chalk": "^4.1.0", "commander": "^7.2.0", "fast-glob": "^3.2.5", "find-up": "^5.0.0", - "fs-extra": "^9.1.0" + "fs-extra": "^9.1.0", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0" }, "bin": { "expo-modules-autolinking": "bin/expo-modules-autolinking.js" @@ -11602,9 +11656,9 @@ } }, "node_modules/expo-modules-core": { - "version": "1.12.19", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.19.tgz", - "integrity": "sha512-fFsErN4oMsOdStUVYvyLpl6MX/wbD9yJSqy/Lu7ZRLIPzeKDfGS2jNl8RzryPznRpWmy49X8l40R4osRJLizhg==", + "version": "1.12.25", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.25.tgz", + "integrity": "sha512-HB2LS2LEM41Xq1bG+Jtzqm6XgPaa+mM9BAvCdX1lDGMQ9Ay9vMTL/GVEs2gpsINPofICopjBRwD+wftyCbVrzg==", "dependencies": { "invariant": "^2.2.4" } @@ -11659,9 +11713,9 @@ } }, "node_modules/expo-updates": { - "version": "0.25.21", - "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.25.21.tgz", - "integrity": "sha512-eNElrzLFHky2au0H8MqdAJdqh40412PHCdANdXtB/P/XIS1xVte74T9rUf053iPswnLLuQfCUpZYSfRKTcsDlg==", + "version": "0.25.26", + "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.25.26.tgz", + "integrity": "sha512-wh3t82Wg3rvAjLQin4dLSp3ZcTexkeLUo7nlrFTF52bLSpa1AsBk3ikVD5ygUIFSxmJudl5H/F43NYXC1WDMsg==", "dependencies": { "@expo/code-signing-certificates": "0.0.5", "@expo/config": "~9.0.0-beta.0", @@ -11774,6 +11828,11 @@ "expo": "*" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -12097,21 +12156,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", @@ -12164,9 +12208,9 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -14402,9 +14446,9 @@ } }, "node_modules/jest-expo": { - "version": "51.0.3", - "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-51.0.3.tgz", - "integrity": "sha512-r49OuS9X2S/dH+lSfNmarBS2L/tgvBhzOgKHYFyDJWo+Bb5uVs7Rg/GZal/RD/NDkKFJuByGAaW1F6zHYnjZnw==", + "version": "51.0.4", + "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-51.0.4.tgz", + "integrity": "sha512-WmlR4rUur1TNF/F14brKCmPdX3TWf7Bno/6A1PuxnflN79LEIXpXuPKMlMWwCCChTohGB5FRniknRibblWu1ug==", "dev": true, "dependencies": { "@expo/config": "~9.0.0-beta.0", @@ -16832,9 +16876,9 @@ } }, "node_modules/metro": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.9.tgz", - "integrity": "sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.12.tgz", + "integrity": "sha512-1UsH5FzJd9quUsD1qY+zUG4JY3jo3YEMxbMYH9jT6NK3j4iORhlwTK8fYTfAUBhDKjgLfKjAh7aoazNE23oIRA==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -16850,34 +16894,33 @@ "debug": "^2.2.0", "denodeify": "^1.2.1", "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.20.1", + "hermes-parser": "0.23.1", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.6.3", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.9", - "metro-cache": "0.80.9", - "metro-cache-key": "0.80.9", - "metro-config": "0.80.9", - "metro-core": "0.80.9", - "metro-file-map": "0.80.9", - "metro-resolver": "0.80.9", - "metro-runtime": "0.80.9", - "metro-source-map": "0.80.9", - "metro-symbolicate": "0.80.9", - "metro-transform-plugins": "0.80.9", - "metro-transform-worker": "0.80.9", + "metro-babel-transformer": "0.80.12", + "metro-cache": "0.80.12", + "metro-cache-key": "0.80.12", + "metro-config": "0.80.12", + "metro-core": "0.80.12", + "metro-file-map": "0.80.12", + "metro-resolver": "0.80.12", + "metro-runtime": "0.80.12", + "metro-source-map": "0.80.12", + "metro-symbolicate": "0.80.12", + "metro-transform-plugins": "0.80.12", + "metro-transform-worker": "0.80.12", "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", "serialize-error": "^2.1.0", "source-map": "^0.5.6", "strip-ansi": "^6.0.0", "throat": "^5.0.0", - "ws": "^7.5.1", + "ws": "^7.5.10", "yargs": "^17.6.2" }, "bin": { @@ -16888,12 +16931,13 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz", - "integrity": "sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.12.tgz", + "integrity": "sha512-YZziRs0MgA3pzCkkvOoQRXjIoVjvrpi/yRlJnObyIvMP6lFdtyG4nUGIwGY9VXnBvxmXD6mPY2e+NSw6JAyiRg==", "dependencies": { "@babel/core": "^7.20.0", - "hermes-parser": "0.20.1", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.23.1", "nullthrows": "^1.1.1" }, "engines": { @@ -16901,90 +16945,82 @@ } }, "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", + "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==" }, "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", + "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", "dependencies": { - "hermes-estree": "0.20.1" + "hermes-estree": "0.23.1" } }, "node_modules/metro-cache": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.9.tgz", - "integrity": "sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.12.tgz", + "integrity": "sha512-p5kNHh2KJ0pbQI/H7ZBPCEwkyNcSz7OUkslzsiIWBMPQGFJ/xArMwkV7I+GJcWh+b4m6zbLxE5fk6fqbVK1xGA==", "dependencies": { - "metro-core": "0.80.9", - "rimraf": "^3.0.2" + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "metro-core": "0.80.12" }, "engines": { "node": ">=18" } }, "node_modules/metro-cache-key": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.9.tgz", - "integrity": "sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg==", - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.12.tgz", + "integrity": "sha512-o4BspKnugg/pE45ei0LGHVuBJXwRgruW7oSFAeSZvBKA/sGr0UhOGY3uycOgWInnS3v5yTTfiBA9lHlNRhsvGA==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "flow-enums-runtime": "^0.0.6" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18" } }, "node_modules/metro-config": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.9.tgz", - "integrity": "sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.12.tgz", + "integrity": "sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ==", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", + "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.6.3", - "metro": "0.80.9", - "metro-cache": "0.80.9", - "metro-core": "0.80.9", - "metro-runtime": "0.80.9" + "metro": "0.80.12", + "metro-cache": "0.80.12", + "metro-core": "0.80.12", + "metro-runtime": "0.80.12" }, "engines": { "node": ">=18" } }, "node_modules/metro-core": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", - "integrity": "sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.12.tgz", + "integrity": "sha512-QqdJ/yAK+IpPs2HU/h5v2pKEdANBagSsc6DRSjnwSyJsCoHlmyJKCaCJ7KhWGx+N4OHxh37hoA8fc2CuZbx0Fw==", "dependencies": { + "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.9" + "metro-resolver": "0.80.12" }, "engines": { "node": ">=18" } }, "node_modules/metro-file-map": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.9.tgz", - "integrity": "sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.12.tgz", + "integrity": "sha512-sYdemWSlk66bWzW2wp79kcPMzwuG32x1ZF3otI0QZTmrnTaaTiGyhE66P1z6KR4n2Eu5QXiABa6EWbAQv0r8bw==", "dependencies": { "anymatch": "^3.0.3", "debug": "^2.2.0", "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", "invariant": "^2.2.4", "jest-worker": "^29.6.3", @@ -17014,10 +17050,11 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro-minify-terser": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz", - "integrity": "sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.12.tgz", + "integrity": "sha512-muWzUw3y5k+9083ZoX9VaJLWEV2Jcgi+Oan0Mmb/fBNMPqP9xVDuy4pOMn/HOiGndgfh/MK7s4bsjkyLJKMnXQ==", "dependencies": { + "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" }, "engines": { @@ -17025,35 +17062,40 @@ } }, "node_modules/metro-resolver": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.9.tgz", - "integrity": "sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.12.tgz", + "integrity": "sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw==", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, "engines": { "node": ">=18" } }, "node_modules/metro-runtime": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.9.tgz", - "integrity": "sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.12.tgz", + "integrity": "sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw==", "dependencies": { - "@babel/runtime": "^7.0.0" + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" }, "engines": { "node": ">=18" } }, "node_modules/metro-source-map": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.9.tgz", - "integrity": "sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.12.tgz", + "integrity": "sha512-o+AXmE7hpvM8r8MKsx7TI21/eerYYy2DCDkWfoBkv+jNkl61khvDHlQn0cXZa6lrcNZiZkl9oHSMcwLLIrFmpw==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", + "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.80.9", + "metro-symbolicate": "0.80.12", "nullthrows": "^1.1.1", - "ob1": "0.80.9", + "ob1": "0.80.12", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -17070,12 +17112,13 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz", - "integrity": "sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.12.tgz", + "integrity": "sha512-/dIpNdHksXkGHZXARZpL7doUzHqSNxgQ8+kQGxwpJuHnDhGkENxB5PS2QBaTDdEcmyTMjS53CN1rl9n1gR6fmw==", "dependencies": { + "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.80.9", + "metro-source-map": "0.80.12", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -17097,14 +17140,15 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz", - "integrity": "sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.12.tgz", + "integrity": "sha512-WQWp00AcZvXuQdbjQbx1LzFR31IInlkCDYJNRs6gtEtAyhwpMMlL2KcHmdY+wjDO9RPcliZ+Xl1riOuBecVlPA==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/template": "^7.0.0", "@babel/traverse": "^7.20.0", + "flow-enums-runtime": "^0.0.6", "nullthrows": "^1.1.1" }, "engines": { @@ -17112,21 +17156,22 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz", - "integrity": "sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.12.tgz", + "integrity": "sha512-KAPFN1y3eVqEbKLx1I8WOarHPqDMUa8WelWxaJCNKO/yHCP26zELeqTJvhsQup+8uwB6EYi/sp0b6TGoh6lOEA==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "metro": "0.80.9", - "metro-babel-transformer": "0.80.9", - "metro-cache": "0.80.9", - "metro-cache-key": "0.80.9", - "metro-minify-terser": "0.80.9", - "metro-source-map": "0.80.9", - "metro-transform-plugins": "0.80.9", + "flow-enums-runtime": "^0.0.6", + "metro": "0.80.12", + "metro-babel-transformer": "0.80.12", + "metro-cache": "0.80.12", + "metro-cache-key": "0.80.12", + "metro-minify-terser": "0.80.12", + "metro-source-map": "0.80.12", + "metro-transform-plugins": "0.80.12", "nullthrows": "^1.1.1" }, "engines": { @@ -17200,16 +17245,16 @@ } }, "node_modules/metro/node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==" + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", + "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==" }, "node_modules/metro/node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", + "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", "dependencies": { - "hermes-estree": "0.20.1" + "hermes-estree": "0.23.1" } }, "node_modules/metro/node_modules/ms": { @@ -17217,21 +17262,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/metro/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/metro/node_modules/serialize-error": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", @@ -17259,6 +17289,26 @@ "node": ">=8" } }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -17516,6 +17566,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "dev": true, "optional": true, "dependencies": { "mkdirp": "~0.5.1", @@ -17530,6 +17581,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "dev": true, "optional": true, "dependencies": { "inflight": "^1.0.4", @@ -17546,6 +17598,7 @@ "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "dev": true, "optional": true, "dependencies": { "glob": "^6.0.1" @@ -17608,6 +17661,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, "optional": true, "bin": { "ncp": "bin/ncp" @@ -17807,21 +17861,6 @@ "node": ">= 6" } }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-gyp/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -18123,21 +18162,6 @@ "node": ">=10" } }, - "node_modules/node-sass/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-sass/node_modules/socks-proxy-agent": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", @@ -18354,9 +18378,12 @@ "dev": true }, "node_modules/ob1": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.9.tgz", - "integrity": "sha512-v9yOxowkZbxWhKOaaTyLjIm1aLy4ebMNcSn4NYJKOAI/Qv+SkfEfszpLr2GIxsccmb2Y2HA9qtsqiIJ80ucpVA==", + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.12.tgz", + "integrity": "sha512-VMArClVT6LkhUGpnuEoBuyjG9rzUyEzg4PDkav6wK1cLhOK02gPCYFxoiB4mqVnrMhDpIzJcrGNAMVi9P+hXrw==", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, "engines": { "node": ">=18" } @@ -18669,9 +18696,9 @@ } }, "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" }, "node_modules/parent-module": { "version": "1.0.1", @@ -18836,9 +18863,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -18994,9 +19021,9 @@ } }, "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -19013,8 +19040,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -19458,21 +19485,21 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { - "version": "0.74.3", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.3.tgz", - "integrity": "sha512-UFutCC6WEw6HkxlcpQ2BemKqi0JkwrgDchYB5Svi8Sp4Xwt4HA6LGEjNQgZ+3KM44bjyFRpofQym0uh0jACGng==", + "version": "0.74.5", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.5.tgz", + "integrity": "sha512-Bgg2WvxaGODukJMTZFTZBNMKVaROHLwSb8VAGEdrlvKwfb1hHg/3aXTUICYk7dwgAnb+INbGMwnF8yeAgIUmqw==", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", "@react-native-community/cli": "13.6.9", "@react-native-community/cli-platform-android": "13.6.9", "@react-native-community/cli-platform-ios": "13.6.9", - "@react-native/assets-registry": "0.74.85", - "@react-native/codegen": "0.74.85", - "@react-native/community-cli-plugin": "0.74.85", - "@react-native/gradle-plugin": "0.74.85", - "@react-native/js-polyfills": "0.74.85", - "@react-native/normalize-colors": "0.74.85", - "@react-native/virtualized-lists": "0.74.85", + "@react-native/assets-registry": "0.74.87", + "@react-native/codegen": "0.74.87", + "@react-native/community-cli-plugin": "0.74.87", + "@react-native/gradle-plugin": "0.74.87", + "@react-native/js-polyfills": "0.74.87", + "@react-native/normalize-colors": "0.74.87", + "@react-native/virtualized-lists": "0.74.87", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -19626,6 +19653,11 @@ "node": ">= 10.14.2" } }, + "node_modules/react-native/node_modules/@react-native/normalize-colors": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.87.tgz", + "integrity": "sha512-Xh7Nyk/MPefkb0Itl5Z+3oOobeG9lfLb7ZOY2DKpFnoCE1TzBmib9vMNdFaLdSxLIP+Ec6icgKtdzYg8QUPYzA==" + }, "node_modules/react-native/node_modules/@types/yargs": { "version": "15.0.15", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", @@ -20299,15 +20331,18 @@ } }, "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rtl-detect": { @@ -20363,6 +20398,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, "optional": true }, "node_modules/safe-regex-test": { @@ -20931,9 +20967,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -21741,9 +21777,9 @@ } }, "node_modules/terser": { - "version": "5.31.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", - "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -21931,9 +21967,9 @@ } }, "node_modules/traverse": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", - "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.10.tgz", + "integrity": "sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==", "dependencies": { "gopd": "^1.0.1", "typedarray.prototype.slice": "^1.0.3", diff --git a/package.json b/package.json index 6ea7d52..c993c8d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abacus", - "version": "0.20.0", + "version": "0.20.1", "private": true, "homepage": "https://github.com/victorbalssa/abacus", "scripts": { @@ -19,7 +19,7 @@ }, "dependencies": { "@expo/config-plugins": "~8.0.0", - "@expo/metro-runtime": "~3.2.1", + "@expo/metro-runtime": "~3.2.3", "@expo/vector-icons": "^14.0.2", "@react-native-async-storage/async-storage": "1.23.1", "@react-native-community/datetimepicker": "8.0.1", @@ -34,14 +34,14 @@ "babel-polyfill": "^6.26.0", "base-64": "^1.0.0", "bootstrap": "^4.4.1", - "expo": "~51.0.22", + "expo": "~51.0.36", "expo-application": "~5.9.1", "expo-asset": "~10.0.6", "expo-auth-session": "~5.5.2", "expo-blur": "~13.0.2", "expo-clipboard": "~6.0.3", "expo-crypto": "~13.0.2", - "expo-dev-client": "~4.0.20", + "expo-dev-client": "~4.0.27", "expo-device": "~6.0.2", "expo-font": "~12.0.5", "expo-haptics": "~13.0.1", @@ -54,7 +54,7 @@ "expo-status-bar": "~1.12.1", "expo-store-review": "~7.0.2", "expo-system-ui": "~3.0.7", - "expo-updates": "~0.25.21", + "expo-updates": "~0.25.26", "globally": "^0.0.0", "i18n-js": "^4.1.1", "lodash": "^4.17.21", @@ -62,7 +62,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-helmet": "^5.2.1", - "react-native": "0.74.3", + "react-native": "0.74.5", "react-native-gesture-handler": "~2.16.1", "react-native-pager-view": "6.3.0", "react-native-reanimated": "~3.10.1", @@ -95,7 +95,7 @@ "eslint-plugin-jest": "^27.2.3", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-react": "^7.33.1", - "jest-expo": "~51.0.3", + "jest-expo": "~51.0.4", "node-sass": "9.0.0", "ts-jest": "29.1.2", "ts-node": "10.9.1", diff --git a/src/components/Charts/AssetsHistoryChart.tsx b/src/components/Charts/AssetsHistoryChart.tsx index 5a313e0..a23f2ca 100644 --- a/src/components/Charts/AssetsHistoryChart.tsx +++ b/src/components/Charts/AssetsHistoryChart.tsx @@ -23,16 +23,6 @@ import translate from '../../i18n/locale'; import { useThemeColors } from '../../lib/common'; import ErrorBoundary from '../UI/ErrorBoundary'; -function AccountsLengthMessage() { - return ( - - - {translate('assetsHistoryCharts_chart_works')} - - - ); -} - function CursorPointer({ x, y, stroke }) { return ( <> @@ -268,7 +258,6 @@ export default function AssetsHistoryChart() { ))} )} - {accounts.length > 4 && ()} diff --git a/src/components/Screens/ChartScreen.tsx b/src/components/Screens/ChartScreen.tsx index 587f0e4..e956e58 100644 --- a/src/components/Screens/ChartScreen.tsx +++ b/src/components/Screens/ChartScreen.tsx @@ -20,6 +20,7 @@ export default function ChartScreen() { const safeAreaInsets = useSafeAreaInsets(); const start = useSelector((state: RootState) => state.firefly.rangeDetails.start); const end = useSelector((state: RootState) => state.firefly.rangeDetails.end); + const currentCode = useSelector((state: RootState) => state.currencies.currentCode); const prevFiltersRef = useRef(); const viewPagerRef = useRef(); const scrollOffsetAnimatedValue = React.useRef(new Animated.Value(0)).current; @@ -42,15 +43,15 @@ export default function ChartScreen() { } }; - if (prevFiltersRef.current !== `${start}-${end}`) { + if (prevFiltersRef.current !== `${start}-${end}-${currentCode}`) { fetchData(); - prevFiltersRef.current = `${start}-${end}`; + prevFiltersRef.current = `${start}-${end}-${currentCode}`; } return () => { isActive = false; }; - }, [start, end]), + }, [start, end, currentCode]), ); return useMemo(() => ( diff --git a/src/components/UI/Filters.tsx b/src/components/UI/Filters.tsx index 21c006a..a14a9db 100644 --- a/src/components/UI/Filters.tsx +++ b/src/components/UI/Filters.tsx @@ -26,15 +26,12 @@ export default function Filters() { const { firefly: { setRange, - getAccountChart, }, currencies: { setCurrentCode, }, accounts: { getAccounts, - setSelectedAccountIds, - resetSelectedAccountIds, }, } = useDispatch(); @@ -67,7 +64,6 @@ export default function Filters() { setCurrentCode(currency.attributes.code); navigation.goBack(); getAccounts(); - resetSelectedAccountIds(); }} > ))} - - {translate('home_accounts')} - - - {accounts.map((account) => ( - { - setSelectedAccountIds(parseInt(account.id, 10)); - navigation.goBack(); - getAccountChart(); - }} - > - - - {account.attributes.name} - - - - ))} - { - resetSelectedAccountIds(); - navigation.goBack(); - getAccountChart(); - }} - > - - - - - ), [ diff --git a/src/i18n/locale/translations/sl-SI.ts b/src/i18n/locale/translations/sl-SI.ts index e293975..e8a0c6b 100644 --- a/src/i18n/locale/translations/sl-SI.ts +++ b/src/i18n/locale/translations/sl-SI.ts @@ -52,8 +52,6 @@ export default { layout_new_update_body_text: 'Vedno lahko posodobite kasneje na zavihku Nastavitve.', layout_new_update_cancel_button: 'Prekliči', layout_new_update_update_button: 'Posodobite zdaj', - - // from version 0.31 transaction_screen_title: 'Nova transakcija', navigation_home_tab: 'Domov', navigation_chart_tab: 'Grafikon', @@ -63,8 +61,6 @@ export default { transaction_form_type_withdraw: 'Odliv', transaction_form_type_deposit: 'Priliv', transaction_form_type_transfer: 'Prenos', - - // from 0.4.1 period_switcher_monthly: 'Mesečno', period_switcher_quarterly: 'Četrtletno', period_switcher_semiannually: 'Polletno', @@ -84,14 +80,10 @@ export default { home_header_time_range_year: 'Leto', home_header_time_range_q: 'Č', // Put an abbreviation that best represents a quarter home_header_time_range_s: 'P', // Put an abbreviation that best represents a semiannual - - // from 0.6.0 balance: 'Bilanca', history: 'Zgodovina', home_categories: 'Kategorije', home_net_worth: 'Neto vrednost', - - // from 0.7.0 home_budgets: 'Proračuni', configuration_ui: 'Uporabniški vmesnik', configuration_color_mode: 'Temen način', @@ -102,48 +94,32 @@ export default { auth_create_new_personal_access_token: 'Tukaj ustvarite novega odjemalca Oauth na zavihku OAuth:', oauth_wrong_token_error_description: 'AccessToken ni bilo mogoče preveriti, ponovno preverite svoj žeton ali zaledni URL.', transaction_screen_edit_title: 'Uredite transakcijo', - - // from 0.9.0 transaction_form_foreign_currency_label: 'Tuja valuta', transaction_form_group_title_label: 'Opis razdeljene transakcije', transaction_form_group_title_placeholder: 'Naslov', transaction_form_group_title_helper: 'Če ustvarite razdeljeno transakcijo, mora obstajati globalni opis za vse delitve transakcije.', configuration_review_app_ios: 'Ocenite Abacus v AppStore', configuration_review_app_android: 'Ocenite Abacus v Google Play', - - // from 0.9.2 assets_history_chart: 'Grafikon računov', balance_history_chart: 'Grafikon neto vrednosti', balance_history_chart_no_data: 'Za dostop do teh grafikonov posodobite Firefly III na najnovejšo različico.', account_not_included_in_net_worth: '* Račun ni vključen v neto vrednost.', - - // from 0.10.0 period: 'Obdobje', currency: 'Valuta', - home_all_accounts: 'Vsi računi', - - // from 0.10.3 router_back_button: 'Nazaj', transaction_clone: 'Kloniraj', transaction_delete: 'Izbriši', - - // from 0.11.0 configuration_credentials: 'Prijavni podatki', configuration_manage_credentials: 'Uredi prijavne podatke', configuration_credentials_add_button: 'Dodaj prijavne podatke', logout: 'Odjava', - - // from 0.12.0 credential_clear_confirm_button: 'Izbriši', credential_clear_alert_title: 'Ali ste prepričani?', credential_clear_cancel_button: 'Prekliči', go_to_credentials: 'Pojdi na prijavne podatke', - configuration_logout_alert_title: 'Odjava', load_more: 'Naloži več', - - // from X.X.X home_bills: 'Računi', home_piggy_banks: 'Hranilniki', bills_paid: 'Plačano do', @@ -153,8 +129,6 @@ export default { transaction_form_bill_label: 'Račun', configuration_transaction_form: 'Transakcija od', close_after_transaction: 'Zapri transakcijo po predložitvi', - - // from 0.19.0 configuration_theme: 'Prilagoditev', configuration_theme_selection: 'Spremeni barvno temo', configuration_theme_title: 'Barvne teme', diff --git a/src/models/firefly.ts b/src/models/firefly.ts index 4cfc61c..e759d8f 100644 --- a/src/models/firefly.ts +++ b/src/models/firefly.ts @@ -4,11 +4,7 @@ import { exchangeCodeAsync, refreshAsync } from 'expo-auth-session'; import { maxBy, minBy } from 'lodash'; import semver from 'semver'; import axios from 'axios'; -import { - discovery, - redirectUri, - addCredential, -} from '../lib/oauth'; +import { discovery, redirectUri, addCredential } from '../lib/oauth'; import colors from '../constants/colors'; import { RootModel } from './index'; import { generateRangeTitle } from '../lib/common'; @@ -16,49 +12,49 @@ import { AccountType } from './accounts'; import { TCredential } from '../types/credential'; export type HomeDisplayType = { - title: string, - valueParsed: string, - monetaryValue: string, - currencyCode: string, -} + title: string; + valueParsed: string; + monetaryValue: string; + currencyCode: string; +}; export type AssetAccountType = { - title: string, - label: string, - currencyCode: string, - currencySymbol: string, - valueParsed: string, - color: string, - colorScheme: string, - entries: { x: number, y: number }[], - maxY: number, - minY: number, -} + title: string; + label: string; + currencyCode: string; + currencySymbol: string; + valueParsed: string; + color: string; + colorScheme: string; + entries: { x: number; y: number }[]; + maxY: number; + minY: number; +}; export type BalanceType = { - label: 'earned' | 'spent', - currencyCode: string, - entries: { [timestamp: string]:string }[], -} + label: 'earned' | 'spent'; + currencyCode: string; + entries: { [timestamp: string]: string }[]; +}; export type FireflyStateType = { - rangeDetails: RangeDetailsType, - netWorth: HomeDisplayType[], - spent: HomeDisplayType[], - earned: HomeDisplayType[], - balance: HomeDisplayType[], - accounts: AssetAccountType[], - bills: { paid: HomeDisplayType | null, unpaid: HomeDisplayType | null }, - earnedChart: { x: number, y: number }[], - spentChart:{ x: number, y: number }[], -} + rangeDetails: RangeDetailsType; + netWorth: HomeDisplayType[]; + spent: HomeDisplayType[]; + earned: HomeDisplayType[]; + balance: HomeDisplayType[]; + accounts: AssetAccountType[]; + bills: { paid: HomeDisplayType | null; unpaid: HomeDisplayType | null }; + earnedChart: { x: number; y: number }[]; + spentChart: { x: number; y: number }[]; +}; export type RangeDetailsType = { - title: string, - range: number, - start: string, - end: string, -} + title: string; + range: number; + start: string; + end: string; +}; const formatDateToYYYYMMDD = (date: Date): string => { const year = date.getFullYear(); @@ -83,7 +79,11 @@ const getCurrentQuarterEndDate = (): string => { const currentYear = currentDate.getFullYear(); const currentMonth = currentDate.getMonth(); const quarterEndMonth = Math.floor(currentMonth / 3) * 3 + 2; - const lastDayOfMonth = new Date(currentYear, quarterEndMonth + 1, 0).getDate(); + const lastDayOfMonth = new Date( + currentYear, + quarterEndMonth + 1, + 0, + ).getDate(); const endDate = new Date(currentYear, quarterEndMonth, lastDayOfMonth); return formatDateToYYYYMMDD(endDate); @@ -91,7 +91,11 @@ const getCurrentQuarterEndDate = (): string => { const INITIAL_STATE = { rangeDetails: { - title: generateRangeTitle(3, getCurrentQuarterStartDate(), getCurrentQuarterEndDate()), + title: generateRangeTitle( + 3, + getCurrentQuarterStartDate(), + getCurrentQuarterEndDate(), + ), range: 3, start: getCurrentQuarterStartDate(), end: getCurrentQuarterEndDate(), @@ -107,7 +111,6 @@ const INITIAL_STATE = { } as FireflyStateType; export default createModel()({ - state: INITIAL_STATE, reducers: { @@ -152,17 +155,10 @@ export default createModel()({ async setRange(payload, rootState): Promise { const { firefly: { - rangeDetails: { - range: oldRange, - start: oldStart, - end: oldEnd, - }, + rangeDetails: { range: oldRange, start: oldStart, end: oldEnd }, }, } = rootState; - const { - range = oldRange, - direction, - } = payload; + const { range = oldRange, direction } = payload; let start: string; let end: string; @@ -172,10 +168,16 @@ export default createModel()({ if (direction !== undefined) { if (direction > 0) { start = moment(oldStart).add(rangeInt, 'M').format('YYYY-MM-DD'); - end = moment(oldEnd).add(rangeInt, 'M').endOf('M').format('YYYY-MM-DD'); + end = moment(oldEnd) + .add(rangeInt, 'M') + .endOf('M') + .format('YYYY-MM-DD'); } else { start = moment(oldStart).subtract(rangeInt, 'M').format('YYYY-MM-DD'); - end = moment(oldEnd).subtract(rangeInt, 'M').endOf('M').format('YYYY-MM-DD'); + end = moment(oldEnd) + .subtract(rangeInt, 'M') + .endOf('M') + .format('YYYY-MM-DD'); } } else { const today = new Date(); @@ -190,7 +192,7 @@ export default createModel()({ end = moment(end).endOf('M').format('YYYY-MM-DD'); break; case 3: - start = `${today.getFullYear()}-${((quarter * 3) + 1).toString().padStart(2, '0')}-01`; + start = `${today.getFullYear()}-${(quarter * 3 + 1).toString().padStart(2, '0')}-01`; end = `${today.getFullYear()}-${((quarter + 1) * 3).toString().padStart(2, '0')}-28`; end = moment(end).endOf('M').format('YYYY-MM-DD'); break; @@ -226,14 +228,9 @@ export default createModel()({ async getNetWorth(_: void, rootState): Promise { const { firefly: { - rangeDetails: { - start, - end, - }, - }, - currencies: { - currentCode, + rangeDetails: { start, end }, }, + currencies: { currentCode }, } = rootState; if (currentCode) { const params = new URLSearchParams({ @@ -241,7 +238,9 @@ export default createModel()({ end, currency_code: currentCode, }); - const { data: summary } = await dispatch.configuration.apiFetch({ url: `/api/v1/summary/basic?${params.toString()}` }); + const { data: summary } = await dispatch.configuration.apiFetch({ + url: `/api/v1/summary/basic?${params.toString()}`, + }); const netWorth = []; const balance = []; const earned = []; @@ -281,97 +280,88 @@ export default createModel()({ async getAccountChart(_: void, rootState): Promise { const { firefly: { - rangeDetails: { - range, - start, - end, - }, - }, - currencies: { - currentCode, - }, - accounts: { - selectedAccountIds, - }, - configuration: { - selectedBrandStyle, + rangeDetails: { range, start, end }, }, + currencies: { currentCode }, + configuration: { selectedBrandStyle }, } = rootState; - const accountIdsParam = (selectedAccountIds && selectedAccountIds.length > 0) ? `&accounts[]=${selectedAccountIds.join('&accounts[]=')}` : ''; - const { data: accounts } = await dispatch.configuration.apiFetch({ url: `/api/v1/chart/account/overview?start=${start}&end=${end}${accountIdsParam}` }) as { data: AssetAccountType[] }; + const { data: accounts } = (await dispatch.configuration.apiFetch({ + url: `/api/v1/chart/account/overview?start=${start}&end=${end}`, + })) as { data: AssetAccountType[] }; let colorIndex = 0; - accounts.forEach((v, index) => { - if (index === 0) { - accounts[index].color = selectedBrandStyle; - } else { - if (colorIndex >= 6) { - colorIndex = 0; + accounts + .forEach((v, index) => { + if (index === 0) { + accounts[index].color = selectedBrandStyle; + } else { + if (colorIndex >= 6) { + colorIndex = 0; + } + accounts[index].color = colors[`brandStyle${colorIndex}`]; + colorIndex += 1; } - accounts[index].color = colors[`brandStyle${colorIndex}`]; - colorIndex += 1; - } - accounts[index].colorScheme = `chart${colorIndex}`; - accounts[index].colorScheme = `chart${colorIndex}`; - colorIndex += 1; - accounts[index].colorScheme = `chart${colorIndex}`; - colorIndex += 1; - accounts[index].entries = range > 3 ? Object.keys(v.entries) - .filter((e, i) => i % 2 === 0) - .filter((e, i) => i % 2 === 0) - .filter((e, i) => i % 2 === 0) - .map((key) => { - const value = parseFloat(accounts[index].entries[key]); - const date = new Date(key); - - return { - x: +date, - y: value, - }; - }) - : Object.keys(v.entries).map((key) => { - const value = parseFloat(accounts[index].entries[key]); - const date = new Date(key); - - return { - x: +date, - y: value, - }; - }); - accounts[index].maxY = maxBy(accounts[index].entries, (o: { x: number, y: number }) => (o.y)).y; - accounts[index].minY = minBy(accounts[index].entries, (o: { x: number, y: number }) => (o.y)).y; - }); + accounts[index].entries = range > 3 + ? Object.keys(v.entries) + .filter((e, i) => i % 2 === 0) + .filter((e, i) => i % 2 === 0) + .filter((e, i) => i % 2 === 0) + .map((key) => { + const value = parseFloat(accounts[index].entries[key]); + const date = new Date(key); + + return { + x: +date, + y: value, + }; + }) + : Object.keys(v.entries).map((key) => { + const value = parseFloat(accounts[index].entries[key]); + const date = new Date(key); + + return { + x: +date, + y: value, + }; + }); + accounts[index].maxY = maxBy( + accounts[index].entries, + (o: { x: number; y: number }) => o.y, + ).y; + accounts[index].minY = minBy( + accounts[index].entries, + (o: { x: number; y: number }) => o.y, + ).y; + }); - dispatch.firefly.setData({ accounts: accounts.filter((account) => account.currencyCode === currentCode) }); + dispatch.firefly.setData({ accounts: accounts.filter((account) => account.currencyCode === currentCode).slice(0, 5) }); }, async getBalanceChart(_: void, rootState): Promise { const { firefly: { - rangeDetails: { - start, - end, - }, - }, - currencies: { - currentCode, - }, - configuration: { - apiVersion, + rangeDetails: { start, end }, }, + currencies: { currentCode }, + configuration: { apiVersion }, } = rootState; try { const apiSemverMinimum = '2.0.9'; - const { data: accounts } = await dispatch.configuration.apiFetch({ url: `/api/v1/accounts?type=asset&date=${end}` }) as { data: AccountType[]}; - if (!semver.gte(apiVersion, apiSemverMinimum) || accounts.length === 0) { + const { data: accounts } = (await dispatch.configuration.apiFetch({ + url: `/api/v1/accounts?type=asset&date=${end}`, + })) as { data: AccountType[] }; + if ( + !semver.gte(apiVersion, apiSemverMinimum) + || accounts.length === 0 + ) { this.setData({ earnedChart: [], spentChart: [] }); return; } - const accountIdsParam = accounts.map((a) => a.id).join('&accounts[]='); - const { data: balances } = await dispatch.configuration.apiFetch({ url: `/api/v2/chart/balance/balance?start=${start}&end=${end}&accounts[]=${accountIdsParam}&period=1M` }) as { data: BalanceType[] }; + const accountIdsParam = accounts.map((a) => a.id).join('&filter[accounts][]='); + const { data: balances } = (await dispatch.configuration.apiFetch({ url: `/api/v2/chart/balance/balance?filter[start]=${start}&filter[end]=${end}&filter[accounts][]=${accountIdsParam}` })) as { data: BalanceType[] }; const earnedChartEntries = balances.filter((balance) => balance.currencyCode === currentCode && balance.label === 'earned')[0]?.entries; @@ -424,14 +414,17 @@ export default createModel()({ ); if (!response.accessToken) { - throw new Error('Failed to get accessToken with the refresh token. Please restart the Sign In process.'); + throw new Error( + 'Failed to get accessToken with the refresh token. Please restart the Sign In process.', + ); } const newCredential = { ...credential }; newCredential.accessToken = response.accessToken; newCredential.refreshToken = response.refreshToken; - newCredential.accessTokenExpiresIn = (response.issuedAt && response.expiresIn) - ? (response.issuedAt + response.expiresIn + -600).toString() : ''; + newCredential.accessTokenExpiresIn = response.issuedAt && response.expiresIn + ? (response.issuedAt + response.expiresIn + -600).toString() + : ''; await addCredential(newCredential); // set backend url and access token for this session @@ -473,8 +466,10 @@ export default createModel()({ email, backendURL, accessToken: response.accessToken, - accessTokenExpiresIn: (response.issuedAt && response.expiresIn) - ? (response.issuedAt + response.expiresIn + -600).toString() : '', + accessTokenExpiresIn: + response.issuedAt && response.expiresIn + ? (response.issuedAt + response.expiresIn + -600).toString() + : '', oauthClientId, oauthClientSecret, refreshToken: response.refreshToken, @@ -482,6 +477,5 @@ export default createModel()({ await addCredential(credential); }, - }), });