From 9e32fbebea5110f30429e1a0da92f1b1ff2cb4da Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 5 Jun 2023 15:34:42 +0200 Subject: [PATCH 001/187] [WIP]: Create early Typescript configuration --- .eslintignore | 1 + .eslintrc.js | 38 +- babel.config.js | 4 +- package-lock.json | 5052 +++++++++++++++++++++++++++------------------ package.json | 39 +- tsconfig.json | 37 + 6 files changed, 3133 insertions(+), 2038 deletions(-) create mode 100644 .eslintignore create mode 100644 tsconfig.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000000..82a9a730d1eb --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +.eslintrc.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 2f9a4167ae51..5be67beee5d2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,10 @@ module.exports = { - extends: ['expensify', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'prettier'], - plugins: ['react-hooks'], - parser: 'babel-eslint', + extends: ['expensify', 'airbnb-typescript', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], + plugins: ['@typescript-eslint', 'react-hooks'], + parser: '@typescript-eslint/parser', + parserOptions: { + project: './tsconfig.json', + }, ignorePatterns: ['!.*', 'src/vendor', '.github/actions/**/index.js', 'desktop/dist/*.js', 'dist/*.js', 'node_modules/.bin/**', '.git/**'], env: { jest: true, @@ -9,7 +12,7 @@ module.exports = { settings: { 'import/resolver': { node: { - extensions: ['.js', '.website.js', '.desktop.js', '.native.js', '.ios.js', '.android.js', '.config.js'], + extensions: ['.ts', '.tsx', '.js', '.jsx'], }, }, }, @@ -17,6 +20,15 @@ module.exports = { __DEV__: 'readonly', }, rules: { + "import/no-extraneous-dependencies": "off", + 'rulesdir/onyx-props-must-have-default': 'off', + 'react/jsx-filename-extension': [1, {extensions: ['.tsx', '.ts', '.jsx', '.js']}], + "@typescript-eslint/no-var-requires": "off", + '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + 'es/no-nullish-coalescing-operators': 'off', + 'es/no-optional-chaining': 'off', 'no-restricted-imports': [ 'error', { @@ -40,4 +52,22 @@ module.exports = { }, ], }, + overrides: [ + { + files: ['*.ts', '*.tsx'], + rules: { + 'no-restricted-imports': [ + 'error', + { + paths: [ + { + name: 'lodash/get', + message: 'Please use optional chaining and nullish coalescing instead.', + }, + ], + }, + ], + }, + }, + ], }; diff --git a/babel.config.js b/babel.config.js index 3fe49c3e034b..bc4668693e48 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,6 +1,6 @@ require('dotenv').config(); -const defaultPresets = ['@babel/preset-react', '@babel/preset-env', '@babel/preset-flow']; +const defaultPresets = ['@babel/preset-react', '@babel/preset-env', '@babel/preset-flow', '@babel/preset-typescript']; const defaultPlugins = [ // Adding the commonjs: true option to react-native-web plugin can cause styling conflicts ['react-native-web'], @@ -65,7 +65,7 @@ if (process.env.CAPTURE_METRICS === 'true') { ]); } -module.exports = ({caller}) => { +export default ({caller}) => { // For `react-native` (iOS/Android) caller will be "metro" // For `webpack` (Web) caller will be "@babel-loader" // For jest, it will be babel-jest diff --git a/package-lock.json b/package-lock.json index 13838e053b58..00c442255c1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,10 @@ "@react-native-firebase/crashlytics": "^12.3.0", "@react-native-firebase/perf": "^12.3.0", "@react-native-picker/picker": "^2.4.3", + "@react-navigation/core": "^6.4.8", + "@react-navigation/drawer": "github:Expensify/react-navigation#react-navigation-drawer-v6.5.0-alpha1-gitpkg", "@react-navigation/native": "6.1.6", + "@react-navigation/routers": "^6.1.8", "@react-navigation/stack": "6.3.16", "@react-ng/bounds-observer": "^0.2.1", "@ua/react-native-airship": "^15.2.6", @@ -59,7 +62,9 @@ "react-collapse": "^5.1.0", "react-content-loader": "^6.1.0", "react-dom": "18.1.0", + "react-freeze": "^1.0.3", "react-native": "https://github.com/Expensify/react-native/releases/download/v0.71.2-alpha.3/expensify-react-native-0.71.2-alpha.3.tgz", + "react-native-animatable": "^1.3.3", "react-native-blob-util": "^0.17.3", "react-native-collapsible": "^1.6.0", "react-native-config": "^1.4.5", @@ -96,7 +101,6 @@ "react-pdf": "5.7.2", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", - "save": "^2.4.0", "semver": "^7.3.8", "shim-keyboard-event-key": "^1.0.3", "underscore": "^1.13.1" @@ -110,8 +114,10 @@ "@babel/preset-env": "^7.11.0", "@babel/preset-flow": "^7.12.13", "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.21.5", "@babel/runtime": "^7.11.2", "@electron/notarize": "^1.2.3", + "@jest/globals": "^29.5.0", "@octokit/core": "4.0.4", "@octokit/plugin-paginate-rest": "3.1.0", "@octokit/plugin-throttling": "4.1.0", @@ -128,6 +134,34 @@ "@svgr/webpack": "^6.0.0", "@testing-library/jest-native": "5.4.1", "@testing-library/react-native": "11.5.1", + "@types/babel__core": "^7.20.1", + "@types/babel__preset-env": "^7.9.2", + "@types/concurrently": "^7.0.0", + "@types/copy-webpack-plugin": "^6.4.3", + "@types/eslint": "^7.29.0", + "@types/eslint-config-prettier": "^6.11.0", + "@types/fbjs": "^3.0.4", + "@types/jest": "^29.5.2", + "@types/jest-when": "^3.5.2", + "@types/js-yaml": "^4.0.5", + "@types/lodash": "4.14.195", + "@types/metro-config": "^0.76.3", + "@types/mock-fs": "^4.13.1", + "@types/prettier": "^2.7.3", + "@types/prop-types": "^15.7.5", + "@types/pusher-js": "5.1.0", + "@types/react": "^18.2.8", + "@types/react-collapse": "^5.0.1", + "@types/react-dom": "18.2.4", + "@types/react-native": "^0.71.7", + "@types/react-pdf": "5.7.2", + "@types/react-test-renderer": "^18.0.0", + "@types/semver": "^7.5.0", + "@types/setimmediate": "^1.0.2", + "@types/underscore": "^1.11.5", + "@types/webpack-bundle-analyzer": "^4.6.0", + "@typescript-eslint/eslint-plugin": "^5.59.8", + "@typescript-eslint/parser": "^5.59.8", "@vercel/ncc": "^0.27.0", "@welldone-software/why-did-you-render": "7.0.1", "ajv-cli": "^5.0.0", @@ -147,6 +181,7 @@ "electron": "22.3.7", "electron-builder": "24.4.0", "eslint": "^7.6.0", + "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-expensify": "^2.0.38", "eslint-config-prettier": "^8.8.0", "eslint-plugin-jest": "^24.1.0", @@ -159,6 +194,7 @@ "jest-circus": "29.4.1", "jest-cli": "29.4.1", "jest-environment-jsdom": "^29.4.1", + "js-yaml": "^4.1.0", "metro-react-native-babel-preset": "^0.73.3", "mock-fs": "^4.13.0", "onchange": "^7.1.0", @@ -175,6 +211,7 @@ "shellcheck": "^1.1.0", "style-loader": "^2.0.0", "time-analytics-webpack-plugin": "^0.1.17", + "typescript": "^4.8.4", "wait-port": "^0.2.9", "webpack": "^5.76.0", "webpack-bundle-analyzer": "^4.5.0", @@ -304,7 +341,7 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", + "version": "7.21.4", "license": "MIT", "dependencies": { "@babel/highlight": "^7.18.6" @@ -315,16 +352,14 @@ }, "node_modules/@babel/compat-data": { "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -358,12 +393,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.22.3", + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.22.3", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -405,8 +440,7 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", @@ -423,8 +457,7 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -438,20 +471,21 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "license": "ISC" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.19.0", + "version": "7.22.1", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.22.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-replace-supers": "^7.22.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -460,6 +494,13 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.19.0", "license": "MIT", @@ -497,7 +538,7 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", + "version": "7.22.1", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -514,11 +555,11 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", + "version": "7.21.0", "license": "MIT", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -535,38 +576,37 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", + "version": "7.22.3", "license": "MIT", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", + "version": "7.21.4", "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.21.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.22.1", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" }, "engines": { "node": ">=6.9.0" @@ -583,7 +623,7 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", + "version": "7.21.5", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -606,35 +646,35 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", + "version": "7.22.1", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-member-expression-to-functions": "^7.22.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.21.5", + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", + "version": "7.20.0", "license": "MIT", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -651,7 +691,7 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", + "version": "7.21.5", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -665,7 +705,7 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", + "version": "7.21.0", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -686,8 +726,7 @@ }, "node_modules/@babel/helpers": { "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "license": "MIT", "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.13", @@ -710,9 +749,8 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "version": "7.22.4", + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -1136,10 +1174,10 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", + "version": "7.21.4", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1235,10 +1273,10 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", + "version": "7.21.4", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1473,13 +1511,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", + "version": "7.21.5", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-simple-access": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -1816,12 +1853,13 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.12", + "version": "7.22.3", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-typescript": "^7.21.4" }, "engines": { "node": ">=6.9.0" @@ -2011,12 +2049,14 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.18.6", + "version": "7.21.5", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/plugin-transform-modules-commonjs": "^7.21.5", + "@babel/plugin-transform-typescript": "^7.21.3" }, "engines": { "node": ">=6.9.0" @@ -2044,8 +2084,7 @@ }, "node_modules/@babel/runtime": { "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", - "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -2066,31 +2105,29 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.22.4", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.22.3", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.22.4", + "@babel/types": "^7.22.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2099,11 +2136,10 @@ } }, "node_modules/@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.22.4", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, @@ -2122,21 +2158,18 @@ }, "node_modules/@blakeembrey/deque": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", - "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@blakeembrey/template": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@blakeembrey/template/-/template-1.1.0.tgz", - "integrity": "sha512-iZf+UWfL+DogJVpd/xMQyP6X6McYd6ArdYoPMiv/zlOTzeXXfQbYxBNJJBF6tThvsjLMbA8tLjkCdm9RWMFCCw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@callstack/reassure-cli": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@callstack/reassure-cli/-/reassure-cli-0.9.0.tgz", - "integrity": "sha512-auoxqyilxkT5mDdEPJqRRY+ZGlrihJjFQpopcFd/15ng76OPVka3L48RMEY2wXkFXLaOOs6enNGb596jYPuEtQ==", "dev": true, + "license": "MIT", "dependencies": { "@callstack/reassure-compare": "0.5.0", "@callstack/reassure-logger": "0.3.0", @@ -2150,9 +2183,8 @@ }, "node_modules/@callstack/reassure-cli/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2165,9 +2197,8 @@ }, "node_modules/@callstack/reassure-cli/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2181,9 +2212,8 @@ }, "node_modules/@callstack/reassure-cli/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2195,9 +2225,8 @@ }, "node_modules/@callstack/reassure-cli/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2207,24 +2236,21 @@ }, "node_modules/@callstack/reassure-cli/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@callstack/reassure-cli/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@callstack/reassure-cli/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2234,18 +2260,16 @@ }, "node_modules/@callstack/reassure-cli/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/@callstack/reassure-cli/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -2261,18 +2285,16 @@ }, "node_modules/@callstack/reassure-cli/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/@callstack/reassure-compare": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@callstack/reassure-compare/-/reassure-compare-0.5.0.tgz", - "integrity": "sha512-3sBeJ/+Hxjdb01KVb8LszO1kcJ8TXcrVnerUj+LYn2dkBOohAMqGYaOvCeoWsVEHJ+MIOzmvAGBJQRu69RoJdQ==", "dev": true, + "license": "MIT", "dependencies": { "@callstack/reassure-logger": "0.3.0", "markdown-builder": "^0.9.0", @@ -2282,24 +2304,21 @@ }, "node_modules/@callstack/reassure-danger": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@callstack/reassure-danger/-/reassure-danger-0.1.1.tgz", - "integrity": "sha512-lfza+qBdvVYtP7WvMTT+LfjBfuYsXZ4RxuBldsL8wJArGeCl3OZwUg+9bTo8v6kk/nY8memk5HxrCwWDSO24UA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@callstack/reassure-logger": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@callstack/reassure-logger/-/reassure-logger-0.3.0.tgz", - "integrity": "sha512-JX5o+8qkIbIRL+cQn9XlQYdv9p/3L6J70zZX6NYi9j0VrSS9PZIRfo8ujMdLSqUNV6HZN1ay59RzuncLjVu0aQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "4.1.2" } }, "node_modules/@callstack/reassure-logger/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2312,9 +2331,8 @@ }, "node_modules/@callstack/reassure-logger/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2328,9 +2346,8 @@ }, "node_modules/@callstack/reassure-logger/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2340,24 +2357,21 @@ }, "node_modules/@callstack/reassure-logger/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@callstack/reassure-logger/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@callstack/reassure-logger/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2367,9 +2381,8 @@ }, "node_modules/@callstack/reassure-measure": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@callstack/reassure-measure/-/reassure-measure-0.5.0.tgz", - "integrity": "sha512-KwlmNYcspBOp7FIw6XOz5O9mnKB4cWCCyM6vG4nFUPHSWQ6yVdRkawVvoPIV5qJ2hw7zCzdtqRrLWQSTF4eKlg==", "dev": true, + "license": "MIT", "dependencies": { "@callstack/reassure-logger": "0.3.0", "mathjs": "^11.5.0" @@ -2813,6 +2826,39 @@ "node": ">= 10" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "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/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "dev": true, @@ -2847,6 +2893,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.17.0", "dev": true, @@ -2869,15 +2923,38 @@ "node": ">= 4" } }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "dev": true, "license": "MIT" }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@expensify/react-native-web": { "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@expensify/react-native-web/-/react-native-web-0.18.15.tgz", - "integrity": "sha512-xE3WdGKY4SRLfIrimUlgP78ZsDaWy3g+KIO8mpxTm9zCXeX/sgEYs6QvhFghgEhhp7Y1bLH9LWTKiZy9LZM8EA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.6", "create-react-class": "^15.7.0", @@ -3016,8 +3093,7 @@ }, "node_modules/@formatjs/ecma402-abstract": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.15.0.tgz", - "integrity": "sha512-7bAYAv0w4AIao9DNg0avfOLTCPE9woAgs6SpXuMq11IN3A+l+cq8ghczwqSZBM11myvPSJA7vLn72q0rJ0QK6Q==", + "license": "MIT", "dependencies": { "@formatjs/intl-localematcher": "0.2.32", "tslib": "^2.4.0" @@ -3025,24 +3101,21 @@ }, "node_modules/@formatjs/intl-enumerator": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-enumerator/-/intl-enumerator-1.3.0.tgz", - "integrity": "sha512-q563xxoaQC6lu4VcDTsf/bbVtSDjXElbNGF5oguT3TpF3jdqxJgS4o1M+6qwjoubUYknLMfHM89OXU1rzhqSVQ==", + "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@formatjs/intl-getcanonicallocales": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.2.0.tgz", - "integrity": "sha512-LvjCj2DFaD8NSHW5pGBOcvgTzn5bT9aj4iNY/ejwVWkpAowoy1B4bZVXAJXLda5zqPV16zw/IXhxseiSflO/4A==", + "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@formatjs/intl-listformat": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.2.2.tgz", - "integrity": "sha512-YIruRGwUrmgVOXjWi6VbwPcRNBkEfgK2DFjyyqopCmpfJ+39vnl46oLpVchErnuXs6kkARy5GcGaGV7xRsH4lw==", + "license": "MIT", "dependencies": { "@formatjs/ecma402-abstract": "1.15.0", "@formatjs/intl-localematcher": "0.2.32", @@ -3051,8 +3124,7 @@ }, "node_modules/@formatjs/intl-locale": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-locale/-/intl-locale-3.3.0.tgz", - "integrity": "sha512-mKfnuvPZqzrOBpwnWHXfmdp78oLe0fNHGevX/k7KMk9LqTEIL64qt1G26kRwvFs88NdAYrCJVVOKShTTt0Qw6Q==", + "license": "MIT", "dependencies": { "@formatjs/ecma402-abstract": "1.15.0", "@formatjs/intl-enumerator": "1.3.0", @@ -3062,16 +3134,14 @@ }, "node_modules/@formatjs/intl-localematcher": { "version": "0.2.32", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz", - "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==", + "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@formatjs/intl-numberformat": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-numberformat/-/intl-numberformat-8.5.0.tgz", - "integrity": "sha512-z6qseXkCBp5UpSmg7oUKcq/mzum6ZMmMWrSkcVerF2jW289yX7ElXVxD0Da3VwumSVhJUxxYeyYogBbTFQ/kLw==", + "license": "MIT", "dependencies": { "@formatjs/ecma402-abstract": "1.15.0", "@formatjs/intl-localematcher": "0.2.32", @@ -3080,8 +3150,7 @@ }, "node_modules/@formatjs/intl-pluralrules": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.2.tgz", - "integrity": "sha512-mEbnbRzsSCIYqaBmrmUlOsPu5MG6KfMcnzekPzUrUucX2dNiI1KWBGHK6IoXl5c8zx60L1NXJ6cSQ7akoc15SQ==", + "license": "MIT", "dependencies": { "@formatjs/ecma402-abstract": "1.15.0", "@formatjs/intl-localematcher": "0.2.32", @@ -3119,8 +3188,7 @@ }, "node_modules/@html-ng/bounding-client-rect-observer": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@html-ng/bounding-client-rect-observer/-/bounding-client-rect-observer-0.1.3.tgz", - "integrity": "sha512-RV1Lz23ckbpOgU1bNGxxTS4XTCEFGxiXoEmi8EOHtzTVzS+AEMkoqxllugn6IHEMqNkbcHipURRupEJe8Dsp1g==" + "license": "Apache-2.0" }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", @@ -3154,6 +3222,13 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", "license": "MIT", @@ -3172,6 +3247,17 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "license": "MIT", @@ -3587,20 +3673,22 @@ } }, "node_modules/@jest/create-cache-key-function": { - "version": "29.2.1", - "license": "MIT", + "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.2.1" + "@jest/types": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/create-cache-key-function/node_modules/@jest/types": { - "version": "29.2.1", - "license": "MIT", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", "dependencies": { - "@jest/schemas": "^29.0.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -3612,15 +3700,17 @@ } }, "node_modules/@jest/create-cache-key-function/node_modules/@types/yargs": { - "version": "17.0.13", - "license": "MIT", + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@jest/create-cache-key-function/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -3633,7 +3723,8 @@ }, "node_modules/@jest/create-cache-key-function/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3647,7 +3738,8 @@ }, "node_modules/@jest/create-cache-key-function/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -3657,18 +3749,21 @@ }, "node_modules/@jest/create-cache-key-function/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@jest/create-cache-key-function/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@jest/create-cache-key-function/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -3677,23 +3772,23 @@ } }, "node_modules/@jest/environment": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.1" + "jest-mock": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -3705,7 +3800,7 @@ } }, "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -3770,53 +3865,53 @@ } }, "node_modules/@jest/expect": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "expect": "^29.4.1", - "jest-snapshot": "^29.4.1" + "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.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "jest-get-type": "^29.2.0" + "jest-get-type": "^29.4.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils/node_modules/jest-get-type": { - "version": "29.2.0", + "version": "29.4.3", "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" + "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/fake-timers/node_modules/@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -3828,7 +3923,7 @@ } }, "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -3883,10 +3978,10 @@ } }, "node_modules/@jest/fake-timers/node_modules/jest-util": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -3908,23 +4003,23 @@ } }, "node_modules/@jest/globals": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/environment": "^29.4.1", - "@jest/expect": "^29.4.1", - "@jest/types": "^29.4.1", - "jest-mock": "^29.4.1" + "@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/globals/node_modules/@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -3936,7 +4031,7 @@ } }, "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -4232,7 +4327,7 @@ } }, "node_modules/@jest/schemas": { - "version": "29.4.2", + "version": "29.4.3", "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.25.16" @@ -4732,11 +4827,11 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", + "version": "0.3.18", "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@jsamr/counter-style": { @@ -4754,18 +4849,16 @@ }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1" } }, "node_modules/@kwsites/promise-deferred": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", @@ -4922,13 +5015,11 @@ }, "node_modules/@mediapipe/face_detection": { "version": "0.4.1646425229", - "resolved": "https://registry.npmjs.org/@mediapipe/face_detection/-/face_detection-0.4.1646425229.tgz", - "integrity": "sha512-aeCN+fRAojv9ch3NXorP6r5tcGVLR3/gC1HmtqB0WEZBRXrdP6/3W/sGR0dHr1iT6ueiK95G9PVjbzFosf/hrg==" + "license": "Apache-2.0" }, "node_modules/@mediapipe/face_mesh": { "version": "0.4.1633559619", - "resolved": "https://registry.npmjs.org/@mediapipe/face_mesh/-/face_mesh-0.4.1633559619.tgz", - "integrity": "sha512-Vc8cdjxS5+O2gnjWH9KncYpUCVXT0h714KlWAsyqJvJbIgUJBqpppbIx8yWcAzBDxm/5cYSuBI5p5ySIPxzcEg==" + "license": "Apache-2.0" }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", @@ -5222,9 +5313,8 @@ }, "node_modules/@onfido/active-video-capture": { "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@onfido/active-video-capture/-/active-video-capture-0.25.2.tgz", - "integrity": "sha512-lBxd3JakrrDpldhjGCwEoO0jALOCDKZwsRyXZFxrxXXEvmFUNQRUTNDwgnEHSn8l6JPzxNd2fAKFqoryD/6F4w==", "hasInstallScript": true, + "license": "UNLICENSED", "dependencies": { "@mediapipe/face_detection": "^0.4.1646425229", "@mediapipe/face_mesh": "^0.4.1633559619", @@ -5247,8 +5337,7 @@ }, "node_modules/@onfido/castor": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@onfido/castor/-/castor-2.2.5.tgz", - "integrity": "sha512-Io3FTazT06FDFJGjHWNF9g0fsIKHw38L2apL//zp/vveyEV1Zce/U0fLzC8LcE5TuoMnoAYaRi6Jwogd8EN5TA==", + "license": "Apache-2.0", "dependencies": { "@onfido/castor-tokens": "^1.0.0-beta.6", "csstype": "^3.1.1" @@ -5259,16 +5348,14 @@ }, "node_modules/@onfido/castor-icons": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@onfido/castor-icons/-/castor-icons-2.17.0.tgz", - "integrity": "sha512-dY2QNOFrIEqwCXcjNmH7hqz35CDWtBDlPkwbLYfnhK9ZAV7qUs2wcAxGi/FD4Yvi7MNsRBsFKSoT379hBSQcCw==", + "license": "Apache-2.0", "peerDependencies": { "react": ">=17 || ^16.14 || ^15.7 || ^0.14.10" } }, "node_modules/@onfido/castor-tokens": { "version": "1.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@onfido/castor-tokens/-/castor-tokens-1.0.0-beta.6.tgz", - "integrity": "sha512-MfwuSlNdM0Ay0cI3LLyqZGsHW0e1Y1R/0IdQKVU575PdWQx1Q/538aOZMo/a3/oSW0pMEgfOm+mNqPx057cvWA==" + "license": "Apache-2.0" }, "node_modules/@onfido/opencv": { "version": "1.0.1", @@ -5279,25 +5366,25 @@ }, "node_modules/@onfido/react-native-sdk": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@onfido/react-native-sdk/-/react-native-sdk-7.4.0.tgz", - "integrity": "sha512-qeeaXLxVXz+J0lrqMwQGP52fXhCnTmEAC5K8jZe8YTqst2s1FZZGKkd1bxTloHG5hBBTa39SwWVUKmgPUm+Ssw==", + "license": "MIT", "peerDependencies": { "react": ">=17.0.0", "react-native": ">=0.68.2 <1.0.x" } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.7", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", + "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-html-community": "^0.0.8", "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", + "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", "find-up": "^5.0.0", "html-entities": "^2.1.0", - "loader-utils": "^2.0.0", + "loader-utils": "^2.0.4", "schema-utils": "^3.0.0", "source-map": "^0.7.3" }, @@ -5308,7 +5395,7 @@ "@types/webpack": "4.x || 5.x", "react-refresh": ">=0.10.0 <1.0.0", "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <3.0.0", + "type-fest": ">=0.17.0 <4.0.0", "webpack": ">=4.43.0 <6.0.0", "webpack-dev-server": "3.x || 4.x", "webpack-hot-middleware": "2.x", @@ -5335,10 +5422,27 @@ } } }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -5360,8 +5464,7 @@ }, "node_modules/@react-native-camera-roll/camera-roll": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@react-native-camera-roll/camera-roll/-/camera-roll-5.4.0.tgz", - "integrity": "sha512-SMEhc+2hQWubwzxR6Zac0CmrJ2rdoHHBo0ibG2iNMsxR0dnU5AdRGnYF/tyK9i20/i7ZNxn+qsEJ69shpkd6gg==", + "license": "MIT", "peerDependencies": { "react-native": ">=0.59" } @@ -5606,6 +5709,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@react-native-community/cli-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@react-native-community/cli-config/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5679,6 +5790,18 @@ "node": ">=4" } }, + "node_modules/@react-native-community/cli-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@react-native-community/cli-config/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -5719,12 +5842,12 @@ } }, "node_modules/@react-native-community/cli-doctor": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-10.1.1.tgz", - "integrity": "sha512-9uvUhr6aJu4C7pCTsD9iRS/38tx1mzIrWuEQoh2JffTXg9MOq4jesvobkyKFRD90nOvqunEvfpnWnRdWcZO0Wg==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-10.2.2.tgz", + "integrity": "sha512-49Ep2aQOF0PkbAR/TcyMjOm9XwBa8VQr+/Zzf4SJeYwiYLCT1NZRAVAVjYRXl0xqvq5S5mAGZZShS4AQl4WsZw==", "dependencies": { "@react-native-community/cli-config": "^10.1.1", - "@react-native-community/cli-platform-ios": "^10.1.1", + "@react-native-community/cli-platform-ios": "^10.2.1", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "command-exists": "^1.2.8", @@ -5741,6 +5864,19 @@ "wcwidth": "^1.0.1" } }, + "node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-platform-ios": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.2.1.tgz", + "integrity": "sha512-hz4zu4Y6eyj7D0lnZx8Mf2c2si8y+zh/zUTgCTaPPLzQD8jSZNNBtUUiA1cARm2razpe8marCZ1QbTMAGbf3mg==", + "dependencies": { + "@react-native-community/cli-tools": "^10.1.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "fast-xml-parser": "^4.0.12", + "glob": "^7.1.3", + "ora": "^5.4.1" + } + }, "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5938,17 +6074,29 @@ } }, "node_modules/@react-native-community/cli-hermes": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-10.1.3.tgz", - "integrity": "sha512-uYl8MLBtuu6bj0tDUzVGf30nK5i9haBv7F0u+NCOq31+zVjcwiUplrCuLorb2dMLMF+Fno9wDxi66W9MxoW4nA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-10.2.0.tgz", + "integrity": "sha512-urfmvNeR8IiO/Sd92UU3xPO+/qI2lwCWQnxOkWaU/i2EITFekE47MD6MZrfVulRVYRi5cuaFqKZO/ccOdOB/vQ==", "dependencies": { - "@react-native-community/cli-platform-android": "^10.1.3", + "@react-native-community/cli-platform-android": "^10.2.0", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" } }, + "node_modules/@react-native-community/cli-hermes/node_modules/@react-native-community/cli-platform-android": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-10.2.0.tgz", + "integrity": "sha512-CBenYwGxwFdObZTn1lgxWtMGA5ms2G/ALQhkS+XTAD7KHDrCxFF9yT/fnAjFZKM6vX/1TqGI1RflruXih3kAhw==", + "dependencies": { + "@react-native-community/cli-tools": "^10.1.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "glob": "^7.1.3", + "logkitty": "^0.7.1" + } + }, "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5994,6 +6142,49 @@ "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-hermes/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6007,6 +6198,60 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, + "node_modules/@react-native-community/cli-hermes/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6018,6 +6263,17 @@ "node": ">=8" } }, + "node_modules/@react-native-community/cli-hermes/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/@react-native-community/cli-platform-android": { "version": "10.1.3", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-10.1.3.tgz", @@ -6387,20 +6643,20 @@ } }, "node_modules/@react-native-community/cli-plugin-metro": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.1.1.tgz", - "integrity": "sha512-wEp47le4mzlelDF5sfkaaujUDYcuLep5HZqlcMx7PkL7BA3/fSHdDo1SblqaLgZ1ca6vFU+kfbHueLDct+xwFg==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.2.2.tgz", + "integrity": "sha512-sTGjZlD3OGqbF9v1ajwUIXhGmjw9NyJ/14Lo0sg7xH8Pv4qUd5ZvQ6+DWYrQn3IKFUMfGFWYyL81ovLuPylrpw==", "dependencies": { "@react-native-community/cli-server-api": "^10.1.1", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "execa": "^1.0.0", - "metro": "0.73.7", - "metro-config": "0.73.7", - "metro-core": "0.73.7", - "metro-react-native-babel-transformer": "0.73.7", - "metro-resolver": "0.73.7", - "metro-runtime": "0.73.7", + "metro": "0.73.9", + "metro-config": "0.73.9", + "metro-core": "0.73.9", + "metro-react-native-babel-transformer": "0.73.9", + "metro-resolver": "0.73.9", + "metro-runtime": "0.73.9", "readline": "^1.3.0" } }, @@ -6441,6 +6697,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6660,10 +6924,22 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.7.tgz", - "integrity": "sha512-pkRqFhuGUvkiu8HxKPUQelbCuyy6te6okMssTyLzQwsKilNLK4YMI2uD6PHnypg5SiMJ58lwfqkp/t5w72jEvw==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.9.tgz", + "integrity": "sha512-BlYbPmTF60hpetyNdKhdvi57dSqutb+/oK0u3ni4emIh78PiI0axGo7RfdsZ/mn3saASXc94tDbpC5yn7+NpEg==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -6687,23 +6963,23 @@ "invariant": "^2.2.4", "jest-worker": "^27.2.0", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.73.7", - "metro-cache": "0.73.7", - "metro-cache-key": "0.73.7", - "metro-config": "0.73.7", - "metro-core": "0.73.7", - "metro-file-map": "0.73.7", - "metro-hermes-compiler": "0.73.7", - "metro-inspector-proxy": "0.73.7", - "metro-minify-terser": "0.73.7", - "metro-minify-uglify": "0.73.7", - "metro-react-native-babel-preset": "0.73.7", - "metro-resolver": "0.73.7", - "metro-runtime": "0.73.7", - "metro-source-map": "0.73.7", - "metro-symbolicate": "0.73.7", - "metro-transform-plugins": "0.73.7", - "metro-transform-worker": "0.73.7", + "metro-babel-transformer": "0.73.9", + "metro-cache": "0.73.9", + "metro-cache-key": "0.73.9", + "metro-config": "0.73.9", + "metro-core": "0.73.9", + "metro-file-map": "0.73.9", + "metro-hermes-compiler": "0.73.9", + "metro-inspector-proxy": "0.73.9", + "metro-minify-terser": "0.73.9", + "metro-minify-uglify": "0.73.9", + "metro-react-native-babel-preset": "0.73.9", + "metro-resolver": "0.73.9", + "metro-runtime": "0.73.9", + "metro-source-map": "0.73.9", + "metro-symbolicate": "0.73.9", + "metro-transform-plugins": "0.73.9", + "metro-transform-worker": "0.73.9", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -6721,56 +6997,56 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-babel-transformer": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.7.tgz", - "integrity": "sha512-s7UVkwovGTEXYEQrv5hcmSBbFJ9s9lhCRNMScn4Itgj3UMdqRr9lU8DXKEFlJ7osgRxN6n5+eXqcvhE4B1H1VQ==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.9.tgz", + "integrity": "sha512-DlYwg9wwYIZTHtic7dyD4BP0SDftoltZ3clma76nHu43blMWsCnrImHeHsAVne3XsQ+RJaSRxhN5nkG2VyVHwA==", "dependencies": { "@babel/core": "^7.20.0", "hermes-parser": "0.8.0", - "metro-source-map": "0.73.7", + "metro-source-map": "0.73.9", "nullthrows": "^1.1.1" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-cache": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.7.tgz", - "integrity": "sha512-CPPgI+i9yVzOEDCdmEEZ67JgOvZyNDs8kStmGUFgDuLSjj3//HhkqT5XyfWjGeH6KmyGiS8ip3cgLOVn3IsOSA==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.9.tgz", + "integrity": "sha512-upiRxY8rrQkUWj7ieACD6tna7xXuXdu2ZqrheksT79ePI0aN/t0memf6WcyUtJUMHZetke3j+ppELNvlmp3tOw==", "dependencies": { - "metro-core": "0.73.7", + "metro-core": "0.73.9", "rimraf": "^3.0.2" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-cache-key": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.73.7.tgz", - "integrity": "sha512-GngYzrHwZU9U0Xl81H4aq9Tn5cjQyU12v9/flB0hzpeiYO5A89TIeilb4Kg8jtfC6JcmmsdK9nxYIGEq7odHhQ==" + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.73.9.tgz", + "integrity": "sha512-uJg+6Al7UoGIuGfoxqPBy6y1Ewq7Y8/YapGYIDh6sohInwt/kYKnPZgLDYHIPvY2deORnQ/2CYo4tOeBTnhCXQ==" }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-config": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.73.7.tgz", - "integrity": "sha512-pD/F+vK3u37cbj1skYmI6cUsEEscqNRtW2KlDKu1m+n8nooDB2oGTOZatlS5WQa7Ga6jYQRydftlq4CLDexAfA==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.73.9.tgz", + "integrity": "sha512-NiWl1nkYtjqecDmw77tbRbXnzIAwdO6DXGZTuKSkH+H/c1NKq1eizO8Fe+NQyFtwR9YLqn8Q0WN1nmkwM1j8CA==", "dependencies": { "cosmiconfig": "^5.0.5", "jest-validate": "^26.5.2", - "metro": "0.73.7", - "metro-cache": "0.73.7", - "metro-core": "0.73.7", - "metro-runtime": "0.73.7" + "metro": "0.73.9", + "metro-cache": "0.73.9", + "metro-core": "0.73.9", + "metro-runtime": "0.73.9" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-core": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.7.tgz", - "integrity": "sha512-H7j1Egj1VnNnsSYf9ZKv0SRwijgtRKIcaGNQq/T+er73vqqb4kR9H+2VIJYPXi6R8lT+QLIMfs6CWSUHAJUgtg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.9.tgz", + "integrity": "sha512-1NTs0IErlKcFTfYyRT3ljdgrISWpl1nys+gaHkXapzTSpvtX9F1NQNn5cgAuE+XIuTJhbsCdfIJiM2JXbrJQaQ==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.73.7" + "metro-resolver": "0.73.9" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-file-map": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.73.7.tgz", - "integrity": "sha512-BYaCo2e/4FMN4nOajeN+Za5cPfecfikzUYuFWWMyLAmHU6dj7B+PFkaJ4OEJO3vmRoeq5vMOmhpKXgysYbNXJg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.73.9.tgz", + "integrity": "sha512-R/Wg3HYeQhYY3ehWtfedw8V0ne4lpufG7a21L3GWer8tafnC9pmjoCKEbJz9XZkVj9i1FtxE7UTbrtZNeIILxQ==", "dependencies": { "abort-controller": "^3.0.0", "anymatch": "^3.0.3", @@ -6791,14 +7067,14 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-hermes-compiler": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.73.7.tgz", - "integrity": "sha512-F8PlJ8mWEEumGNH3eMRA3gjgP70ZvH4Ex5F1KY6ofD/gpn7w5HJHSPTeVw8gtUb1pYLN4nevptpyXGg04Jfcog==" + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.73.9.tgz", + "integrity": "sha512-5B3vXIwQkZMSh3DQQY23XpTCpX9kPLqZbA3rDuAcbGW0tzC3f8dCenkyBb0GcCzyTDncJeot/A7oVCVK6zapwg==" }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-inspector-proxy": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.73.7.tgz", - "integrity": "sha512-TsAtQeKr9X7NaQHlpshu+ZkGWlPi5fFKNqieLkfqvT1oXN4PQF/4q38INyiZtWLPvoUzTR6PRnm4pcUbJ7+Nzg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.73.9.tgz", + "integrity": "sha512-B3WrWZnlYhtTrv0IaX3aUAhi2qVILPAZQzb5paO1e+xrz4YZHk9c7dXv7qe7B/IQ132e3w46y3AL7rFo90qVjA==", "dependencies": { "connect": "^3.6.5", "debug": "^2.2.0", @@ -6810,52 +7086,117 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-minify-uglify": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.73.7.tgz", - "integrity": "sha512-DmDCzfdbaPExQuQ7NQozCNOSOAgp5Ux9kWzmKAT8seQ38/3NtUepW+PTgxXIHmwNjJV4oHsHwlBlTwJmYihKXg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.73.9.tgz", + "integrity": "sha512-gzxD/7WjYcnCNGiFJaA26z34rjOp+c/Ft++194Wg91lYep3TeWQ0CnH8t2HRS7AYDHU81SGWgvD3U7WV0g4LGA==", "dependencies": { "uglify-es": "^3.1.9" } }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-react-native-babel-preset": { + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.9.tgz", + "integrity": "sha512-AoD7v132iYDV4K78yN2OLgTPwtAKn0XlD2pOhzyBxiI8PeXzozhbKyPV7zUOJUPETj+pcEVfuYj5ZN/8+bhbCw==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-react-native-babel-transformer": { + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.9.tgz", + "integrity": "sha512-DSdrEHuQ22ixY7DyipyKkIcqhOJrt5s6h6X7BYJCP9AMUfXOwLe2biY3BcgJz5GOXv8/Akry4vTCvQscVS1otQ==", + "dependencies": { + "@babel/core": "^7.20.0", + "babel-preset-fbjs": "^3.4.0", + "hermes-parser": "0.8.0", + "metro-babel-transformer": "0.73.9", + "metro-react-native-babel-preset": "0.73.9", + "metro-source-map": "0.73.9", + "nullthrows": "^1.1.1" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-resolver": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.73.7.tgz", - "integrity": "sha512-mGW3XPeKBCwZnkHcKo1dhFa9olcx7SyNzG1vb5kjzJYe4Qs3yx04r/qFXIJLcIgLItB69TIGvosznUhpeOOXzg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.73.9.tgz", + "integrity": "sha512-Ej3wAPOeNRPDnJmkK0zk7vJ33iU07n+oPhpcf5L0NFkWneMmSM2bflMPibI86UjzZGmRfn0AhGhs8yGeBwQ/Xg==", "dependencies": { "absolute-path": "^0.0.0" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-runtime": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.7.tgz", - "integrity": "sha512-2fxRGrF8FyrwwHY0TCitdUljzutfW6CWEpdvPilfrs8p0PI5X8xOWg8ficeYtw+DldHtHIAL2phT59PqzHTyVA==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.9.tgz", + "integrity": "sha512-d5Hs83FpKB9r8q8Vb95+fa6ESpwysmPr4lL1I2rM2qXAFiO7OAPT9Bc23WmXgidkBtD0uUFdB2lG+H1ATz8rZg==", "dependencies": { "@babel/runtime": "^7.0.0", "react-refresh": "^0.4.0" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-source-map": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.7.tgz", - "integrity": "sha512-gbC/lfUN52TtQhEsTTA+987MaFUpQlufuCI05blLGLosDcFCsARikHsxa65Gtslm/rG2MqvFLiPA5hviONNv9g==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.9.tgz", + "integrity": "sha512-l4VZKzdqafipriETYR6lsrwtavCF1+CMhCOY9XbyWeTrpGSNgJQgdeJpttzEZTHQQTLR0csQo0nD1ef3zEP6IQ==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.73.7", + "metro-symbolicate": "0.73.9", "nullthrows": "^1.1.1", - "ob1": "0.73.7", + "ob1": "0.73.9", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-symbolicate": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.7.tgz", - "integrity": "sha512-571ThWmX5o8yGNzoXjlcdhmXqpByHU/bSZtWKhtgV2TyIAzYCYt4hawJAS5+/qDazUvjHdm8BbdqFUheM0EKNQ==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.9.tgz", + "integrity": "sha512-4TUOwxRHHqbEHxRqRJ3wZY5TA8xq7AHMtXrXcjegMH9FscgYztsrIG9aNBUBS+VLB6g1qc6BYbfIgoAnLjCDyw==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.73.7", + "metro-source-map": "0.73.9", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -6869,9 +7210,9 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-transform-plugins": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.73.7.tgz", - "integrity": "sha512-M5isiWEau0jMudb5ezaNBZnYqXxcATMqnAYc+Cu25IahT1NHi5aWwLok9EBmBpN5641IZUZXScf+KnS7fPxPCQ==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.73.9.tgz", + "integrity": "sha512-r9NeiqMngmooX2VOKLJVQrMuV7PAydbqst5bFhdVBPcFpZkxxqyzjzo+kzrszGy2UpSQBZr2P1L6OMjLHwQwfQ==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -6881,22 +7222,22 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-transform-worker": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.73.7.tgz", - "integrity": "sha512-gZYIu9JAqEI9Rxi0xGMuMW6QsHGbMSptozlTOwOd7T7yXX3WwYS/I3yLPbLhbZTjOhwMHkTt8Nhm2qBo8nh14g==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.73.9.tgz", + "integrity": "sha512-Rq4b489sIaTUENA+WCvtu9yvlT/C6zFMWhU4sq+97W29Zj0mPBjdk+qGT5n1ZBgtBIJzZWt1KxeYuc17f4aYtQ==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", "babel-preset-fbjs": "^3.4.0", - "metro": "0.73.7", - "metro-babel-transformer": "0.73.7", - "metro-cache": "0.73.7", - "metro-cache-key": "0.73.7", - "metro-hermes-compiler": "0.73.7", - "metro-source-map": "0.73.7", - "metro-transform-plugins": "0.73.7", + "metro": "0.73.9", + "metro-babel-transformer": "0.73.9", + "metro-cache": "0.73.9", + "metro-cache-key": "0.73.9", + "metro-hermes-compiler": "0.73.9", + "metro-source-map": "0.73.9", + "metro-transform-plugins": "0.73.9", "nullthrows": "^1.1.1" } }, @@ -6917,9 +7258,9 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/ob1": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.7.tgz", - "integrity": "sha512-DfelfvR843KADhSUATGGhuepVMRcf5VQX+6MQLy5AW0BKDLlO7Usj6YZeAAZP7P86QwsoTxB0RXCFiA7t6S1IQ==" + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.9.tgz", + "integrity": "sha512-kHOzCOFXmAM26fy7V/YuXNKne2TyRiXbFAvPBIbuedJCZZWQZHLdPzMeXJI4Egt6IcfDttRzN3jQ90wOwq1iNw==" }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/parse-json": { "version": "4.0.0", @@ -7051,9 +7392,9 @@ } }, "node_modules/@react-native-community/cli-plugin-metro/node_modules/yargs": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.0.tgz", - "integrity": "sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7594,11 +7935,67 @@ "eslint": ">=7" } }, + "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@react-native-community/eslint-config/node_modules/eslint-config-prettier": { "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, + "license": "MIT", "dependencies": { "get-stdin": "^6.0.0" }, @@ -7627,8 +8024,7 @@ }, "node_modules/@react-native-community/netinfo": { "version": "9.3.10", - "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-9.3.10.tgz", - "integrity": "sha512-OwnqoJUp/4sa9e3ju+wQavAa8l0fiA3DheeLMKzKxtKeAe0CA7bNxWRM752JvRQ6A/igPnt1V0zSlu5owvQEuA==", + "license": "MIT", "peerDependencies": { "react-native": ">=0.59" } @@ -7700,21 +8096,21 @@ }, "node_modules/@react-native/assets": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", + "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==" }, "node_modules/@react-native/normalize-color": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", - "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==" + "license": "MIT" }, "node_modules/@react-native/polyfills": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", + "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, "node_modules/@react-navigation/core": { "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.8.tgz", - "integrity": "sha512-klZ9Mcf/P2j+5cHMoGyIeurEzyBM2Uq9+NoSFrF6sdV5iCWHLFhrCXuhbBiQ5wVLCKf4lavlkd/DDs47PXs9RQ==", + "license": "MIT", "dependencies": { "@react-navigation/routers": "^6.1.8", "escape-string-regexp": "^4.0.0", @@ -7740,6 +8136,36 @@ "react": "*" } }, + "node_modules/@react-navigation/drawer": { + "version": "6.5.0-alpha1", + "resolved": "git+ssh://git@github.com/Expensify/react-navigation.git#bee9dc3f6bd03bb24f529efcb9f0d5d5832df6d6", + "license": "MIT", + "dependencies": { + "@react-navigation/elements": "^1.3.6", + "color": "^4.2.3", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-gesture-handler": ">= 2.0.0", + "react-native-reanimated": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/drawer/node_modules/@react-navigation/elements": { + "version": "1.3.17", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.17.tgz", + "integrity": "sha512-sui8AzHm6TxeEvWT/NEXlz3egYvCUog4tlXA4Xlb2Vxvy3purVXDq/XsM56lJl344U5Aj/jDzkVanOTMWyk4UA==", + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0" + } + }, "node_modules/@react-navigation/native": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.6.tgz", @@ -7757,8 +8183,7 @@ }, "node_modules/@react-navigation/routers": { "version": "6.1.8", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.8.tgz", - "integrity": "sha512-CEge+ZLhb1HBrSvv4RwOol7EKLW1QoqVIQlE9TN5MpxS/+VoQvP+cLbuz0Op53/iJfYhtXRFd1ZAd3RTRqto9w==", + "license": "MIT", "dependencies": { "nanoid": "^3.1.23" } @@ -7794,8 +8219,7 @@ }, "node_modules/@react-ng/bounds-observer": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@react-ng/bounds-observer/-/bounds-observer-0.2.1.tgz", - "integrity": "sha512-i0h7x0qOLJz+JKxhOpngHFob6PH2Qmra85aQ0e/viS1yYgidoBvPJHn8WPGn5LXff98fE+fPhngsaD7FSbxcwQ==", + "license": "Apache-2.0", "dependencies": { "@html-ng/bounding-client-rect-observer": "^0.1.3", "@types/react": "^18.0.31", @@ -7806,8 +8230,7 @@ }, "node_modules/@react-ng/bounds-observer/node_modules/react-dom": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -7818,8 +8241,7 @@ }, "node_modules/@react-ng/bounds-observer/node_modules/scheduler": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } @@ -15129,8 +15551,7 @@ }, "node_modules/@tensorflow-models/face-detection": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tensorflow-models/face-detection/-/face-detection-1.0.1.tgz", - "integrity": "sha512-oIEEqHy4qbkGn5xT1ldzwxK5s948+t7ts0+WoIfTPKwScpNa8YY4GJf+fpyhtOxUGGAZymXx25jrvF9YlAt9dg==", + "license": "Apache-2.0", "dependencies": { "rimraf": "^3.0.2" }, @@ -15143,8 +15564,7 @@ }, "node_modules/@tensorflow-models/face-landmarks-detection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tensorflow-models/face-landmarks-detection/-/face-landmarks-detection-1.0.2.tgz", - "integrity": "sha512-e10xKlBssv2nYg8hV93rNg7ne8NIJVT9Y1d/bpUCcBpPLJpykLw2DQ3nfPnoBpqhKDykFtKDGQVmeXvqc7H+KA==", + "license": "Apache-2.0", "dependencies": { "rimraf": "^3.0.2" }, @@ -15158,8 +15578,7 @@ }, "node_modules/@tensorflow/tfjs-backend-cpu": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.21.0.tgz", - "integrity": "sha512-88S21UAdzyK0CsLUrH17GPTD+26E85OP9CqmLZslaWjWUmBkeTQ5Zqyp6iK+gELnLxPx6q7JsNEeFuPv4254lQ==", + "license": "Apache-2.0", "dependencies": { "@types/seedrandom": "^2.4.28", "seedrandom": "^3.0.5" @@ -15173,8 +15592,7 @@ }, "node_modules/@tensorflow/tfjs-backend-wasm": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-3.21.0.tgz", - "integrity": "sha512-TVkJWrqukdxvIaQn9jZvtXR+7fmT7sti6NQH5OKVcBmFYIW7I3RiRRE66inVrHjEEvIVTUuW9yo9Ialn31EFIw==", + "license": "Apache-2.0", "dependencies": { "@tensorflow/tfjs-backend-cpu": "3.21.0", "@types/emscripten": "~0.0.34" @@ -15185,8 +15603,7 @@ }, "node_modules/@tensorflow/tfjs-backend-webgl": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.21.0.tgz", - "integrity": "sha512-N4zitIAT9IX8B8oe489qM3f3VcESxGZIZvHmVP8varOQakTvTX859aaPo1s8hK1qCy4BjSGbweooZe4U8D4kTQ==", + "license": "Apache-2.0", "dependencies": { "@tensorflow/tfjs-backend-cpu": "3.21.0", "@types/offscreencanvas": "~2019.3.0", @@ -15204,16 +15621,14 @@ }, "node_modules/@tensorflow/tfjs-converter": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.21.0.tgz", - "integrity": "sha512-12Y4zVDq3yW+wSjSDpSv4HnpL2sDZrNiGSg8XNiDE4HQBdjdA+a+Q3sZF/8NV9y2yoBhL5L7V4mMLDdbZBd9/Q==", + "license": "Apache-2.0", "peerDependencies": { "@tensorflow/tfjs-core": "3.21.0" } }, "node_modules/@tensorflow/tfjs-core": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.21.0.tgz", - "integrity": "sha512-YSfsswOqWfd+M4bXIhT3hwtAb+IV8+ODwIxwdFR/7jTAPZP1wMVnSlpKnXHAN64HFOiP+Tm3HmKusEZ0+09A0w==", + "license": "Apache-2.0", "dependencies": { "@types/long": "^4.0.1", "@types/offscreencanvas": "~2019.3.0", @@ -15345,11 +15760,11 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.19", + "version": "7.20.1", "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -15362,6 +15777,11 @@ "@babel/types": "^7.0.0" } }, + "node_modules/@types/babel__preset-env": { + "version": "7.9.2", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__template": { "version": "7.4.1", "license": "MIT", @@ -15405,6 +15825,14 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/concurrently": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "concurrently": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "dev": true, @@ -15422,6 +15850,14 @@ "@types/node": "*" } }, + "node_modules/@types/copy-webpack-plugin": { + "version": "6.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/webpack": "^4" + } + }, "node_modules/@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -15433,17 +15869,21 @@ }, "node_modules/@types/emscripten": { "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.34.tgz", - "integrity": "sha512-QSb9ojDincskc+uKMI0KXp8e1NALFINCrMlp8VGKGcTSxeEyRTTKyjWw75NYrCZHUsVEEEpr1tYHpbtaC++/sQ==" + "license": "MIT" }, "node_modules/@types/eslint": { - "version": "8.4.6", + "version": "7.29.0", "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, + "node_modules/@types/eslint-config-prettier": { + "version": "6.11.0", + "dev": true, + "license": "MIT" + }, "node_modules/@types/eslint-scope": { "version": "3.7.4", "license": "MIT", @@ -15477,6 +15917,14 @@ "@types/range-parser": "*" } }, + "node_modules/@types/fbjs": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jsdom": "*" + } + }, "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -15555,6 +16003,28 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest-when": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.5", + "dev": true, + "license": "MIT" + }, "node_modules/@types/jsdom": { "version": "20.0.1", "dev": true, @@ -15605,14 +16075,13 @@ } }, "node_modules/@types/lodash": { - "version": "4.14.183", + "version": "4.14.195", "dev": true, "license": "MIT" }, "node_modules/@types/long": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + "license": "MIT" }, "node_modules/@types/mdast": { "version": "3.0.10", @@ -15622,6 +16091,15 @@ "@types/unist": "*" } }, + "node_modules/@types/metro-config": { + "version": "0.76.3", + "deprecated": "This is a stub types definition. metro-config provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "metro-config": "*" + } + }, "node_modules/@types/mime": { "version": "3.0.1", "dev": true, @@ -15632,6 +16110,14 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mock-fs": { + "version": "4.13.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -15663,8 +16149,7 @@ }, "node_modules/@types/offscreencanvas": { "version": "2019.3.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", - "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" + "license": "MIT" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -15688,7 +16173,7 @@ } }, "node_modules/@types/prettier": { - "version": "2.7.2", + "version": "2.7.3", "license": "MIT" }, "node_modules/@types/pretty-hrtime": { @@ -15700,6 +16185,14 @@ "version": "15.7.5", "license": "MIT" }, + "node_modules/@types/pusher-js": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pusher-js": "*" + } + }, "node_modules/@types/qs": { "version": "6.9.7", "dev": true, @@ -15718,27 +16211,50 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", - "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", + "version": "18.2.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.12.tgz", + "integrity": "sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "node_modules/@types/react-collapse": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-dom": { "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-native": { - "version": "0.70.6", + "version": "0.71.7", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-pdf": { + "version": "5.7.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*", + "pdfjs-dist": "^2.10.377" + } + }, + "node_modules/@types/react-test-renderer": { + "version": "18.0.0", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/react": "*" } @@ -15762,8 +16278,12 @@ }, "node_modules/@types/seedrandom": { "version": "2.4.30", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.30.tgz", - "integrity": "sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==" + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "dev": true, + "license": "MIT" }, "node_modules/@types/serve-index": { "version": "1.9.1", @@ -15782,6 +16302,11 @@ "@types/node": "*" } }, + "node_modules/@types/setimmediate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, "node_modules/@types/sockjs": { "version": "0.3.33", "dev": true, @@ -15817,6 +16342,11 @@ "source-map": "^0.6.1" } }, + "node_modules/@types/underscore": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, "node_modules/@types/unist": { "version": "2.0.6", "dev": true, @@ -15835,13 +16365,11 @@ }, "node_modules/@types/webgl-ext": { "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", - "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==" + "license": "MIT" }, "node_modules/@types/webgl2": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.6.tgz", - "integrity": "sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==" + "license": "MIT" }, "node_modules/@types/webpack": { "version": "4.41.32", @@ -15856,6 +16384,24 @@ "source-map": "^0.6.0" } }, + "node_modules/@types/webpack-bundle-analyzer": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "tapable": "^2.2.0", + "webpack": "^5" + } + }, + "node_modules/@types/webpack-bundle-analyzer/node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/@types/webpack-env": { "version": "1.18.0", "dev": true, @@ -15908,29 +16454,85 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", + "version": "5.59.8", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/type-utils": "5.59.8", + "@typescript-eslint/utils": "5.59.8", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.8", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { @@ -15938,6 +16540,58 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.8", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript-eslint/experimental-utils": { "version": "4.33.0", "dev": true, @@ -15962,24 +16616,78 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", + "version": "5.59.8", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.8", + "debug": "^4.3.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.8", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { @@ -15987,6 +16695,33 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "4.33.0", "dev": true, @@ -16003,6 +16738,138 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/utils": "5.59.8", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.8", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.8", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript-eslint/types": { "version": "4.33.0", "dev": true, @@ -16160,8 +17027,7 @@ }, "node_modules/@ua/react-native-airship": { "version": "15.2.6", - "resolved": "https://registry.npmjs.org/@ua/react-native-airship/-/react-native-airship-15.2.6.tgz", - "integrity": "sha512-dVlBPPYXD/4SEshv/X7mmt3xF8WfnNqiSNzCyqJSLAZ1aJuPpP9Z5WemCYsa2iv6goRZvtJSE4P79QKlfoTwXw==", + "license": "Apache-2.0", "engines": { "node": ">= 16.0.0" }, @@ -16395,8 +17261,7 @@ }, "node_modules/@webgpu/types": { "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.16.tgz", - "integrity": "sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A==" + "license": "BSD-3-Clause" }, "node_modules/@webpack-cli/configtest": { "version": "1.2.0", @@ -16459,8 +17324,7 @@ }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "license": "BSD-2-Clause" }, "node_modules/7zip-bin": { "version": "5.1.1", @@ -16665,6 +17529,26 @@ } } }, + "node_modules/ajv-cli/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/ajv-cli/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/ajv-errors": { "version": "1.0.1", "dev": true, @@ -16724,7 +17608,8 @@ }, "node_modules/anser": { "version": "1.4.10", - "license": "MIT" + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" }, "node_modules/ansi-align": { "version": "3.0.1", @@ -16914,12 +17799,6 @@ "node": ">=14.0.0" } }, - "node_modules/app-builder-lib/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/app-builder-lib/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -16957,18 +17836,6 @@ "node": ">=12" } }, - "node_modules/app-builder-lib/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/app-builder-lib/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -17023,16 +17890,13 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "3.0.0", @@ -17303,7 +18167,8 @@ }, "node_modules/async-limiter": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, "node_modules/asynckit": { "version": "0.4.0", @@ -17361,8 +18226,12 @@ }, "node_modules/awesome-phonenumber": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/awesome-phonenumber/-/awesome-phonenumber-5.4.0.tgz", - "integrity": "sha512-jf6E+GHKRIMobCKygQhZ9kHmdxZ8hvXUlVhLyesP/k8JVpmWAyNa5TzWDS0hKe480tmT419yRtGLmTpD0k8pUQ==", + "license": "MIT", + "workspaces": [ + "webpack", + "cjs-test", + "esm-test" + ], "engines": { "node": ">=14" } @@ -18447,9 +19316,9 @@ } }, "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "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", @@ -18665,6 +19534,18 @@ "node": ">=8" } }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bplist-creator": { "version": "0.1.0", "license": "MIT", @@ -18938,12 +19819,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/builder-util/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/builder-util/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -19001,18 +19876,6 @@ "node": ">=8" } }, - "node_modules/builder-util/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/builder-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -19614,9 +20477,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", "engines": { "node": ">=6" }, @@ -19903,8 +20766,9 @@ }, "node_modules/common-path-prefix": { "version": "3.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true }, "node_modules/commondir": { "version": "1.0.1", @@ -19921,9 +20785,8 @@ }, "node_modules/complex.js": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, @@ -21133,9 +21996,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", + "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==" }, "node_modules/debug": { "version": "4.3.4", @@ -21166,8 +22029,7 @@ }, "node_modules/decode-uri-component": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "license": "MIT", "engines": { "node": ">=0.10" } @@ -21504,7 +22366,7 @@ } }, "node_modules/diff-sequences": { - "version": "29.4.2", + "version": "29.4.3", "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -21533,8 +22395,7 @@ }, "node_modules/dijkstrajs": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", - "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + "license": "MIT" }, "node_modules/dir-compare": { "version": "3.3.0", @@ -21574,12 +22435,6 @@ "dmg-license": "^1.0.11" } }, - "node_modules/dmg-builder/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/dmg-builder/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -21594,18 +22449,6 @@ "node": ">=12" } }, - "node_modules/dmg-builder/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/dmg-license": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", @@ -21797,6 +22640,7 @@ }, "node_modules/duplexer": { "version": "0.1.2", + "dev": true, "license": "MIT" }, "node_modules/duplexify": { @@ -21831,10 +22675,9 @@ }, "node_modules/electron": { "version": "22.3.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-22.3.7.tgz", - "integrity": "sha512-QUuRCl0QJk0w2yPAQXl6sk4YV1b9353w4e1eO/fF2OUmrGQV9Fy2pEpEDV1PIq/JJ/oeVVlI3H07LHpEcNb0TA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^16.11.26", @@ -22156,8 +22999,7 @@ }, "node_modules/encode-utf8": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -22445,9 +23287,8 @@ }, "node_modules/escape-latex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -22536,6 +23377,46 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-config-airbnb-typescript": { + "version": "17.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.13.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3" + } + }, "node_modules/eslint-config-expensify": { "version": "2.0.38", "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.38.tgz", @@ -22571,6 +23452,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/eslint-config-expensify/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/eslint-config-expensify/node_modules/astral-regex": { "version": "1.0.0", "dev": true, @@ -22855,6 +23744,18 @@ "node": ">=4" } }, + "node_modules/eslint-config-expensify/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/eslint-config-expensify/node_modules/json-schema-traverse": { "version": "0.4.1", "dev": true, @@ -23039,9 +23940,8 @@ }, "node_modules/eslint-config-prettier": { "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -23526,6 +24426,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "dev": true, @@ -23609,6 +24517,18 @@ "node": ">= 4" } }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "dev": true, @@ -23641,6 +24561,18 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { "version": "7.3.1", "dev": true, @@ -23728,19 +24660,6 @@ "node": ">= 0.6" } }, - "node_modules/event-stream": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, "node_modules/event-target-shim": { "version": "5.0.1", "license": "MIT", @@ -23764,16 +24683,6 @@ "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/evp_bytestokey": { "version": "1.0.3", "license": "MIT", @@ -23932,24 +24841,24 @@ "license": "MIT" }, "node_modules/expect": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1" + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^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" } }, "node_modules/expect/node_modules/@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -23961,7 +24870,7 @@ } }, "node_modules/expect/node_modules/@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -24016,17 +24925,17 @@ } }, "node_modules/expect/node_modules/jest-get-type": { - "version": "29.2.0", + "version": "29.4.3", "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/expect/node_modules/jest-util": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -24113,8 +25022,6 @@ }, "node_modules/expensify-common/node_modules/ua-parser-js": { "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", "funding": [ { "type": "opencollective", @@ -24125,6 +25032,7 @@ "url": "https://paypal.me/faisalman" } ], + "license": "MIT", "engines": { "node": "*" } @@ -24416,6 +25324,27 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-xml-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.4.tgz", + "integrity": "sha512-fbfMDvgBNIdDJLdLOwacjFAPYt67tr31H9ZhWSm45CDAxvd0I6WTlSOUo7K2P/K5sA5JgMKG64PI3DMcaFdWpQ==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "dev": true, @@ -24622,8 +25551,7 @@ }, "node_modules/filter-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -24767,8 +25695,7 @@ }, "node_modules/find-yarn-workspace-root": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "license": "Apache-2.0", "dependencies": { "micromatch": "^4.0.2" } @@ -25048,9 +25975,8 @@ }, "node_modules/fraction.js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, @@ -25076,10 +26002,6 @@ "node": ">= 0.6" } }, - "node_modules/from": { - "version": "0.1.7", - "license": "MIT" - }, "node_modules/from2": { "version": "2.3.0", "dev": true, @@ -25230,9 +26152,8 @@ }, "node_modules/get-stdin": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -25427,6 +26348,11 @@ "version": "4.2.10", "license": "ISC" }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, "node_modules/gzip-size": { "version": "6.0.0", "dev": true, @@ -26121,10 +27047,9 @@ }, "node_modules/husky": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", - "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "cosmiconfig": "^5.0.7", "execa": "^1.0.0", @@ -26144,17 +27069,23 @@ "node": ">=6" } }, + "node_modules/husky/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/husky/node_modules/ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/husky/node_modules/cosmiconfig": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, + "license": "MIT", "dependencies": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", @@ -26167,9 +27098,8 @@ }, "node_modules/husky/node_modules/cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, + "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -26183,9 +27113,8 @@ }, "node_modules/husky/node_modules/execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -26201,9 +27130,8 @@ }, "node_modules/husky/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -26213,9 +27141,8 @@ }, "node_modules/husky/node_modules/get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -26225,9 +27152,8 @@ }, "node_modules/husky/node_modules/import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dev": true, + "license": "MIT", "dependencies": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" @@ -26238,9 +27164,8 @@ }, "node_modules/husky/node_modules/is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, + "license": "MIT", "dependencies": { "ci-info": "^2.0.0" }, @@ -26250,18 +27175,28 @@ }, "node_modules/husky/node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/husky/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/husky/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -26272,9 +27207,8 @@ }, "node_modules/husky/node_modules/npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -26284,9 +27218,8 @@ }, "node_modules/husky/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -26299,9 +27232,8 @@ }, "node_modules/husky/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -26311,9 +27243,8 @@ }, "node_modules/husky/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -26324,18 +27255,16 @@ }, "node_modules/husky/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/husky/node_modules/pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^3.0.0" }, @@ -26345,27 +27274,24 @@ }, "node_modules/husky/node_modules/resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/husky/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/husky/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -26375,27 +27301,24 @@ }, "node_modules/husky/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/husky/node_modules/slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/husky/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -27603,9 +28526,8 @@ }, "node_modules/javascript-natural-sort": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest": { "version": "29.4.1", @@ -28124,13 +29046,13 @@ } }, "node_modules/jest-diff": { - "version": "29.4.2", + "version": "29.5.0", "license": "MIT", "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.2", - "jest-get-type": "^29.4.2", - "pretty-format": "^29.4.2" + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -28185,7 +29107,7 @@ } }, "node_modules/jest-diff/node_modules/jest-get-type": { - "version": "29.4.2", + "version": "29.4.3", "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -28619,13 +29541,13 @@ } }, "node_modules/jest-matcher-utils": { - "version": "29.4.2", + "version": "29.5.0", "license": "MIT", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.4.2", - "jest-get-type": "^29.4.2", - "pretty-format": "^29.4.2" + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -28680,7 +29602,7 @@ } }, "node_modules/jest-matcher-utils/node_modules/jest-get-type": { - "version": "29.4.2", + "version": "29.4.3", "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -28697,16 +29619,16 @@ } }, "node_modules/jest-message-util": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.1", + "@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.1", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -28715,10 +29637,10 @@ } }, "node_modules/jest-message-util/node_modules/@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -28730,7 +29652,7 @@ } }, "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -28795,22 +29717,22 @@ } }, "node_modules/jest-mock": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-util": "^29.4.1" + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-mock/node_modules/@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -28822,7 +29744,7 @@ } }, "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -28877,10 +29799,10 @@ } }, "node_modules/jest-mock/node_modules/jest-util": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -29596,7 +30518,7 @@ } }, "node_modules/jest-snapshot": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", @@ -29605,23 +30527,22 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "@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.1", + "expect": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-haste-map": "^29.4.1", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", + "jest-diff": "^29.5.0", + "jest-get-type": "^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.1", + "pretty-format": "^29.5.0", "semver": "^7.3.5" }, "engines": { @@ -29629,34 +30550,34 @@ } }, "node_modules/jest-snapshot/node_modules/@jest/transform": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.4.1", + "@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.1", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.4.1", + "jest-haste-map": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "write-file-atomic": "^5.0.0" + "write-file-atomic": "^4.0.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -29668,7 +30589,7 @@ } }, "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -29727,25 +30648,25 @@ } }, "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "29.2.0", + "version": "29.4.3", "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/jest-haste-map": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/types": "^29.4.1", + "@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.2.0", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -29757,17 +30678,17 @@ } }, "node_modules/jest-snapshot/node_modules/jest-regex-util": { - "version": "29.2.0", + "version": "29.4.3", "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/jest-util": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -29779,11 +30700,11 @@ } }, "node_modules/jest-snapshot/node_modules/jest-worker": { - "version": "29.4.1", + "version": "29.5.0", "license": "MIT", "dependencies": { "@types/node": "*", - "jest-util": "^29.4.1", + "jest-util": "^29.5.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -29815,14 +30736,14 @@ } }, "node_modules/jest-snapshot/node_modules/write-file-atomic": { - "version": "5.0.0", + "version": "4.0.2", "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/jest-util": { @@ -30250,9 +31171,9 @@ } }, "node_modules/joi": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.1.tgz", - "integrity": "sha512-teoLhIvWE298R6AeJywcjR4sX2hHjB3/xJX4qPjg+gTg+c0mzUDsziYlqPmLomq9gVsfaMcgPaGc7VxtD/9StA==", + "version": "17.9.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -30285,11 +31206,11 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", + "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -30297,7 +31218,8 @@ }, "node_modules/jsc-android": { "version": "250230.2.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", + "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==" }, "node_modules/jscodeshift": { "version": "0.13.1", @@ -30719,8 +31641,7 @@ }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -30786,8 +31707,7 @@ }, "node_modules/klaw-sync": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11" } @@ -30947,8 +31867,9 @@ } }, "node_modules/loader-utils": { - "version": "2.0.2", - "license": "MIT", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -30967,8 +31888,6 @@ }, "node_modules/localforage-removeitems": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/localforage-removeitems/-/localforage-removeitems-1.4.0.tgz", - "integrity": "sha512-/rFJ/w/FAZbVeXa6ZVANociT2sWaUglp2rgYARXcd/2v4CJMRbzvdcfYrNEBzEVkBRQqxipsUfyDDrAy9YiqzA==", "dependencies": { "localforage": ">=1.4.0" } @@ -30990,10 +31909,6 @@ "version": "4.17.21", "license": "MIT" }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "license": "MIT" - }, "node_modules/lodash.debounce": { "version": "4.0.8", "license": "MIT" @@ -31265,8 +32180,7 @@ }, "node_modules/long": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "license": "Apache-2.0" }, "node_modules/longest": { "version": "1.0.1", @@ -31287,14 +32201,12 @@ }, "node_modules/lottie-ios": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lottie-ios/-/lottie-ios-3.5.0.tgz", - "integrity": "sha512-DM6BYLhHTzvUsK89AjY+K9RwVGkOBwbH/iytjyZUmFbXz8DVsoPEyy+c7L5NZmVouZHvLnOQp6NaYTkwMo+iOg==", + "license": "Apache-2.0", "peer": true }, "node_modules/lottie-react-native": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.5.tgz", - "integrity": "sha512-xl6uEo50joQeIqso5SvPKt1uGBqMhgNgs+36S4725Nfigf4zAY23/I9QEEkJF+1BHq7wKCeYha2KafLTm20gqA==", + "license": "Apache-2.0", "dependencies": { "invariant": "^2.2.2", "react-native-safe-modules": "^1.0.3" @@ -31313,13 +32225,11 @@ }, "node_modules/lottie-react-native/node_modules/dedent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz", - "integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==" + "license": "MIT" }, "node_modules/lottie-react-native/node_modules/react-native-safe-modules": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz", - "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==", + "license": "MIT", "dependencies": { "dedent": "^0.6.0" }, @@ -31329,8 +32239,7 @@ }, "node_modules/lottie-web": { "version": "5.10.2", - "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.10.2.tgz", - "integrity": "sha512-d0PFIGiwuMsJYaF4uPo+qG8dEorlI+xFI2zrrFtE1bGO4WoLIz+NjremxEq1swpR7juR10aeOtmNh3d6G3ub0A==" + "license": "MIT" }, "node_modules/loud-rejection": { "version": "1.6.0", @@ -31610,10 +32519,6 @@ "dev": true, "license": "MIT" }, - "node_modules/map-stream": { - "version": "0.0.7", - "license": "MIT" - }, "node_modules/map-visit": { "version": "1.0.0", "license": "MIT", @@ -31626,9 +32531,8 @@ }, "node_modules/markdown-builder": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/markdown-builder/-/markdown-builder-0.9.0.tgz", - "integrity": "sha512-UovCyEEzMeKE7l88fbOk9SIJkOG7KXkg+TdudN8rvOtCtBO5uu1X27HSnM7LS/xH+vaShJLGpkBcYYcojWNx/g==", "dev": true, + "license": "MIT", "dependencies": { "husky": "^1.0.0-rc.14" } @@ -31644,9 +32548,8 @@ }, "node_modules/markdown-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", "dev": true, + "license": "MIT", "dependencies": { "repeat-string": "^1.0.0" }, @@ -31668,9 +32571,8 @@ }, "node_modules/mathjs": { "version": "11.8.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.0.tgz", - "integrity": "sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.21.0", "complex.js": "^2.1.1", @@ -31801,6 +32703,11 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "node_modules/memoizerific": { "version": "1.11.3", "dev": true, @@ -32111,6 +33018,13 @@ "metro-runtime": "0.71.3" } }, + "node_modules/metro-config/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/metro-config/node_modules/cosmiconfig": { "version": "5.2.1", "license": "MIT", @@ -32135,6 +33049,17 @@ "node": ">=4" } }, + "node_modules/metro-config/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/metro-config/node_modules/parse-json": { "version": "4.0.0", "license": "MIT", @@ -32515,9 +33440,9 @@ } }, "node_modules/metro-minify-terser": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.73.7.tgz", - "integrity": "sha512-gbv1fmMOZm6gJ6dQoD+QktlCi2wk6nlTR8j8lQCjeeXGbs6O9e5XLWNPOexHqo7S69bdbohEnfZnLJFcxgHeNw==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.73.9.tgz", + "integrity": "sha512-MTGPu2qV5qtzPJ2SqH6s58awHDtZ4jd7lmmLR+7TXDwtZDjIBA0YVfI0Zak2Haby2SqoNKrhhUns/b4dPAQAVg==", "dependencies": { "terser": "^5.15.0" } @@ -32531,8 +33456,7 @@ }, "node_modules/metro-react-native-babel-preset": { "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.7.tgz", - "integrity": "sha512-RKcmRZREjJCzHKP+JhC9QTCohkeb3xa/DtqHU14U5KWzJHdC0mMrkTZYNXhV0cryxsaVKVEw5873KhbZyZHMVw==", + "license": "MIT", "dependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -33159,10 +34083,6 @@ "node": ">=4" } }, - "node_modules/mingo": { - "version": "1.3.3", - "license": "MIT" - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "license": "ISC" @@ -33365,8 +34285,7 @@ }, "node_modules/moment-timezone": { "version": "0.5.43", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", - "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "license": "MIT", "dependencies": { "moment": "^2.29.4" }, @@ -33483,6 +34402,11 @@ "version": "1.4.0", "license": "MIT" }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, "node_modules/negotiator": { "version": "0.6.3", "license": "MIT", @@ -34130,9 +35054,8 @@ }, "node_modules/onchange": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/onchange/-/onchange-7.1.0.tgz", - "integrity": "sha512-ZJcqsPiWUAUpvmnJri5TPBooqJOPmC0ttN65juhN15Q8xA+Nbg3BaxBHXQ45EistKKlKElb0edmbPWnKSBkvMg==", "dev": true, + "license": "MIT", "dependencies": { "@blakeembrey/deque": "^1.0.5", "@blakeembrey/template": "^1.0.0", @@ -34161,8 +35084,7 @@ }, "node_modules/onfido-sdk-ui": { "version": "12.2.1", - "resolved": "https://registry.npmjs.org/onfido-sdk-ui/-/onfido-sdk-ui-12.2.1.tgz", - "integrity": "sha512-KRLOHXp4HHLw9IEPPPnG2iLSQfRjfmABFAB5fmfXawBgqdfoGuzrL6jm/nWggsi+gUMGhxlBQZzAmLLMuPL5LA==", + "license": "SEE LICENSE IN ./LICENSE", "dependencies": { "@onfido/active-video-capture": "^0.25.1", "@onfido/opencv": "^1.0.0", @@ -34640,8 +35562,7 @@ }, "node_modules/patch-package": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", - "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "license": "MIT", "dependencies": { "@yarnpkg/lockfile": "^1.1.0", "chalk": "^4.1.2", @@ -34668,8 +35589,7 @@ }, "node_modules/patch-package/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -34682,8 +35602,7 @@ }, "node_modules/patch-package/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -34697,13 +35616,11 @@ }, "node_modules/patch-package/node_modules/ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "license": "MIT" }, "node_modules/patch-package/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -34713,13 +35630,11 @@ }, "node_modules/patch-package/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "node_modules/patch-package/node_modules/cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -34733,16 +35648,14 @@ }, "node_modules/patch-package/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/patch-package/node_modules/is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "license": "MIT", "dependencies": { "ci-info": "^2.0.0" }, @@ -34752,8 +35665,7 @@ }, "node_modules/patch-package/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==", + "license": "MIT", "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -34767,16 +35679,14 @@ }, "node_modules/patch-package/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/patch-package/node_modules/rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -34786,16 +35696,14 @@ }, "node_modules/patch-package/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/patch-package/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -34805,24 +35713,21 @@ }, "node_modules/patch-package/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/patch-package/node_modules/slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/patch-package/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -34832,8 +35737,7 @@ }, "node_modules/patch-package/node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -34843,8 +35747,7 @@ }, "node_modules/patch-package/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -34904,16 +35807,6 @@ "node": ">=8" } }, - "node_modules/pause-stream": { - "version": "0.0.11", - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - } - }, "node_modules/pbkdf2": { "version": "3.1.2", "license": "MIT", @@ -35067,9 +35960,8 @@ }, "node_modules/please-upgrade-node": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, + "license": "MIT", "dependencies": { "semver-compare": "^1.0.0" } @@ -35094,8 +35986,7 @@ }, "node_modules/pngjs": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -35280,14 +36171,12 @@ }, "node_modules/postinstall-postinstall": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", - "hasInstallScript": true + "hasInstallScript": true, + "license": "MIT" }, "node_modules/preact": { "version": "10.13.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.13.2.tgz", - "integrity": "sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -35303,9 +36192,8 @@ }, "node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -35337,10 +36225,10 @@ } }, "node_modules/pretty-format": { - "version": "29.4.2", + "version": "29.5.0", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.2", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -35583,8 +36471,7 @@ }, "node_modules/qrcode": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", - "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "license": "MIT", "dependencies": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", @@ -35600,8 +36487,7 @@ }, "node_modules/qrcode/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -35614,16 +36500,14 @@ }, "node_modules/qrcode/node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/qrcode/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -35632,8 +36516,7 @@ }, "node_modules/qrcode/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -35643,13 +36526,11 @@ }, "node_modules/qrcode/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "node_modules/qrcode/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -35660,8 +36541,7 @@ }, "node_modules/qrcode/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -35671,8 +36551,7 @@ }, "node_modules/qrcode/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -35685,8 +36564,7 @@ }, "node_modules/qrcode/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -35696,16 +36574,14 @@ }, "node_modules/qrcode/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/qrcode/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -35717,8 +36593,7 @@ }, "node_modules/qrcode/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -35738,8 +36613,7 @@ }, "node_modules/qrcode/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -35764,8 +36638,7 @@ }, "node_modules/query-string": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "license": "MIT", "dependencies": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", @@ -35902,8 +36775,7 @@ }, "node_modules/react": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -35929,9 +36801,9 @@ } }, "node_modules/react-devtools-core": { - "version": "4.27.2", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.2.tgz", - "integrity": "sha512-8SzmIkpO87alD7Xr6gWIEa1jHkMjawOZ+6egjazlnjB4UUcbnzGDf/vBJ4BzGuWWEM+pzrxuzsPpcMqlQkYK2g==", + "version": "4.27.8", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.8.tgz", + "integrity": "sha512-KwoH8/wN/+m5wTItLnsgVraGNmFrcTWR3k1VimP1HjtMMw4CNF+F5vg4S/0tzTEKIdpCi2R7mPNTC+/dswZMgw==", "dependencies": { "shell-quote": "^1.6.1", "ws": "^7" @@ -36079,8 +36951,7 @@ }, "node_modules/react-native-blob-util": { "version": "0.17.3", - "resolved": "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.17.3.tgz", - "integrity": "sha512-nO4VXIPtCrtf3mzCiOkdrXsmc8WmOLNSziS7dCnQ6kSyg4LOLXP4mQOFqfiNxt78n7cZ0QOF5CdUY/sIZZ2aOA==", + "license": "MIT", "dependencies": { "base-64": "0.1.0", "glob": "^7.2.3" @@ -36092,8 +36963,7 @@ }, "node_modules/react-native-blob-util/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -36153,8 +37023,7 @@ }, "node_modules/react-native-dev-menu": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/react-native-dev-menu/-/react-native-dev-menu-4.1.1.tgz", - "integrity": "sha512-jdYjoTpFHvGXW12enaTnrgOoEgVF5JVqv4hcO8K0KV66Cvk8YLwD3XHsEiqMat+4C1osa+IG5Yt3qAiMOLBQxQ==", + "license": "MIT", "peerDependencies": { "react-native": ">=0.61.0" } @@ -36260,9 +37129,9 @@ } }, "node_modules/react-native-gradle-plugin": { - "version": "0.71.15", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.15.tgz", - "integrity": "sha512-7S3pAuPaQJlhax6EZ4JMsDNpj05TfuzX9gPgWLrFfAIWIFLuJ6aDQYAZy2TEI9QJALPoWrj8LWaqP/DGYh14pw==" + "version": "0.71.18", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.18.tgz", + "integrity": "sha512-7F6bD7B8Xsn3JllxcwHhFcsl9aHIig47+3eN4IHFNqfLhZr++3ElDrcqfMzugM+niWbaMi7bJ0kAkAL8eCpdWg==" }, "node_modules/react-native-haptic-feedback": { "version": "1.14.0", @@ -36281,8 +37150,7 @@ }, "node_modules/react-native-image-picker": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-5.1.0.tgz", - "integrity": "sha512-p506trG3PDSrdm+Yd0QolsnR3FtSe37gkP7OVsMa9UYwn1teaLGzhmx3QMZ4ZBwdV1AKBUFA5HF1ECAVSDTdQQ==", + "license": "MIT", "peerDependencies": { "react": "*", "react-native": "*" @@ -36296,8 +37164,7 @@ }, "node_modules/react-native-key-command": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-native-key-command/-/react-native-key-command-1.0.1.tgz", - "integrity": "sha512-vubmDxRnRQh+t2IqBUrbXOCVjkXYSQKJ+YAD1attcOV4mDHcQ0MB/Q4kxXzqVcLAlNPWMETFsJNShvt2cwO03Q==", + "license": "MIT", "dependencies": { "events": "^3.3.0", "underscore": "^1.13.4" @@ -36311,8 +37178,7 @@ }, "node_modules/react-native-localize": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.2.6.tgz", - "integrity": "sha512-EZETlC1ZlW/4g6xfsNCwAkAw5BDL2A6zk/08JjFR/GRGxYuKRD7iP1hHn1+h6DEu+xROjPpoNeXfMER2vkTVIQ==", + "license": "MIT", "peerDependencies": { "react": ">=16.8.6", "react-native": ">=0.60.0", @@ -36342,8 +37208,7 @@ }, "node_modules/react-native-onyx": { "version": "1.0.43", - "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-1.0.43.tgz", - "integrity": "sha512-NwS1SxZJWhk/7FUAAE9HrnupQR1yrSAheuhggdeA3+oFLn9X6UJM7n7w9DodFqCQbUIUy9biKtYk29sChfk9hQ==", + "license": "MIT", "dependencies": { "ascii-table": "0.0.9", "fast-equals": "^4.0.3", @@ -36429,8 +37294,7 @@ }, "node_modules/react-native-plaid-link-sdk": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/react-native-plaid-link-sdk/-/react-native-plaid-link-sdk-10.0.0.tgz", - "integrity": "sha512-WqU44tYzQoR/cuufD6GI7vOWTLcL9RXuEqfGaCynHdh2rmj3SC+mSEmXpg/LG0Q4E1XivkjfgF9tAOdlbnLMHQ==", + "license": "MIT", "peerDependencies": { "react": "*", "react-native": ">=0.66.0" @@ -36438,8 +37302,7 @@ }, "node_modules/react-native-qrcode-svg": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/react-native-qrcode-svg/-/react-native-qrcode-svg-6.2.0.tgz", - "integrity": "sha512-rb2PgUwT8QpQyReVYNvzRY84AHsMh81354Tnkfp6MfqRbcdJURhnBWLBOO11pLMS6eXiwlq4SkcQxy88hRq+Dw==", + "license": "MIT", "dependencies": { "prop-types": "^15.8.0", "qrcode": "^1.5.1" @@ -36452,8 +37315,7 @@ }, "node_modules/react-native-quick-sqlite": { "version": "8.0.0-beta.2", - "resolved": "https://registry.npmjs.org/react-native-quick-sqlite/-/react-native-quick-sqlite-8.0.0-beta.2.tgz", - "integrity": "sha512-B7makWA5GrlkUSRderWGuuEg83QDfRPjKYdBXiGx6L1hm2BhJ4u+sv6q+bTGoXAieEKcIPh+qeA/hhEat+dC2g==", + "license": "MIT", "peerDependencies": { "react": "*", "react-native": "*" @@ -36461,8 +37323,7 @@ }, "node_modules/react-native-reanimated": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.1.0.tgz", - "integrity": "sha512-8YJR7yHnrqK6yKWzkGLVEawi1WZqJ9bGIehKEnE8zG58yLrSwUZe1T220XTbftpkA3r37Sy0kJJ/HOOiaIU+HQ==", + "license": "MIT", "dependencies": { "@babel/plugin-transform-object-assign": "^7.16.7", "@babel/preset-typescript": "^7.16.7", @@ -36482,8 +37343,7 @@ }, "node_modules/react-native-reanimated/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "license": "MIT" }, "node_modules/react-native-render-html": { "version": "6.3.1", @@ -36548,8 +37408,7 @@ }, "node_modules/react-native-svg": { "version": "13.9.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-13.9.0.tgz", - "integrity": "sha512-Ey18POH0dA0ob/QiwCBVrxIiwflhYuw0P0hBlOHeY4J5cdbs8ngdKHeWC/Kt9+ryP6fNoEQ1PUgPYw2Bs/rp5Q==", + "license": "MIT", "dependencies": { "css-select": "^5.1.0", "css-tree": "^1.1.3" @@ -36575,8 +37434,7 @@ }, "node_modules/react-native-view-shot": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/react-native-view-shot/-/react-native-view-shot-3.6.0.tgz", - "integrity": "sha512-QUYGaIaAxQwOTydUzqGMooBwrg455cuOQgTloZ+gPO1QCUuLRdncCqrEMwKW5eUnN5U8JGMKeFRll2m6egOxtA==", + "license": "MIT", "peerDependencies": { "react": "*", "react-native": "*" @@ -36584,8 +37442,7 @@ }, "node_modules/react-native-web": { "version": "0.18.12", - "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.18.12.tgz", - "integrity": "sha512-fboP7yqobJ8InSr4fP+bQ3scOtSQtUoPcR+HWasH8b/fk/RO+mWcJs/8n+lewy9WTZc2D68ha7VwRDviUshEWA==", + "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.18.6", @@ -36603,8 +37460,7 @@ }, "node_modules/react-native-web-lottie": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/react-native-web-lottie/-/react-native-web-lottie-1.4.4.tgz", - "integrity": "sha512-W0jZiOf2u3Us6yASdpgAuL1+3Gw1EU/Wi5QAf6brzhXmJnq6/FMGCTf5zvSaX0yIurr9qcYB40DwAb4HwA6frg==", + "license": "MIT", "dependencies": { "lottie-web": "^5.7.1" }, @@ -36633,14 +37489,16 @@ }, "node_modules/react-native/node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/react-native/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -36653,7 +37511,8 @@ }, "node_modules/react-native/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -36663,7 +37522,8 @@ }, "node_modules/react-native/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/react-native/node_modules/deprecated-react-native-prop-types": { "version": "3.0.1", @@ -36675,10 +37535,6 @@ "prop-types": "*" } }, - "node_modules/react-native/node_modules/memoize-one": { - "version": "5.2.1", - "license": "MIT" - }, "node_modules/react-native/node_modules/metro-runtime": { "version": "0.73.7", "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.7.tgz", @@ -36724,7 +37580,8 @@ }, "node_modules/react-native/node_modules/mkdirp": { "version": "0.5.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { "minimist": "^1.2.6" }, @@ -36739,7 +37596,8 @@ }, "node_modules/react-native/node_modules/pretty-format": { "version": "26.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dependencies": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -36760,7 +37618,8 @@ }, "node_modules/react-native/node_modules/react-is": { "version": "17.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-native/node_modules/react-refresh": { "version": "0.4.3", @@ -36788,7 +37647,8 @@ }, "node_modules/react-native/node_modules/ws": { "version": "6.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dependencies": { "async-limiter": "~1.0.0" } @@ -37283,8 +38143,7 @@ }, "node_modules/react-webcam": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/react-webcam/-/react-webcam-7.0.1.tgz", - "integrity": "sha512-8E/Eb/7ksKwn5QdLn67tOR7+TdP9BZdu6E5/DSt20v8yfW/s0VGBigE6VA7R4278mBuBUowovAB3DkCfVmSPvA==", + "license": "MIT", "peerDependencies": { "react": ">=16.2.0", "react-dom": ">=16.2.0" @@ -37307,12 +38166,6 @@ "node": ">=12.0.0" } }, - "node_modules/read-config-file/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/read-config-file/node_modules/dotenv": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", @@ -37322,18 +38175,6 @@ "node": ">=10" } }, - "node_modules/read-config-file/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/read-pkg": { "version": "4.0.1", "dev": true, @@ -37504,9 +38345,8 @@ }, "node_modules/reassure": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/reassure/-/reassure-0.9.0.tgz", - "integrity": "sha512-FIf0GPchyPGItsrW5Wwff/NWVrfOcCUuJJSs4Nur6iRdQt8yvmCpcba4UyemdZ1KaFTIW1gKbAV3u2tuA7zmtQ==", "dev": true, + "license": "MIT", "dependencies": { "@callstack/reassure-cli": "0.9.0", "@callstack/reassure-danger": "0.1.1", @@ -37573,8 +38413,7 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.15.0", @@ -38115,9 +38954,8 @@ }, "node_modules/run-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", "dev": true, + "license": "MIT", "bin": { "run-node": "run-node" }, @@ -38476,16 +39314,6 @@ "truncate-utf8-bytes": "^1.0.0" } }, - "node_modules/save": { - "version": "2.5.0", - "license": "ISC", - "dependencies": { - "async": "^3.2.2", - "event-stream": "^4.0.1", - "lodash.assign": "^4.2.0", - "mingo": "1" - } - }, "node_modules/sax": { "version": "1.2.4", "license": "ISC" @@ -38551,8 +39379,7 @@ }, "node_modules/seedrandom": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + "license": "MIT" }, "node_modules/select": { "version": "1.1.2", @@ -38826,8 +39653,7 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -38877,9 +39703,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -38920,9 +39746,8 @@ }, "node_modules/simple-git": { "version": "3.19.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.19.0.tgz", - "integrity": "sha512-hyH2p9Ptxjf/xPuL7HfXbpYt9gKhC1yWDh3KYIAYJJePAKV7AEjLN4xhp7lozOdNiaJ9jlVvAbBymVlcS2jRiA==", "dev": true, + "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -39282,36 +40107,6 @@ "websocket-driver": "^0.7.4" } }, - "node_modules/sockjs-client": { - "version": "1.6.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7", - "eventsource": "^2.0.2", - "faye-websocket": "^0.11.4", - "inherits": "^2.0.4", - "url-parse": "^1.5.10" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://tidelift.com/funding/github/npm/sockjs-client" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/socks": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", @@ -39461,20 +40256,9 @@ "node": ">= 6" } }, - "node_modules/split": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, "node_modules/split-on-first": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "license": "MIT", "engines": { "node": ">=6" } @@ -39707,14 +40491,6 @@ "node": ">= 0.10.0" } }, - "node_modules/stream-combiner": { - "version": "0.2.2", - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, "node_modules/stream-each": { "version": "1.2.3", "dev": true, @@ -39742,8 +40518,7 @@ }, "node_modules/strict-uri-encode": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "license": "MIT", "engines": { "node": ">=4" } @@ -39939,6 +40714,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/style-loader": { "version": "2.0.0", "dev": true, @@ -40271,8 +41051,7 @@ }, "node_modules/terser": { "version": "5.16.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.4.tgz", - "integrity": "sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==", + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -40462,6 +41241,7 @@ }, "node_modules/through": { "version": "2.3.8", + "dev": true, "license": "MIT" }, "node_modules/through2": { @@ -40876,11 +41656,14 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", + "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "optional": true, + "peer": true, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -40900,8 +41683,6 @@ }, "node_modules/typed-function": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", - "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", "dev": true, "engines": { "node": ">= 14" @@ -40921,7 +41702,7 @@ } }, "node_modules/typescript": { - "version": "4.7.4", + "version": "4.8.4", "dev": true, "license": "Apache-2.0", "bin": { @@ -41385,16 +42166,13 @@ } }, "node_modules/use-latest-callback": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.6.tgz", - "integrity": "sha512-VO/P91A/PmKH9bcN9a7O3duSuxe6M14ZoYXgA6a8dab8doWNdhiIHzEkX/jFeTTRBsX0Ubk6nG4q2NIjNsj+bg==", - "peerDependencies": { - "react": ">=16.8" - } + "version": "0.1.5", + "license": "MIT" }, "node_modules/use-sync-external-store": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } @@ -41913,8 +42691,7 @@ }, "node_modules/webpack": { "version": "5.76.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", + "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -42628,7 +43405,8 @@ }, "node_modules/whatwg-fetch": { "version": "3.6.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" }, "node_modules/whatwg-mimetype": { "version": "3.0.0", @@ -42945,8 +43723,7 @@ }, "node_modules/xstate": { "version": "4.37.2", - "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.37.2.tgz", - "integrity": "sha512-Qm337O49CRTZ3PRyRuK6b+kvI+D3JGxXIZCTul+xEsyFCVkTFDt5jixaL1nBWcUBcaTQ9um/5CRGVItPi7fveg==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/xstate" @@ -43122,9 +43899,8 @@ }, "node_modules/zod": { "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -43241,20 +44017,16 @@ } }, "@babel/code-frame": { - "version": "7.18.6", + "version": "7.21.4", "requires": { "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" + "version": "7.20.14" }, "@babel/core": { "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -43279,12 +44051,11 @@ } }, "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.22.3", "requires": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.22.3", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -43313,8 +44084,6 @@ }, "@babel/helper-compilation-targets": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "requires": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", @@ -43325,8 +44094,6 @@ "dependencies": { "lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { "yallist": "^3.0.2" } @@ -43335,22 +44102,27 @@ "version": "6.3.0" }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "3.1.1" } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.19.0", + "version": "7.22.1", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.22.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-replace-supers": "^7.22.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } } }, "@babel/helper-create-regexp-features-plugin": { @@ -43377,7 +44149,7 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.9" + "version": "7.22.1" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", @@ -43386,10 +44158,10 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", + "version": "7.21.0", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -43399,30 +44171,28 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", + "version": "7.22.3", "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.3" } }, "@babel/helper-module-imports": { - "version": "7.18.6", + "version": "7.21.4", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.21.4" } }, "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.22.1", "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" } }, "@babel/helper-optimise-call-expression": { @@ -43432,7 +44202,7 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.19.0" + "version": "7.21.5" }, "@babel/helper-remap-async-to-generator": { "version": "7.18.9", @@ -43444,27 +44214,26 @@ } }, "@babel/helper-replace-supers": { - "version": "7.19.1", + "version": "7.22.1", "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-member-expression-to-functions": "^7.22.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" } }, "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.21.5", "requires": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.21.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", + "version": "7.20.0", "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" } }, "@babel/helper-split-export-declaration": { @@ -43474,13 +44243,13 @@ } }, "@babel/helper-string-parser": { - "version": "7.19.4" + "version": "7.21.5" }, "@babel/helper-validator-identifier": { "version": "7.19.1" }, "@babel/helper-validator-option": { - "version": "7.18.6" + "version": "7.21.0" }, "@babel/helper-wrap-function": { "version": "7.18.11", @@ -43493,8 +44262,6 @@ }, "@babel/helpers": { "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", "requires": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.13", @@ -43510,9 +44277,7 @@ } }, "@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==" + "version": "7.22.4" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -43734,9 +44499,9 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.18.6", + "version": "7.21.4", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -43788,9 +44553,9 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.18.6", + "version": "7.21.4", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-arrow-functions": { @@ -43907,12 +44672,11 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", + "version": "7.21.5", "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-simple-access": "^7.21.5" } }, "@babel/plugin-transform-modules-systemjs": { @@ -44080,11 +44844,12 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.18.12", + "version": "7.22.3", "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-typescript": "^7.21.4" } }, "@babel/plugin-transform-unicode-escapes": { @@ -44223,11 +44988,13 @@ } }, "@babel/preset-typescript": { - "version": "7.18.6", + "version": "7.21.5", "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/plugin-transform-modules-commonjs": "^7.21.5", + "@babel/plugin-transform-typescript": "^7.21.3" } }, "@babel/register": { @@ -44242,8 +45009,6 @@ }, "@babel/runtime": { "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", - "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==", "requires": { "regenerator-runtime": "^0.13.11" } @@ -44257,38 +45022,32 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" } }, "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.22.4", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.22.3", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.22.4", + "@babel/types": "^7.22.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.22.4", "requires": { - "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } @@ -44302,20 +45061,14 @@ }, "@blakeembrey/deque": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", - "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==", "dev": true }, "@blakeembrey/template": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@blakeembrey/template/-/template-1.1.0.tgz", - "integrity": "sha512-iZf+UWfL+DogJVpd/xMQyP6X6McYd6ArdYoPMiv/zlOTzeXXfQbYxBNJJBF6tThvsjLMbA8tLjkCdm9RWMFCCw==", "dev": true }, "@callstack/reassure-cli": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@callstack/reassure-cli/-/reassure-cli-0.9.0.tgz", - "integrity": "sha512-auoxqyilxkT5mDdEPJqRRY+ZGlrihJjFQpopcFd/15ng76OPVka3L48RMEY2wXkFXLaOOs6enNGb596jYPuEtQ==", "dev": true, "requires": { "@callstack/reassure-compare": "0.5.0", @@ -44327,8 +45080,6 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -44336,8 +45087,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -44346,8 +45095,6 @@ }, "cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -44357,8 +45104,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -44366,20 +45111,14 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -44387,14 +45126,10 @@ }, "y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { "cliui": "^8.0.1", @@ -44408,16 +45143,12 @@ }, "yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true } } }, "@callstack/reassure-compare": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@callstack/reassure-compare/-/reassure-compare-0.5.0.tgz", - "integrity": "sha512-3sBeJ/+Hxjdb01KVb8LszO1kcJ8TXcrVnerUj+LYn2dkBOohAMqGYaOvCeoWsVEHJ+MIOzmvAGBJQRu69RoJdQ==", "dev": true, "requires": { "@callstack/reassure-logger": "0.3.0", @@ -44428,14 +45159,10 @@ }, "@callstack/reassure-danger": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@callstack/reassure-danger/-/reassure-danger-0.1.1.tgz", - "integrity": "sha512-lfza+qBdvVYtP7WvMTT+LfjBfuYsXZ4RxuBldsL8wJArGeCl3OZwUg+9bTo8v6kk/nY8memk5HxrCwWDSO24UA==", "dev": true }, "@callstack/reassure-logger": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@callstack/reassure-logger/-/reassure-logger-0.3.0.tgz", - "integrity": "sha512-JX5o+8qkIbIRL+cQn9XlQYdv9p/3L6J70zZX6NYi9j0VrSS9PZIRfo8ujMdLSqUNV6HZN1ay59RzuncLjVu0aQ==", "dev": true, "requires": { "chalk": "4.1.2" @@ -44443,8 +45170,6 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -44452,8 +45177,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -44462,8 +45185,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -44471,20 +45192,14 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -44494,8 +45209,6 @@ }, "@callstack/reassure-measure": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@callstack/reassure-measure/-/reassure-measure-0.5.0.tgz", - "integrity": "sha512-KwlmNYcspBOp7FIw6XOz5O9mnKB4cWCCyM6vG4nFUPHSWQ6yVdRkawVvoPIV5qJ2hw7zCzdtqRrLWQSTF4eKlg==", "dev": true, "requires": { "@callstack/reassure-logger": "0.3.0", @@ -44812,6 +45525,23 @@ } } }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.1", + "dev": true + } + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "dev": true + }, "@eslint/eslintrc": { "version": "0.4.3", "dev": true, @@ -44837,6 +45567,13 @@ "uri-js": "^4.2.2" } }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "globals": { "version": "13.17.0", "dev": true, @@ -44848,16 +45585,28 @@ "version": "4.0.6", "dev": true }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "json-schema-traverse": { "version": "0.4.1", "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, "@expensify/react-native-web": { "version": "0.18.15", - "resolved": "https://registry.npmjs.org/@expensify/react-native-web/-/react-native-web-0.18.15.tgz", - "integrity": "sha512-xE3WdGKY4SRLfIrimUlgP78ZsDaWy3g+KIO8mpxTm9zCXeX/sgEYs6QvhFghgEhhp7Y1bLH9LWTKiZy9LZM8EA==", "requires": { "@babel/runtime": "^7.18.6", "create-react-class": "^15.7.0", @@ -44959,8 +45708,6 @@ }, "@formatjs/ecma402-abstract": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.15.0.tgz", - "integrity": "sha512-7bAYAv0w4AIao9DNg0avfOLTCPE9woAgs6SpXuMq11IN3A+l+cq8ghczwqSZBM11myvPSJA7vLn72q0rJ0QK6Q==", "requires": { "@formatjs/intl-localematcher": "0.2.32", "tslib": "^2.4.0" @@ -44968,24 +45715,18 @@ }, "@formatjs/intl-enumerator": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-enumerator/-/intl-enumerator-1.3.0.tgz", - "integrity": "sha512-q563xxoaQC6lu4VcDTsf/bbVtSDjXElbNGF5oguT3TpF3jdqxJgS4o1M+6qwjoubUYknLMfHM89OXU1rzhqSVQ==", "requires": { "tslib": "^2.4.0" } }, "@formatjs/intl-getcanonicallocales": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.2.0.tgz", - "integrity": "sha512-LvjCj2DFaD8NSHW5pGBOcvgTzn5bT9aj4iNY/ejwVWkpAowoy1B4bZVXAJXLda5zqPV16zw/IXhxseiSflO/4A==", "requires": { "tslib": "^2.4.0" } }, "@formatjs/intl-listformat": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.2.2.tgz", - "integrity": "sha512-YIruRGwUrmgVOXjWi6VbwPcRNBkEfgK2DFjyyqopCmpfJ+39vnl46oLpVchErnuXs6kkARy5GcGaGV7xRsH4lw==", "requires": { "@formatjs/ecma402-abstract": "1.15.0", "@formatjs/intl-localematcher": "0.2.32", @@ -44994,8 +45735,6 @@ }, "@formatjs/intl-locale": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-locale/-/intl-locale-3.3.0.tgz", - "integrity": "sha512-mKfnuvPZqzrOBpwnWHXfmdp78oLe0fNHGevX/k7KMk9LqTEIL64qt1G26kRwvFs88NdAYrCJVVOKShTTt0Qw6Q==", "requires": { "@formatjs/ecma402-abstract": "1.15.0", "@formatjs/intl-enumerator": "1.3.0", @@ -45005,16 +45744,12 @@ }, "@formatjs/intl-localematcher": { "version": "0.2.32", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz", - "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==", "requires": { "tslib": "^2.4.0" } }, "@formatjs/intl-numberformat": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-numberformat/-/intl-numberformat-8.5.0.tgz", - "integrity": "sha512-z6qseXkCBp5UpSmg7oUKcq/mzum6ZMmMWrSkcVerF2jW289yX7ElXVxD0Da3VwumSVhJUxxYeyYogBbTFQ/kLw==", "requires": { "@formatjs/ecma402-abstract": "1.15.0", "@formatjs/intl-localematcher": "0.2.32", @@ -45023,8 +45758,6 @@ }, "@formatjs/intl-pluralrules": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.2.tgz", - "integrity": "sha512-mEbnbRzsSCIYqaBmrmUlOsPu5MG6KfMcnzekPzUrUucX2dNiI1KWBGHK6IoXl5c8zx60L1NXJ6cSQ7akoc15SQ==", "requires": { "@formatjs/ecma402-abstract": "1.15.0", "@formatjs/intl-localematcher": "0.2.32", @@ -45055,9 +45788,7 @@ } }, "@html-ng/bounding-client-rect-observer": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@html-ng/bounding-client-rect-observer/-/bounding-client-rect-observer-0.1.3.tgz", - "integrity": "sha512-RV1Lz23ckbpOgU1bNGxxTS4XTCEFGxiXoEmi8EOHtzTVzS+AEMkoqxllugn6IHEMqNkbcHipURRupEJe8Dsp1g==" + "version": "0.1.3" }, "@humanwhocodes/config-array": { "version": "0.5.0", @@ -45082,6 +45813,12 @@ "resolve-from": "^5.0.0" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "camelcase": { "version": "5.3.1" }, @@ -45092,6 +45829,13 @@ "path-exists": "^4.0.0" } }, + "js-yaml": { + "version": "3.14.1", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "locate-path": { "version": "5.0.0", "requires": { @@ -45366,15 +46110,19 @@ } }, "@jest/create-cache-key-function": { - "version": "29.2.1", + "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==", "requires": { - "@jest/types": "^29.2.1" + "@jest/types": "^29.5.0" }, "dependencies": { "@jest/types": { - "version": "29.2.1", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", "requires": { - "@jest/schemas": "^29.0.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -45383,19 +46131,25 @@ } }, "@types/yargs": { - "version": "17.0.13", + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "requires": { "@types/yargs-parser": "*" } }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -45403,18 +46157,26 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -45422,18 +46184,18 @@ } }, "@jest/environment": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.1" + "jest-mock": "^29.5.0" }, "dependencies": { "@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -45442,7 +46204,7 @@ } }, "@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "requires": { "@types/yargs-parser": "*" } @@ -45481,38 +46243,38 @@ } }, "@jest/expect": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "expect": "^29.4.1", - "jest-snapshot": "^29.4.1" + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" } }, "@jest/expect-utils": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "jest-get-type": "^29.2.0" + "jest-get-type": "^29.4.3" }, "dependencies": { "jest-get-type": { - "version": "29.2.0" + "version": "29.4.3" } } }, "@jest/fake-timers": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "dependencies": { "@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -45521,7 +46283,7 @@ } }, "@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "requires": { "@types/yargs-parser": "*" } @@ -45552,9 +46314,9 @@ "version": "4.0.0" }, "jest-util": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -45571,18 +46333,18 @@ } }, "@jest/globals": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/environment": "^29.4.1", - "@jest/expect": "^29.4.1", - "@jest/types": "^29.4.1", - "jest-mock": "^29.4.1" + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" }, "dependencies": { "@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -45591,7 +46353,7 @@ } }, "@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "requires": { "@types/yargs-parser": "*" } @@ -45787,7 +46549,7 @@ } }, "@jest/schemas": { - "version": "29.4.2", + "version": "29.4.3", "requires": { "@sinclair/typebox": "^0.25.16" } @@ -46113,10 +46875,10 @@ "version": "1.4.14" }, "@jridgewell/trace-mapping": { - "version": "0.3.15", + "version": "0.3.18", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@jsamr/counter-style": { @@ -46128,8 +46890,6 @@ }, "@kwsites/file-exists": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", "dev": true, "requires": { "debug": "^4.1.1" @@ -46137,8 +46897,6 @@ }, "@kwsites/promise-deferred": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "dev": true }, "@leichtgewicht/ip-codec": { @@ -46242,14 +47000,10 @@ "dev": true }, "@mediapipe/face_detection": { - "version": "0.4.1646425229", - "resolved": "https://registry.npmjs.org/@mediapipe/face_detection/-/face_detection-0.4.1646425229.tgz", - "integrity": "sha512-aeCN+fRAojv9ch3NXorP6r5tcGVLR3/gC1HmtqB0WEZBRXrdP6/3W/sGR0dHr1iT6ueiK95G9PVjbzFosf/hrg==" + "version": "0.4.1646425229" }, "@mediapipe/face_mesh": { - "version": "0.4.1633559619", - "resolved": "https://registry.npmjs.org/@mediapipe/face_mesh/-/face_mesh-0.4.1633559619.tgz", - "integrity": "sha512-Vc8cdjxS5+O2gnjWH9KncYpUCVXT0h714KlWAsyqJvJbIgUJBqpppbIx8yWcAzBDxm/5cYSuBI5p5ySIPxzcEg==" + "version": "0.4.1633559619" }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", @@ -46473,8 +47227,6 @@ }, "@onfido/active-video-capture": { "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@onfido/active-video-capture/-/active-video-capture-0.25.2.tgz", - "integrity": "sha512-lBxd3JakrrDpldhjGCwEoO0jALOCDKZwsRyXZFxrxXXEvmFUNQRUTNDwgnEHSn8l6JPzxNd2fAKFqoryD/6F4w==", "requires": { "@mediapipe/face_detection": "^0.4.1646425229", "@mediapipe/face_mesh": "^0.4.1633559619", @@ -46494,8 +47246,6 @@ }, "@onfido/castor": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@onfido/castor/-/castor-2.2.5.tgz", - "integrity": "sha512-Io3FTazT06FDFJGjHWNF9g0fsIKHw38L2apL//zp/vveyEV1Zce/U0fLzC8LcE5TuoMnoAYaRi6Jwogd8EN5TA==", "requires": { "@onfido/castor-tokens": "^1.0.0-beta.6", "csstype": "^3.1.1" @@ -46503,14 +47253,10 @@ }, "@onfido/castor-icons": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@onfido/castor-icons/-/castor-icons-2.17.0.tgz", - "integrity": "sha512-dY2QNOFrIEqwCXcjNmH7hqz35CDWtBDlPkwbLYfnhK9ZAV7qUs2wcAxGi/FD4Yvi7MNsRBsFKSoT379hBSQcCw==", "requires": {} }, "@onfido/castor-tokens": { - "version": "1.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@onfido/castor-tokens/-/castor-tokens-1.0.0-beta.6.tgz", - "integrity": "sha512-MfwuSlNdM0Ay0cI3LLyqZGsHW0e1Y1R/0IdQKVU575PdWQx1Q/538aOZMo/a3/oSW0pMEgfOm+mNqPx057cvWA==" + "version": "1.0.0-beta.6" }, "@onfido/opencv": { "version": "1.0.1", @@ -46520,27 +47266,35 @@ }, "@onfido/react-native-sdk": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@onfido/react-native-sdk/-/react-native-sdk-7.4.0.tgz", - "integrity": "sha512-qeeaXLxVXz+J0lrqMwQGP52fXhCnTmEAC5K8jZe8YTqst2s1FZZGKkd1bxTloHG5hBBTa39SwWVUKmgPUm+Ssw==", "requires": {} }, "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.7", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", + "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", "dev": true, "requires": { "ansi-html-community": "^0.0.8", "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", + "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", "find-up": "^5.0.0", "html-entities": "^2.1.0", - "loader-utils": "^2.0.0", + "loader-utils": "^2.0.4", "schema-utils": "^3.0.0", "source-map": "^0.7.3" }, "dependencies": { + "html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true + }, "source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true } } @@ -46557,8 +47311,6 @@ }, "@react-native-camera-roll/camera-roll": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@react-native-camera-roll/camera-roll/-/camera-roll-5.4.0.tgz", - "integrity": "sha512-SMEhc+2hQWubwzxR6Zac0CmrJ2rdoHHBo0ibG2iNMsxR0dnU5AdRGnYF/tyK9i20/i7ZNxn+qsEJ69shpkd6gg==", "requires": {} }, "@react-native-community/cli": { @@ -46936,6 +47688,14 @@ "color-convert": "^2.0.1" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -46988,6 +47748,15 @@ "resolve-from": "^3.0.0" } }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -47021,12 +47790,12 @@ } }, "@react-native-community/cli-doctor": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-10.1.1.tgz", - "integrity": "sha512-9uvUhr6aJu4C7pCTsD9iRS/38tx1mzIrWuEQoh2JffTXg9MOq4jesvobkyKFRD90nOvqunEvfpnWnRdWcZO0Wg==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-10.2.2.tgz", + "integrity": "sha512-49Ep2aQOF0PkbAR/TcyMjOm9XwBa8VQr+/Zzf4SJeYwiYLCT1NZRAVAVjYRXl0xqvq5S5mAGZZShS4AQl4WsZw==", "requires": { "@react-native-community/cli-config": "^10.1.1", - "@react-native-community/cli-platform-ios": "^10.1.1", + "@react-native-community/cli-platform-ios": "^10.2.1", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "command-exists": "^1.2.8", @@ -47043,6 +47812,19 @@ "wcwidth": "^1.0.1" }, "dependencies": { + "@react-native-community/cli-platform-ios": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.2.1.tgz", + "integrity": "sha512-hz4zu4Y6eyj7D0lnZx8Mf2c2si8y+zh/zUTgCTaPPLzQD8jSZNNBtUUiA1cARm2razpe8marCZ1QbTMAGbf3mg==", + "requires": { + "@react-native-community/cli-tools": "^10.1.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "fast-xml-parser": "^4.0.12", + "glob": "^7.1.3", + "ora": "^5.4.1" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -47143,9 +47925,169 @@ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@react-native-community/cli-hermes": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-10.2.0.tgz", + "integrity": "sha512-urfmvNeR8IiO/Sd92UU3xPO+/qI2lwCWQnxOkWaU/i2EITFekE47MD6MZrfVulRVYRi5cuaFqKZO/ccOdOB/vQ==", + "requires": { + "@react-native-community/cli-platform-android": "^10.2.0", + "@react-native-community/cli-tools": "^10.1.1", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + }, + "dependencies": { + "@react-native-community/cli-platform-android": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-10.2.0.tgz", + "integrity": "sha512-CBenYwGxwFdObZTn1lgxWtMGA5ms2G/ALQhkS+XTAD7KHDrCxFF9yT/fnAjFZKM6vX/1TqGI1RflruXih3kAhw==", + "requires": { + "@react-native-community/cli-tools": "^10.1.1", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "glob": "^7.1.3", + "logkitty": "^0.7.1" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "shebang-command": { "version": "1.2.0", @@ -47160,14 +48102,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -47186,68 +48120,6 @@ } } }, - "@react-native-community/cli-hermes": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-10.1.3.tgz", - "integrity": "sha512-uYl8MLBtuu6bj0tDUzVGf30nK5i9haBv7F0u+NCOq31+zVjcwiUplrCuLorb2dMLMF+Fno9wDxi66W9MxoW4nA==", - "requires": { - "@react-native-community/cli-platform-android": "^10.1.3", - "@react-native-community/cli-tools": "^10.1.1", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "@react-native-community/cli-platform-android": { "version": "10.1.3", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-10.1.3.tgz", @@ -47519,20 +48391,20 @@ } }, "@react-native-community/cli-plugin-metro": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.1.1.tgz", - "integrity": "sha512-wEp47le4mzlelDF5sfkaaujUDYcuLep5HZqlcMx7PkL7BA3/fSHdDo1SblqaLgZ1ca6vFU+kfbHueLDct+xwFg==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.2.2.tgz", + "integrity": "sha512-sTGjZlD3OGqbF9v1ajwUIXhGmjw9NyJ/14Lo0sg7xH8Pv4qUd5ZvQ6+DWYrQn3IKFUMfGFWYyL81ovLuPylrpw==", "requires": { "@react-native-community/cli-server-api": "^10.1.1", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "execa": "^1.0.0", - "metro": "0.73.7", - "metro-config": "0.73.7", - "metro-core": "0.73.7", - "metro-react-native-babel-transformer": "0.73.7", - "metro-resolver": "0.73.7", - "metro-runtime": "0.73.7", + "metro": "0.73.9", + "metro-config": "0.73.9", + "metro-core": "0.73.9", + "metro-react-native-babel-transformer": "0.73.9", + "metro-resolver": "0.73.9", + "metro-runtime": "0.73.9", "readline": "^1.3.0" }, "dependencies": { @@ -47564,6 +48436,14 @@ "color-convert": "^2.0.1" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -47727,10 +48607,19 @@ } } }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "metro": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.7.tgz", - "integrity": "sha512-pkRqFhuGUvkiu8HxKPUQelbCuyy6te6okMssTyLzQwsKilNLK4YMI2uD6PHnypg5SiMJ58lwfqkp/t5w72jEvw==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.9.tgz", + "integrity": "sha512-BlYbPmTF60hpetyNdKhdvi57dSqutb+/oK0u3ni4emIh78PiI0axGo7RfdsZ/mn3saASXc94tDbpC5yn7+NpEg==", "requires": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -47754,23 +48643,23 @@ "invariant": "^2.2.4", "jest-worker": "^27.2.0", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.73.7", - "metro-cache": "0.73.7", - "metro-cache-key": "0.73.7", - "metro-config": "0.73.7", - "metro-core": "0.73.7", - "metro-file-map": "0.73.7", - "metro-hermes-compiler": "0.73.7", - "metro-inspector-proxy": "0.73.7", - "metro-minify-terser": "0.73.7", - "metro-minify-uglify": "0.73.7", - "metro-react-native-babel-preset": "0.73.7", - "metro-resolver": "0.73.7", - "metro-runtime": "0.73.7", - "metro-source-map": "0.73.7", - "metro-symbolicate": "0.73.7", - "metro-transform-plugins": "0.73.7", - "metro-transform-worker": "0.73.7", + "metro-babel-transformer": "0.73.9", + "metro-cache": "0.73.9", + "metro-cache-key": "0.73.9", + "metro-config": "0.73.9", + "metro-core": "0.73.9", + "metro-file-map": "0.73.9", + "metro-hermes-compiler": "0.73.9", + "metro-inspector-proxy": "0.73.9", + "metro-minify-terser": "0.73.9", + "metro-minify-uglify": "0.73.9", + "metro-react-native-babel-preset": "0.73.9", + "metro-resolver": "0.73.9", + "metro-runtime": "0.73.9", + "metro-source-map": "0.73.9", + "metro-symbolicate": "0.73.9", + "metro-transform-plugins": "0.73.9", + "metro-transform-worker": "0.73.9", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -47785,56 +48674,56 @@ } }, "metro-babel-transformer": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.7.tgz", - "integrity": "sha512-s7UVkwovGTEXYEQrv5hcmSBbFJ9s9lhCRNMScn4Itgj3UMdqRr9lU8DXKEFlJ7osgRxN6n5+eXqcvhE4B1H1VQ==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.9.tgz", + "integrity": "sha512-DlYwg9wwYIZTHtic7dyD4BP0SDftoltZ3clma76nHu43blMWsCnrImHeHsAVne3XsQ+RJaSRxhN5nkG2VyVHwA==", "requires": { "@babel/core": "^7.20.0", "hermes-parser": "0.8.0", - "metro-source-map": "0.73.7", + "metro-source-map": "0.73.9", "nullthrows": "^1.1.1" } }, "metro-cache": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.7.tgz", - "integrity": "sha512-CPPgI+i9yVzOEDCdmEEZ67JgOvZyNDs8kStmGUFgDuLSjj3//HhkqT5XyfWjGeH6KmyGiS8ip3cgLOVn3IsOSA==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.9.tgz", + "integrity": "sha512-upiRxY8rrQkUWj7ieACD6tna7xXuXdu2ZqrheksT79ePI0aN/t0memf6WcyUtJUMHZetke3j+ppELNvlmp3tOw==", "requires": { - "metro-core": "0.73.7", + "metro-core": "0.73.9", "rimraf": "^3.0.2" } }, "metro-cache-key": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.73.7.tgz", - "integrity": "sha512-GngYzrHwZU9U0Xl81H4aq9Tn5cjQyU12v9/flB0hzpeiYO5A89TIeilb4Kg8jtfC6JcmmsdK9nxYIGEq7odHhQ==" + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.73.9.tgz", + "integrity": "sha512-uJg+6Al7UoGIuGfoxqPBy6y1Ewq7Y8/YapGYIDh6sohInwt/kYKnPZgLDYHIPvY2deORnQ/2CYo4tOeBTnhCXQ==" }, "metro-config": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.73.7.tgz", - "integrity": "sha512-pD/F+vK3u37cbj1skYmI6cUsEEscqNRtW2KlDKu1m+n8nooDB2oGTOZatlS5WQa7Ga6jYQRydftlq4CLDexAfA==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.73.9.tgz", + "integrity": "sha512-NiWl1nkYtjqecDmw77tbRbXnzIAwdO6DXGZTuKSkH+H/c1NKq1eizO8Fe+NQyFtwR9YLqn8Q0WN1nmkwM1j8CA==", "requires": { "cosmiconfig": "^5.0.5", "jest-validate": "^26.5.2", - "metro": "0.73.7", - "metro-cache": "0.73.7", - "metro-core": "0.73.7", - "metro-runtime": "0.73.7" + "metro": "0.73.9", + "metro-cache": "0.73.9", + "metro-core": "0.73.9", + "metro-runtime": "0.73.9" } }, "metro-core": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.7.tgz", - "integrity": "sha512-H7j1Egj1VnNnsSYf9ZKv0SRwijgtRKIcaGNQq/T+er73vqqb4kR9H+2VIJYPXi6R8lT+QLIMfs6CWSUHAJUgtg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.9.tgz", + "integrity": "sha512-1NTs0IErlKcFTfYyRT3ljdgrISWpl1nys+gaHkXapzTSpvtX9F1NQNn5cgAuE+XIuTJhbsCdfIJiM2JXbrJQaQ==", "requires": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.73.7" + "metro-resolver": "0.73.9" } }, "metro-file-map": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.73.7.tgz", - "integrity": "sha512-BYaCo2e/4FMN4nOajeN+Za5cPfecfikzUYuFWWMyLAmHU6dj7B+PFkaJ4OEJO3vmRoeq5vMOmhpKXgysYbNXJg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.73.9.tgz", + "integrity": "sha512-R/Wg3HYeQhYY3ehWtfedw8V0ne4lpufG7a21L3GWer8tafnC9pmjoCKEbJz9XZkVj9i1FtxE7UTbrtZNeIILxQ==", "requires": { "abort-controller": "^3.0.0", "anymatch": "^3.0.3", @@ -47853,14 +48742,14 @@ } }, "metro-hermes-compiler": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.73.7.tgz", - "integrity": "sha512-F8PlJ8mWEEumGNH3eMRA3gjgP70ZvH4Ex5F1KY6ofD/gpn7w5HJHSPTeVw8gtUb1pYLN4nevptpyXGg04Jfcog==" + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.73.9.tgz", + "integrity": "sha512-5B3vXIwQkZMSh3DQQY23XpTCpX9kPLqZbA3rDuAcbGW0tzC3f8dCenkyBb0GcCzyTDncJeot/A7oVCVK6zapwg==" }, "metro-inspector-proxy": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.73.7.tgz", - "integrity": "sha512-TsAtQeKr9X7NaQHlpshu+ZkGWlPi5fFKNqieLkfqvT1oXN4PQF/4q38INyiZtWLPvoUzTR6PRnm4pcUbJ7+Nzg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.73.9.tgz", + "integrity": "sha512-B3WrWZnlYhtTrv0IaX3aUAhi2qVILPAZQzb5paO1e+xrz4YZHk9c7dXv7qe7B/IQ132e3w46y3AL7rFo90qVjA==", "requires": { "connect": "^3.6.5", "debug": "^2.2.0", @@ -47869,52 +48758,111 @@ } }, "metro-minify-uglify": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.73.7.tgz", - "integrity": "sha512-DmDCzfdbaPExQuQ7NQozCNOSOAgp5Ux9kWzmKAT8seQ38/3NtUepW+PTgxXIHmwNjJV4oHsHwlBlTwJmYihKXg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.73.9.tgz", + "integrity": "sha512-gzxD/7WjYcnCNGiFJaA26z34rjOp+c/Ft++194Wg91lYep3TeWQ0CnH8t2HRS7AYDHU81SGWgvD3U7WV0g4LGA==", "requires": { "uglify-es": "^3.1.9" } }, + "metro-react-native-babel-preset": { + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.9.tgz", + "integrity": "sha512-AoD7v132iYDV4K78yN2OLgTPwtAKn0XlD2pOhzyBxiI8PeXzozhbKyPV7zUOJUPETj+pcEVfuYj5ZN/8+bhbCw==", + "requires": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-react-native-babel-transformer": { + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.9.tgz", + "integrity": "sha512-DSdrEHuQ22ixY7DyipyKkIcqhOJrt5s6h6X7BYJCP9AMUfXOwLe2biY3BcgJz5GOXv8/Akry4vTCvQscVS1otQ==", + "requires": { + "@babel/core": "^7.20.0", + "babel-preset-fbjs": "^3.4.0", + "hermes-parser": "0.8.0", + "metro-babel-transformer": "0.73.9", + "metro-react-native-babel-preset": "0.73.9", + "metro-source-map": "0.73.9", + "nullthrows": "^1.1.1" + } + }, "metro-resolver": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.73.7.tgz", - "integrity": "sha512-mGW3XPeKBCwZnkHcKo1dhFa9olcx7SyNzG1vb5kjzJYe4Qs3yx04r/qFXIJLcIgLItB69TIGvosznUhpeOOXzg==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.73.9.tgz", + "integrity": "sha512-Ej3wAPOeNRPDnJmkK0zk7vJ33iU07n+oPhpcf5L0NFkWneMmSM2bflMPibI86UjzZGmRfn0AhGhs8yGeBwQ/Xg==", "requires": { "absolute-path": "^0.0.0" } }, "metro-runtime": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.7.tgz", - "integrity": "sha512-2fxRGrF8FyrwwHY0TCitdUljzutfW6CWEpdvPilfrs8p0PI5X8xOWg8ficeYtw+DldHtHIAL2phT59PqzHTyVA==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.9.tgz", + "integrity": "sha512-d5Hs83FpKB9r8q8Vb95+fa6ESpwysmPr4lL1I2rM2qXAFiO7OAPT9Bc23WmXgidkBtD0uUFdB2lG+H1ATz8rZg==", "requires": { "@babel/runtime": "^7.0.0", "react-refresh": "^0.4.0" } }, "metro-source-map": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.7.tgz", - "integrity": "sha512-gbC/lfUN52TtQhEsTTA+987MaFUpQlufuCI05blLGLosDcFCsARikHsxa65Gtslm/rG2MqvFLiPA5hviONNv9g==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.9.tgz", + "integrity": "sha512-l4VZKzdqafipriETYR6lsrwtavCF1+CMhCOY9XbyWeTrpGSNgJQgdeJpttzEZTHQQTLR0csQo0nD1ef3zEP6IQ==", "requires": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.73.7", + "metro-symbolicate": "0.73.9", "nullthrows": "^1.1.1", - "ob1": "0.73.7", + "ob1": "0.73.9", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "metro-symbolicate": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.7.tgz", - "integrity": "sha512-571ThWmX5o8yGNzoXjlcdhmXqpByHU/bSZtWKhtgV2TyIAzYCYt4hawJAS5+/qDazUvjHdm8BbdqFUheM0EKNQ==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.9.tgz", + "integrity": "sha512-4TUOwxRHHqbEHxRqRJ3wZY5TA8xq7AHMtXrXcjegMH9FscgYztsrIG9aNBUBS+VLB6g1qc6BYbfIgoAnLjCDyw==", "requires": { "invariant": "^2.2.4", - "metro-source-map": "0.73.7", + "metro-source-map": "0.73.9", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -47922,9 +48870,9 @@ } }, "metro-transform-plugins": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.73.7.tgz", - "integrity": "sha512-M5isiWEau0jMudb5ezaNBZnYqXxcATMqnAYc+Cu25IahT1NHi5aWwLok9EBmBpN5641IZUZXScf+KnS7fPxPCQ==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.73.9.tgz", + "integrity": "sha512-r9NeiqMngmooX2VOKLJVQrMuV7PAydbqst5bFhdVBPcFpZkxxqyzjzo+kzrszGy2UpSQBZr2P1L6OMjLHwQwfQ==", "requires": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -47934,22 +48882,22 @@ } }, "metro-transform-worker": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.73.7.tgz", - "integrity": "sha512-gZYIu9JAqEI9Rxi0xGMuMW6QsHGbMSptozlTOwOd7T7yXX3WwYS/I3yLPbLhbZTjOhwMHkTt8Nhm2qBo8nh14g==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.73.9.tgz", + "integrity": "sha512-Rq4b489sIaTUENA+WCvtu9yvlT/C6zFMWhU4sq+97W29Zj0mPBjdk+qGT5n1ZBgtBIJzZWt1KxeYuc17f4aYtQ==", "requires": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", "babel-preset-fbjs": "^3.4.0", - "metro": "0.73.7", - "metro-babel-transformer": "0.73.7", - "metro-cache": "0.73.7", - "metro-cache-key": "0.73.7", - "metro-hermes-compiler": "0.73.7", - "metro-source-map": "0.73.7", - "metro-transform-plugins": "0.73.7", + "metro": "0.73.9", + "metro-babel-transformer": "0.73.9", + "metro-cache": "0.73.9", + "metro-cache-key": "0.73.9", + "metro-hermes-compiler": "0.73.9", + "metro-source-map": "0.73.9", + "metro-transform-plugins": "0.73.9", "nullthrows": "^1.1.1" } }, @@ -47967,9 +48915,9 @@ } }, "ob1": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.7.tgz", - "integrity": "sha512-DfelfvR843KADhSUATGGhuepVMRcf5VQX+6MQLy5AW0BKDLlO7Usj6YZeAAZP7P86QwsoTxB0RXCFiA7t6S1IQ==" + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.9.tgz", + "integrity": "sha512-kHOzCOFXmAM26fy7V/YuXNKne2TyRiXbFAvPBIbuedJCZZWQZHLdPzMeXJI4Egt6IcfDttRzN3jQ90wOwq1iNw==" }, "parse-json": { "version": "4.0.0", @@ -48051,9 +48999,9 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yargs": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.0.tgz", - "integrity": "sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -48253,10 +49201,32 @@ "prettier": "^2.0.2" }, "dependencies": { + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + } + }, "eslint-config-prettier": { "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -48275,8 +49245,6 @@ }, "@react-native-community/netinfo": { "version": "9.3.10", - "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-9.3.10.tgz", - "integrity": "sha512-OwnqoJUp/4sa9e3ju+wQavAa8l0fiA3DheeLMKzKxtKeAe0CA7bNxWRM752JvRQ6A/igPnt1V0zSlu5owvQEuA==", "requires": {} }, "@react-native-community/progress-bar-android": { @@ -48317,20 +49285,20 @@ "requires": {} }, "@react-native/assets": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", + "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==" }, "@react-native/normalize-color": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", - "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==" + "version": "2.1.0" }, "@react-native/polyfills": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", + "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, "@react-navigation/core": { "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.8.tgz", - "integrity": "sha512-klZ9Mcf/P2j+5cHMoGyIeurEzyBM2Uq9+NoSFrF6sdV5iCWHLFhrCXuhbBiQ5wVLCKf4lavlkd/DDs47PXs9RQ==", "requires": { "@react-navigation/routers": "^6.1.8", "escape-string-regexp": "^4.0.0", @@ -48349,6 +49317,23 @@ "stacktrace-parser": "^0.1.10" } }, + "@react-navigation/drawer": { + "version": "git+ssh://git@github.com/Expensify/react-navigation.git#bee9dc3f6bd03bb24f529efcb9f0d5d5832df6d6", + "from": "@react-navigation/drawer@github:Expensify/react-navigation#react-navigation-drawer-v6.5.0-alpha1-gitpkg", + "requires": { + "@react-navigation/elements": "^1.3.6", + "color": "^4.2.3", + "warn-once": "^0.1.0" + }, + "dependencies": { + "@react-navigation/elements": { + "version": "1.3.17", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.17.tgz", + "integrity": "sha512-sui8AzHm6TxeEvWT/NEXlz3egYvCUog4tlXA4Xlb2Vxvy3purVXDq/XsM56lJl344U5Aj/jDzkVanOTMWyk4UA==", + "requires": {} + } + } + }, "@react-navigation/native": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.6.tgz", @@ -48362,8 +49347,6 @@ }, "@react-navigation/routers": { "version": "6.1.8", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.8.tgz", - "integrity": "sha512-CEge+ZLhb1HBrSvv4RwOol7EKLW1QoqVIQlE9TN5MpxS/+VoQvP+cLbuz0Op53/iJfYhtXRFd1ZAd3RTRqto9w==", "requires": { "nanoid": "^3.1.23" } @@ -48388,8 +49371,6 @@ }, "@react-ng/bounds-observer": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@react-ng/bounds-observer/-/bounds-observer-0.2.1.tgz", - "integrity": "sha512-i0h7x0qOLJz+JKxhOpngHFob6PH2Qmra85aQ0e/viS1yYgidoBvPJHn8WPGn5LXff98fE+fPhngsaD7FSbxcwQ==", "requires": { "@html-ng/bounding-client-rect-observer": "^0.1.3", "@types/react": "^18.0.31", @@ -48400,8 +49381,6 @@ "dependencies": { "react-dom": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -48409,8 +49388,6 @@ }, "scheduler": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { "loose-envify": "^1.1.0" } @@ -53182,24 +54159,18 @@ }, "@tensorflow-models/face-detection": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tensorflow-models/face-detection/-/face-detection-1.0.1.tgz", - "integrity": "sha512-oIEEqHy4qbkGn5xT1ldzwxK5s948+t7ts0+WoIfTPKwScpNa8YY4GJf+fpyhtOxUGGAZymXx25jrvF9YlAt9dg==", "requires": { "rimraf": "^3.0.2" } }, "@tensorflow-models/face-landmarks-detection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tensorflow-models/face-landmarks-detection/-/face-landmarks-detection-1.0.2.tgz", - "integrity": "sha512-e10xKlBssv2nYg8hV93rNg7ne8NIJVT9Y1d/bpUCcBpPLJpykLw2DQ3nfPnoBpqhKDykFtKDGQVmeXvqc7H+KA==", "requires": { "rimraf": "^3.0.2" } }, "@tensorflow/tfjs-backend-cpu": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.21.0.tgz", - "integrity": "sha512-88S21UAdzyK0CsLUrH17GPTD+26E85OP9CqmLZslaWjWUmBkeTQ5Zqyp6iK+gELnLxPx6q7JsNEeFuPv4254lQ==", "requires": { "@types/seedrandom": "^2.4.28", "seedrandom": "^3.0.5" @@ -53207,8 +54178,6 @@ }, "@tensorflow/tfjs-backend-wasm": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-3.21.0.tgz", - "integrity": "sha512-TVkJWrqukdxvIaQn9jZvtXR+7fmT7sti6NQH5OKVcBmFYIW7I3RiRRE66inVrHjEEvIVTUuW9yo9Ialn31EFIw==", "requires": { "@tensorflow/tfjs-backend-cpu": "3.21.0", "@types/emscripten": "~0.0.34" @@ -53216,8 +54185,6 @@ }, "@tensorflow/tfjs-backend-webgl": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.21.0.tgz", - "integrity": "sha512-N4zitIAT9IX8B8oe489qM3f3VcESxGZIZvHmVP8varOQakTvTX859aaPo1s8hK1qCy4BjSGbweooZe4U8D4kTQ==", "requires": { "@tensorflow/tfjs-backend-cpu": "3.21.0", "@types/offscreencanvas": "~2019.3.0", @@ -53229,14 +54196,10 @@ }, "@tensorflow/tfjs-converter": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.21.0.tgz", - "integrity": "sha512-12Y4zVDq3yW+wSjSDpSv4HnpL2sDZrNiGSg8XNiDE4HQBdjdA+a+Q3sZF/8NV9y2yoBhL5L7V4mMLDdbZBd9/Q==", "requires": {} }, "@tensorflow/tfjs-core": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.21.0.tgz", - "integrity": "sha512-YSfsswOqWfd+M4bXIhT3hwtAb+IV8+ODwIxwdFR/7jTAPZP1wMVnSlpKnXHAN64HFOiP+Tm3HmKusEZ0+09A0w==", "requires": { "@types/long": "^4.0.1", "@types/offscreencanvas": "~2019.3.0", @@ -53314,10 +54277,10 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.19", + "version": "7.20.1", "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -53329,6 +54292,10 @@ "@babel/types": "^7.0.0" } }, + "@types/babel__preset-env": { + "version": "7.9.2", + "dev": true + }, "@types/babel__template": { "version": "7.4.1", "requires": { @@ -53367,6 +54334,13 @@ "@types/responselike": "^1.0.0" } }, + "@types/concurrently": { + "version": "7.0.0", + "dev": true, + "requires": { + "concurrently": "*" + } + }, "@types/connect": { "version": "3.4.35", "dev": true, @@ -53382,6 +54356,13 @@ "@types/node": "*" } }, + "@types/copy-webpack-plugin": { + "version": "6.4.3", + "dev": true, + "requires": { + "@types/webpack": "^4" + } + }, "@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -53392,17 +54373,19 @@ } }, "@types/emscripten": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.34.tgz", - "integrity": "sha512-QSb9ojDincskc+uKMI0KXp8e1NALFINCrMlp8VGKGcTSxeEyRTTKyjWw75NYrCZHUsVEEEpr1tYHpbtaC++/sQ==" + "version": "0.0.34" }, "@types/eslint": { - "version": "8.4.6", + "version": "7.29.0", "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, + "@types/eslint-config-prettier": { + "version": "6.11.0", + "dev": true + }, "@types/eslint-scope": { "version": "3.7.4", "requires": { @@ -53432,6 +54415,13 @@ "@types/range-parser": "*" } }, + "@types/fbjs": { + "version": "3.0.4", + "dev": true, + "requires": { + "@types/jsdom": "*" + } + }, "@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -53499,6 +54489,25 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "29.5.2", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/jest-when": { + "version": "3.5.2", + "dev": true, + "requires": { + "@types/jest": "*" + } + }, + "@types/js-yaml": { + "version": "4.0.5", + "dev": true + }, "@types/jsdom": { "version": "20.0.1", "dev": true, @@ -53536,13 +54545,11 @@ } }, "@types/lodash": { - "version": "4.14.183", + "version": "4.14.195", "dev": true }, "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + "version": "4.0.2" }, "@types/mdast": { "version": "3.0.10", @@ -53551,6 +54558,13 @@ "@types/unist": "*" } }, + "@types/metro-config": { + "version": "0.76.3", + "dev": true, + "requires": { + "metro-config": "*" + } + }, "@types/mime": { "version": "3.0.1", "dev": true @@ -53559,6 +54573,13 @@ "version": "3.0.5", "dev": true }, + "@types/mock-fs": { + "version": "4.13.1", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -53585,9 +54606,7 @@ "dev": true }, "@types/offscreencanvas": { - "version": "2019.3.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", - "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" + "version": "2019.3.0" }, "@types/parse-json": { "version": "4.0.0", @@ -53609,7 +54628,7 @@ } }, "@types/prettier": { - "version": "2.7.2" + "version": "2.7.3" }, "@types/pretty-hrtime": { "version": "1.0.1", @@ -53618,6 +54637,13 @@ "@types/prop-types": { "version": "15.7.5" }, + "@types/pusher-js": { + "version": "5.1.0", + "dev": true, + "requires": { + "pusher-js": "*" + } + }, "@types/qs": { "version": "6.9.7", "dev": true @@ -53633,26 +54659,45 @@ "dev": true }, "@types/react": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", - "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", + "version": "18.2.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.12.tgz", + "integrity": "sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "@types/react-collapse": { + "version": "5.0.1", + "dev": true, + "requires": { + "@types/react": "*" + } + }, "@types/react-dom": { "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", "requires": { "@types/react": "*" } }, "@types/react-native": { - "version": "0.70.6", - "peer": true, + "version": "0.71.7", + "requires": { + "@types/react": "*" + } + }, + "@types/react-pdf": { + "version": "5.7.2", + "dev": true, + "requires": { + "@types/react": "*", + "pdfjs-dist": "^2.10.377" + } + }, + "@types/react-test-renderer": { + "version": "18.0.0", + "dev": true, "requires": { "@types/react": "*" } @@ -53672,9 +54717,11 @@ "version": "0.16.2" }, "@types/seedrandom": { - "version": "2.4.30", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.30.tgz", - "integrity": "sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==" + "version": "2.4.30" + }, + "@types/semver": { + "version": "7.5.0", + "dev": true }, "@types/serve-index": { "version": "1.9.1", @@ -53691,6 +54738,10 @@ "@types/node": "*" } }, + "@types/setimmediate": { + "version": "1.0.2", + "dev": true + }, "@types/sockjs": { "version": "0.3.33", "dev": true, @@ -53720,6 +54771,10 @@ "source-map": "^0.6.1" } }, + "@types/underscore": { + "version": "1.11.5", + "dev": true + }, "@types/unist": { "version": "2.0.6", "dev": true @@ -53735,14 +54790,10 @@ "optional": true }, "@types/webgl-ext": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", - "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==" + "version": "0.0.30" }, "@types/webgl2": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.6.tgz", - "integrity": "sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==" + "version": "0.0.6" }, "@types/webpack": { "version": "4.41.32", @@ -53756,6 +54807,21 @@ "source-map": "^0.6.0" } }, + "@types/webpack-bundle-analyzer": { + "version": "4.6.0", + "dev": true, + "requires": { + "@types/node": "*", + "tapable": "^2.2.0", + "webpack": "^5" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "dev": true + } + } + }, "@types/webpack-env": { "version": "1.18.0", "dev": true @@ -53800,17 +54866,72 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", + "version": "5.59.8", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/type-utils": "5.59.8", + "@typescript-eslint/utils": "5.59.8", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8" + } + }, + "@typescript-eslint/types": { + "version": "5.59.8", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.59.8", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.8", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "dev": true + } } }, "@typescript-eslint/experimental-utils": { @@ -53826,13 +54947,52 @@ } }, "@typescript-eslint/parser": { - "version": "4.33.0", + "version": "5.59.8", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.8", + "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8" + } + }, + "@typescript-eslint/types": { + "version": "5.59.8", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "dev": true + } } }, "@typescript-eslint/scope-manager": { @@ -53843,6 +55003,69 @@ "@typescript-eslint/visitor-keys": "4.33.0" } }, + "@typescript-eslint/type-utils": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/utils": "5.59.8", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8" + } + }, + "@typescript-eslint/types": { + "version": "5.59.8", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.59.8", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.8", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.8", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.8", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "dev": true + } + } + }, "@typescript-eslint/types": { "version": "4.33.0", "dev": true @@ -53921,8 +55144,6 @@ }, "@ua/react-native-airship": { "version": "15.2.6", - "resolved": "https://registry.npmjs.org/@ua/react-native-airship/-/react-native-airship-15.2.6.tgz", - "integrity": "sha512-dVlBPPYXD/4SEshv/X7mmt3xF8WfnNqiSNzCyqJSLAZ1aJuPpP9Z5WemCYsa2iv6goRZvtJSE4P79QKlfoTwXw==", "requires": {} }, "@vercel/ncc": { @@ -54123,9 +55344,7 @@ } }, "@webgpu/types": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.16.tgz", - "integrity": "sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A==" + "version": "0.1.16" }, "@webpack-cli/configtest": { "version": "1.2.0", @@ -54161,9 +55380,7 @@ "version": "4.2.2" }, "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "version": "1.1.0" }, "7zip-bin": { "version": "5.1.1", @@ -54302,6 +55519,23 @@ "json-schema-migrate": "^2.0.0", "json5": "^2.1.3", "minimist": "^1.2.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, "ajv-errors": { @@ -54340,7 +55574,9 @@ } }, "anser": { - "version": "1.4.10" + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" }, "ansi-align": { "version": "3.0.1", @@ -54474,12 +55710,6 @@ "temp-file": "^3.4.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -54511,15 +55741,6 @@ "universalify": "^2.0.0" } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -54565,15 +55786,11 @@ }, "arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { - "version": "1.0.10", - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "dev": true }, "aria-query": { "version": "3.0.0", @@ -54751,7 +55968,9 @@ "dev": true }, "async-limiter": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, "asynckit": { "version": "0.4.0", @@ -54781,9 +56000,7 @@ "dev": true }, "awesome-phonenumber": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/awesome-phonenumber/-/awesome-phonenumber-5.4.0.tgz", - "integrity": "sha512-jf6E+GHKRIMobCKygQhZ9kHmdxZ8hvXUlVhLyesP/k8JVpmWAyNa5TzWDS0hKe480tmT419yRtGLmTpD0k8pUQ==" + "version": "5.4.0" }, "axe-core": { "version": "4.4.3", @@ -55540,9 +56757,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -55696,6 +56913,12 @@ "requires": { "has-flag": "^4.0.0" } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, @@ -55876,12 +57099,6 @@ "color-convert": "^2.0.1" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -55924,15 +57141,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -56326,9 +57534,9 @@ } }, "cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==" }, "cli-table3": { "version": "0.6.3", @@ -56516,6 +57724,8 @@ }, "common-path-prefix": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, "commondir": { @@ -56529,8 +57739,6 @@ }, "complex.js": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", "dev": true }, "component-emitter": { @@ -57340,9 +58548,9 @@ "dev": true }, "dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", + "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==" }, "debug": { "version": "4.3.4", @@ -57358,9 +58566,7 @@ "dev": true }, "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + "version": "0.2.2" }, "decompress-response": { "version": "6.0.0", @@ -57578,7 +58784,7 @@ } }, "diff-sequences": { - "version": "29.4.2" + "version": "29.4.3" }, "diff-so-fancy": { "version": "1.4.3", @@ -57598,9 +58804,7 @@ } }, "dijkstrajs": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", - "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + "version": "1.0.3" }, "dir-compare": { "version": "3.3.0", @@ -57634,12 +58838,6 @@ "js-yaml": "^4.1.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -57650,15 +58848,6 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } } } }, @@ -57794,7 +58983,8 @@ "dev": true }, "duplexer": { - "version": "0.1.2" + "version": "0.1.2", + "dev": true }, "duplexify": { "version": "3.7.1", @@ -57820,8 +59010,6 @@ }, "electron": { "version": "22.3.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-22.3.7.tgz", - "integrity": "sha512-QUuRCl0QJk0w2yPAQXl6sk4YV1b9353w4e1eO/fF2OUmrGQV9Fy2pEpEDV1PIq/JJ/oeVVlI3H07LHpEcNb0TA==", "dev": true, "requires": { "@electron/get": "^2.0.0", @@ -58054,9 +59242,7 @@ "version": "3.0.0" }, "encode-utf8": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + "version": "1.0.3" }, "encodeurl": { "version": "1.0.2" @@ -58253,8 +59439,6 @@ }, "escape-latex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", "dev": true }, "escape-string-regexp": { @@ -58341,6 +59525,13 @@ "color-convert": "^2.0.1" } }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "chalk": { "version": "4.1.2", "dev": true, @@ -58388,6 +59579,14 @@ "version": "4.0.6", "dev": true }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "json-schema-traverse": { "version": "0.4.1", "dev": true @@ -58410,9 +59609,38 @@ "requires": { "has-flag": "^4.0.0" } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, + "eslint-config-airbnb-base": { + "version": "15.0.0", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "eslint-config-airbnb-typescript": { + "version": "17.0.0", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^15.0.0" + } + }, "eslint-config-expensify": { "version": "2.0.38", "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.38.tgz", @@ -58443,6 +59671,13 @@ "uri-js": "^4.2.2" } }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "astral-regex": { "version": "1.0.0", "dev": true @@ -58629,6 +59864,14 @@ "version": "2.0.0", "dev": true }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "json-schema-traverse": { "version": "0.4.1", "dev": true @@ -58747,8 +59990,6 @@ }, "eslint-config-prettier": { "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "requires": {} }, @@ -59077,18 +60318,6 @@ "etag": { "version": "1.8.1" }, - "event-stream": { - "version": "4.0.1", - "requires": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, "event-target-shim": { "version": "5.0.1" }, @@ -59102,12 +60331,6 @@ "events": { "version": "3.3.0" }, - "eventsource": { - "version": "2.0.2", - "dev": true, - "optional": true, - "peer": true - }, "evp_bytestokey": { "version": "1.0.3", "requires": { @@ -59217,19 +60440,19 @@ } }, "expect": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/expect-utils": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1" + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" }, "dependencies": { "@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -59238,7 +60461,7 @@ } }, "@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "requires": { "@types/yargs-parser": "*" } @@ -59269,12 +60492,12 @@ "version": "4.0.0" }, "jest-get-type": { - "version": "29.2.0" + "version": "29.4.3" }, "jest-util": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -59344,9 +60567,7 @@ } }, "ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==" + "version": "1.0.35" }, "underscore": { "version": "1.13.1" @@ -59551,6 +60772,14 @@ "version": "2.0.6", "dev": true }, + "fast-xml-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.4.tgz", + "integrity": "sha512-fbfMDvgBNIdDJLdLOwacjFAPYt67tr31H9ZhWSm45CDAxvd0I6WTlSOUo7K2P/K5sA5JgMKG64PI3DMcaFdWpQ==", + "requires": { + "strnum": "^1.0.5" + } + }, "fastest-levenshtein": { "version": "1.0.16", "dev": true @@ -59699,9 +60928,7 @@ } }, "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" + "version": "1.1.0" }, "finalhandler": { "version": "1.2.0", @@ -59798,8 +61025,6 @@ }, "find-yarn-workspace-root": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "requires": { "micromatch": "^4.0.2" } @@ -59968,8 +61193,6 @@ }, "fraction.js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true }, "fragment-cache": { @@ -59981,9 +61204,6 @@ "fresh": { "version": "0.5.2" }, - "from": { - "version": "0.1.7" - }, "from2": { "version": "2.3.0", "dev": true, @@ -60082,8 +61302,6 @@ }, "get-stdin": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true }, "get-stream": { @@ -60202,6 +61420,10 @@ "graceful-fs": { "version": "4.2.10" }, + "grapheme-splitter": { + "version": "1.0.4", + "dev": true + }, "gzip-size": { "version": "6.0.0", "dev": true, @@ -60653,8 +61875,6 @@ }, "husky": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", - "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", "dev": true, "requires": { "cosmiconfig": "^5.0.7", @@ -60669,16 +61889,19 @@ "slash": "^2.0.0" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "cosmiconfig": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { "import-fresh": "^2.0.0", @@ -60689,8 +61912,6 @@ }, "cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", @@ -60702,8 +61923,6 @@ }, "execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { "cross-spawn": "^6.0.0", @@ -60717,8 +61936,6 @@ }, "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" @@ -60726,8 +61943,6 @@ }, "get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" @@ -60735,8 +61950,6 @@ }, "import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dev": true, "requires": { "caller-path": "^2.0.0", @@ -60745,8 +61958,6 @@ }, "is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { "ci-info": "^2.0.0" @@ -60754,14 +61965,18 @@ }, "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", @@ -60770,8 +61985,6 @@ }, "npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, "requires": { "path-key": "^2.0.0" @@ -60779,8 +61992,6 @@ }, "p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -60788,8 +61999,6 @@ }, "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" @@ -60797,8 +62006,6 @@ }, "parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -60807,14 +62014,10 @@ }, "path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true }, "pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { "find-up": "^3.0.0" @@ -60822,20 +62025,14 @@ }, "resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "dev": true }, "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "requires": { "shebang-regex": "^1.0.0" @@ -60843,20 +62040,14 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true }, "slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, "which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -61557,8 +62748,6 @@ }, "javascript-natural-sort": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", "dev": true }, "jest": { @@ -61936,12 +63125,12 @@ } }, "jest-diff": { - "version": "29.4.2", + "version": "29.5.0", "requires": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.2", - "jest-get-type": "^29.4.2", - "pretty-format": "^29.4.2" + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "dependencies": { "ansi-styles": { @@ -61970,7 +63159,7 @@ "version": "4.0.0" }, "jest-get-type": { - "version": "29.4.2" + "version": "29.4.3" }, "supports-color": { "version": "7.2.0", @@ -62252,12 +63441,12 @@ } }, "jest-matcher-utils": { - "version": "29.4.2", + "version": "29.5.0", "requires": { "chalk": "^4.0.0", - "jest-diff": "^29.4.2", - "jest-get-type": "^29.4.2", - "pretty-format": "^29.4.2" + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "dependencies": { "ansi-styles": { @@ -62286,7 +63475,7 @@ "version": "4.0.0" }, "jest-get-type": { - "version": "29.4.2" + "version": "29.4.3" }, "supports-color": { "version": "7.2.0", @@ -62297,23 +63486,23 @@ } }, "jest-message-util": { - "version": "29.4.1", + "version": "29.5.0", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.1", + "@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.1", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "dependencies": { "@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -62322,7 +63511,7 @@ } }, "@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "requires": { "@types/yargs-parser": "*" } @@ -62361,17 +63550,17 @@ } }, "jest-mock": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-util": "^29.4.1" + "jest-util": "^29.5.0" }, "dependencies": { "@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -62380,7 +63569,7 @@ } }, "@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "requires": { "@types/yargs-parser": "*" } @@ -62411,9 +63600,9 @@ "version": "4.0.0" }, "jest-util": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -62901,7 +64090,7 @@ } }, "jest-snapshot": { - "version": "29.4.1", + "version": "29.5.0", "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -62909,50 +64098,49 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "@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.1", + "expect": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-haste-map": "^29.4.1", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", + "jest-diff": "^29.5.0", + "jest-get-type": "^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.1", + "pretty-format": "^29.5.0", "semver": "^7.3.5" }, "dependencies": { "@jest/transform": { - "version": "29.4.1", + "version": "29.5.0", "requires": { "@babel/core": "^7.11.6", - "@jest/types": "^29.4.1", + "@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.1", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.4.1", + "jest-haste-map": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "write-file-atomic": "^5.0.0" + "write-file-atomic": "^4.0.2" } }, "@jest/types": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -62961,7 +64149,7 @@ } }, "@types/yargs": { - "version": "17.0.22", + "version": "17.0.24", "requires": { "@types/yargs-parser": "*" } @@ -62995,32 +64183,32 @@ "version": "4.0.0" }, "jest-get-type": { - "version": "29.2.0" + "version": "29.4.3" }, "jest-haste-map": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "micromatch": "^4.0.4", "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "29.2.0" + "version": "29.4.3" }, "jest-util": { - "version": "29.4.1", + "version": "29.5.0", "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -63029,10 +64217,10 @@ } }, "jest-worker": { - "version": "29.4.1", + "version": "29.5.0", "requires": { "@types/node": "*", - "jest-util": "^29.4.1", + "jest-util": "^29.5.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -63052,7 +64240,7 @@ } }, "write-file-atomic": { - "version": "5.0.0", + "version": "4.0.2", "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -63282,9 +64470,9 @@ } }, "joi": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.1.tgz", - "integrity": "sha512-teoLhIvWE298R6AeJywcjR4sX2hHjB3/xJX4qPjg+gTg+c0mzUDsziYlqPmLomq9gVsfaMcgPaGc7VxtD/9StA==", + "version": "17.9.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -63307,14 +64495,16 @@ "version": "4.0.0" }, "js-yaml": { - "version": "3.14.1", + "version": "4.1.0", + "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsc-android": { - "version": "250230.2.1" + "version": "250230.2.1", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", + "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==" }, "jscodeshift": { "version": "0.13.1", @@ -63626,9 +64816,7 @@ "dev": true }, "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "version": "2.2.3" }, "jsonfile": { "version": "6.1.0", @@ -63670,8 +64858,6 @@ }, "klaw-sync": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "requires": { "graceful-fs": "^4.1.11" } @@ -63777,7 +64963,9 @@ "version": "2.4.0" }, "loader-utils": { - "version": "2.0.2", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -63792,8 +64980,6 @@ }, "localforage-removeitems": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/localforage-removeitems/-/localforage-removeitems-1.4.0.tgz", - "integrity": "sha512-/rFJ/w/FAZbVeXa6ZVANociT2sWaUglp2rgYARXcd/2v4CJMRbzvdcfYrNEBzEVkBRQqxipsUfyDDrAy9YiqzA==", "requires": { "localforage": ">=1.4.0" } @@ -63807,9 +64993,6 @@ "lodash": { "version": "4.17.21" }, - "lodash.assign": { - "version": "4.2.0" - }, "lodash.debounce": { "version": "4.0.8" }, @@ -64009,9 +65192,7 @@ } }, "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "version": "4.0.0" }, "longest": { "version": "1.0.1" @@ -64024,28 +65205,20 @@ }, "lottie-ios": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lottie-ios/-/lottie-ios-3.5.0.tgz", - "integrity": "sha512-DM6BYLhHTzvUsK89AjY+K9RwVGkOBwbH/iytjyZUmFbXz8DVsoPEyy+c7L5NZmVouZHvLnOQp6NaYTkwMo+iOg==", "peer": true }, "lottie-react-native": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.5.tgz", - "integrity": "sha512-xl6uEo50joQeIqso5SvPKt1uGBqMhgNgs+36S4725Nfigf4zAY23/I9QEEkJF+1BHq7wKCeYha2KafLTm20gqA==", "requires": { "invariant": "^2.2.2", "react-native-safe-modules": "^1.0.3" }, "dependencies": { "dedent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz", - "integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==" + "version": "0.6.0" }, "react-native-safe-modules": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz", - "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==", "requires": { "dedent": "^0.6.0" } @@ -64053,9 +65226,7 @@ } }, "lottie-web": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.10.2.tgz", - "integrity": "sha512-d0PFIGiwuMsJYaF4uPo+qG8dEorlI+xFI2zrrFtE1bGO4WoLIz+NjremxEq1swpR7juR10aeOtmNh3d6G3ub0A==" + "version": "5.10.2" }, "loud-rejection": { "version": "1.6.0", @@ -64262,9 +65433,6 @@ "version": "1.5.0", "dev": true }, - "map-stream": { - "version": "0.0.7" - }, "map-visit": { "version": "1.0.0", "requires": { @@ -64273,8 +65441,6 @@ }, "markdown-builder": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/markdown-builder/-/markdown-builder-0.9.0.tgz", - "integrity": "sha512-UovCyEEzMeKE7l88fbOk9SIJkOG7KXkg+TdudN8rvOtCtBO5uu1X27HSnM7LS/xH+vaShJLGpkBcYYcojWNx/g==", "dev": true, "requires": { "husky": "^1.0.0-rc.14" @@ -64286,8 +65452,6 @@ }, "markdown-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", "dev": true, "requires": { "repeat-string": "^1.0.0" @@ -64302,8 +65466,6 @@ }, "mathjs": { "version": "11.8.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.0.tgz", - "integrity": "sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg==", "dev": true, "requires": { "@babel/runtime": "^7.21.0", @@ -64389,6 +65551,11 @@ "fs-monkey": "^1.0.3" } }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "memoizerific": { "version": "1.11.3", "dev": true, @@ -64831,6 +65998,12 @@ "metro-runtime": "0.71.3" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "cosmiconfig": { "version": "5.2.1", "requires": { @@ -64847,6 +66020,13 @@ "resolve-from": "^3.0.0" } }, + "js-yaml": { + "version": "3.14.1", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "parse-json": { "version": "4.0.0", "requires": { @@ -65092,9 +66272,9 @@ } }, "metro-minify-terser": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.73.7.tgz", - "integrity": "sha512-gbv1fmMOZm6gJ6dQoD+QktlCi2wk6nlTR8j8lQCjeeXGbs6O9e5XLWNPOexHqo7S69bdbohEnfZnLJFcxgHeNw==", + "version": "0.73.9", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.73.9.tgz", + "integrity": "sha512-MTGPu2qV5qtzPJ2SqH6s58awHDtZ4jd7lmmLR+7TXDwtZDjIBA0YVfI0Zak2Haby2SqoNKrhhUns/b4dPAQAVg==", "requires": { "terser": "^5.15.0" } @@ -65107,8 +66287,6 @@ }, "metro-react-native-babel-preset": { "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.7.tgz", - "integrity": "sha512-RKcmRZREjJCzHKP+JhC9QTCohkeb3xa/DtqHU14U5KWzJHdC0mMrkTZYNXhV0cryxsaVKVEw5873KhbZyZHMVw==", "requires": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -65347,9 +66525,6 @@ "version": "1.0.1", "dev": true }, - "mingo": { - "version": "1.3.3" - }, "minimalistic-assert": { "version": "1.0.1" }, @@ -65485,8 +66660,6 @@ }, "moment-timezone": { "version": "0.5.43", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", - "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", "requires": { "moment": "^2.29.4" } @@ -65569,6 +66742,10 @@ "natural-compare": { "version": "1.4.0" }, + "natural-compare-lite": { + "version": "1.4.0", + "dev": true + }, "negotiator": { "version": "0.6.3" }, @@ -66012,8 +67189,6 @@ }, "onchange": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/onchange/-/onchange-7.1.0.tgz", - "integrity": "sha512-ZJcqsPiWUAUpvmnJri5TPBooqJOPmC0ttN65juhN15Q8xA+Nbg3BaxBHXQ45EistKKlKElb0edmbPWnKSBkvMg==", "dev": true, "requires": { "@blakeembrey/deque": "^1.0.5", @@ -66033,8 +67208,6 @@ }, "onfido-sdk-ui": { "version": "12.2.1", - "resolved": "https://registry.npmjs.org/onfido-sdk-ui/-/onfido-sdk-ui-12.2.1.tgz", - "integrity": "sha512-KRLOHXp4HHLw9IEPPPnG2iLSQfRjfmABFAB5fmfXawBgqdfoGuzrL6jm/nWggsi+gUMGhxlBQZzAmLLMuPL5LA==", "requires": { "@onfido/active-video-capture": "^0.25.1", "@onfido/opencv": "^1.0.0", @@ -66350,8 +67523,6 @@ }, "patch-package": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", - "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", "requires": { "@yarnpkg/lockfile": "^1.1.0", "chalk": "^4.1.2", @@ -66371,43 +67542,31 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "version": "2.0.0" }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.4" }, "cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -66417,83 +67576,59 @@ } }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.0.0" }, "is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { "ci-info": "^2.0.0" } }, "open": { "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "requires": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" } }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "version": "2.0.1" }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.1" }, "shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "version": "1.0.0" }, "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + "version": "2.0.0" }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } }, "tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { "os-tmpdir": "~1.0.2" } }, "which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { "isexe": "^2.0.0" } @@ -66531,12 +67666,6 @@ "version": "4.0.0", "dev": true }, - "pause-stream": { - "version": "0.0.11", - "requires": { - "through": "~2.3" - } - }, "pbkdf2": { "version": "3.1.2", "requires": { @@ -66627,8 +67756,6 @@ }, "please-upgrade-node": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "requires": { "semver-compare": "^1.0.0" @@ -66647,9 +67774,7 @@ } }, "pngjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + "version": "5.0.0" }, "pnp-webpack-plugin": { "version": "1.6.4", @@ -66771,14 +67896,10 @@ "version": "4.2.0" }, "postinstall-postinstall": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==" + "version": "2.1.0" }, "preact": { - "version": "10.13.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.13.2.tgz", - "integrity": "sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==" + "version": "10.13.2" }, "prelude-ls": { "version": "1.2.1", @@ -66786,8 +67907,6 @@ }, "prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, "prettier-linter-helpers": { @@ -66806,9 +67925,9 @@ } }, "pretty-format": { - "version": "29.4.2", + "version": "29.5.0", "requires": { - "@jest/schemas": "^29.4.2", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -66984,8 +68103,6 @@ }, "qrcode": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", - "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", "requires": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", @@ -66995,21 +68112,15 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "version": "5.3.1" }, "cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -67018,21 +68129,15 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.4" }, "find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -67040,37 +68145,27 @@ }, "locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { "p-locate": "^4.1.0" } }, "p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" } }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "version": "4.0.0" }, "wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -67079,8 +68174,6 @@ }, "yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -67097,8 +68190,6 @@ }, "yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -67115,8 +68206,6 @@ }, "query-string": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", "requires": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", @@ -67191,8 +68280,6 @@ }, "react": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { "loose-envify": "^1.1.0" } @@ -67206,9 +68293,9 @@ "requires": {} }, "react-devtools-core": { - "version": "4.27.2", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.2.tgz", - "integrity": "sha512-8SzmIkpO87alD7Xr6gWIEa1jHkMjawOZ+6egjazlnjB4UUcbnzGDf/vBJ4BzGuWWEM+pzrxuzsPpcMqlQkYK2g==", + "version": "4.27.8", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.8.tgz", + "integrity": "sha512-KwoH8/wN/+m5wTItLnsgVraGNmFrcTWR3k1VimP1HjtMMw4CNF+F5vg4S/0tzTEKIdpCi2R7mPNTC+/dswZMgw==", "requires": { "shell-quote": "^1.6.1", "ws": "^7" @@ -67304,22 +68391,30 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "deprecated-react-native-prop-types": { "version": "3.0.1", @@ -67331,9 +68426,6 @@ "prop-types": "*" } }, - "memoize-one": { - "version": "5.2.1" - }, "metro-runtime": { "version": "0.73.7", "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.7.tgz", @@ -67373,6 +68465,8 @@ }, "mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { "minimist": "^1.2.6" } @@ -67384,6 +68478,8 @@ }, "pretty-format": { "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "requires": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -67400,7 +68496,9 @@ } }, "react-is": { - "version": "17.0.2" + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "react-refresh": { "version": "0.4.3", @@ -67422,6 +68520,8 @@ }, "ws": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "requires": { "async-limiter": "~1.0.0" } @@ -67436,8 +68536,6 @@ }, "react-native-blob-util": { "version": "0.17.3", - "resolved": "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.17.3.tgz", - "integrity": "sha512-nO4VXIPtCrtf3mzCiOkdrXsmc8WmOLNSziS7dCnQ6kSyg4LOLXP4mQOFqfiNxt78n7cZ0QOF5CdUY/sIZZ2aOA==", "requires": { "base-64": "0.1.0", "glob": "^7.2.3" @@ -67445,8 +68543,6 @@ "dependencies": { "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -67483,8 +68579,6 @@ }, "react-native-dev-menu": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/react-native-dev-menu/-/react-native-dev-menu-4.1.1.tgz", - "integrity": "sha512-jdYjoTpFHvGXW12enaTnrgOoEgVF5JVqv4hcO8K0KV66Cvk8YLwD3XHsEiqMat+4C1osa+IG5Yt3qAiMOLBQxQ==", "requires": {} }, "react-native-device-info": { @@ -67542,9 +68636,9 @@ } }, "react-native-gradle-plugin": { - "version": "0.71.15", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.15.tgz", - "integrity": "sha512-7S3pAuPaQJlhax6EZ4JMsDNpj05TfuzX9gPgWLrFfAIWIFLuJ6aDQYAZy2TEI9QJALPoWrj8LWaqP/DGYh14pw==" + "version": "0.71.18", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.18.tgz", + "integrity": "sha512-7F6bD7B8Xsn3JllxcwHhFcsl9aHIig47+3eN4IHFNqfLhZr++3ElDrcqfMzugM+niWbaMi7bJ0kAkAL8eCpdWg==" }, "react-native-haptic-feedback": { "version": "1.14.0", @@ -67556,8 +68650,6 @@ }, "react-native-image-picker": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-5.1.0.tgz", - "integrity": "sha512-p506trG3PDSrdm+Yd0QolsnR3FtSe37gkP7OVsMa9UYwn1teaLGzhmx3QMZ4ZBwdV1AKBUFA5HF1ECAVSDTdQQ==", "requires": {} }, "react-native-image-size": { @@ -67567,8 +68659,6 @@ }, "react-native-key-command": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-native-key-command/-/react-native-key-command-1.0.1.tgz", - "integrity": "sha512-vubmDxRnRQh+t2IqBUrbXOCVjkXYSQKJ+YAD1attcOV4mDHcQ0MB/Q4kxXzqVcLAlNPWMETFsJNShvt2cwO03Q==", "requires": { "events": "^3.3.0", "underscore": "^1.13.4" @@ -67576,8 +68666,6 @@ }, "react-native-localize": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.2.6.tgz", - "integrity": "sha512-EZETlC1ZlW/4g6xfsNCwAkAw5BDL2A6zk/08JjFR/GRGxYuKRD7iP1hHn1+h6DEu+xROjPpoNeXfMER2vkTVIQ==", "requires": {} }, "react-native-modal": { @@ -67589,8 +68677,6 @@ }, "react-native-onyx": { "version": "1.0.43", - "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-1.0.43.tgz", - "integrity": "sha512-NwS1SxZJWhk/7FUAAE9HrnupQR1yrSAheuhggdeA3+oFLn9X6UJM7n7w9DodFqCQbUIUy9biKtYk29sChfk9hQ==", "requires": { "ascii-table": "0.0.9", "fast-equals": "^4.0.3", @@ -67628,14 +68714,10 @@ }, "react-native-plaid-link-sdk": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/react-native-plaid-link-sdk/-/react-native-plaid-link-sdk-10.0.0.tgz", - "integrity": "sha512-WqU44tYzQoR/cuufD6GI7vOWTLcL9RXuEqfGaCynHdh2rmj3SC+mSEmXpg/LG0Q4E1XivkjfgF9tAOdlbnLMHQ==", "requires": {} }, "react-native-qrcode-svg": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/react-native-qrcode-svg/-/react-native-qrcode-svg-6.2.0.tgz", - "integrity": "sha512-rb2PgUwT8QpQyReVYNvzRY84AHsMh81354Tnkfp6MfqRbcdJURhnBWLBOO11pLMS6eXiwlq4SkcQxy88hRq+Dw==", "requires": { "prop-types": "^15.8.0", "qrcode": "^1.5.1" @@ -67643,14 +68725,10 @@ }, "react-native-quick-sqlite": { "version": "8.0.0-beta.2", - "resolved": "https://registry.npmjs.org/react-native-quick-sqlite/-/react-native-quick-sqlite-8.0.0-beta.2.tgz", - "integrity": "sha512-B7makWA5GrlkUSRderWGuuEg83QDfRPjKYdBXiGx6L1hm2BhJ4u+sv6q+bTGoXAieEKcIPh+qeA/hhEat+dC2g==", "requires": {} }, "react-native-reanimated": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.1.0.tgz", - "integrity": "sha512-8YJR7yHnrqK6yKWzkGLVEawi1WZqJ9bGIehKEnE8zG58yLrSwUZe1T220XTbftpkA3r37Sy0kJJ/HOOiaIU+HQ==", "requires": { "@babel/plugin-transform-object-assign": "^7.16.7", "@babel/preset-typescript": "^7.16.7", @@ -67659,9 +68737,7 @@ }, "dependencies": { "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "version": "2.0.0" } } }, @@ -67710,8 +68786,6 @@ }, "react-native-svg": { "version": "13.9.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-13.9.0.tgz", - "integrity": "sha512-Ey18POH0dA0ob/QiwCBVrxIiwflhYuw0P0hBlOHeY4J5cdbs8ngdKHeWC/Kt9+ryP6fNoEQ1PUgPYw2Bs/rp5Q==", "requires": { "css-select": "^5.1.0", "css-tree": "^1.1.3" @@ -67728,14 +68802,10 @@ }, "react-native-view-shot": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/react-native-view-shot/-/react-native-view-shot-3.6.0.tgz", - "integrity": "sha512-QUYGaIaAxQwOTydUzqGMooBwrg455cuOQgTloZ+gPO1QCUuLRdncCqrEMwKW5eUnN5U8JGMKeFRll2m6egOxtA==", "requires": {} }, "react-native-web": { "version": "0.18.12", - "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.18.12.tgz", - "integrity": "sha512-fboP7yqobJ8InSr4fP+bQ3scOtSQtUoPcR+HWasH8b/fk/RO+mWcJs/8n+lewy9WTZc2D68ha7VwRDviUshEWA==", "peer": true, "requires": { "@babel/runtime": "^7.18.6", @@ -67749,8 +68819,6 @@ }, "react-native-web-lottie": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/react-native-web-lottie/-/react-native-web-lottie-1.4.4.tgz", - "integrity": "sha512-W0jZiOf2u3Us6yASdpgAuL1+3Gw1EU/Wi5QAf6brzhXmJnq6/FMGCTf5zvSaX0yIurr9qcYB40DwAb4HwA6frg==", "requires": { "lottie-web": "^5.7.1" } @@ -68094,8 +69162,6 @@ }, "react-webcam": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/react-webcam/-/react-webcam-7.0.1.tgz", - "integrity": "sha512-8E/Eb/7ksKwn5QdLn67tOR7+TdP9BZdu6E5/DSt20v8yfW/s0VGBigE6VA7R4278mBuBUowovAB3DkCfVmSPvA==", "requires": {} }, "read-config-file": { @@ -68112,26 +69178,11 @@ "lazy-val": "^1.0.4" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "dotenv": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } } } }, @@ -68253,8 +69304,6 @@ }, "reassure": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/reassure/-/reassure-0.9.0.tgz", - "integrity": "sha512-FIf0GPchyPGItsrW5Wwff/NWVrfOcCUuJJSs4Nur6iRdQt8yvmCpcba4UyemdZ1KaFTIW1gKbAV3u2tuA7zmtQ==", "dev": true, "requires": { "@callstack/reassure-cli": "0.9.0", @@ -68304,9 +69353,7 @@ } }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.13.11" }, "regenerator-transform": { "version": "0.15.0", @@ -68656,8 +69703,6 @@ }, "run-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", "dev": true }, "run-parallel": { @@ -68909,15 +69954,6 @@ "truncate-utf8-bytes": "^1.0.0" } }, - "save": { - "version": "2.5.0", - "requires": { - "async": "^3.2.2", - "event-stream": "^4.0.1", - "lodash.assign": "^4.2.0", - "mingo": "1" - } - }, "sax": { "version": "1.2.4" }, @@ -68961,9 +69997,7 @@ } }, "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + "version": "3.0.5" }, "select": { "version": "1.1.2" @@ -69158,9 +70192,7 @@ } }, "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "version": "1.0.5" }, "setprototypeof": { "version": "1.2.0" @@ -69192,9 +70224,9 @@ "version": "3.0.0" }, "shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==" + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" }, "shellcheck": { "version": "1.1.0", @@ -69219,8 +70251,6 @@ }, "simple-git": { "version": "3.19.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.19.0.tgz", - "integrity": "sha512-hyH2p9Ptxjf/xPuL7HfXbpYt9gKhC1yWDh3KYIAYJJePAKV7AEjLN4xhp7lozOdNiaJ9jlVvAbBymVlcS2jRiA==", "dev": true, "requires": { "@kwsites/file-exists": "^1.1.1", @@ -69481,30 +70511,6 @@ "websocket-driver": "^0.7.4" } }, - "sockjs-client": { - "version": "1.6.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "eventsource": "^2.0.2", - "faye-websocket": "^0.11.4", - "inherits": "^2.0.4", - "url-parse": "^1.5.10" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "socks": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", @@ -69618,16 +70624,8 @@ } } }, - "split": { - "version": "1.0.1", - "requires": { - "through": "2" - } - }, "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + "version": "1.1.0" }, "split-string": { "version": "3.1.0", @@ -69784,13 +70782,6 @@ "stream-buffers": { "version": "2.2.0" }, - "stream-combiner": { - "version": "0.2.2", - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, "stream-each": { "version": "1.2.3", "dev": true, @@ -69814,9 +70805,7 @@ "dev": true }, "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" + "version": "2.0.0" }, "string_decoder": { "version": "1.1.1", @@ -69936,6 +70925,11 @@ "strip-json-comments": { "version": "3.1.1" }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "style-loader": { "version": "2.0.0", "dev": true, @@ -70169,8 +71163,6 @@ }, "terser": { "version": "5.16.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.4.tgz", - "integrity": "sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==", "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -70285,7 +71277,8 @@ "dev": true }, "through": { - "version": "2.3.8" + "version": "2.3.8", + "dev": true }, "through2": { "version": "2.0.5", @@ -70554,8 +71547,12 @@ "version": "4.0.8" }, "type-fest": { - "version": "0.20.2", - "dev": true + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", + "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", + "dev": true, + "optional": true, + "peer": true }, "type-is": { "version": "1.6.18", @@ -70567,8 +71564,6 @@ }, "typed-function": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", - "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", "dev": true }, "typedarray": { @@ -70583,7 +71578,7 @@ } }, "typescript": { - "version": "4.7.4", + "version": "4.8.4", "dev": true }, "ua-parser-js": { @@ -70854,13 +71849,12 @@ "version": "3.1.1" }, "use-latest-callback": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.6.tgz", - "integrity": "sha512-VO/P91A/PmKH9bcN9a7O3duSuxe6M14ZoYXgA6a8dab8doWNdhiIHzEkX/jFeTTRBsX0Ubk6nG4q2NIjNsj+bg==", - "requires": {} + "version": "0.1.5" }, "use-sync-external-store": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "requires": {} }, "utf8": { @@ -71248,8 +72242,6 @@ }, "webpack": { "version": "5.76.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -71674,7 +72666,9 @@ } }, "whatwg-fetch": { - "version": "3.6.2" + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" }, "whatwg-mimetype": { "version": "3.0.0", @@ -71875,9 +72869,7 @@ "version": "2.0.0" }, "xstate": { - "version": "4.37.2", - "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.37.2.tgz", - "integrity": "sha512-Qm337O49CRTZ3PRyRuK6b+kvI+D3JGxXIZCTul+xEsyFCVkTFDt5jixaL1nBWcUBcaTQ9um/5CRGVItPi7fveg==" + "version": "4.37.2" }, "xtend": { "version": "4.0.2" @@ -71991,8 +72983,6 @@ }, "zod": { "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", "dev": true }, "zwitch": { diff --git a/package.json b/package.json index 9d202ca32b8d..2781efbc89fa 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,10 @@ "@react-native-firebase/crashlytics": "^12.3.0", "@react-native-firebase/perf": "^12.3.0", "@react-native-picker/picker": "^2.4.3", + "@react-navigation/core": "^6.4.8", + "@react-navigation/drawer": "github:Expensify/react-navigation#react-navigation-drawer-v6.5.0-alpha1-gitpkg", "@react-navigation/native": "6.1.6", + "@react-navigation/routers": "^6.1.8", "@react-navigation/stack": "6.3.16", "@react-ng/bounds-observer": "^0.2.1", "@ua/react-native-airship": "^15.2.6", @@ -95,7 +98,9 @@ "react-collapse": "^5.1.0", "react-content-loader": "^6.1.0", "react-dom": "18.1.0", + "react-freeze": "^1.0.3", "react-native": "https://github.com/Expensify/react-native/releases/download/v0.71.2-alpha.3/expensify-react-native-0.71.2-alpha.3.tgz", + "react-native-animatable": "^1.3.3", "react-native-blob-util": "^0.17.3", "react-native-collapsible": "^1.6.0", "react-native-config": "^1.4.5", @@ -132,7 +137,6 @@ "react-pdf": "5.7.2", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", - "save": "^2.4.0", "semver": "^7.3.8", "shim-keyboard-event-key": "^1.0.3", "underscore": "^1.13.1" @@ -146,8 +150,10 @@ "@babel/preset-env": "^7.11.0", "@babel/preset-flow": "^7.12.13", "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.21.5", "@babel/runtime": "^7.11.2", "@electron/notarize": "^1.2.3", + "@jest/globals": "^29.5.0", "@octokit/core": "4.0.4", "@octokit/plugin-paginate-rest": "3.1.0", "@octokit/plugin-throttling": "4.1.0", @@ -164,6 +170,34 @@ "@svgr/webpack": "^6.0.0", "@testing-library/jest-native": "5.4.1", "@testing-library/react-native": "11.5.1", + "@types/babel__core": "^7.20.1", + "@types/babel__preset-env": "^7.9.2", + "@types/concurrently": "^7.0.0", + "@types/copy-webpack-plugin": "^6.4.3", + "@types/eslint": "^7.29.0", + "@types/eslint-config-prettier": "^6.11.0", + "@types/fbjs": "^3.0.4", + "@types/jest": "^29.5.2", + "@types/jest-when": "^3.5.2", + "@types/js-yaml": "^4.0.5", + "@types/lodash": "4.14.195", + "@types/metro-config": "^0.76.3", + "@types/mock-fs": "^4.13.1", + "@types/prettier": "^2.7.3", + "@types/prop-types": "^15.7.5", + "@types/pusher-js": "5.1.0", + "@types/react": "^18.2.8", + "@types/react-collapse": "^5.0.1", + "@types/react-dom": "18.2.4", + "@types/react-native": "^0.71.7", + "@types/react-pdf": "5.7.2", + "@types/react-test-renderer": "^18.0.0", + "@types/semver": "^7.5.0", + "@types/setimmediate": "^1.0.2", + "@types/underscore": "^1.11.5", + "@types/webpack-bundle-analyzer": "^4.6.0", + "@typescript-eslint/eslint-plugin": "^5.59.8", + "@typescript-eslint/parser": "^5.59.8", "@vercel/ncc": "^0.27.0", "@welldone-software/why-did-you-render": "7.0.1", "ajv-cli": "^5.0.0", @@ -183,6 +217,7 @@ "electron": "22.3.7", "electron-builder": "24.4.0", "eslint": "^7.6.0", + "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-expensify": "^2.0.38", "eslint-config-prettier": "^8.8.0", "eslint-plugin-jest": "^24.1.0", @@ -195,6 +230,7 @@ "jest-circus": "29.4.1", "jest-cli": "29.4.1", "jest-environment-jsdom": "^29.4.1", + "js-yaml": "^4.1.0", "metro-react-native-babel-preset": "^0.73.3", "mock-fs": "^4.13.0", "onchange": "^7.1.0", @@ -211,6 +247,7 @@ "shellcheck": "^1.1.0", "style-loader": "^2.0.0", "time-analytics-webpack-plugin": "^0.1.17", + "typescript": "^4.8.4", "wait-port": "^0.2.9", "webpack": "^5.76.0", "webpack-bundle-analyzer": "^4.5.0", diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000000..86a59d9588c8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "types": ["react-native", "jest"], + "lib": [ + "es2019", + "es2020.bigint", + "es2020.date", + "es2020.number", + "es2020.promise", + "es2020.string", + "es2020.symbol.wellknown", + "es2021.promise", + "es2021.string", + "es2021.weakref", + "es2022.array", + "es2022.object", + "es2022.string" + ], + "allowJs": true, + "jsx": "react-native", + "noEmit": true, + "isolatedModules": true, + "strict": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "baseUrl": "./src" + }, + "exclude": [ + "node_modules", + "babel.config.js", + "metro.config.js", + "jest.config.js" + ] +} \ No newline at end of file From 8980fb424b818d94d859acc132365765f9130c87 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 5 Jun 2023 17:57:11 +0200 Subject: [PATCH 002/187] Add end of file lines, revert unintented change in babel config file --- .eslintignore | 2 +- babel.config.js | 2 +- tsconfig.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.eslintignore b/.eslintignore index 82a9a730d1eb..a9ba028ceeab 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1 @@ -.eslintrc.js \ No newline at end of file +.eslintrc.js diff --git a/babel.config.js b/babel.config.js index bc4668693e48..967f875519cb 100644 --- a/babel.config.js +++ b/babel.config.js @@ -65,7 +65,7 @@ if (process.env.CAPTURE_METRICS === 'true') { ]); } -export default ({caller}) => { +module.exports = ({caller}) => { // For `react-native` (iOS/Android) caller will be "metro" // For `webpack` (Web) caller will be "@babel-loader" // For jest, it will be babel-jest diff --git a/tsconfig.json b/tsconfig.json index 86a59d9588c8..dfac723cd02a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -34,4 +34,4 @@ "metro.config.js", "jest.config.js" ] -} \ No newline at end of file +} From 4012d0b0a0ab1b3a14b1eaf4c489aad6ebeada3b Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 6 Jun 2023 11:44:46 +0200 Subject: [PATCH 003/187] Add typecheck to package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 2781efbc89fa..6c0c858698a4 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "android-build": "fastlane android build", "android-build-e2e": "bundle exec fastlane android build_e2e", "test": "TZ=utc jest", + "typecheck": "tsc --project tsconfig.json", "lint": "eslint . --max-warnings=0 --cache --cache-location=node_modules/.cache/eslint", "lint-changed": "eslint --fix $(git diff --diff-filter=AM --name-only main -- \"*.js\")", "lint-watch": "npx eslint-watch --watch --changed", From 3d69491b94c35b54d4508738212fcef94589b671 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 6 Jun 2023 11:45:01 +0200 Subject: [PATCH 004/187] Adddd more eslint rules --- .eslintrc.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 5be67beee5d2..e0798fdde400 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,15 +20,23 @@ module.exports = { __DEV__: 'readonly', }, rules: { - "import/no-extraneous-dependencies": "off", + 'import/extensions': 'off', + 'import/no-extraneous-dependencies': 'off', 'rulesdir/onyx-props-must-have-default': 'off', 'react/jsx-filename-extension': [1, {extensions: ['.tsx', '.ts', '.jsx', '.js']}], - "@typescript-eslint/no-var-requires": "off", + '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/consistent-type-definitions': ['error', 'type'], 'es/no-nullish-coalescing-operators': 'off', 'es/no-optional-chaining': 'off', + 'no-restricted-syntax': [ + 'error', + { + selector: 'TSEnumDeclaration', + message: "Please don't declare enums, use union types instead.", + }, + ], 'no-restricted-imports': [ 'error', { @@ -36,7 +44,7 @@ module.exports = { { name: 'react-native', importNames: ['useWindowDimensions'], - message: 'Please use useWindowDimensions from src/hooks/useWindowDimensions instead', + message: 'Please use useWindowDimensions from src/hooks/useWindowDimensions instead.', }, { name: 'react-native', From 73c4df89f89d68fa7030567828c155758fa73059 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 6 Jun 2023 11:45:25 +0200 Subject: [PATCH 005/187] Add typecheck to workflows --- .github/workflows/preDeploy.yml | 9 ++++++--- .github/workflows/typecheck.yml | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/typecheck.yml diff --git a/.github/workflows/preDeploy.yml b/.github/workflows/preDeploy.yml index 0e77dbe4704f..6f917374f856 100644 --- a/.github/workflows/preDeploy.yml +++ b/.github/workflows/preDeploy.yml @@ -5,6 +5,9 @@ on: branches: [main] jobs: + typecheck: + uses: Expensify/App/.github/workflows/typecheck.yml@main + lint: uses: Expensify/App/.github/workflows/lint.yml@main @@ -13,16 +16,16 @@ jobs: confirmPassingBuild: runs-on: ubuntu-latest - needs: [lint, test] + needs: [typecheck, lint, test] if: ${{ always() }} steps: - - if: ${{ needs.lint.result == 'failure' || needs.test.result == 'failure' }} + - if: ${{ needs.typecheck.result == 'failure' || needs.lint.result == 'failure' || needs.test.result == 'failure' }} uses: Expensify/App/.github/actions/composite/announceFailedWorkflowInSlack@main with: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} - - if: ${{ needs.lint.result == 'failure' || needs.test.result == 'failure' }} + - if: ${{ needs.typecheck.result == 'failure' || needs.lint.result == 'failure' || needs.test.result == 'failure' }} run: exit 1 chooseDeployActions: diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml new file mode 100644 index 000000000000..f4166d6b153a --- /dev/null +++ b/.github/workflows/typecheck.yml @@ -0,0 +1,21 @@ +name: TypeScript Checks + +on: + workflow_call: + pull_request: + types: [opened, synchronize] + branches-ignore: [staging, production] + +jobs: + typecheck: + if: ${{ github.actor != 'OSBotify' || github.event_name == 'workflow_call' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + + - uses: Expensify/App/.github/actions/composite/setupNode@main + + - name: Type check with TypeScript + run: npm run typecheck + env: + CI: true From 51fcbe542ec31b1fd90067aeb3a9fe8af3e8b7fc Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 6 Jun 2023 11:45:49 +0200 Subject: [PATCH 006/187] Add skipLibCheck option to tsconfig --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index dfac723cd02a..e1af88803c4c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,6 +26,7 @@ "moduleResolution": "node", "resolveJsonModule": true, "allowSyntheticDefaultImports": true, + "skipLibCheck": true, "baseUrl": "./src" }, "exclude": [ From 0efb8a70edbba37c5e2baec177d81d0bb9bfd93f Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 6 Jun 2023 11:46:23 +0200 Subject: [PATCH 007/187] Include ts files in weback config --- config/webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/webpack/webpack.common.js b/config/webpack/webpack.common.js index b8ed35b2f663..db1ec0ab8e39 100644 --- a/config/webpack/webpack.common.js +++ b/config/webpack/webpack.common.js @@ -192,7 +192,7 @@ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({ // This is also why we have to use .website.js for our own web-specific files... // Because desktop also relies on "web-specific" module implementations // This also skips packing web only dependencies to desktop and vice versa - extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.js', '.jsx'], + extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.ts', '.tsx', '.js', '.jsx', '.json'], fallback: { 'process/browser': require.resolve('process/browser'), }, From 185e166c72a9b6eeb50c852ceead9a5171d3e973 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 6 Jun 2023 13:23:51 +0200 Subject: [PATCH 008/187] Remove .json as it was added by mistake --- config/webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/webpack/webpack.common.js b/config/webpack/webpack.common.js index db1ec0ab8e39..ff0289222d25 100644 --- a/config/webpack/webpack.common.js +++ b/config/webpack/webpack.common.js @@ -192,7 +192,7 @@ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({ // This is also why we have to use .website.js for our own web-specific files... // Because desktop also relies on "web-specific" module implementations // This also skips packing web only dependencies to desktop and vice versa - extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.ts', '.tsx', '.js', '.jsx', '.json'], + extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.ts', '.tsx', '.js', '.jsx'], fallback: { 'process/browser': require.resolve('process/browser'), }, From fb48821a1e8b1b25d04f5d019ca73f5edfa6b27b Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 6 Jun 2023 14:26:09 +0200 Subject: [PATCH 009/187] Remove unnecessary eslint settings option --- .eslintrc.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index e0798fdde400..3e4771964684 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,13 +9,6 @@ module.exports = { env: { jest: true, }, - settings: { - 'import/resolver': { - node: { - extensions: ['.ts', '.tsx', '.js', '.jsx'], - }, - }, - }, globals: { __DEV__: 'readonly', }, From 050782b6eeb878e3b426c1609bdaebd3d8516366 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 6 Jun 2023 14:26:33 +0200 Subject: [PATCH 010/187] Improve webpack extenstions option --- config/webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/webpack/webpack.common.js b/config/webpack/webpack.common.js index ff0289222d25..b82b89ba0239 100644 --- a/config/webpack/webpack.common.js +++ b/config/webpack/webpack.common.js @@ -192,7 +192,7 @@ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({ // This is also why we have to use .website.js for our own web-specific files... // Because desktop also relies on "web-specific" module implementations // This also skips packing web only dependencies to desktop and vice versa - extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.ts', '.tsx', '.js', '.jsx'], + extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.web.ts', platform === 'web' ? '.website.ts' : '.desktop.ts', '.ts', '.tsx'], fallback: { 'process/browser': require.resolve('process/browser'), }, From 6ac0040998a2f6beba9cbbe3cea523795e6dd67e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 7 Jun 2023 12:58:11 +0200 Subject: [PATCH 011/187] Restructurize typescript eslint configuration --- .eslintignore | 1 - .eslintrc.js | 59 ++++++++++++++++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 23 deletions(-) delete mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index a9ba028ceeab..000000000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -.eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js index 3e4771964684..3fd832df1f1f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,35 +1,23 @@ module.exports = { - extends: ['expensify', 'airbnb-typescript', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], - plugins: ['@typescript-eslint', 'react-hooks'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: './tsconfig.json', - }, + extends: ['expensify', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'prettier'], + plugins: ['react-hooks'], + parser: 'babel-eslint', ignorePatterns: ['!.*', 'src/vendor', '.github/actions/**/index.js', 'desktop/dist/*.js', 'dist/*.js', 'node_modules/.bin/**', '.git/**'], env: { jest: true, }, + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + }, + }, globals: { __DEV__: 'readonly', }, rules: { 'import/extensions': 'off', - 'import/no-extraneous-dependencies': 'off', - 'rulesdir/onyx-props-must-have-default': 'off', - 'react/jsx-filename-extension': [1, {extensions: ['.tsx', '.ts', '.jsx', '.js']}], - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-non-null-assertion': 'error', - '@typescript-eslint/no-explicit-any': 'error', - '@typescript-eslint/consistent-type-definitions': ['error', 'type'], - 'es/no-nullish-coalescing-operators': 'off', - 'es/no-optional-chaining': 'off', - 'no-restricted-syntax': [ - 'error', - { - selector: 'TSEnumDeclaration', - message: "Please don't declare enums, use union types instead.", - }, - ], 'no-restricted-imports': [ 'error', { @@ -56,7 +44,29 @@ module.exports = { overrides: [ { files: ['*.ts', '*.tsx'], + extends: ['expensify', 'airbnb-typescript', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], + plugins: ['@typescript-eslint', 'react-hooks'], + parser: '@typescript-eslint/parser', + parserOptions: { + project: './tsconfig.json', + }, rules: { + 'import/no-extraneous-dependencies': 'off', + 'rulesdir/onyx-props-must-have-default': 'off', + 'react/jsx-filename-extension': [1, {extensions: ['.tsx', '.ts', '.jsx', '.js']}], + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + 'es/no-nullish-coalescing-operators': 'off', + 'es/no-optional-chaining': 'off', + 'no-restricted-syntax': [ + 'error', + { + selector: 'TSEnumDeclaration', + message: "Please don't declare enums, use union types instead.", + }, + ], 'no-restricted-imports': [ 'error', { @@ -65,6 +75,11 @@ module.exports = { name: 'lodash/get', message: 'Please use optional chaining and nullish coalescing instead.', }, + { + name: 'react-native', + importNames: ['useWindowDimensions'], + message: 'Please use useWindowDimensions from src/hooks/useWindowDimensions instead.', + }, ], }, ], From 7d872b55db1847db68fab38949dcf13501af5498 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 7 Jun 2023 12:59:12 +0200 Subject: [PATCH 012/187] Add include option to tsconfig + format tsconfig with prettier --- tsconfig.json | 68 ++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index e1af88803c4c..3c12cd577332 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,38 +1,34 @@ { - "compilerOptions": { - "target": "esnext", - "module": "commonjs", - "types": ["react-native", "jest"], - "lib": [ - "es2019", - "es2020.bigint", - "es2020.date", - "es2020.number", - "es2020.promise", - "es2020.string", - "es2020.symbol.wellknown", - "es2021.promise", - "es2021.string", - "es2021.weakref", - "es2022.array", - "es2022.object", - "es2022.string" - ], - "allowJs": true, - "jsx": "react-native", - "noEmit": true, - "isolatedModules": true, - "strict": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "allowSyntheticDefaultImports": true, - "skipLibCheck": true, - "baseUrl": "./src" - }, - "exclude": [ - "node_modules", - "babel.config.js", - "metro.config.js", - "jest.config.js" - ] + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "types": ["react-native", "jest"], + "lib": [ + "es2019", + "es2020.bigint", + "es2020.date", + "es2020.number", + "es2020.promise", + "es2020.string", + "es2020.symbol.wellknown", + "es2021.promise", + "es2021.string", + "es2021.weakref", + "es2022.array", + "es2022.object", + "es2022.string" + ], + "allowJs": true, + "jsx": "react-native", + "noEmit": true, + "isolatedModules": true, + "strict": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "baseUrl": "./" + }, + "exclude": ["node_modules"], + "include": ["src", "desktop", "web", "docs", "assets", "config", "tests", "jest", "__mocks__", ".github/**/*", ".storybook/**/*"] } From 503c54070f4e700d7e99e8baa8bd938572d214db Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 7 Jun 2023 15:22:27 +0200 Subject: [PATCH 013/187] Add declarations.d.ts to enable images and react-native-device-info imports --- config/declarations.d.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 config/declarations.d.ts diff --git a/config/declarations.d.ts b/config/declarations.d.ts new file mode 100644 index 000000000000..ff99f2bc2be8 --- /dev/null +++ b/config/declarations.d.ts @@ -0,0 +1,11 @@ +declare module '*.png'; +declare module '*.jpg'; +declare module '*.svg' { + import React from 'react'; + import {SvgProps} from 'react-native-svg'; + + const content: React.FC; + export default content; +} + +declare module 'react-native-device-info/jest/react-native-device-info-mock'; From 9879098a3de0e084503a707e013a42cd716c868e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 7 Jun 2023 15:23:16 +0200 Subject: [PATCH 014/187] Remove settings from eslintrc config --- .eslintrc.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 3fd832df1f1f..277f2bd7454f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,13 +6,6 @@ module.exports = { env: { jest: true, }, - settings: { - 'import/resolver': { - node: { - extensions: ['.js', '.jsx', '.ts', '.tsx'], - }, - }, - }, globals: { __DEV__: 'readonly', }, From e5f39eee5524752e21564a46c7289d770fa9c029 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 7 Jun 2023 15:23:43 +0200 Subject: [PATCH 015/187] Clean eslintrc config --- .eslintrc.js | 43 ++++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 277f2bd7454f..4c7ec3bd6a20 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,21 +9,26 @@ module.exports = { globals: { __DEV__: 'readonly', }, - rules: { - 'import/extensions': 'off', - 'no-restricted-imports': [ - 'error', - { - paths: [ - { - name: 'react-native', - importNames: ['useWindowDimensions'], - message: 'Please use useWindowDimensions from src/hooks/useWindowDimensions instead.', - }, + overrides: [ + { + files: ['*.js', '*.jsx', '*.ts', '*.tsx'], + rules: { + 'import/extensions': 'off', + 'no-restricted-imports': [ + 'error', { - name: 'react-native', - importNames: ['TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight'], - message: 'Please use PressableWithFeedback and/or PressableWithoutFeedback from src/components/Pressable instead', + paths: [ + { + name: 'react-native', + importNames: ['useWindowDimensions'], + message: 'Please use useWindowDimensions from src/hooks/useWindowDimensions instead.', + }, + { + name: 'react-native', + importNames: ['TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight'], + message: 'Please use PressableWithFeedback and/or PressableWithoutFeedback from src/components/Pressable instead.', + }, + ], }, { name: 'react-native', @@ -32,9 +37,7 @@ module.exports = { }, ], }, - ], - }, - overrides: [ + }, { files: ['*.ts', '*.tsx'], extends: ['expensify', 'airbnb-typescript', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], @@ -46,7 +49,6 @@ module.exports = { rules: { 'import/no-extraneous-dependencies': 'off', 'rulesdir/onyx-props-must-have-default': 'off', - 'react/jsx-filename-extension': [1, {extensions: ['.tsx', '.ts', '.jsx', '.js']}], '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/no-explicit-any': 'error', @@ -68,11 +70,6 @@ module.exports = { name: 'lodash/get', message: 'Please use optional chaining and nullish coalescing instead.', }, - { - name: 'react-native', - importNames: ['useWindowDimensions'], - message: 'Please use useWindowDimensions from src/hooks/useWindowDimensions instead.', - }, ], }, ], From a29cdd39247c0f6398844297bc65fae9df21bfe6 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 7 Jun 2023 15:24:22 +0200 Subject: [PATCH 016/187] Add DOM in tsconfig's lib option to enable usage of 'document' for web --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index 3c12cd577332..3afa44515311 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "module": "commonjs", "types": ["react-native", "jest"], "lib": [ + "DOM", "es2019", "es2020.bigint", "es2020.date", From 4b56d1d35a5f153ed3c7b7fa3660d782bbe55bb5 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 7 Jun 2023 15:24:58 +0200 Subject: [PATCH 017/187] Improve typescript performance by excluding node_modules and dist catalogs globally --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 3afa44515311..bd8307fc9928 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,6 +30,6 @@ "skipLibCheck": true, "baseUrl": "./" }, - "exclude": ["node_modules"], + "exclude": ["**/node_modules/*", "**/dist/*", ".github/actions/**/index.js"], "include": ["src", "desktop", "web", "docs", "assets", "config", "tests", "jest", "__mocks__", ".github/**/*", ".storybook/**/*"] } From ef877297173c7ba7923f6c545e37a1b1ea0793b9 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 7 Jun 2023 16:29:03 +0200 Subject: [PATCH 018/187] Use settings in eslintrc as before + add typescript extensions. --- .eslintrc.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index 4c7ec3bd6a20..a04ac637a55d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,6 +9,13 @@ module.exports = { globals: { __DEV__: 'readonly', }, + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + }, + }, overrides: [ { files: ['*.js', '*.jsx', '*.ts', '*.tsx'], From 8e6e4840c0fd11acc1fd7629f0f57c7310858c5e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 12 Jun 2023 12:08:50 +0200 Subject: [PATCH 019/187] Fix webpack missing modules errors --- config/webpack/webpack.common.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/webpack/webpack.common.js b/config/webpack/webpack.common.js index b82b89ba0239..c5656b791213 100644 --- a/config/webpack/webpack.common.js +++ b/config/webpack/webpack.common.js @@ -117,7 +117,7 @@ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({ rules: [ // Transpiles and lints all the JS { - test: /\.js$/, + test: /\.(js|ts)x?$/, loader: 'babel-loader', /** @@ -192,7 +192,7 @@ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({ // This is also why we have to use .website.js for our own web-specific files... // Because desktop also relies on "web-specific" module implementations // This also skips packing web only dependencies to desktop and vice versa - extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.web.ts', platform === 'web' ? '.website.ts' : '.desktop.ts', '.ts', '.tsx'], + extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.js', '.jsx', '.web.ts', platform === 'web' ? '.website.ts' : '.desktop.ts', '.ts', '.tsx'], fallback: { 'process/browser': require.resolve('process/browser'), }, From 2d31bc00cf0c0347025f59e0567d0b9815955731 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 12 Jun 2023 12:57:16 +0200 Subject: [PATCH 020/187] Remove unused dependencies --- package-lock.json | 49 ----------------------------------------------- package.json | 2 -- 2 files changed, 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index 00c442255c1b..efdded58acb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,9 +32,7 @@ "@react-native-firebase/perf": "^12.3.0", "@react-native-picker/picker": "^2.4.3", "@react-navigation/core": "^6.4.8", - "@react-navigation/drawer": "github:Expensify/react-navigation#react-navigation-drawer-v6.5.0-alpha1-gitpkg", "@react-navigation/native": "6.1.6", - "@react-navigation/routers": "^6.1.8", "@react-navigation/stack": "6.3.16", "@react-ng/bounds-observer": "^0.2.1", "@ua/react-native-airship": "^15.2.6", @@ -8136,36 +8134,6 @@ "react": "*" } }, - "node_modules/@react-navigation/drawer": { - "version": "6.5.0-alpha1", - "resolved": "git+ssh://git@github.com/Expensify/react-navigation.git#bee9dc3f6bd03bb24f529efcb9f0d5d5832df6d6", - "license": "MIT", - "dependencies": { - "@react-navigation/elements": "^1.3.6", - "color": "^4.2.3", - "warn-once": "^0.1.0" - }, - "peerDependencies": { - "@react-navigation/native": "^6.0.0", - "react": "*", - "react-native": "*", - "react-native-gesture-handler": ">= 2.0.0", - "react-native-reanimated": "*", - "react-native-safe-area-context": ">= 3.0.0", - "react-native-screens": ">= 3.0.0" - } - }, - "node_modules/@react-navigation/drawer/node_modules/@react-navigation/elements": { - "version": "1.3.17", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.17.tgz", - "integrity": "sha512-sui8AzHm6TxeEvWT/NEXlz3egYvCUog4tlXA4Xlb2Vxvy3purVXDq/XsM56lJl344U5Aj/jDzkVanOTMWyk4UA==", - "peerDependencies": { - "@react-navigation/native": "^6.0.0", - "react": "*", - "react-native": "*", - "react-native-safe-area-context": ">= 3.0.0" - } - }, "node_modules/@react-navigation/native": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.6.tgz", @@ -49317,23 +49285,6 @@ "stacktrace-parser": "^0.1.10" } }, - "@react-navigation/drawer": { - "version": "git+ssh://git@github.com/Expensify/react-navigation.git#bee9dc3f6bd03bb24f529efcb9f0d5d5832df6d6", - "from": "@react-navigation/drawer@github:Expensify/react-navigation#react-navigation-drawer-v6.5.0-alpha1-gitpkg", - "requires": { - "@react-navigation/elements": "^1.3.6", - "color": "^4.2.3", - "warn-once": "^0.1.0" - }, - "dependencies": { - "@react-navigation/elements": { - "version": "1.3.17", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.17.tgz", - "integrity": "sha512-sui8AzHm6TxeEvWT/NEXlz3egYvCUog4tlXA4Xlb2Vxvy3purVXDq/XsM56lJl344U5Aj/jDzkVanOTMWyk4UA==", - "requires": {} - } - } - }, "@react-navigation/native": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.6.tgz", diff --git a/package.json b/package.json index 6c0c858698a4..419aff0f73db 100644 --- a/package.json +++ b/package.json @@ -69,9 +69,7 @@ "@react-native-firebase/perf": "^12.3.0", "@react-native-picker/picker": "^2.4.3", "@react-navigation/core": "^6.4.8", - "@react-navigation/drawer": "github:Expensify/react-navigation#react-navigation-drawer-v6.5.0-alpha1-gitpkg", "@react-navigation/native": "6.1.6", - "@react-navigation/routers": "^6.1.8", "@react-navigation/stack": "6.3.16", "@react-ng/bounds-observer": "^0.2.1", "@ua/react-native-airship": "^15.2.6", From 7bd0a307a4cddff3041a501d07bba385e0b22b62 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 12 Jun 2023 12:57:24 +0200 Subject: [PATCH 021/187] Add json schema to tsconfig --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index bd8307fc9928..5f4507b8e46f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,5 @@ { + "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { "target": "esnext", "module": "commonjs", From 9bd7b1982faecf38c84e9025ae73abbffe5f45e9 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 12 Jun 2023 12:57:59 +0200 Subject: [PATCH 022/187] Fix eslint config after PR feedback --- .eslintrc.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index a04ac637a55d..6cecf095302d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,18 +9,10 @@ module.exports = { globals: { __DEV__: 'readonly', }, - settings: { - 'import/resolver': { - node: { - extensions: ['.js', '.jsx', '.ts', '.tsx'], - }, - }, - }, overrides: [ { files: ['*.js', '*.jsx', '*.ts', '*.tsx'], rules: { - 'import/extensions': 'off', 'no-restricted-imports': [ 'error', { @@ -45,9 +37,27 @@ module.exports = { ], }, }, + { + files: ['*.js', '*.jsx'], + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + }, + }, + }, { files: ['*.ts', '*.tsx'], - extends: ['expensify', 'airbnb-typescript', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], + extends: [ + 'expensify', + 'airbnb-typescript', + 'plugin:storybook/recommended', + 'plugin:react-hooks/recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'prettier', + ], plugins: ['@typescript-eslint', 'react-hooks'], parser: '@typescript-eslint/parser', parserOptions: { From 9e81d51f8919097e1f9e002fcfdfafc36ef0a328 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 12 Jun 2023 15:57:21 +0200 Subject: [PATCH 023/187] Fix no-restricted-imports & restrict lodash and underscore get imports --- .eslintrc.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 6cecf095302d..515e57265f94 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -27,13 +27,13 @@ module.exports = { importNames: ['TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight'], message: 'Please use PressableWithFeedback and/or PressableWithoutFeedback from src/components/Pressable instead.', }, + { + name: 'react-native', + importNames: ['StatusBar'], + message: 'Please use StatusBar from src/libs/StatusBar instead', + }, ], }, - { - name: 'react-native', - importNames: ['StatusBar'], - message: 'Please use StatusBar from src/libs/StatusBar instead', - }, ], }, }, @@ -87,6 +87,16 @@ module.exports = { name: 'lodash/get', message: 'Please use optional chaining and nullish coalescing instead.', }, + { + name: 'lodash', + importNames: ['get'], + message: 'Please use optional chaining and nullish coalescing instead.', + }, + { + name: 'underscore', + importNames: ['get'], + message: 'Please use optional chaining and nullish coalescing instead.', + }, ], }, ], From 6fb4e7cb4b016aa3b4768db9eeceffbdb3c8ac8f Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 13 Jun 2023 09:49:56 +0200 Subject: [PATCH 024/187] Turn off restritive eslint options around type 'any' --- .eslintrc.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index 515e57265f94..aba11d6b746c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -66,6 +66,9 @@ module.exports = { rules: { 'import/no-extraneous-dependencies': 'off', 'rulesdir/onyx-props-must-have-default': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/no-explicit-any': 'error', From 69f1ef2807130dd4bc88de1fafccc383b87a2bfe Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 13 Jun 2023 09:51:35 +0200 Subject: [PATCH 025/187] Remove unnecessary tsc script option --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 419aff0f73db..80f96f32a82b 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "android-build": "fastlane android build", "android-build-e2e": "bundle exec fastlane android build_e2e", "test": "TZ=utc jest", - "typecheck": "tsc --project tsconfig.json", + "typecheck": "tsc", "lint": "eslint . --max-warnings=0 --cache --cache-location=node_modules/.cache/eslint", "lint-changed": "eslint --fix $(git diff --diff-filter=AM --name-only main -- \"*.js\")", "lint-watch": "npx eslint-watch --watch --changed", From 3407827d39f76b4148a5bb6666523fcebb793e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Henriques?= Date: Tue, 13 Jun 2023 16:15:12 +0100 Subject: [PATCH 026/187] Tests with TS in Picker component --- src/components/Picker/BasePicker.js | 307 ------------------ src/components/Picker/BasePicker.tsx | 278 ++++++++++++++++ .../{index.native.js => index.native.tsx} | 0 src/components/Picker/{index.js => index.tsx} | 0 src/components/ScrollViewWithContext.js | 68 ---- src/components/ScrollViewWithContext.tsx | 64 ++++ src/hooks/usePrevious.ts | 13 + 7 files changed, 355 insertions(+), 375 deletions(-) delete mode 100644 src/components/Picker/BasePicker.js create mode 100644 src/components/Picker/BasePicker.tsx rename src/components/Picker/{index.native.js => index.native.tsx} (100%) rename src/components/Picker/{index.js => index.tsx} (100%) delete mode 100644 src/components/ScrollViewWithContext.js create mode 100644 src/components/ScrollViewWithContext.tsx create mode 100644 src/hooks/usePrevious.ts diff --git a/src/components/Picker/BasePicker.js b/src/components/Picker/BasePicker.js deleted file mode 100644 index d7fbb2ed8d6b..000000000000 --- a/src/components/Picker/BasePicker.js +++ /dev/null @@ -1,307 +0,0 @@ -import _ from 'underscore'; -import React, {PureComponent} from 'react'; -import {View} from 'react-native'; -import PropTypes from 'prop-types'; -import RNPickerSelect from 'react-native-picker-select'; -import Icon from '../Icon'; -import * as Expensicons from '../Icon/Expensicons'; -import FormHelpMessage from '../FormHelpMessage'; -import Text from '../Text'; -import styles from '../../styles/styles'; -import themeColors from '../../styles/themes/default'; -import {ScrollContext} from '../ScrollViewWithContext'; - -const propTypes = { - /** BasePicker label */ - label: PropTypes.string, - - /** Should the picker appear disabled? */ - isDisabled: PropTypes.bool, - - /** Input value */ - value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), - - /** The items to display in the list of selections */ - items: PropTypes.arrayOf( - PropTypes.shape({ - /** The value of the item that is being selected */ - value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, - - /** The text to display for the item */ - label: PropTypes.string.isRequired, - }), - ).isRequired, - - /** Something to show as the placeholder before something is selected */ - placeholder: PropTypes.shape({ - /** The value of the placeholder item, usually an empty string */ - value: PropTypes.string, - - /** The text to be displayed as the placeholder */ - label: PropTypes.string, - }), - - /** Error text to display */ - errorText: PropTypes.string, - - /** Customize the BasePicker container */ - // eslint-disable-next-line react/forbid-prop-types - containerStyles: PropTypes.arrayOf(PropTypes.object), - - /** Customize the BasePicker background color */ - backgroundColor: PropTypes.string, - - /** The ID used to uniquely identify the input in a Form */ - inputID: PropTypes.string, - - /** Saves a draft of the input value when used in a form */ - // eslint-disable-next-line react/no-unused-prop-types - shouldSaveDraft: PropTypes.bool, - - /** A callback method that is called when the value changes and it receives the selected value as an argument */ - onInputChange: PropTypes.func.isRequired, - - /** Size of a picker component */ - size: PropTypes.oneOf(['normal', 'small']), - - /** An icon to display with the picker */ - icon: PropTypes.func, - - /** Whether we should forward the focus/blur calls to the inner picker * */ - shouldFocusPicker: PropTypes.bool, - - /** Callback called when click or tap out of BasePicker */ - onBlur: PropTypes.func, - - /** Additional events passed to the core BasePicker for specific platforms such as web */ - additionalPickerEvents: PropTypes.func, - - /** Hint text that appears below the picker */ - hintText: PropTypes.string, -}; - -const defaultProps = { - label: '', - isDisabled: false, - errorText: '', - hintText: '', - containerStyles: [], - backgroundColor: undefined, - inputID: undefined, - shouldSaveDraft: false, - value: undefined, - placeholder: {}, - size: 'normal', - icon: (size) => ( - - ), - shouldFocusPicker: false, - onBlur: () => {}, - additionalPickerEvents: () => {}, -}; - -/** - * @property {View} root - a reference to the root View - * @property {Object} picker - a reference to @react-native-picker/picker - */ -class BasePicker extends PureComponent { - constructor(props) { - super(props); - this.state = { - isHighlighted: false, - }; - - this.onInputChange = this.onInputChange.bind(this); - this.enableHighlight = this.enableHighlight.bind(this); - this.disableHighlight = this.disableHighlight.bind(this); - this.focus = this.focus.bind(this); - this.measureLayout = this.measureLayout.bind(this); - - // Windows will reuse the text color of the select for each one of the options - // so we might need to color accordingly so it doesn't blend with the background. - this.placeholder = _.isEmpty(this.props.placeholder) - ? {} - : { - ...this.props.placeholder, - color: themeColors.pickerOptionsTextColor, - }; - } - - componentDidMount() { - this.setDefaultValue(); - } - - componentDidUpdate(prevProps) { - if (prevProps.items === this.props.items) { - return; - } - this.setDefaultValue(); - } - - /** - * Forms use inputID to set values. But BasePicker passes an index as the second parameter to onInputChange - * We are overriding this behavior to make BasePicker work with Form - * @param {String} value - * @param {Number} index - */ - onInputChange(value, index) { - if (this.props.inputID) { - this.props.onInputChange(value); - return; - } - - this.props.onInputChange(value, index); - } - - setDefaultValue() { - // When there is only 1 element in the selector, we do the user a favor and automatically select it for them - // so they don't have to spend extra time selecting the only possible value. - if (this.props.value || !this.props.items || this.props.items.length !== 1 || !this.props.onInputChange) { - return; - } - this.props.onInputChange(this.props.items[0].value, 0); - } - - enableHighlight() { - this.setState({ - isHighlighted: true, - }); - } - - disableHighlight() { - this.setState({ - isHighlighted: false, - }); - } - - /** - * Focuses the picker (if configured to do so) - * - * This method is used by Form - */ - focus() { - if (!this.props.shouldFocusPicker) { - return; - } - - // Defer the focusing to work around a bug on Mobile Safari, where focusing the `select` element in the same - // task when we scrolled to it left that element in a glitched state, where the dropdown list can't be opened - // until the element gets re-focused - _.defer(() => { - this.picker.focus(); - }); - } - - /** - * Like measure(), but measures the view relative to an ancestor - * - * This method is used by Form when scrolling to the input - * - * @param {Object} relativeToNativeComponentRef - reference to an ancestor - * @param {function(x: number, y: number, width: number, height: number): void} onSuccess - callback called on success - * @param {function(): void} onFail - callback called on failure - */ - measureLayout(relativeToNativeComponentRef, onSuccess, onFail) { - if (!this.root) { - return; - } - - this.root.measureLayout(relativeToNativeComponentRef, onSuccess, onFail); - } - - render() { - const hasError = !_.isEmpty(this.props.errorText); - - if (this.props.isDisabled) { - return ( - - {Boolean(this.props.label) && ( - - {this.props.label} - - )} - {this.props.value} - {Boolean(this.props.hintText) && {this.props.hintText}} - - ); - } - - return ( - <> - (this.root = el)} - style={[ - styles.pickerContainer, - this.props.isDisabled && styles.inputDisabled, - ...this.props.containerStyles, - this.state.isHighlighted && styles.borderColorFocus, - hasError && styles.borderColorDanger, - ]} - > - {this.props.label && ( - - {this.props.label} - - )} - ({...item, color: themeColors.pickerOptionsTextColor}))} - style={this.props.size === 'normal' ? styles.picker(this.props.isDisabled, this.props.backgroundColor) : styles.pickerSmall(this.props.backgroundColor)} - useNativeAndroidPickerStyle={false} - placeholder={this.placeholder} - value={this.props.value} - Icon={() => this.props.icon(this.props.size)} - disabled={this.props.isDisabled} - fixAndroidTouchableBug - onOpen={this.enableHighlight} - onClose={this.disableHighlight} - textInputProps={{ - allowFontScaling: false, - }} - pickerProps={{ - ref: (el) => (this.picker = el), - onFocus: this.enableHighlight, - onBlur: () => { - this.disableHighlight(); - this.props.onBlur(); - }, - ...this.props.additionalPickerEvents(this.enableHighlight, (value, index) => { - this.onInputChange(value, index); - this.disableHighlight(); - }), - }} - scrollViewRef={this.context && this.context.scrollViewRef} - scrollViewContentOffsetY={this.context && this.context.contentOffsetY} - /> - - - {Boolean(this.props.hintText) && {this.props.hintText}} - - ); - } -} - -BasePicker.propTypes = propTypes; -BasePicker.defaultProps = defaultProps; -BasePicker.contextType = ScrollContext; - -export default React.forwardRef((props, ref) => ( - -)); diff --git a/src/components/Picker/BasePicker.tsx b/src/components/Picker/BasePicker.tsx new file mode 100644 index 000000000000..2ac5008a4e4b --- /dev/null +++ b/src/components/Picker/BasePicker.tsx @@ -0,0 +1,278 @@ +import React, {useCallback, useContext, useEffect, useRef, useState} from 'react'; +import {HostComponent, MeasureLayoutOnSuccessCallback, StyleProp, View, ViewStyle} from 'react-native'; +import RNPickerSelect from 'react-native-picker-select'; +import _ from 'underscore'; +import usePrevious from '../../hooks/usePrevious'; +import styles from '../../styles/styles'; +import themeColors from '../../styles/themes/default'; +import FormHelpMessage from '../FormHelpMessage'; +import Icon from '../Icon'; +import * as Expensicons from '../Icon/Expensicons'; +import {ScrollContext} from '../ScrollViewWithContext'; +import Text from '../Text'; + +type Props = { + /** BasePicker label */ + label?: string; + + /** Should the picker appear disabled? */ + isDisabled: boolean; + + /** Input value */ + value?: string | number; + + /** The items to display in the list of selections */ + items: Array<{ + value: string | number; + label: string; + }>; + + /** Something to show as the placeholder before something is selected */ + placeholder: + | { + value: string; + label: string; + } + | Record; + + /** Error text to display */ + errorText: string; + + /** Customize the BasePicker container */ + containerStyles: StyleProp; + + /** Customize the BasePicker background color */ + backgroundColor?: string; + + /** The ID used to uniquely identify the input in a Form */ + inputID?: string; + + /** Saves a draft of the input value when used in a form */ + // eslint-disable-next-line react/no-unused-prop-types + shouldSaveDraft: boolean; + + /** A callback method that is called when the value changes and it receives the selected value as an argument */ + onInputChange: (value: string | number, index: number) => void; + + /** Size of a picker component */ + size: 'normal' | 'small'; + + /** An icon to display with the picker */ + icon: (size: 'normal' | 'small') => JSX.Element; + + /** Whether we should forward the focus/blur calls to the inner picker * */ + shouldFocusPicker: boolean; + + /** Callback called when click or tap out of BasePicker */ + onBlur: () => void; + + /** Additional events passed to the core BasePicker for specific platforms such as web */ + additionalPickerEvents: (onMouseDown: any, onChange: any) => void; + + /** Hint text that appears below the picker */ + hintText: string; +}; + +const defaultProps: Omit = { + label: '', + isDisabled: false, + errorText: '', + hintText: '', + containerStyles: [], + backgroundColor: undefined, + inputID: undefined, + shouldSaveDraft: false, + value: undefined, + placeholder: {}, + size: 'normal', + icon: (size) => ( + + ), + shouldFocusPicker: false, + onBlur: () => {}, + additionalPickerEvents: () => {}, +}; + +function BasePicker(props: Props) { + const [isHighlighted, setIsHighlighted] = useState(false); + const ref = useRef(null); + const pickerRef = useRef(null); + const prevItems = usePrevious(props.items); + const context = useContext(ScrollContext); + + const placeholder = _.isEmpty(props.placeholder) + ? {} + : { + ...props.placeholder, + color: themeColors.pickerOptionsTextColor, + }; + + /** + * Forms use inputID to set values. But BasePicker passes an index as the second parameter to onInputChange + * We are overriding this behavior to make BasePicker work with Form + */ + const onInputChange = (value: string, index: number) => { + if (props.inputID) { + props.onInputChange(value, index); + return; + } + + onInputChange(value, index); + }; + + // FIXME: The linter should warn to wrap this function with useCallback. + const setDefaultValue = useCallback(() => { + // When there is only 1 element in the selector, we do the user a favor and automatically select it for them + // so they don't have to spend extra time selecting the only possible value. + if (props.value || !props.items || props.items.length !== 1 || !props.onInputChange) { + return; + } + + props.onInputChange(props.items[0].value, 0); + }, [props.value, props.items, props.onInputChange]); + + const enableHighlight = () => { + setIsHighlighted(true); + }; + + const disableHighlight = () => { + setIsHighlighted(false); + }; + + /** + * Focuses the picker (if configured to do so) + * + * This method is used by Form + */ + const focus = () => { + if (!props.shouldFocusPicker) { + return; + } + + // Defer the focusing to work around a bug on Mobile Safari, where focusing the `select` element in the same + // task when we scrolled to it left that element in a glitched state, where the dropdown list can't be opened + // until the element gets re-focused + _.defer(() => { + pickerRef.current?.focus(); + }); + }; + + /** + * Like measure(), but measures the view relative to an ancestor + * + * This method is used by Form when scrolling to the input + */ + const measureLayout = (relativeToNativeComponentRef: React.ElementRef> | number, onSuccess: MeasureLayoutOnSuccessCallback, onFail?: () => void) => { + if (!ref.current) { + return; + } + + ref.current.measureLayout(relativeToNativeComponentRef, onSuccess, onFail); + }; + + const hasError = !_.isEmpty(props.errorText); + + useEffect(() => { + setDefaultValue(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + if (prevItems === props.items) { + return; + } + setDefaultValue(); + }, [prevItems, props.items, setDefaultValue]); + + if (props.isDisabled) { + return ( + + {Boolean(props.label) && ( + + {props.label} + + )} + {props.value} + {Boolean(props.hintText) && {props.hintText}} + + ); + } + + return ( + <> + + {props.label && ( + + {props.label} + + )} + ({...item, color: themeColors.pickerOptionsTextColor}))} + style={props.size === 'normal' ? styles.picker(props.isDisabled, props.backgroundColor) : styles.pickerSmall(props.backgroundColor)} + useNativeAndroidPickerStyle={false} + placeholder={placeholder} + value={props.value} + // @ts-expect-error + Icon={() => props.icon(props.size)} + disabled={props.isDisabled} + fixAndroidTouchableBug + onOpen={enableHighlight} + onClose={disableHighlight} + textInputProps={{ + allowFontScaling: false, + }} + pickerProps={{ + ref: pickerRef, + onFocus: enableHighlight, + onBlur: () => { + disableHighlight(); + props.onBlur(); + }, + // @ts-expect-error + ...props.additionalPickerEvents(enableHighlight, (value, index) => { + onInputChange(value, index); + disableHighlight(); + }), + }} + scrollViewRef={context?.scrollViewRef} + scrollViewContentOffsetY={context?.contentOffsetY} + /> + + + {Boolean(props.hintText) && {props.hintText}} + + ); +} + +BasePicker.defaultProps = defaultProps; + +export default React.forwardRef((props, ref) => ( + +)); diff --git a/src/components/Picker/index.native.js b/src/components/Picker/index.native.tsx similarity index 100% rename from src/components/Picker/index.native.js rename to src/components/Picker/index.native.tsx diff --git a/src/components/Picker/index.js b/src/components/Picker/index.tsx similarity index 100% rename from src/components/Picker/index.js rename to src/components/Picker/index.tsx diff --git a/src/components/ScrollViewWithContext.js b/src/components/ScrollViewWithContext.js deleted file mode 100644 index c49dbffe006b..000000000000 --- a/src/components/ScrollViewWithContext.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import {ScrollView} from 'react-native'; - -const MIN_SMOOTH_SCROLL_EVENT_THROTTLE = 16; - -const ScrollContext = React.createContext(); - -// eslint-disable-next-line react/forbid-foreign-prop-types -const propTypes = ScrollView.propTypes; - -/* - * is a wrapper around that provides a ref to the . - * can be used as a direct replacement for - * if it contains one or more / components. - * Using this wrapper will automatically handle scrolling to the picker's - * when the picker modal is opened - */ -class ScrollViewWithContext extends React.Component { - constructor(props) { - super(props); - - this.state = { - contentOffsetY: 0, - }; - this.scrollViewRef = this.props.innerRef || React.createRef(null); - - this.setContextScrollPosition = this.setContextScrollPosition.bind(this); - } - - setContextScrollPosition(event) { - if (this.props.onScroll) { - this.props.onScroll(event); - } - this.setState({contentOffsetY: event.nativeEvent.contentOffset.y}); - } - - render() { - return ( - - - {this.props.children} - - - ); - } -} -ScrollViewWithContext.propTypes = propTypes; - -export default React.forwardRef((props, ref) => ( - -)); - -export {ScrollContext}; diff --git a/src/components/ScrollViewWithContext.tsx b/src/components/ScrollViewWithContext.tsx new file mode 100644 index 000000000000..d54e18ca9a94 --- /dev/null +++ b/src/components/ScrollViewWithContext.tsx @@ -0,0 +1,64 @@ +import React, {ForwardedRef, Ref, useRef, useState} from 'react'; +import {NativeScrollEvent, NativeSyntheticEvent, ScrollView, ScrollViewProps} from 'react-native'; + +type ScrollContextType = { + scrollViewRef: Ref; + contentOffsetY: number; +}; + +type Props = ScrollViewProps & { + innerRef: ForwardedRef; +}; + +const MIN_SMOOTH_SCROLL_EVENT_THROTTLE = 16; + +const ScrollContext = React.createContext(undefined); + +/* + * is a wrapper around that provides a ref to the . + * can be used as a direct replacement for + * if it contains one or more / components. + * Using this wrapper will automatically handle scrolling to the picker's + * when the picker modal is opened + */ +function ScrollViewWithContext(props: Props) { + const [contentOffsetY, setContentOffsetY] = useState(0); + const ref = useRef(null); + const scrollViewRef = props.innerRef ?? ref; + + const setContextScrollPosition = (event: NativeSyntheticEvent) => { + if (props.onScroll) { + props.onScroll(event); + } + setContentOffsetY(event.nativeEvent.contentOffset.y); + }; + + return ( + + + {props.children} + + + ); +} + +export default React.forwardRef((props, ref) => ( + +)); + +export {ScrollContext}; diff --git a/src/hooks/usePrevious.ts b/src/hooks/usePrevious.ts new file mode 100644 index 000000000000..9912cae62f9e --- /dev/null +++ b/src/hooks/usePrevious.ts @@ -0,0 +1,13 @@ +import {useEffect, useRef} from 'react'; + +const usePrevious = (value: T): T | undefined => { + const ref = useRef(); + + useEffect(() => { + ref.current = value; + }); + + return ref.current; +}; + +export default usePrevious; From 0fb7d77e97a513b6ec7649d9741423c3a23bc809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Henriques?= Date: Tue, 13 Jun 2023 16:21:40 +0100 Subject: [PATCH 027/187] Disable some rules that don't make sense for TS/TSX files --- .eslintrc.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index aba11d6b746c..57fb2a6e1001 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -103,6 +103,9 @@ module.exports = { ], }, ], + 'valid-jsdoc': 'off', + 'react/default-props-match-prop-types': 'off', + 'react/require-default-props': 'off', }, }, ], From 14088b6d1df2bb39cff3ea5373f0a91b814c61bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Henriques?= Date: Tue, 13 Jun 2023 17:55:23 +0100 Subject: [PATCH 028/187] Remove baseUrl from tsconfig.json to solve issues with file imports in VSCode --- tsconfig.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 5f4507b8e46f..b224f63add9b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,8 +28,7 @@ "moduleResolution": "node", "resolveJsonModule": true, "allowSyntheticDefaultImports": true, - "skipLibCheck": true, - "baseUrl": "./" + "skipLibCheck": true }, "exclude": ["**/node_modules/*", "**/dist/*", ".github/actions/**/index.js"], "include": ["src", "desktop", "web", "docs", "assets", "config", "tests", "jest", "__mocks__", ".github/**/*", ".storybook/**/*"] From 85a14c55f0ce37e1211a616e7c273f07d9dd956c Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 14 Jun 2023 09:13:56 +0200 Subject: [PATCH 029/187] Add eslint rule to allow importing tsx/ts files in javascript files --- .eslintrc.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index 57fb2a6e1001..453ed95070ab 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -46,6 +46,18 @@ module.exports = { }, }, }, + rules: { + 'import/extensions': [ + 'error', + 'ignorePackages', + { + js: 'never', + jsx: 'never', + ts: 'never', + tsx: 'never', + }, + ], + }, }, { files: ['*.ts', '*.tsx'], From f88861bcd8e8742df5b9d149a6abd0ae9aec0da2 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 14 Jun 2023 09:14:11 +0200 Subject: [PATCH 030/187] Turn off react/static-property-placement --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index 453ed95070ab..2389079079ed 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -76,6 +76,7 @@ module.exports = { project: './tsconfig.json', }, rules: { + 'react/static-property-placement': 'off', 'import/no-extraneous-dependencies': 'off', 'rulesdir/onyx-props-must-have-default': 'off', '@typescript-eslint/no-unsafe-argument': 'off', From f396d4a0bd2f64b35b30e788c8f1a4f84a1b8f7a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 14 Jun 2023 09:16:35 +0200 Subject: [PATCH 031/187] Remove unrelated dependencies from package.json --- package-lock.json | 4 ---- package.json | 4 ---- 2 files changed, 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index efdded58acb0..e54b78a9e001 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,6 @@ "@react-native-firebase/crashlytics": "^12.3.0", "@react-native-firebase/perf": "^12.3.0", "@react-native-picker/picker": "^2.4.3", - "@react-navigation/core": "^6.4.8", "@react-navigation/native": "6.1.6", "@react-navigation/stack": "6.3.16", "@react-ng/bounds-observer": "^0.2.1", @@ -60,9 +59,7 @@ "react-collapse": "^5.1.0", "react-content-loader": "^6.1.0", "react-dom": "18.1.0", - "react-freeze": "^1.0.3", "react-native": "https://github.com/Expensify/react-native/releases/download/v0.71.2-alpha.3/expensify-react-native-0.71.2-alpha.3.tgz", - "react-native-animatable": "^1.3.3", "react-native-blob-util": "^0.17.3", "react-native-collapsible": "^1.6.0", "react-native-config": "^1.4.5", @@ -192,7 +189,6 @@ "jest-circus": "29.4.1", "jest-cli": "29.4.1", "jest-environment-jsdom": "^29.4.1", - "js-yaml": "^4.1.0", "metro-react-native-babel-preset": "^0.73.3", "mock-fs": "^4.13.0", "onchange": "^7.1.0", diff --git a/package.json b/package.json index 80f96f32a82b..c36b4ce7b9d0 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,6 @@ "@react-native-firebase/crashlytics": "^12.3.0", "@react-native-firebase/perf": "^12.3.0", "@react-native-picker/picker": "^2.4.3", - "@react-navigation/core": "^6.4.8", "@react-navigation/native": "6.1.6", "@react-navigation/stack": "6.3.16", "@react-ng/bounds-observer": "^0.2.1", @@ -97,9 +96,7 @@ "react-collapse": "^5.1.0", "react-content-loader": "^6.1.0", "react-dom": "18.1.0", - "react-freeze": "^1.0.3", "react-native": "https://github.com/Expensify/react-native/releases/download/v0.71.2-alpha.3/expensify-react-native-0.71.2-alpha.3.tgz", - "react-native-animatable": "^1.3.3", "react-native-blob-util": "^0.17.3", "react-native-collapsible": "^1.6.0", "react-native-config": "^1.4.5", @@ -229,7 +226,6 @@ "jest-circus": "29.4.1", "jest-cli": "29.4.1", "jest-environment-jsdom": "^29.4.1", - "js-yaml": "^4.1.0", "metro-react-native-babel-preset": "^0.73.3", "mock-fs": "^4.13.0", "onchange": "^7.1.0", From fc6aeb7999430f9f21e5605bf1485b741d93386b Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 14 Jun 2023 11:51:13 +0200 Subject: [PATCH 032/187] Fix import/resolver option for JS files --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2389079079ed..0c76a3c02883 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -42,7 +42,7 @@ module.exports = { settings: { 'import/resolver': { node: { - extensions: ['.js', '.jsx', '.ts', '.tsx'], + extensions: ['.js', '.website.js', '.desktop.js', '.native.js', '.ios.js', '.android.js', '.config.js', '.ts', '.tsx'], }, }, }, From e5667843e129ea2d3b2235eebc44115ef30d5ae9 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 14 Jun 2023 11:52:14 +0200 Subject: [PATCH 033/187] Fix slow eslint runs --- .eslintignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000000..ff383f7e88d1 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +**/node_modules/* +**/dist/* +.github/actions/**/index.js" \ No newline at end of file From 24b5bb22f7ad695c616b50efaf1f838b00781b9f Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 15 Jun 2023 17:21:18 +0200 Subject: [PATCH 034/187] Install type-fest, library with type utilities --- package-lock.json | 15 ++------------- package.json | 1 + 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index e54b78a9e001..e25cafbb0978 100644 --- a/package-lock.json +++ b/package-lock.json @@ -205,6 +205,7 @@ "shellcheck": "^1.1.0", "style-loader": "^2.0.0", "time-analytics-webpack-plugin": "^0.1.17", + "type-fest": "^3.12.0", "typescript": "^4.8.4", "wait-port": "^0.2.9", "webpack": "^5.76.0", @@ -19262,7 +19263,6 @@ }, "node_modules/bindings": { "version": "1.5.0", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -25469,7 +25469,6 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "dev": true, "license": "MIT", "optional": true }, @@ -34328,7 +34327,6 @@ }, "node_modules/nan": { "version": "2.16.0", - "dev": true, "license": "MIT", "optional": true }, @@ -41624,8 +41622,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=14.16" }, @@ -42491,7 +42487,6 @@ }, "node_modules/watchpack-chokidar2/node_modules/fsevents": { "version": "1.2.13", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -56687,7 +56682,6 @@ }, "bindings": { "version": "1.5.0", - "dev": true, "optional": true, "requires": { "file-uri-to-path": "1.0.0" @@ -60836,7 +60830,6 @@ }, "file-uri-to-path": { "version": "1.0.0", - "dev": true, "optional": true }, "filelist": { @@ -66664,7 +66657,6 @@ }, "nan": { "version": "2.16.0", - "dev": true, "optional": true }, "nanoid": { @@ -71497,9 +71489,7 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "type-is": { "version": "1.6.18", @@ -72071,7 +72061,6 @@ }, "fsevents": { "version": "1.2.13", - "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", diff --git a/package.json b/package.json index c36b4ce7b9d0..5d9df0c2da86 100644 --- a/package.json +++ b/package.json @@ -242,6 +242,7 @@ "shellcheck": "^1.1.0", "style-loader": "^2.0.0", "time-analytics-webpack-plugin": "^0.1.17", + "type-fest": "^3.12.0", "typescript": "^4.8.4", "wait-port": "^0.2.9", "webpack": "^5.76.0", From de5afda1abaca9007a2edef6d79f689c0ba77cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Henriques?= Date: Thu, 15 Jun 2023 15:33:15 +0100 Subject: [PATCH 035/187] Add more rules related to enums --- .eslintrc.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index 0c76a3c02883..4c6fbeb55506 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -119,6 +119,9 @@ module.exports = { 'valid-jsdoc': 'off', 'react/default-props-match-prop-types': 'off', 'react/require-default-props': 'off', + '@typescript-eslint/switch-exhaustiveness-check': 'error', + '@typescript-eslint/prefer-enum-initializers': 'error', + '@typescript-eslint/no-unsafe-enum-comparison': 'error', }, }, ], From c505088d2f70902d50135ab64ac441093778f77a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 16 Jun 2023 11:20:29 +0200 Subject: [PATCH 036/187] Revert Picker changes --- src/components/Picker/BasePicker.js | 307 ++++++++++++++++++ src/components/Picker/BasePicker.tsx | 278 ---------------- src/components/Picker/{index.tsx => index.js} | 0 .../{index.native.tsx => index.native.js} | 0 4 files changed, 307 insertions(+), 278 deletions(-) create mode 100644 src/components/Picker/BasePicker.js delete mode 100644 src/components/Picker/BasePicker.tsx rename src/components/Picker/{index.tsx => index.js} (100%) rename src/components/Picker/{index.native.tsx => index.native.js} (100%) diff --git a/src/components/Picker/BasePicker.js b/src/components/Picker/BasePicker.js new file mode 100644 index 000000000000..d7fbb2ed8d6b --- /dev/null +++ b/src/components/Picker/BasePicker.js @@ -0,0 +1,307 @@ +import _ from 'underscore'; +import React, {PureComponent} from 'react'; +import {View} from 'react-native'; +import PropTypes from 'prop-types'; +import RNPickerSelect from 'react-native-picker-select'; +import Icon from '../Icon'; +import * as Expensicons from '../Icon/Expensicons'; +import FormHelpMessage from '../FormHelpMessage'; +import Text from '../Text'; +import styles from '../../styles/styles'; +import themeColors from '../../styles/themes/default'; +import {ScrollContext} from '../ScrollViewWithContext'; + +const propTypes = { + /** BasePicker label */ + label: PropTypes.string, + + /** Should the picker appear disabled? */ + isDisabled: PropTypes.bool, + + /** Input value */ + value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + + /** The items to display in the list of selections */ + items: PropTypes.arrayOf( + PropTypes.shape({ + /** The value of the item that is being selected */ + value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + + /** The text to display for the item */ + label: PropTypes.string.isRequired, + }), + ).isRequired, + + /** Something to show as the placeholder before something is selected */ + placeholder: PropTypes.shape({ + /** The value of the placeholder item, usually an empty string */ + value: PropTypes.string, + + /** The text to be displayed as the placeholder */ + label: PropTypes.string, + }), + + /** Error text to display */ + errorText: PropTypes.string, + + /** Customize the BasePicker container */ + // eslint-disable-next-line react/forbid-prop-types + containerStyles: PropTypes.arrayOf(PropTypes.object), + + /** Customize the BasePicker background color */ + backgroundColor: PropTypes.string, + + /** The ID used to uniquely identify the input in a Form */ + inputID: PropTypes.string, + + /** Saves a draft of the input value when used in a form */ + // eslint-disable-next-line react/no-unused-prop-types + shouldSaveDraft: PropTypes.bool, + + /** A callback method that is called when the value changes and it receives the selected value as an argument */ + onInputChange: PropTypes.func.isRequired, + + /** Size of a picker component */ + size: PropTypes.oneOf(['normal', 'small']), + + /** An icon to display with the picker */ + icon: PropTypes.func, + + /** Whether we should forward the focus/blur calls to the inner picker * */ + shouldFocusPicker: PropTypes.bool, + + /** Callback called when click or tap out of BasePicker */ + onBlur: PropTypes.func, + + /** Additional events passed to the core BasePicker for specific platforms such as web */ + additionalPickerEvents: PropTypes.func, + + /** Hint text that appears below the picker */ + hintText: PropTypes.string, +}; + +const defaultProps = { + label: '', + isDisabled: false, + errorText: '', + hintText: '', + containerStyles: [], + backgroundColor: undefined, + inputID: undefined, + shouldSaveDraft: false, + value: undefined, + placeholder: {}, + size: 'normal', + icon: (size) => ( + + ), + shouldFocusPicker: false, + onBlur: () => {}, + additionalPickerEvents: () => {}, +}; + +/** + * @property {View} root - a reference to the root View + * @property {Object} picker - a reference to @react-native-picker/picker + */ +class BasePicker extends PureComponent { + constructor(props) { + super(props); + this.state = { + isHighlighted: false, + }; + + this.onInputChange = this.onInputChange.bind(this); + this.enableHighlight = this.enableHighlight.bind(this); + this.disableHighlight = this.disableHighlight.bind(this); + this.focus = this.focus.bind(this); + this.measureLayout = this.measureLayout.bind(this); + + // Windows will reuse the text color of the select for each one of the options + // so we might need to color accordingly so it doesn't blend with the background. + this.placeholder = _.isEmpty(this.props.placeholder) + ? {} + : { + ...this.props.placeholder, + color: themeColors.pickerOptionsTextColor, + }; + } + + componentDidMount() { + this.setDefaultValue(); + } + + componentDidUpdate(prevProps) { + if (prevProps.items === this.props.items) { + return; + } + this.setDefaultValue(); + } + + /** + * Forms use inputID to set values. But BasePicker passes an index as the second parameter to onInputChange + * We are overriding this behavior to make BasePicker work with Form + * @param {String} value + * @param {Number} index + */ + onInputChange(value, index) { + if (this.props.inputID) { + this.props.onInputChange(value); + return; + } + + this.props.onInputChange(value, index); + } + + setDefaultValue() { + // When there is only 1 element in the selector, we do the user a favor and automatically select it for them + // so they don't have to spend extra time selecting the only possible value. + if (this.props.value || !this.props.items || this.props.items.length !== 1 || !this.props.onInputChange) { + return; + } + this.props.onInputChange(this.props.items[0].value, 0); + } + + enableHighlight() { + this.setState({ + isHighlighted: true, + }); + } + + disableHighlight() { + this.setState({ + isHighlighted: false, + }); + } + + /** + * Focuses the picker (if configured to do so) + * + * This method is used by Form + */ + focus() { + if (!this.props.shouldFocusPicker) { + return; + } + + // Defer the focusing to work around a bug on Mobile Safari, where focusing the `select` element in the same + // task when we scrolled to it left that element in a glitched state, where the dropdown list can't be opened + // until the element gets re-focused + _.defer(() => { + this.picker.focus(); + }); + } + + /** + * Like measure(), but measures the view relative to an ancestor + * + * This method is used by Form when scrolling to the input + * + * @param {Object} relativeToNativeComponentRef - reference to an ancestor + * @param {function(x: number, y: number, width: number, height: number): void} onSuccess - callback called on success + * @param {function(): void} onFail - callback called on failure + */ + measureLayout(relativeToNativeComponentRef, onSuccess, onFail) { + if (!this.root) { + return; + } + + this.root.measureLayout(relativeToNativeComponentRef, onSuccess, onFail); + } + + render() { + const hasError = !_.isEmpty(this.props.errorText); + + if (this.props.isDisabled) { + return ( + + {Boolean(this.props.label) && ( + + {this.props.label} + + )} + {this.props.value} + {Boolean(this.props.hintText) && {this.props.hintText}} + + ); + } + + return ( + <> + (this.root = el)} + style={[ + styles.pickerContainer, + this.props.isDisabled && styles.inputDisabled, + ...this.props.containerStyles, + this.state.isHighlighted && styles.borderColorFocus, + hasError && styles.borderColorDanger, + ]} + > + {this.props.label && ( + + {this.props.label} + + )} + ({...item, color: themeColors.pickerOptionsTextColor}))} + style={this.props.size === 'normal' ? styles.picker(this.props.isDisabled, this.props.backgroundColor) : styles.pickerSmall(this.props.backgroundColor)} + useNativeAndroidPickerStyle={false} + placeholder={this.placeholder} + value={this.props.value} + Icon={() => this.props.icon(this.props.size)} + disabled={this.props.isDisabled} + fixAndroidTouchableBug + onOpen={this.enableHighlight} + onClose={this.disableHighlight} + textInputProps={{ + allowFontScaling: false, + }} + pickerProps={{ + ref: (el) => (this.picker = el), + onFocus: this.enableHighlight, + onBlur: () => { + this.disableHighlight(); + this.props.onBlur(); + }, + ...this.props.additionalPickerEvents(this.enableHighlight, (value, index) => { + this.onInputChange(value, index); + this.disableHighlight(); + }), + }} + scrollViewRef={this.context && this.context.scrollViewRef} + scrollViewContentOffsetY={this.context && this.context.contentOffsetY} + /> + + + {Boolean(this.props.hintText) && {this.props.hintText}} + + ); + } +} + +BasePicker.propTypes = propTypes; +BasePicker.defaultProps = defaultProps; +BasePicker.contextType = ScrollContext; + +export default React.forwardRef((props, ref) => ( + +)); diff --git a/src/components/Picker/BasePicker.tsx b/src/components/Picker/BasePicker.tsx deleted file mode 100644 index 2ac5008a4e4b..000000000000 --- a/src/components/Picker/BasePicker.tsx +++ /dev/null @@ -1,278 +0,0 @@ -import React, {useCallback, useContext, useEffect, useRef, useState} from 'react'; -import {HostComponent, MeasureLayoutOnSuccessCallback, StyleProp, View, ViewStyle} from 'react-native'; -import RNPickerSelect from 'react-native-picker-select'; -import _ from 'underscore'; -import usePrevious from '../../hooks/usePrevious'; -import styles from '../../styles/styles'; -import themeColors from '../../styles/themes/default'; -import FormHelpMessage from '../FormHelpMessage'; -import Icon from '../Icon'; -import * as Expensicons from '../Icon/Expensicons'; -import {ScrollContext} from '../ScrollViewWithContext'; -import Text from '../Text'; - -type Props = { - /** BasePicker label */ - label?: string; - - /** Should the picker appear disabled? */ - isDisabled: boolean; - - /** Input value */ - value?: string | number; - - /** The items to display in the list of selections */ - items: Array<{ - value: string | number; - label: string; - }>; - - /** Something to show as the placeholder before something is selected */ - placeholder: - | { - value: string; - label: string; - } - | Record; - - /** Error text to display */ - errorText: string; - - /** Customize the BasePicker container */ - containerStyles: StyleProp; - - /** Customize the BasePicker background color */ - backgroundColor?: string; - - /** The ID used to uniquely identify the input in a Form */ - inputID?: string; - - /** Saves a draft of the input value when used in a form */ - // eslint-disable-next-line react/no-unused-prop-types - shouldSaveDraft: boolean; - - /** A callback method that is called when the value changes and it receives the selected value as an argument */ - onInputChange: (value: string | number, index: number) => void; - - /** Size of a picker component */ - size: 'normal' | 'small'; - - /** An icon to display with the picker */ - icon: (size: 'normal' | 'small') => JSX.Element; - - /** Whether we should forward the focus/blur calls to the inner picker * */ - shouldFocusPicker: boolean; - - /** Callback called when click or tap out of BasePicker */ - onBlur: () => void; - - /** Additional events passed to the core BasePicker for specific platforms such as web */ - additionalPickerEvents: (onMouseDown: any, onChange: any) => void; - - /** Hint text that appears below the picker */ - hintText: string; -}; - -const defaultProps: Omit = { - label: '', - isDisabled: false, - errorText: '', - hintText: '', - containerStyles: [], - backgroundColor: undefined, - inputID: undefined, - shouldSaveDraft: false, - value: undefined, - placeholder: {}, - size: 'normal', - icon: (size) => ( - - ), - shouldFocusPicker: false, - onBlur: () => {}, - additionalPickerEvents: () => {}, -}; - -function BasePicker(props: Props) { - const [isHighlighted, setIsHighlighted] = useState(false); - const ref = useRef(null); - const pickerRef = useRef(null); - const prevItems = usePrevious(props.items); - const context = useContext(ScrollContext); - - const placeholder = _.isEmpty(props.placeholder) - ? {} - : { - ...props.placeholder, - color: themeColors.pickerOptionsTextColor, - }; - - /** - * Forms use inputID to set values. But BasePicker passes an index as the second parameter to onInputChange - * We are overriding this behavior to make BasePicker work with Form - */ - const onInputChange = (value: string, index: number) => { - if (props.inputID) { - props.onInputChange(value, index); - return; - } - - onInputChange(value, index); - }; - - // FIXME: The linter should warn to wrap this function with useCallback. - const setDefaultValue = useCallback(() => { - // When there is only 1 element in the selector, we do the user a favor and automatically select it for them - // so they don't have to spend extra time selecting the only possible value. - if (props.value || !props.items || props.items.length !== 1 || !props.onInputChange) { - return; - } - - props.onInputChange(props.items[0].value, 0); - }, [props.value, props.items, props.onInputChange]); - - const enableHighlight = () => { - setIsHighlighted(true); - }; - - const disableHighlight = () => { - setIsHighlighted(false); - }; - - /** - * Focuses the picker (if configured to do so) - * - * This method is used by Form - */ - const focus = () => { - if (!props.shouldFocusPicker) { - return; - } - - // Defer the focusing to work around a bug on Mobile Safari, where focusing the `select` element in the same - // task when we scrolled to it left that element in a glitched state, where the dropdown list can't be opened - // until the element gets re-focused - _.defer(() => { - pickerRef.current?.focus(); - }); - }; - - /** - * Like measure(), but measures the view relative to an ancestor - * - * This method is used by Form when scrolling to the input - */ - const measureLayout = (relativeToNativeComponentRef: React.ElementRef> | number, onSuccess: MeasureLayoutOnSuccessCallback, onFail?: () => void) => { - if (!ref.current) { - return; - } - - ref.current.measureLayout(relativeToNativeComponentRef, onSuccess, onFail); - }; - - const hasError = !_.isEmpty(props.errorText); - - useEffect(() => { - setDefaultValue(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - useEffect(() => { - if (prevItems === props.items) { - return; - } - setDefaultValue(); - }, [prevItems, props.items, setDefaultValue]); - - if (props.isDisabled) { - return ( - - {Boolean(props.label) && ( - - {props.label} - - )} - {props.value} - {Boolean(props.hintText) && {props.hintText}} - - ); - } - - return ( - <> - - {props.label && ( - - {props.label} - - )} - ({...item, color: themeColors.pickerOptionsTextColor}))} - style={props.size === 'normal' ? styles.picker(props.isDisabled, props.backgroundColor) : styles.pickerSmall(props.backgroundColor)} - useNativeAndroidPickerStyle={false} - placeholder={placeholder} - value={props.value} - // @ts-expect-error - Icon={() => props.icon(props.size)} - disabled={props.isDisabled} - fixAndroidTouchableBug - onOpen={enableHighlight} - onClose={disableHighlight} - textInputProps={{ - allowFontScaling: false, - }} - pickerProps={{ - ref: pickerRef, - onFocus: enableHighlight, - onBlur: () => { - disableHighlight(); - props.onBlur(); - }, - // @ts-expect-error - ...props.additionalPickerEvents(enableHighlight, (value, index) => { - onInputChange(value, index); - disableHighlight(); - }), - }} - scrollViewRef={context?.scrollViewRef} - scrollViewContentOffsetY={context?.contentOffsetY} - /> - - - {Boolean(props.hintText) && {props.hintText}} - - ); -} - -BasePicker.defaultProps = defaultProps; - -export default React.forwardRef((props, ref) => ( - -)); diff --git a/src/components/Picker/index.tsx b/src/components/Picker/index.js similarity index 100% rename from src/components/Picker/index.tsx rename to src/components/Picker/index.js diff --git a/src/components/Picker/index.native.tsx b/src/components/Picker/index.native.js similarity index 100% rename from src/components/Picker/index.native.tsx rename to src/components/Picker/index.native.js From e64c6903899b23db2a5e5fb3cef70315780b48fb Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 16 Jun 2023 11:21:28 +0200 Subject: [PATCH 037/187] Revert ScrollViewWithContext changes --- src/components/ScrollViewWithContext.js | 68 ++++++++++++++++++++++++ src/components/ScrollViewWithContext.tsx | 64 ---------------------- 2 files changed, 68 insertions(+), 64 deletions(-) create mode 100644 src/components/ScrollViewWithContext.js delete mode 100644 src/components/ScrollViewWithContext.tsx diff --git a/src/components/ScrollViewWithContext.js b/src/components/ScrollViewWithContext.js new file mode 100644 index 000000000000..c49dbffe006b --- /dev/null +++ b/src/components/ScrollViewWithContext.js @@ -0,0 +1,68 @@ +import React from 'react'; +import {ScrollView} from 'react-native'; + +const MIN_SMOOTH_SCROLL_EVENT_THROTTLE = 16; + +const ScrollContext = React.createContext(); + +// eslint-disable-next-line react/forbid-foreign-prop-types +const propTypes = ScrollView.propTypes; + +/* + * is a wrapper around that provides a ref to the . + * can be used as a direct replacement for + * if it contains one or more / components. + * Using this wrapper will automatically handle scrolling to the picker's + * when the picker modal is opened + */ +class ScrollViewWithContext extends React.Component { + constructor(props) { + super(props); + + this.state = { + contentOffsetY: 0, + }; + this.scrollViewRef = this.props.innerRef || React.createRef(null); + + this.setContextScrollPosition = this.setContextScrollPosition.bind(this); + } + + setContextScrollPosition(event) { + if (this.props.onScroll) { + this.props.onScroll(event); + } + this.setState({contentOffsetY: event.nativeEvent.contentOffset.y}); + } + + render() { + return ( + + + {this.props.children} + + + ); + } +} +ScrollViewWithContext.propTypes = propTypes; + +export default React.forwardRef((props, ref) => ( + +)); + +export {ScrollContext}; diff --git a/src/components/ScrollViewWithContext.tsx b/src/components/ScrollViewWithContext.tsx deleted file mode 100644 index d54e18ca9a94..000000000000 --- a/src/components/ScrollViewWithContext.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, {ForwardedRef, Ref, useRef, useState} from 'react'; -import {NativeScrollEvent, NativeSyntheticEvent, ScrollView, ScrollViewProps} from 'react-native'; - -type ScrollContextType = { - scrollViewRef: Ref; - contentOffsetY: number; -}; - -type Props = ScrollViewProps & { - innerRef: ForwardedRef; -}; - -const MIN_SMOOTH_SCROLL_EVENT_THROTTLE = 16; - -const ScrollContext = React.createContext(undefined); - -/* - * is a wrapper around that provides a ref to the . - * can be used as a direct replacement for - * if it contains one or more / components. - * Using this wrapper will automatically handle scrolling to the picker's - * when the picker modal is opened - */ -function ScrollViewWithContext(props: Props) { - const [contentOffsetY, setContentOffsetY] = useState(0); - const ref = useRef(null); - const scrollViewRef = props.innerRef ?? ref; - - const setContextScrollPosition = (event: NativeSyntheticEvent) => { - if (props.onScroll) { - props.onScroll(event); - } - setContentOffsetY(event.nativeEvent.contentOffset.y); - }; - - return ( - - - {props.children} - - - ); -} - -export default React.forwardRef((props, ref) => ( - -)); - -export {ScrollContext}; From acd3098bd2dea6281ad6c5c8e8866197c6dc1a20 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 16 Jun 2023 11:21:56 +0200 Subject: [PATCH 038/187] Remove usePrevious --- src/hooks/usePrevious.ts | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/hooks/usePrevious.ts diff --git a/src/hooks/usePrevious.ts b/src/hooks/usePrevious.ts deleted file mode 100644 index 9912cae62f9e..000000000000 --- a/src/hooks/usePrevious.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {useEffect, useRef} from 'react'; - -const usePrevious = (value: T): T | undefined => { - const ref = useRef(); - - useEffect(() => { - ref.current = value; - }); - - return ref.current; -}; - -export default usePrevious; From 9e5196f7f8abc0d93f53509a925fd88af89f0fca Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 16 Jun 2023 11:22:27 +0200 Subject: [PATCH 039/187] Add endline to eslintignore --- .eslintignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintignore b/.eslintignore index ff383f7e88d1..d3e8a6328bc4 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,3 @@ **/node_modules/* **/dist/* -.github/actions/**/index.js" \ No newline at end of file +.github/actions/**/index.js" From d1298a7b31374befa23eeb08f9c396521c623305 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 16 Jun 2023 11:23:54 +0200 Subject: [PATCH 040/187] Revert remove of save dependency --- package-lock.json | 170 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 1 + 2 files changed, 165 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index e25cafbb0978..b32670f735fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -96,6 +96,7 @@ "react-pdf": "5.7.2", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", + "save": "^2.4.0", "semver": "^7.3.8", "shim-keyboard-event-key": "^1.0.3", "underscore": "^1.13.1" @@ -22604,7 +22605,6 @@ }, "node_modules/duplexer": { "version": "0.1.2", - "dev": true, "license": "MIT" }, "node_modules/duplexify": { @@ -24624,6 +24624,20 @@ "node": ">= 0.6" } }, + "node_modules/event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dependencies": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "license": "MIT", @@ -25965,6 +25979,11 @@ "node": ">= 0.6" } }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" + }, "node_modules/from2": { "version": "2.3.0", "dev": true, @@ -31872,6 +31891,11 @@ "version": "4.17.21", "license": "MIT" }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "license": "MIT" @@ -32482,6 +32506,11 @@ "dev": true, "license": "MIT" }, + "node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" + }, "node_modules/map-visit": { "version": "1.0.0", "license": "MIT", @@ -34046,6 +34075,11 @@ "node": ">=4" } }, + "node_modules/mingo": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/mingo/-/mingo-1.3.3.tgz", + "integrity": "sha512-Y4wGTD/M7AMqF8QxKaBGps+axq/Z48hdtRAeiKtInkEXMLzUWUwT0OPDzrB26xrav9GF1AOYJfwVWPcLwnkgTA==" + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "license": "ISC" @@ -35769,6 +35803,14 @@ "node": ">=8" } }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dependencies": { + "through": "~2.3" + } + }, "node_modules/pbkdf2": { "version": "3.1.2", "license": "MIT", @@ -39276,6 +39318,25 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "node_modules/save": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/save/-/save-2.4.0.tgz", + "integrity": "sha512-wd5L2uVnsKYkIUaK6i8Ie66IOHaI328gMF0MPuTJtYOjXgUolC33LSIk7Qr8WVA55QHaGwfiVS8a7EFIeGOR3w==", + "dependencies": { + "async": "^2.6.2", + "event-stream": "^4.0.1", + "lodash.assign": "^4.2.0", + "mingo": "1" + } + }, + "node_modules/save/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, "node_modules/sax": { "version": "1.2.4", "license": "ISC" @@ -40218,6 +40279,17 @@ "node": ">= 6" } }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/split-on-first": { "version": "1.1.0", "license": "MIT", @@ -40453,6 +40525,15 @@ "node": ">= 0.10.0" } }, + "node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, "node_modules/stream-each": { "version": "1.2.3", "dev": true, @@ -41203,7 +41284,6 @@ }, "node_modules/through": { "version": "2.3.8", - "dev": true, "license": "MIT" }, "node_modules/through2": { @@ -58924,8 +59004,7 @@ "dev": true }, "duplexer": { - "version": "0.1.2", - "dev": true + "version": "0.1.2" }, "duplexify": { "version": "3.7.1", @@ -60259,6 +60338,20 @@ "etag": { "version": "1.8.1" }, + "event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "requires": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, "event-target-shim": { "version": "5.0.1" }, @@ -61144,6 +61237,11 @@ "fresh": { "version": "0.5.2" }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" + }, "from2": { "version": "2.3.0", "dev": true, @@ -64933,6 +65031,11 @@ "lodash": { "version": "4.17.21" }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, "lodash.debounce": { "version": "4.0.8" }, @@ -65373,6 +65476,11 @@ "version": "1.5.0", "dev": true }, + "map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" + }, "map-visit": { "version": "1.0.0", "requires": { @@ -66465,6 +66573,11 @@ "version": "1.0.1", "dev": true }, + "mingo": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/mingo/-/mingo-1.3.3.tgz", + "integrity": "sha512-Y4wGTD/M7AMqF8QxKaBGps+axq/Z48hdtRAeiKtInkEXMLzUWUwT0OPDzrB26xrav9GF1AOYJfwVWPcLwnkgTA==" + }, "minimalistic-assert": { "version": "1.0.1" }, @@ -67605,6 +67718,14 @@ "version": "4.0.0", "dev": true }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "requires": { + "through": "~2.3" + } + }, "pbkdf2": { "version": "3.1.2", "requires": { @@ -69893,6 +70014,27 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "save": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/save/-/save-2.4.0.tgz", + "integrity": "sha512-wd5L2uVnsKYkIUaK6i8Ie66IOHaI328gMF0MPuTJtYOjXgUolC33LSIk7Qr8WVA55QHaGwfiVS8a7EFIeGOR3w==", + "requires": { + "async": "^2.6.2", + "event-stream": "^4.0.1", + "lodash.assign": "^4.2.0", + "mingo": "1" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + } + } + }, "sax": { "version": "1.2.4" }, @@ -70563,6 +70705,14 @@ } } }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, "split-on-first": { "version": "1.1.0" }, @@ -70721,6 +70871,15 @@ "stream-buffers": { "version": "2.2.0" }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, "stream-each": { "version": "1.2.3", "dev": true, @@ -71216,8 +71375,7 @@ "dev": true }, "through": { - "version": "2.3.8", - "dev": true + "version": "2.3.8" }, "through2": { "version": "2.0.5", diff --git a/package.json b/package.json index 5d9df0c2da86..695138b9aa17 100644 --- a/package.json +++ b/package.json @@ -133,6 +133,7 @@ "react-pdf": "5.7.2", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", + "save": "^2.4.0", "semver": "^7.3.8", "shim-keyboard-event-key": "^1.0.3", "underscore": "^1.13.1" From 6dbae89e79b376a062f10dbd7f30e28a373f2744 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 16 Jun 2023 15:02:58 +0200 Subject: [PATCH 041/187] Fix package.json scripts to work with ts files --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 695138b9aa17..a5283fddce68 100644 --- a/package.json +++ b/package.json @@ -31,11 +31,11 @@ "test": "TZ=utc jest", "typecheck": "tsc", "lint": "eslint . --max-warnings=0 --cache --cache-location=node_modules/.cache/eslint", - "lint-changed": "eslint --fix $(git diff --diff-filter=AM --name-only main -- \"*.js\")", + "lint-changed": "eslint --fix $(git diff --diff-filter=AM --name-only main -- \"*.js\" \"*.ts\" \"*.tsx\")", "lint-watch": "npx eslint-watch --watch --changed", "shellcheck": "./scripts/shellCheck.sh", "prettier": "prettier --write .", - "prettier-watch": "onchange \"**/*.js\" -- prettier --write --ignore-unknown {{changed}}", + "prettier-watch": "onchange \"**/*.{js,ts,tsx}\" -- prettier --write --ignore-unknown {{changed}}", "print-version": "echo $npm_package_version", "storybook": "start-storybook -p 6006", "storybook-build": "build-storybook -o dist/docs", From 8765e6890dc73ffc5329abb4b22adf047199d024 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 16 Jun 2023 17:36:26 +0200 Subject: [PATCH 042/187] Update react types package --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index b32670f735fa..f508099c4fb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -146,7 +146,7 @@ "@types/prettier": "^2.7.3", "@types/prop-types": "^15.7.5", "@types/pusher-js": "5.1.0", - "@types/react": "^18.2.8", + "@types/react": "^18.2.12", "@types/react-collapse": "^5.0.1", "@types/react-dom": "18.2.4", "@types/react-native": "^0.71.7", diff --git a/package.json b/package.json index a5283fddce68..40fab6abd282 100644 --- a/package.json +++ b/package.json @@ -183,7 +183,7 @@ "@types/prettier": "^2.7.3", "@types/prop-types": "^15.7.5", "@types/pusher-js": "5.1.0", - "@types/react": "^18.2.8", + "@types/react": "^18.2.12", "@types/react-collapse": "^5.0.1", "@types/react-dom": "18.2.4", "@types/react-native": "^0.71.7", From fb467c04250be7a0c3ffa127904187c1e8b2e2ec Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 19 Jun 2023 10:23:06 +0200 Subject: [PATCH 043/187] Remove unused and unnecessary deps --- package-lock.json | 118 ++++------------------------------------------ package.json | 11 ----- 2 files changed, 10 insertions(+), 119 deletions(-) diff --git a/package-lock.json b/package-lock.json index f508099c4fb1..a885f51d1cf1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,32 +130,21 @@ "@svgr/webpack": "^6.0.0", "@testing-library/jest-native": "5.4.1", "@testing-library/react-native": "11.5.1", - "@types/babel__core": "^7.20.1", - "@types/babel__preset-env": "^7.9.2", "@types/concurrently": "^7.0.0", - "@types/copy-webpack-plugin": "^6.4.3", - "@types/eslint": "^7.29.0", - "@types/eslint-config-prettier": "^6.11.0", - "@types/fbjs": "^3.0.4", "@types/jest": "^29.5.2", "@types/jest-when": "^3.5.2", "@types/js-yaml": "^4.0.5", "@types/lodash": "4.14.195", - "@types/metro-config": "^0.76.3", "@types/mock-fs": "^4.13.1", - "@types/prettier": "^2.7.3", - "@types/prop-types": "^15.7.5", "@types/pusher-js": "5.1.0", "@types/react": "^18.2.12", "@types/react-collapse": "^5.0.1", "@types/react-dom": "18.2.4", - "@types/react-native": "^0.71.7", "@types/react-pdf": "5.7.2", "@types/react-test-renderer": "^18.0.0", "@types/semver": "^7.5.0", "@types/setimmediate": "^1.0.2", "@types/underscore": "^1.11.5", - "@types/webpack-bundle-analyzer": "^4.6.0", "@typescript-eslint/eslint-plugin": "^5.59.8", "@typescript-eslint/parser": "^5.59.8", "@vercel/ncc": "^0.27.0", @@ -15743,11 +15732,6 @@ "@babel/types": "^7.0.0" } }, - "node_modules/@types/babel__preset-env": { - "version": "7.9.2", - "dev": true, - "license": "MIT" - }, "node_modules/@types/babel__template": { "version": "7.4.1", "license": "MIT", @@ -15816,14 +15800,6 @@ "@types/node": "*" } }, - "node_modules/@types/copy-webpack-plugin": { - "version": "6.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/webpack": "^4" - } - }, "node_modules/@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -15845,11 +15821,6 @@ "@types/json-schema": "*" } }, - "node_modules/@types/eslint-config-prettier": { - "version": "6.11.0", - "dev": true, - "license": "MIT" - }, "node_modules/@types/eslint-scope": { "version": "3.7.4", "license": "MIT", @@ -15883,14 +15854,6 @@ "@types/range-parser": "*" } }, - "node_modules/@types/fbjs": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/jsdom": "*" - } - }, "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -16057,15 +16020,6 @@ "@types/unist": "*" } }, - "node_modules/@types/metro-config": { - "version": "0.76.3", - "deprecated": "This is a stub types definition. metro-config provides its own type definitions, so you do not need this installed.", - "dev": true, - "license": "MIT", - "dependencies": { - "metro-config": "*" - } - }, "node_modules/@types/mime": { "version": "3.0.1", "dev": true, @@ -16204,6 +16158,7 @@ "node_modules/@types/react-native": { "version": "0.71.7", "license": "MIT", + "peer": true, "dependencies": { "@types/react": "*" } @@ -16350,24 +16305,6 @@ "source-map": "^0.6.0" } }, - "node_modules/@types/webpack-bundle-analyzer": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "tapable": "^2.2.0", - "webpack": "^5" - } - }, - "node_modules/@types/webpack-bundle-analyzer/node_modules/tapable": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@types/webpack-env": { "version": "1.18.0", "dev": true, @@ -19264,6 +19201,7 @@ }, "node_modules/bindings": { "version": "1.5.0", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -25483,6 +25421,7 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", + "dev": true, "license": "MIT", "optional": true }, @@ -34361,6 +34300,7 @@ }, "node_modules/nan": { "version": "2.16.0", + "dev": true, "license": "MIT", "optional": true }, @@ -42567,6 +42507,7 @@ }, "node_modules/watchpack-chokidar2/node_modules/fsevents": { "version": "1.2.13", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -54314,10 +54255,6 @@ "@babel/types": "^7.0.0" } }, - "@types/babel__preset-env": { - "version": "7.9.2", - "dev": true - }, "@types/babel__template": { "version": "7.4.1", "requires": { @@ -54378,13 +54315,6 @@ "@types/node": "*" } }, - "@types/copy-webpack-plugin": { - "version": "6.4.3", - "dev": true, - "requires": { - "@types/webpack": "^4" - } - }, "@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -54404,10 +54334,6 @@ "@types/json-schema": "*" } }, - "@types/eslint-config-prettier": { - "version": "6.11.0", - "dev": true - }, "@types/eslint-scope": { "version": "3.7.4", "requires": { @@ -54437,13 +54363,6 @@ "@types/range-parser": "*" } }, - "@types/fbjs": { - "version": "3.0.4", - "dev": true, - "requires": { - "@types/jsdom": "*" - } - }, "@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -54580,13 +54499,6 @@ "@types/unist": "*" } }, - "@types/metro-config": { - "version": "0.76.3", - "dev": true, - "requires": { - "metro-config": "*" - } - }, "@types/mime": { "version": "3.0.1", "dev": true @@ -54705,6 +54617,7 @@ }, "@types/react-native": { "version": "0.71.7", + "peer": true, "requires": { "@types/react": "*" } @@ -54829,21 +54742,6 @@ "source-map": "^0.6.0" } }, - "@types/webpack-bundle-analyzer": { - "version": "4.6.0", - "dev": true, - "requires": { - "@types/node": "*", - "tapable": "^2.2.0", - "webpack": "^5" - }, - "dependencies": { - "tapable": { - "version": "2.2.1", - "dev": true - } - } - }, "@types/webpack-env": { "version": "1.18.0", "dev": true @@ -56762,6 +56660,7 @@ }, "bindings": { "version": "1.5.0", + "dev": true, "optional": true, "requires": { "file-uri-to-path": "1.0.0" @@ -60923,6 +60822,7 @@ }, "file-uri-to-path": { "version": "1.0.0", + "dev": true, "optional": true }, "filelist": { @@ -66770,6 +66670,7 @@ }, "nan": { "version": "2.16.0", + "dev": true, "optional": true }, "nanoid": { @@ -72219,6 +72120,7 @@ }, "fsevents": { "version": "1.2.13", + "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", diff --git a/package.json b/package.json index 40fab6abd282..e7854300f650 100644 --- a/package.json +++ b/package.json @@ -167,32 +167,21 @@ "@svgr/webpack": "^6.0.0", "@testing-library/jest-native": "5.4.1", "@testing-library/react-native": "11.5.1", - "@types/babel__core": "^7.20.1", - "@types/babel__preset-env": "^7.9.2", "@types/concurrently": "^7.0.0", - "@types/copy-webpack-plugin": "^6.4.3", - "@types/eslint": "^7.29.0", - "@types/eslint-config-prettier": "^6.11.0", - "@types/fbjs": "^3.0.4", "@types/jest": "^29.5.2", "@types/jest-when": "^3.5.2", "@types/js-yaml": "^4.0.5", "@types/lodash": "4.14.195", - "@types/metro-config": "^0.76.3", "@types/mock-fs": "^4.13.1", - "@types/prettier": "^2.7.3", - "@types/prop-types": "^15.7.5", "@types/pusher-js": "5.1.0", "@types/react": "^18.2.12", "@types/react-collapse": "^5.0.1", "@types/react-dom": "18.2.4", - "@types/react-native": "^0.71.7", "@types/react-pdf": "5.7.2", "@types/react-test-renderer": "^18.0.0", "@types/semver": "^7.5.0", "@types/setimmediate": "^1.0.2", "@types/underscore": "^1.11.5", - "@types/webpack-bundle-analyzer": "^4.6.0", "@typescript-eslint/eslint-plugin": "^5.59.8", "@typescript-eslint/parser": "^5.59.8", "@vercel/ncc": "^0.27.0", From bc150f3b57fb609616837de059200ed953ffb6c5 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 19 Jun 2023 10:46:09 +0200 Subject: [PATCH 044/187] Improve png and jpg global decratations --- config/declarations.d.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/config/declarations.d.ts b/config/declarations.d.ts index ff99f2bc2be8..0e32eb6f7457 100644 --- a/config/declarations.d.ts +++ b/config/declarations.d.ts @@ -1,5 +1,11 @@ -declare module '*.png'; -declare module '*.jpg'; +declare module '*.png' { + const value: import('react-native').ImageSourcePropType; + export default value; +} +declare module '*.jpg' { + const value: import('react-native').ImageSourcePropType; + export default value; +} declare module '*.svg' { import React from 'react'; import {SvgProps} from 'react-native-svg'; From a0ed3331831b64deba4ce0cf4cdc90421197e09e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 19 Jun 2023 10:49:36 +0200 Subject: [PATCH 045/187] Reorganize eslint rules into groups --- .eslintrc.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 4c6fbeb55506..b22bcbdf39d2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -76,18 +76,24 @@ module.exports = { project: './tsconfig.json', }, rules: { - 'react/static-property-placement': 'off', - 'import/no-extraneous-dependencies': 'off', - 'rulesdir/onyx-props-must-have-default': 'off', '@typescript-eslint/no-unsafe-argument': 'off', '@typescript-eslint/no-unsafe-call': 'off', '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-enum-comparison': 'error', + '@typescript-eslint/prefer-enum-initializers': 'error', '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/switch-exhaustiveness-check': 'error', '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + 'react/static-property-placement': 'off', + 'react/default-props-match-prop-types': 'off', + 'react/require-default-props': 'off', 'es/no-nullish-coalescing-operators': 'off', 'es/no-optional-chaining': 'off', + 'valid-jsdoc': 'off', + 'import/no-extraneous-dependencies': 'off', + 'rulesdir/onyx-props-must-have-default': 'off', 'no-restricted-syntax': [ 'error', { @@ -116,12 +122,6 @@ module.exports = { ], }, ], - 'valid-jsdoc': 'off', - 'react/default-props-match-prop-types': 'off', - 'react/require-default-props': 'off', - '@typescript-eslint/switch-exhaustiveness-check': 'error', - '@typescript-eslint/prefer-enum-initializers': 'error', - '@typescript-eslint/no-unsafe-enum-comparison': 'error', }, }, ], From 5d4c44a5175418e9ce732bbc55e4e885af00fa28 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 19 Jun 2023 10:52:49 +0200 Subject: [PATCH 046/187] Remove static-property-placement rule --- .eslintrc.js | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index b22bcbdf39d2..1ea73230431f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -86,7 +86,6 @@ module.exports = { '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/switch-exhaustiveness-check': 'error', '@typescript-eslint/consistent-type-definitions': ['error', 'type'], - 'react/static-property-placement': 'off', 'react/default-props-match-prop-types': 'off', 'react/require-default-props': 'off', 'es/no-nullish-coalescing-operators': 'off', From e93e640e52ad428325b07d2ece6dbeeb09382622 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 19 Jun 2023 11:02:55 +0200 Subject: [PATCH 047/187] Add a comment to remove rules around any after migration is done --- .eslintrc.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index 1ea73230431f..df747c286de4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -76,9 +76,12 @@ module.exports = { project: './tsconfig.json', }, rules: { + // TODO: Remove the following rules after TypeScript migration is complete. '@typescript-eslint/no-unsafe-argument': 'off', '@typescript-eslint/no-unsafe-call': 'off', '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-enum-comparison': 'error', '@typescript-eslint/prefer-enum-initializers': 'error', '@typescript-eslint/no-var-requires': 'off', From 0cbe8fe6704476dec5ff78fd1c5b1526c5459723 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 19 Jun 2023 11:25:17 +0200 Subject: [PATCH 048/187] Clean TS plugins and extends to not repeat global options in eslintrc --- .eslintrc.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index df747c286de4..cfc9b67b6789 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -61,16 +61,8 @@ module.exports = { }, { files: ['*.ts', '*.tsx'], - extends: [ - 'expensify', - 'airbnb-typescript', - 'plugin:storybook/recommended', - 'plugin:react-hooks/recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - 'prettier', - ], - plugins: ['@typescript-eslint', 'react-hooks'], + extends: ['airbnb-typescript', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'prettier'], + plugins: ['@typescript-eslint'], parser: '@typescript-eslint/parser', parserOptions: { project: './tsconfig.json', From 8e55e5690485904ab4a4f4dae9245c881b2b4353 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 20 Jun 2023 15:57:36 +0200 Subject: [PATCH 049/187] Rename declarations.d.ts file to global.d.ts --- config/{declarations.d.ts => global.d.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename config/{declarations.d.ts => global.d.ts} (100%) diff --git a/config/declarations.d.ts b/config/global.d.ts similarity index 100% rename from config/declarations.d.ts rename to config/global.d.ts From e2422f2e1231be859920fe7f0b19f99bd795974a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 20 Jun 2023 16:00:40 +0200 Subject: [PATCH 050/187] Standarize array type with eslint rule --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index cfc9b67b6789..223ae42327cb 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -74,6 +74,7 @@ module.exports = { '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/array-type': ['error', {default: 'array-simple'}], '@typescript-eslint/no-unsafe-enum-comparison': 'error', '@typescript-eslint/prefer-enum-initializers': 'error', '@typescript-eslint/no-var-requires': 'off', From caef64c0eea7fc9132df78d20161f0b79aa7bad8 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 26 Jun 2023 12:19:35 +0200 Subject: [PATCH 051/187] Add jsdoc no types rule (only for ts files) --- .eslintrc.js | 3 +- package-lock.json | 171 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 1 + 3 files changed, 168 insertions(+), 7 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 223ae42327cb..37b9ba1b6490 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -62,7 +62,7 @@ module.exports = { { files: ['*.ts', '*.tsx'], extends: ['airbnb-typescript', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'prettier'], - plugins: ['@typescript-eslint'], + plugins: ['@typescript-eslint', 'jsdoc'], parser: '@typescript-eslint/parser', parserOptions: { project: './tsconfig.json', @@ -87,6 +87,7 @@ module.exports = { 'es/no-nullish-coalescing-operators': 'off', 'es/no-optional-chaining': 'off', 'valid-jsdoc': 'off', + 'jsdoc/no-types': 'error', 'import/no-extraneous-dependencies': 'off', 'rulesdir/onyx-props-must-have-default': 'off', 'no-restricted-syntax': [ diff --git a/package-lock.json b/package-lock.json index a885f51d1cf1..706b1a018275 100644 --- a/package-lock.json +++ b/package-lock.json @@ -170,6 +170,7 @@ "eslint-config-expensify": "^2.0.38", "eslint-config-prettier": "^8.8.0", "eslint-plugin-jest": "^24.1.0", + "eslint-plugin-jsdoc": "^46.2.6", "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-storybook": "^0.5.13", @@ -2811,6 +2812,20 @@ "node": ">= 10" } }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.39.4", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.39.4.tgz", + "integrity": "sha512-Jvw915fjqQct445+yron7Dufix9A+m9j1fCJYlCo1FWlRvTxa3pjJelxdSTdaLWcTwRU6vbL+NYjO4YuNIS5Qg==", + "dev": true, + "dependencies": { + "comment-parser": "1.3.1", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "dev": true, @@ -17766,6 +17781,15 @@ "dev": true, "license": "ISC" }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/are-we-there-yet": { "version": "2.0.0", "dev": true, @@ -19791,6 +19815,18 @@ "node": ">=8" } }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/builtin-status-codes": { "version": "3.0.0", "license": "MIT" @@ -20667,6 +20703,15 @@ "node": ">= 6" } }, + "node_modules/comment-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", @@ -24042,6 +24087,29 @@ } } }, + "node_modules/eslint-plugin-jsdoc": { + "version": "46.2.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.2.6.tgz", + "integrity": "sha512-zIaK3zbSrKuH12bP+SPybPgcHSM6MFzh3HFeaODzmsF1N8C1l8dzJ22cW1aq4g0+nayU1VMjmNf7hg0dpShLrA==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.39.4", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.3.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.5.0", + "is-builtin-module": "^3.2.1", + "semver": "^7.5.1", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.6.1", "dev": true, @@ -24508,9 +24576,10 @@ } }, "node_modules/esquery": { - "version": "1.4.0", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -27730,6 +27799,21 @@ "node": ">=4" } }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-callable": { "version": "1.2.4", "license": "MIT", @@ -31386,6 +31470,15 @@ "node": ">=0.10.0" } }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/jsdom": { "version": "20.0.3", "dev": true, @@ -39365,8 +39458,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "license": "ISC", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -45505,6 +45599,17 @@ } } }, + "@es-joy/jsdoccomment": { + "version": "0.39.4", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.39.4.tgz", + "integrity": "sha512-Jvw915fjqQct445+yron7Dufix9A+m9j1fCJYlCo1FWlRvTxa3pjJelxdSTdaLWcTwRU6vbL+NYjO4YuNIS5Qg==", + "dev": true, + "requires": { + "comment-parser": "1.3.1", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" + } + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "dev": true, @@ -55685,6 +55790,12 @@ "version": "2.0.0", "dev": true }, + "are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true + }, "are-we-there-yet": { "version": "2.0.0", "dev": true, @@ -57082,6 +57193,12 @@ "sax": "^1.2.4" } }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, "builtin-status-codes": { "version": "3.0.0" }, @@ -57642,6 +57759,12 @@ "version": "6.2.1", "dev": true }, + "comment-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "dev": true + }, "common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", @@ -60033,6 +60156,23 @@ "@typescript-eslint/experimental-utils": "^4.0.1" } }, + "eslint-plugin-jsdoc": { + "version": "46.2.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.2.6.tgz", + "integrity": "sha512-zIaK3zbSrKuH12bP+SPybPgcHSM6MFzh3HFeaODzmsF1N8C1l8dzJ22cW1aq4g0+nayU1VMjmNf7hg0dpShLrA==", + "dev": true, + "requires": { + "@es-joy/jsdoccomment": "~0.39.4", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.3.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.5.0", + "is-builtin-module": "^3.2.1", + "semver": "^7.5.1", + "spdx-expression-parse": "^3.0.1" + } + }, "eslint-plugin-jsx-a11y": { "version": "6.6.1", "dev": true, @@ -60207,7 +60347,9 @@ "version": "4.0.1" }, "esquery": { - "version": "1.4.0", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -62270,6 +62412,15 @@ "version": "2.0.5", "dev": true }, + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, "is-callable": { "version": "1.2.4" }, @@ -64636,6 +64787,12 @@ } } }, + "jsdoc-type-pratt-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "dev": true + }, "jsdom": { "version": "20.0.3", "dev": true, @@ -69996,7 +70153,9 @@ } }, "semver": { - "version": "7.3.8", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "requires": { "lru-cache": "^6.0.0" } diff --git a/package.json b/package.json index e7854300f650..291133cf432d 100644 --- a/package.json +++ b/package.json @@ -207,6 +207,7 @@ "eslint-config-expensify": "^2.0.38", "eslint-config-prettier": "^8.8.0", "eslint-plugin-jest": "^24.1.0", + "eslint-plugin-jsdoc": "^46.2.6", "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-storybook": "^0.5.13", From 9be17fd1561c0da3f99f5eab549e571577b9f67a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 26 Jun 2023 13:32:14 +0200 Subject: [PATCH 052/187] Add naming-convention eslint rule --- .eslintrc.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index 37b9ba1b6490..176122d37c4f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -74,6 +74,25 @@ module.exports = { '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'variable', + format: ['camelCase', 'UPPER_CASE', 'PascalCase'], + }, + { + selector: ['property', 'function'], + format: ['camelCase', 'PascalCase'], + }, + { + selector: ['enumMember', 'typeLike', 'typeParameter'], + format: ['PascalCase'], + }, + { + selector: ['parameter', 'method'], + format: ['camelCase'], + }, + ], '@typescript-eslint/array-type': ['error', {default: 'array-simple'}], '@typescript-eslint/no-unsafe-enum-comparison': 'error', '@typescript-eslint/prefer-enum-initializers': 'error', From 6e0a38d4a2a017cb5c775613961f58d80185427f Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 27 Jun 2023 15:18:39 +0200 Subject: [PATCH 053/187] Remove unused eslint rules --- .eslintrc.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 176122d37c4f..c5f6e59efa78 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -101,8 +101,6 @@ module.exports = { '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/switch-exhaustiveness-check': 'error', '@typescript-eslint/consistent-type-definitions': ['error', 'type'], - 'react/default-props-match-prop-types': 'off', - 'react/require-default-props': 'off', 'es/no-nullish-coalescing-operators': 'off', 'es/no-optional-chaining': 'off', 'valid-jsdoc': 'off', From 06c8c9bf83cbcf454bd5a92e6937c1dc7020528e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 27 Jun 2023 15:19:00 +0200 Subject: [PATCH 054/187] Improve naming-convention eslint rule --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index c5f6e59efa78..e8f3c79bb5b5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -85,7 +85,7 @@ module.exports = { format: ['camelCase', 'PascalCase'], }, { - selector: ['enumMember', 'typeLike', 'typeParameter'], + selector: ['typeLike', 'enumMember'], format: ['PascalCase'], }, { From f725a0570258c197b864328fc18ec670ed27693d Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 27 Jun 2023 17:27:20 +0200 Subject: [PATCH 055/187] Fix restricted imports --- .eslintrc.js | 44 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index e8f3c79bb5b5..60e40591557f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,3 +1,13 @@ +const reactNativeRestrictedImport = { + name: 'react-native', + importNames: ['useWindowDimensions', 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', 'StatusBar'], + message: [ + "For 'useWindowDimensions', please use 'src/hooks/useWindowDimensions' instead.", + "For 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', please use 'src/components/Pressable' instead.", + "For 'StatusBar', please use 'src/libs/StatusBar' instead.", + ].join('\n'), +}; + module.exports = { extends: ['expensify', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'prettier'], plugins: ['react-hooks'], @@ -10,33 +20,6 @@ module.exports = { __DEV__: 'readonly', }, overrides: [ - { - files: ['*.js', '*.jsx', '*.ts', '*.tsx'], - rules: { - 'no-restricted-imports': [ - 'error', - { - paths: [ - { - name: 'react-native', - importNames: ['useWindowDimensions'], - message: 'Please use useWindowDimensions from src/hooks/useWindowDimensions instead.', - }, - { - name: 'react-native', - importNames: ['TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight'], - message: 'Please use PressableWithFeedback and/or PressableWithoutFeedback from src/components/Pressable instead.', - }, - { - name: 'react-native', - importNames: ['StatusBar'], - message: 'Please use StatusBar from src/libs/StatusBar instead', - }, - ], - }, - ], - }, - }, { files: ['*.js', '*.jsx'], settings: { @@ -57,6 +40,12 @@ module.exports = { tsx: 'never', }, ], + 'no-restricted-imports': [ + 'error', + { + paths: [reactNativeRestrictedImport], + }, + ], }, }, { @@ -118,6 +107,7 @@ module.exports = { 'error', { paths: [ + reactNativeRestrictedImport, { name: 'lodash/get', message: 'Please use optional chaining and nullish coalescing instead.', From 54066d3e2f87ac5dd956b60952e42e08756dc93c Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 27 Jun 2023 17:36:27 +0200 Subject: [PATCH 056/187] Add todo to metro.config.js --- metro.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/metro.config.js b/metro.config.js index e6796f631f37..e7601902a152 100644 --- a/metro.config.js +++ b/metro.config.js @@ -25,6 +25,7 @@ module.exports = (() => { if (isUsingMockAPI && moduleName.includes('/API')) { return { ...resolution, + // TODO: Change API.mock.js extension once it is migrated to TypeScript filePath: resolution.filePath.replace(/src\/libs\/API.js/, 'src/libs/E2E/API.mock.js'), }; } From 0fb0b5dab85825554c18e41b414de3f8644f0a97 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 28 Jun 2023 11:13:06 +0200 Subject: [PATCH 057/187] Move global.d.ts to src --- {config => src}/global.d.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {config => src}/global.d.ts (100%) diff --git a/config/global.d.ts b/src/global.d.ts similarity index 100% rename from config/global.d.ts rename to src/global.d.ts From 099fe598cec996f1f7dd138535946a81bb557907 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 28 Jun 2023 11:21:47 +0200 Subject: [PATCH 058/187] Restrict some of react-native-gesture-handler imports --- .eslintrc.js | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 60e40591557f..e4afe13c0c47 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,12 +1,19 @@ -const reactNativeRestrictedImport = { - name: 'react-native', - importNames: ['useWindowDimensions', 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', 'StatusBar'], - message: [ - "For 'useWindowDimensions', please use 'src/hooks/useWindowDimensions' instead.", - "For 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', please use 'src/components/Pressable' instead.", - "For 'StatusBar', please use 'src/libs/StatusBar' instead.", - ].join('\n'), -}; +const globalRestrictedImport = [ + { + name: 'react-native', + importNames: ['useWindowDimensions', 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', 'StatusBar'], + message: [ + "For 'useWindowDimensions', please use 'src/hooks/useWindowDimensions' instead.", + "For 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', please use 'src/components/Pressable' instead.", + "For 'StatusBar', please use 'src/libs/StatusBar' instead.", + ].join('\n'), + }, + { + name: 'react-native-gesture-handler', + importNames: ['TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableHighlight'], + message: "Please use 'PressableWithFeedback' and/or 'PressableWithoutFeedback' from 'src/components/Pressable' instead.", + }, +]; module.exports = { extends: ['expensify', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'prettier'], @@ -43,7 +50,7 @@ module.exports = { 'no-restricted-imports': [ 'error', { - paths: [reactNativeRestrictedImport], + paths: globalRestrictedImport, }, ], }, @@ -107,7 +114,7 @@ module.exports = { 'error', { paths: [ - reactNativeRestrictedImport, + ...globalRestrictedImport, { name: 'lodash/get', message: 'Please use optional chaining and nullish coalescing instead.', From d0180eb2fcc7a428a5a9c9e5176a79b84d01a61f Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 28 Jun 2023 11:24:06 +0200 Subject: [PATCH 059/187] Add TouchableNativeFeedback to restrict array --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index e4afe13c0c47..408b7d02f850 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -10,7 +10,7 @@ const globalRestrictedImport = [ }, { name: 'react-native-gesture-handler', - importNames: ['TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableHighlight'], + importNames: ['TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight'], message: "Please use 'PressableWithFeedback' and/or 'PressableWithoutFeedback' from 'src/components/Pressable' instead.", }, ]; From f9d92dd6bc86f3783f9530eb98835f15753f9c6a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 28 Jun 2023 18:05:49 +0200 Subject: [PATCH 060/187] Enable constant properties in naming-convention eslint rule --- .eslintrc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 408b7d02f850..f3b3e8b3d7fc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -73,11 +73,11 @@ module.exports = { '@typescript-eslint/naming-convention': [ 'error', { - selector: 'variable', + selector: ['variable', 'property'], format: ['camelCase', 'UPPER_CASE', 'PascalCase'], }, { - selector: ['property', 'function'], + selector: 'function', format: ['camelCase', 'PascalCase'], }, { From 72b2c786f4409d7ffa18668b2edf4307b9b25cf2 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 29 Jun 2023 10:15:20 +0200 Subject: [PATCH 061/187] Make error message more specific which component from Pressable to use --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index f3b3e8b3d7fc..6f367e9c6747 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,7 @@ const globalRestrictedImport = [ importNames: ['useWindowDimensions', 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', 'StatusBar'], message: [ "For 'useWindowDimensions', please use 'src/hooks/useWindowDimensions' instead.", - "For 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', please use 'src/components/Pressable' instead.", + "For 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', please use 'PressableWithFeedback' and/or 'PressableWithoutFeedback' from 'src/components/Pressable' instead.", "For 'StatusBar', please use 'src/libs/StatusBar' instead.", ].join('\n'), }, From 466505cac278c390d690d4c02b8abe8d748c61f9 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 29 Jun 2023 15:09:48 +0200 Subject: [PATCH 062/187] Fix desktop webpack configuration --- config/webpack/webpack.desktop.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/webpack/webpack.desktop.js b/config/webpack/webpack.desktop.js index 891bb8829677..9c4ded572804 100644 --- a/config/webpack/webpack.desktop.js +++ b/config/webpack/webpack.desktop.js @@ -49,6 +49,11 @@ module.exports = (env) => { }, module: { rules: [ + { + test: /\.tsx?$/, + loader: 'babel-loader', + exclude: /node_modules/, + }, { test: /react-native-onyx/, use: { From 7d5da15d203c4b1c644669c79368e700acc5ab17 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 3 Jul 2023 17:18:22 +0200 Subject: [PATCH 063/187] Ban underscore entirely --- .eslintrc.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 6f367e9c6747..5c575e86bef3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -126,8 +126,7 @@ module.exports = { }, { name: 'underscore', - importNames: ['get'], - message: 'Please use optional chaining and nullish coalescing instead.', + message: 'Please use corresponding method from lodash instead', }, ], }, From 6f6866ab21d6e073657f3ac9dd32a2c9a3ec0c53 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 3 Jul 2023 17:19:10 +0200 Subject: [PATCH 064/187] Ban object type --- .eslintrc.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index 5c575e86bef3..16970e8f2d6a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -89,6 +89,15 @@ module.exports = { format: ['camelCase'], }, ], + '@typescript-eslint/ban-types': [ + 'error', + { + types: { + object: "Use 'Record' instead.", + }, + extendDefaults: true, + }, + ], '@typescript-eslint/array-type': ['error', {default: 'array-simple'}], '@typescript-eslint/no-unsafe-enum-comparison': 'error', '@typescript-eslint/prefer-enum-initializers': 'error', From 069277872aa78a79cecd688f10968cfa09b0d30f Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 6 Jul 2023 13:12:40 +0200 Subject: [PATCH 065/187] Add eslint-plugin-you-dont-need-lodash-underscore package andd disable prefer-underscore-method --- .eslintrc.js | 11 +++++++++-- package-lock.json | 34 ++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 16970e8f2d6a..7339d1805c02 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -57,8 +57,14 @@ module.exports = { }, { files: ['*.ts', '*.tsx'], - extends: ['airbnb-typescript', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'prettier'], - plugins: ['@typescript-eslint', 'jsdoc'], + extends: [ + 'airbnb-typescript', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'plugin:you-dont-need-lodash-underscore/compatible', + 'prettier', + ], + plugins: ['@typescript-eslint', 'jsdoc', 'you-dont-need-lodash-underscore'], parser: '@typescript-eslint/parser', parserOptions: { project: './tsconfig.json', @@ -112,6 +118,7 @@ module.exports = { 'jsdoc/no-types': 'error', 'import/no-extraneous-dependencies': 'off', 'rulesdir/onyx-props-must-have-default': 'off', + 'rulesdir/prefer-underscore-method': 'off', 'no-restricted-syntax': [ 'error', { diff --git a/package-lock.json b/package-lock.json index 6b23cdd13ae1..cba6fba76470 100644 --- a/package-lock.json +++ b/package-lock.json @@ -174,6 +174,7 @@ "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-storybook": "^0.5.13", + "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0", "flipper-plugin-bridgespy-client": "^0.1.9", "html-webpack-plugin": "^5.5.0", "jest": "29.4.1", @@ -24568,6 +24569,18 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/eslint-plugin-you-dont-need-lodash-underscore": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.12.0.tgz", + "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==", + "dev": true, + "dependencies": { + "kebab-case": "^1.0.0" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "devOptional": true, @@ -31970,6 +31983,12 @@ "node": ">=8" } }, + "node_modules/kebab-case": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.2.tgz", + "integrity": "sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==", + "dev": true + }, "node_modules/keyv": { "version": "4.5.2", "dev": true, @@ -61021,6 +61040,15 @@ } } }, + "eslint-plugin-you-dont-need-lodash-underscore": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.12.0.tgz", + "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==", + "dev": true, + "requires": { + "kebab-case": "^1.0.0" + } + }, "eslint-scope": { "version": "5.1.1", "devOptional": true, @@ -65670,6 +65698,12 @@ "version": "3.1.0", "dev": true }, + "kebab-case": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.2.tgz", + "integrity": "sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==", + "dev": true + }, "keyv": { "version": "4.5.2", "dev": true, diff --git a/package.json b/package.json index 193b6d50e1a8..66c804ad3b6c 100644 --- a/package.json +++ b/package.json @@ -212,6 +212,7 @@ "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-storybook": "^0.5.13", + "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0", "flipper-plugin-bridgespy-client": "^0.1.9", "html-webpack-plugin": "^5.5.0", "jest": "29.4.1", From f3034a74646dc899e8042e168b73ca768f9ea7de Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 6 Jul 2023 15:06:43 +0200 Subject: [PATCH 066/187] Change plugin present to more stricteer version --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 7339d1805c02..1728e911f39c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -61,7 +61,7 @@ module.exports = { 'airbnb-typescript', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', - 'plugin:you-dont-need-lodash-underscore/compatible', + 'plugin:you-dont-need-lodash-underscore/all', 'prettier', ], plugins: ['@typescript-eslint', 'jsdoc', 'you-dont-need-lodash-underscore'], From b1bf1c93f004599d30f4ad200396230f5af61a57 Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Sat, 8 Jul 2023 10:50:18 +0100 Subject: [PATCH 067/187] Match LHN and Report Header Avatars --- src/components/AvatarWithDisplayName.js | 16 ++++++++-------- src/libs/ReportUtils.js | 4 ++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/components/AvatarWithDisplayName.js b/src/components/AvatarWithDisplayName.js index f63b51cacf99..1f2462374cf2 100644 --- a/src/components/AvatarWithDisplayName.js +++ b/src/components/AvatarWithDisplayName.js @@ -12,6 +12,7 @@ import themeColors from '../styles/themes/default'; import SubscriptAvatar from './SubscriptAvatar'; import * as ReportUtils from '../libs/ReportUtils'; import Avatar from './Avatar'; +import MultipleAvatars from './MultipleAvatars'; import DisplayNames from './DisplayNames'; import compose from '../libs/compose'; import * as OptionsListUtils from '../libs/OptionsListUtils'; @@ -60,12 +61,12 @@ function AvatarWithDisplayName(props) { const icons = ReportUtils.getIcons(props.report, props.personalDetails, props.policies); const ownerPersonalDetails = OptionsListUtils.getPersonalDetailsForAccountIDs([props.report.ownerAccountID], props.personalDetails); const displayNamesWithTooltips = ReportUtils.getDisplayNamesWithTooltips(_.values(ownerPersonalDetails), false); - const avatarContainerStyle = StyleUtils.getEmptyAvatarStyle(props.size) || styles.emptyAvatar; + const shouldShowSubscriptAvatar = ReportUtils.shouldReportShowSubscript(props.report); return ( {Boolean(props.report && title) && ( - {isExpenseReport ? ( + {shouldShowSubscriptAvatar ? ( ) : ( - )} - + Date: Sat, 8 Jul 2023 10:53:10 +0100 Subject: [PATCH 068/187] Clean up --- src/components/AvatarWithDisplayName.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/AvatarWithDisplayName.js b/src/components/AvatarWithDisplayName.js index 1f2462374cf2..4a2be3e1f326 100644 --- a/src/components/AvatarWithDisplayName.js +++ b/src/components/AvatarWithDisplayName.js @@ -11,7 +11,6 @@ import styles from '../styles/styles'; import themeColors from '../styles/themes/default'; import SubscriptAvatar from './SubscriptAvatar'; import * as ReportUtils from '../libs/ReportUtils'; -import Avatar from './Avatar'; import MultipleAvatars from './MultipleAvatars'; import DisplayNames from './DisplayNames'; import compose from '../libs/compose'; @@ -77,8 +76,7 @@ function AvatarWithDisplayName(props) { )} From 4bef0f30e23dc6a6c0d9b41bae6aff7134d5a2bc Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Sat, 8 Jul 2023 11:05:25 +0100 Subject: [PATCH 069/187] Match to optionUtils --- src/components/AvatarWithDisplayName.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AvatarWithDisplayName.js b/src/components/AvatarWithDisplayName.js index 4a2be3e1f326..fc82a534f9a0 100644 --- a/src/components/AvatarWithDisplayName.js +++ b/src/components/AvatarWithDisplayName.js @@ -57,7 +57,7 @@ function AvatarWithDisplayName(props) { const subtitle = ReportUtils.getChatRoomSubtitle(props.report); const parentNavigationSubtitle = ReportUtils.getParentNavigationSubtitle(props.report); const isExpenseReport = ReportUtils.isExpenseReport(props.report); - const icons = ReportUtils.getIcons(props.report, props.personalDetails, props.policies); + const icons = ReportUtils.getIcons(props.report, props.personalDetails, props.policies, true); const ownerPersonalDetails = OptionsListUtils.getPersonalDetailsForAccountIDs([props.report.ownerAccountID], props.personalDetails); const displayNamesWithTooltips = ReportUtils.getDisplayNamesWithTooltips(_.values(ownerPersonalDetails), false); const shouldShowSubscriptAvatar = ReportUtils.shouldReportShowSubscript(props.report); From f20a775f7103698285bb4bbaa3735c7d5d9878db Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Sat, 8 Jul 2023 11:15:26 +0100 Subject: [PATCH 070/187] Fix expense request --- src/components/AvatarWithDisplayName.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/AvatarWithDisplayName.js b/src/components/AvatarWithDisplayName.js index fc82a534f9a0..cea5eb674508 100644 --- a/src/components/AvatarWithDisplayName.js +++ b/src/components/AvatarWithDisplayName.js @@ -61,6 +61,8 @@ function AvatarWithDisplayName(props) { const ownerPersonalDetails = OptionsListUtils.getPersonalDetailsForAccountIDs([props.report.ownerAccountID], props.personalDetails); const displayNamesWithTooltips = ReportUtils.getDisplayNamesWithTooltips(_.values(ownerPersonalDetails), false); const shouldShowSubscriptAvatar = ReportUtils.shouldReportShowSubscript(props.report); + const isExpenseRequest = ReportUtils.isExpenseRequest(props.report); + const defaultSubscriptSize = isExpenseRequest ? CONST.AVATAR_SIZE.SMALL_NORMAL : props.size; return ( {Boolean(props.report && title) && ( @@ -70,7 +72,7 @@ function AvatarWithDisplayName(props) { backgroundColor={themeColors.highlightBG} mainAvatar={icons[0]} secondaryAvatar={icons[1]} - size={props.size} + size={defaultSubscriptSize} /> ) : ( )} - + Date: Tue, 11 Jul 2023 15:22:34 +0200 Subject: [PATCH 071/187] Disable rulesdir/prefer-import-module-contents eslint rule --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index bb052dbb6340..069eab5778ef 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -131,6 +131,7 @@ module.exports = { 'import/no-extraneous-dependencies': 'off', 'rulesdir/onyx-props-must-have-default': 'off', 'rulesdir/prefer-underscore-method': 'off', + 'rulesdir/prefer-import-module-contents': 'off', 'no-restricted-syntax': [ 'error', { From 7a30be49d8d4719efe3149623533c067b1c035f0 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 13 Jul 2023 17:09:59 +0200 Subject: [PATCH 072/187] Turn off require-default-props eslint rule --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index a86737460c61..be5bff9d5755 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -133,6 +133,7 @@ module.exports = { 'rulesdir/onyx-props-must-have-default': 'off', 'rulesdir/prefer-underscore-method': 'off', 'rulesdir/prefer-import-module-contents': 'off', + 'react/require-default-props': 'off', 'no-restricted-syntax': [ 'error', { From c532d14f69239971c4ac5ac3ac3c00a7143ce0bc Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Wed, 19 Jul 2023 09:29:57 +0200 Subject: [PATCH 073/187] fix: close modal when anchor unmounted --- .../AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index 9e1ceaad593e..2a5beeb115d8 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -1,5 +1,5 @@ import _ from 'underscore'; -import React from 'react'; +import React, {useEffect} from 'react'; import {StyleSheet} from 'react-native'; import PropTypes from 'prop-types'; import lodashGet from 'lodash/get'; @@ -41,6 +41,10 @@ const defaultProps = { * This is a default anchor component for regular links. */ function BaseAnchorForCommentsOnly(props) { + useEffect(() => () => { + ReportActionContextMenu.hideContextMenu(); + }, []) + let linkRef; const rest = _.omit(props, _.keys(propTypes)); const linkProps = {}; From 082089da1dcfe9b4b5bca920aff920da8e4ec236 Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Wed, 19 Jul 2023 09:39:28 +0200 Subject: [PATCH 074/187] refactor: change withWindowDimensions for useWindowDimensions --- .../BaseAnchorForCommentsOnly.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index 2a5beeb115d8..6852f0fb748e 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -12,9 +12,12 @@ import Tooltip from '../Tooltip'; import * as DeviceCapabilities from '../../libs/DeviceCapabilities'; import styles from '../../styles/styles'; import * as StyleUtils from '../../styles/StyleUtils'; -import withWindowDimensions, {windowDimensionsPropTypes} from '../withWindowDimensions'; -import {propTypes as anchorForCommentsOnlyPropTypes, defaultProps as anchorForCommentsOnlyDefaultProps} from './anchorForCommentsOnlyPropTypes'; +import { + propTypes as anchorForCommentsOnlyPropTypes, + defaultProps as anchorForCommentsOnlyDefaultProps +} from './anchorForCommentsOnlyPropTypes'; import CONST from '../../CONST'; +import useWindowDimensions from "../../hooks/useWindowDimensions"; const propTypes = { /** Press in handler for the link */ @@ -27,7 +30,6 @@ const propTypes = { containerStyles: PropTypes.arrayOf(PropTypes.object), ...anchorForCommentsOnlyPropTypes, - ...windowDimensionsPropTypes, }; const defaultProps = { @@ -45,6 +47,8 @@ function BaseAnchorForCommentsOnly(props) { ReportActionContextMenu.hideContextMenu(); }, []) + const {isSmallScreenWidth} = useWindowDimensions(); + let linkRef; const rest = _.omit(props, _.keys(propTypes)); const linkProps = {}; @@ -53,7 +57,7 @@ function BaseAnchorForCommentsOnly(props) { } else { linkProps.href = props.href; } - const defaultTextStyle = DeviceCapabilities.canUseTouchScreen() || props.isSmallScreenWidth ? {} : {...styles.userSelectText, ...styles.cursorPointer}; + const defaultTextStyle = DeviceCapabilities.canUseTouchScreen() || isSmallScreenWidth ? {} : {...styles.userSelectText, ...styles.cursorPointer}; const isEmail = Str.isValidEmailMarkdown(props.href.replace(/mailto:/i, '')); return ( @@ -100,4 +104,4 @@ BaseAnchorForCommentsOnly.propTypes = propTypes; BaseAnchorForCommentsOnly.defaultProps = defaultProps; BaseAnchorForCommentsOnly.displayName = 'BaseAnchorForCommentsOnly'; -export default withWindowDimensions(BaseAnchorForCommentsOnly); +export default BaseAnchorForCommentsOnly; From 6a2f1e5b2eb342942c9f3f00893b19bf782ad22e Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Wed, 19 Jul 2023 10:06:03 +0200 Subject: [PATCH 075/187] refactor: props destructuring, remove unused props --- .../BaseAnchorForCommentsOnly.js | 55 ++++++++++--------- .../anchorForCommentsOnlyPropTypes.js | 4 -- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index 6852f0fb748e..b9dad2254703 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -14,35 +14,37 @@ import styles from '../../styles/styles'; import * as StyleUtils from '../../styles/StyleUtils'; import { propTypes as anchorForCommentsOnlyPropTypes, - defaultProps as anchorForCommentsOnlyDefaultProps } from './anchorForCommentsOnlyPropTypes'; import CONST from '../../CONST'; import useWindowDimensions from "../../hooks/useWindowDimensions"; const propTypes = { /** Press in handler for the link */ + // eslint-disable-next-line react/require-default-props onPressIn: PropTypes.func, /** Press out handler for the link */ + // eslint-disable-next-line react/require-default-props onPressOut: PropTypes.func, // eslint-disable-next-line react/forbid-prop-types - containerStyles: PropTypes.arrayOf(PropTypes.object), - ...anchorForCommentsOnlyPropTypes, }; -const defaultProps = { - onPressIn: undefined, - onPressOut: undefined, - containerStyles: [], - ...anchorForCommentsOnlyDefaultProps, -}; - /* * This is a default anchor component for regular links. */ -function BaseAnchorForCommentsOnly(props) { +function BaseAnchorForCommentsOnly({ + onPressIn = undefined, + onPressOut = undefined, + href = '', + rel = '', + target = '', + children = null, + style = {}, + onPress = undefined, + ...rest +}) { useEffect(() => () => { ReportActionContextMenu.hideContextMenu(); }, []) @@ -50,42 +52,42 @@ function BaseAnchorForCommentsOnly(props) { const {isSmallScreenWidth} = useWindowDimensions(); let linkRef; - const rest = _.omit(props, _.keys(propTypes)); + const linkProps = {}; - if (_.isFunction(props.onPress)) { - linkProps.onPress = props.onPress; + if (_.isFunction(onPress)) { + linkProps.onPress = onPress; } else { - linkProps.href = props.href; + linkProps.href = href; } const defaultTextStyle = DeviceCapabilities.canUseTouchScreen() || isSmallScreenWidth ? {} : {...styles.userSelectText, ...styles.cursorPointer}; - const isEmail = Str.isValidEmailMarkdown(props.href.replace(/mailto:/i, '')); + const isEmail = Str.isValidEmailMarkdown(href.replace(/mailto:/i, '')); return ( { ReportActionContextMenu.showContextMenu( isEmail ? ContextMenuActions.CONTEXT_MENU_TYPES.EMAIL : ContextMenuActions.CONTEXT_MENU_TYPES.LINK, event, - props.href, + href, lodashGet(linkRef, 'current'), ); }} onPress={linkProps.onPress} - onPressIn={props.onPressIn} - onPressOut={props.onPressOut} + onPressIn={onPressIn} + onPressOut={onPressOut} accessibilityRole={CONST.ACCESSIBILITY_ROLE.LINK} - accessibilityLabel={props.href} + accessibilityLabel={href} > - + (linkRef = el)} - style={StyleSheet.flatten([props.style, defaultTextStyle])} + style={StyleSheet.flatten([style, defaultTextStyle])} accessibilityRole={CONST.ACCESSIBILITY_ROLE.LINK} hrefAttrs={{ - rel: props.rel, - target: isEmail ? '_self' : props.target, + rel, + target: isEmail ? '_self' : target, }} href={linkProps.href} // Add testID so it gets selected as an anchor tag by SelectionScraper @@ -93,7 +95,7 @@ function BaseAnchorForCommentsOnly(props) { // eslint-disable-next-line react/jsx-props-no-spreading {...rest} > - {props.children} + {children} @@ -101,7 +103,6 @@ function BaseAnchorForCommentsOnly(props) { } BaseAnchorForCommentsOnly.propTypes = propTypes; -BaseAnchorForCommentsOnly.defaultProps = defaultProps; BaseAnchorForCommentsOnly.displayName = 'BaseAnchorForCommentsOnly'; export default BaseAnchorForCommentsOnly; diff --git a/src/components/AnchorForCommentsOnly/anchorForCommentsOnlyPropTypes.js b/src/components/AnchorForCommentsOnly/anchorForCommentsOnlyPropTypes.js index 6246f581435a..10b5a40c853d 100644 --- a/src/components/AnchorForCommentsOnly/anchorForCommentsOnlyPropTypes.js +++ b/src/components/AnchorForCommentsOnly/anchorForCommentsOnlyPropTypes.js @@ -16,9 +16,6 @@ const propTypes = { /** Any children to display */ children: PropTypes.node, - /** Anchor text of URLs or emails. */ - displayName: PropTypes.string, - /** Any additional styles to apply */ style: stylePropTypes, @@ -32,7 +29,6 @@ const defaultProps = { target: '', children: null, style: {}, - displayName: '', onPress: undefined, }; From 4ac54094b04851b00ea924c81c70b83a4fa59607 Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Wed, 19 Jul 2023 10:21:09 +0200 Subject: [PATCH 076/187] fix: fix prettier --- .../BaseAnchorForCommentsOnly.js | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index b9dad2254703..6705994d2080 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -12,11 +12,9 @@ import Tooltip from '../Tooltip'; import * as DeviceCapabilities from '../../libs/DeviceCapabilities'; import styles from '../../styles/styles'; import * as StyleUtils from '../../styles/StyleUtils'; -import { - propTypes as anchorForCommentsOnlyPropTypes, -} from './anchorForCommentsOnlyPropTypes'; +import {propTypes as anchorForCommentsOnlyPropTypes} from './anchorForCommentsOnlyPropTypes'; import CONST from '../../CONST'; -import useWindowDimensions from "../../hooks/useWindowDimensions"; +import useWindowDimensions from '../../hooks/useWindowDimensions'; const propTypes = { /** Press in handler for the link */ @@ -34,20 +32,13 @@ const propTypes = { /* * This is a default anchor component for regular links. */ -function BaseAnchorForCommentsOnly({ - onPressIn = undefined, - onPressOut = undefined, - href = '', - rel = '', - target = '', - children = null, - style = {}, - onPress = undefined, - ...rest -}) { - useEffect(() => () => { - ReportActionContextMenu.hideContextMenu(); - }, []) +function BaseAnchorForCommentsOnly({onPressIn = undefined, onPressOut = undefined, href = '', rel = '', target = '', children = null, style = {}, onPress = undefined, ...rest}) { + useEffect( + () => () => { + ReportActionContextMenu.hideContextMenu(); + }, + [], + ); const {isSmallScreenWidth} = useWindowDimensions(); From 7e644827f73708eccfc705aef512c1fb7ee65ac6 Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Wed, 19 Jul 2023 13:36:14 +0200 Subject: [PATCH 077/187] fix: change default props for functions --- .../AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index 6705994d2080..dc9a3ab8aa6f 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -32,7 +32,7 @@ const propTypes = { /* * This is a default anchor component for regular links. */ -function BaseAnchorForCommentsOnly({onPressIn = undefined, onPressOut = undefined, href = '', rel = '', target = '', children = null, style = {}, onPress = undefined, ...rest}) { +function BaseAnchorForCommentsOnly({onPressIn = () => {}, onPressOut = () => {}, href = '', rel = '', target = '', children = null, style = {}, onPress = undefined, ...rest}) { useEffect( () => () => { ReportActionContextMenu.hideContextMenu(); From dd4694608618373b1f9d3b820d1a9e90e3a1dc4d Mon Sep 17 00:00:00 2001 From: Jakub Kosmydel <104823336+kosmydel@users.noreply.github.com> Date: Mon, 24 Jul 2023 09:15:12 +0200 Subject: [PATCH 078/187] Remove unused Modal/index.js file --- src/components/Modal/index.js | 52 ----------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 src/components/Modal/index.js diff --git a/src/components/Modal/index.js b/src/components/Modal/index.js deleted file mode 100644 index 3d2dc0f7c149..000000000000 --- a/src/components/Modal/index.js +++ /dev/null @@ -1,52 +0,0 @@ -import React, {Component} from 'react'; -import withWindowDimensions from '../withWindowDimensions'; -import BaseModal from './BaseModal'; -import {propTypes, defaultProps} from './modalPropTypes'; - -class Modal extends Component { - constructor(props) { - super(props); - this.closeOnOutsideClick = this.closeOnOutsideClick.bind(this); - } - - componentDidMount() { - if (!this.props.shouldCloseOnOutsideClick) { - return; - } - - document.addEventListener('mousedown', this.closeOnOutsideClick); - } - - componentWillUnmount() { - if (!this.props.shouldCloseOnOutsideClick) { - return; - } - - document.removeEventListener('mousedown', this.closeOnOutsideClick); - } - - closeOnOutsideClick(event) { - if (!this.props.isVisible || !this.baseModalRef || this.baseModalRef.contains(event.target) || !this.props.shouldCloseOnOutsideClick) { - return; - } - - this.props.onClose(); - } - - render() { - return ( - (this.baseModalRef = el)} - // eslint-disable-next-line react/jsx-props-no-spreading - {...this.props} - > - {this.props.children} - - ); - } -} - -Modal.propTypes = propTypes; -Modal.defaultProps = defaultProps; - -export default withWindowDimensions(Modal); From 08446629c2679f372908c7f9a5b2ecb13ae0b44f Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Mon, 24 Jul 2023 12:55:41 +0100 Subject: [PATCH 079/187] Fix header view --- src/pages/home/ReportScreen.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index 5d825a528bdf..be52da5f1f1f 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -266,7 +266,7 @@ class ReportScreen extends React.Component { this.firstRenderRef.current = false; const parentReportAction = ReportActionsUtils.getParentReportAction(this.props.report); - const isSingleTransactionView = ReportActionsUtils.isTransactionThread(parentReportAction); + const isSingleTransactionView = ReportUtils.isMoneyRequestReport(this.props.report); const policy = this.props.policies[`${ONYXKEYS.COLLECTION.POLICY}${this.props.report.policyID}`]; From 9307a61963ecf3b18f01f3f08e74bb3fe3048b62 Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Mon, 24 Jul 2023 14:22:39 +0200 Subject: [PATCH 080/187] fix: remove unnecessary comment --- .../AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index dc9a3ab8aa6f..8c22973977d0 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -25,7 +25,6 @@ const propTypes = { // eslint-disable-next-line react/require-default-props onPressOut: PropTypes.func, - // eslint-disable-next-line react/forbid-prop-types ...anchorForCommentsOnlyPropTypes, }; From 4feba7fad0fabdb58c12eaacb5cff18c33f39d6d Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Mon, 24 Jul 2023 14:18:10 +0100 Subject: [PATCH 081/187] Bug fixes --- src/libs/ReportUtils.js | 60 +++++++++++++++++++++++++--------- src/pages/home/ReportScreen.js | 2 +- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index 470ea60b2464..240384870800 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -182,17 +182,6 @@ function isTaskAssignee(report) { return lodashGet(report, 'managerID') === currentUserAccountID; } -/** - * Checks if a report is an IOU or expense report. - * - * @param {Object|String} reportOrID - * @returns {Boolean} - */ -function isMoneyRequestReport(reportOrID) { - const report = _.isObject(reportOrID) ? reportOrID : allReports[`${ONYXKEYS.COLLECTION.REPORT}${reportOrID}`]; - return isIOUReport(report) || isExpenseReport(report); -} - /** * Given a collection of reports returns them sorted by last read * @@ -634,6 +623,44 @@ function isExpenseRequest(report) { return false; } +/** + * An IOU Request is a thread where the parent report is an IOU Report and + * the parentReportAction is a transaction. + * + * @param {Object} report + * @returns {Boolean} + */ +function isIOURequest(report) { + if (isThread(report)) { + const parentReportAction = ReportActionsUtils.getParentReportAction(report); + const parentReport = lodashGet(allReports, [`${ONYXKEYS.COLLECTION.REPORT}${report.parentReportID}`]); + return isIOUReport(parentReport) && ReportActionsUtils.isTransactionThread(parentReportAction); + } + return false; +} + +/** + * Checks if a report is an IOU or expense request. + * + * @param {Object|String} reportOrID + * @returns {Boolean} + */ +function isMoneyRequest(reportOrID) { + const report = _.isObject(reportOrID) ? reportOrID : allReports[`${ONYXKEYS.COLLECTION.REPORT}${reportOrID}`]; + return isIOURequest(report) || isExpenseRequest(report); +} + +/** + * Checks if a report is an IOU or expense report. + * + * @param {Object|String} reportOrID + * @returns {Boolean} + */ +function isMoneyRequestReport(reportOrID) { + const report = _.isObject(reportOrID) ? reportOrID : allReports[`${ONYXKEYS.COLLECTION.REPORT}${reportOrID}`]; + return isIOUReport(report) || isExpenseReport(report); +} + /** * Get welcome message based on room type * @param {Object} report @@ -1190,12 +1217,12 @@ function getRootReportAndWorkspaceName(report) { return getRootReportAndWorkspaceName(parentReport); } - if (isIOUReport(report)) { + if (isIOURequest(report)) { return { rootReportName: lodashGet(report, 'displayName', ''), }; } - if (isMoneyRequestReport(report)) { + if (isExpenseRequest(report)) { return { rootReportName: lodashGet(report, 'displayName', ''), workspaceName: isIOUReport(report) ? CONST.POLICY.OWNER_EMAIL_FAKE : getPolicyName(report, true), @@ -2505,9 +2532,9 @@ function shouldReportShowSubscript(report) { return false; } - if (isMoneyRequestReport(report)) { - return false; - } + // if (isMoneyRequestReport(report)) { + // return false; + // } if (isPolicyExpenseChat(report) && !isChatThread(report) && !isTaskReport(report) && !report.isOwnPolicyExpenseChat) { return true; @@ -2704,6 +2731,7 @@ export { isCompletedTaskReport, isTaskAssignee, isMoneyRequestReport, + isMoneyRequest, chatIncludesChronos, getNewMarkerReportActionID, canSeeDefaultRoom, diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index be52da5f1f1f..e8c70635fdf9 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -266,7 +266,7 @@ class ReportScreen extends React.Component { this.firstRenderRef.current = false; const parentReportAction = ReportActionsUtils.getParentReportAction(this.props.report); - const isSingleTransactionView = ReportUtils.isMoneyRequestReport(this.props.report); + const isSingleTransactionView = ReportUtils.isMoneyRequest(this.props.report); const policy = this.props.policies[`${ONYXKEYS.COLLECTION.POLICY}${this.props.report.policyID}`]; From 56b53563d5d76983c5fa4b5c51c4ccdfce0cf6b8 Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Mon, 24 Jul 2023 15:19:23 +0100 Subject: [PATCH 082/187] Match LHN Title / Subtitle to Header --- src/components/AvatarWithDisplayName.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/AvatarWithDisplayName.js b/src/components/AvatarWithDisplayName.js index e5431696ba2a..b2644ab0eef9 100644 --- a/src/components/AvatarWithDisplayName.js +++ b/src/components/AvatarWithDisplayName.js @@ -53,10 +53,10 @@ const defaultProps = { }; function AvatarWithDisplayName(props) { - const title = props.isAnonymous ? ReportUtils.getReportName(props.report) : ReportUtils.getDisplayNameForParticipant(props.report.ownerAccountID, true); + const title = ReportUtils.getReportName(props.report); const subtitle = ReportUtils.getChatRoomSubtitle(props.report); const parentNavigationSubtitle = ReportUtils.getParentNavigationSubtitle(props.report); - const isExpenseReport = ReportUtils.isExpenseReport(props.report); + const isMoneyRequestOrReport = ReportUtils.isMoneyRequestReport(props.report) || ReportUtils.isMoneyRequest(props.report); const icons = ReportUtils.getIcons(props.report, props.personalDetails, props.policies, true); const ownerPersonalDetails = OptionsListUtils.getPersonalDetailsForAccountIDs([props.report.ownerAccountID], props.personalDetails); const displayNamesWithTooltips = ReportUtils.getDisplayNamesWithTooltips(_.values(ownerPersonalDetails), false); @@ -88,7 +88,7 @@ function AvatarWithDisplayName(props) { tooltipEnabled numberOfLines={1} textStyles={[props.isAnonymous ? styles.headerAnonymousFooter : styles.headerText, styles.pre]} - shouldUseFullTitle={isExpenseReport || props.isAnonymous} + shouldUseFullTitle={isMoneyRequestOrReport || props.isAnonymous} /> {!_.isEmpty(parentNavigationSubtitle) && ( Date: Fri, 14 Jul 2023 15:03:27 -0400 Subject: [PATCH 083/187] Migrate FloatingMessageCounter to function component --- .../report/FloatingMessageCounter/index.js | 122 ++++++++---------- 1 file changed, 57 insertions(+), 65 deletions(-) diff --git a/src/pages/home/report/FloatingMessageCounter/index.js b/src/pages/home/report/FloatingMessageCounter/index.js index 9ba153ae48dd..406347ffb2fc 100644 --- a/src/pages/home/report/FloatingMessageCounter/index.js +++ b/src/pages/home/report/FloatingMessageCounter/index.js @@ -1,4 +1,4 @@ -import React, {PureComponent} from 'react'; +import React, {useEffect, useMemo} from 'react'; import {Animated, View} from 'react-native'; import PropTypes from 'prop-types'; import styles from '../../../../styles/styles'; @@ -7,7 +7,7 @@ import Text from '../../../../components/Text'; import Icon from '../../../../components/Icon'; import * as Expensicons from '../../../../components/Icon/Expensicons'; import themeColors from '../../../../styles/themes/default'; -import withLocalize, {withLocalizePropTypes} from '../../../../components/withLocalize'; +import useLocalize from '../../../../hooks/useLocalize'; import FloatingMessageCounterContainer from './FloatingMessageCounterContainer'; const propTypes = { @@ -16,8 +16,6 @@ const propTypes = { /** Callback to be called when user clicks the New Messages indicator */ onClick: PropTypes.func, - - ...withLocalizePropTypes, }; const defaultProps = { @@ -28,73 +26,67 @@ const defaultProps = { const MARKER_INACTIVE_TRANSLATE_Y = -40; const MARKER_ACTIVE_TRANSLATE_Y = 10; -class FloatingMessageCounter extends PureComponent { - constructor(props) { - super(props); - this.translateY = new Animated.Value(MARKER_INACTIVE_TRANSLATE_Y); - this.show = this.show.bind(this); - this.hide = this.hide.bind(this); - } +function FloatingMessageCounter(props) { + const {translate} = useLocalize(); + const translateY = useMemo(() => new Animated.Value(MARKER_INACTIVE_TRANSLATE_Y), []); - componentDidUpdate() { - if (this.props.isActive) { - this.show(); - } else { - this.hide(); - } - } + useEffect(() => { + const show = () => { + Animated.spring(translateY, { + toValue: MARKER_ACTIVE_TRANSLATE_Y, + duration: 80, + useNativeDriver: true, + }).start(); + }; - show() { - Animated.spring(this.translateY, { - toValue: MARKER_ACTIVE_TRANSLATE_Y, - duration: 80, - useNativeDriver: true, - }).start(); - } + const hide = () => { + Animated.spring(translateY, { + toValue: MARKER_INACTIVE_TRANSLATE_Y, + duration: 80, + useNativeDriver: true, + }).start(); + }; - hide() { - Animated.spring(this.translateY, { - toValue: MARKER_INACTIVE_TRANSLATE_Y, - duration: 80, - useNativeDriver: true, - }).start(); - } + if (props.isActive) { + show(); + } else { + hide(); + } + }, [props.isActive, translateY]); - render() { - return ( - - - - - + return ( + + + + - - ); - } + + + ); } FloatingMessageCounter.propTypes = propTypes; FloatingMessageCounter.defaultProps = defaultProps; - -export default withLocalize(FloatingMessageCounter); +FloatingMessageCounter.displayName = 'FloatingMessageCounter'; +export default React.memo(FloatingMessageCounter); From aa582d87542765cc6dd520e60cf1a29bb9e10bed Mon Sep 17 00:00:00 2001 From: AGarciaNY Date: Sun, 16 Jul 2023 12:33:10 -0400 Subject: [PATCH 084/187] improved FloatingMessageCounter performance by using useCallback --- .../report/FloatingMessageCounter/index.js | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/pages/home/report/FloatingMessageCounter/index.js b/src/pages/home/report/FloatingMessageCounter/index.js index 406347ffb2fc..73fe02df129b 100644 --- a/src/pages/home/report/FloatingMessageCounter/index.js +++ b/src/pages/home/report/FloatingMessageCounter/index.js @@ -1,4 +1,4 @@ -import React, {useEffect, useMemo} from 'react'; +import React, {useEffect, useMemo, useCallback} from 'react'; import {Animated, View} from 'react-native'; import PropTypes from 'prop-types'; import styles from '../../../../styles/styles'; @@ -30,29 +30,29 @@ function FloatingMessageCounter(props) { const {translate} = useLocalize(); const translateY = useMemo(() => new Animated.Value(MARKER_INACTIVE_TRANSLATE_Y), []); - useEffect(() => { - const show = () => { - Animated.spring(translateY, { - toValue: MARKER_ACTIVE_TRANSLATE_Y, - duration: 80, - useNativeDriver: true, - }).start(); - }; + const show = useCallback(() => { + Animated.spring(translateY, { + toValue: MARKER_ACTIVE_TRANSLATE_Y, + duration: 80, + useNativeDriver: true, + }).start(); + }, [translateY]); - const hide = () => { - Animated.spring(translateY, { - toValue: MARKER_INACTIVE_TRANSLATE_Y, - duration: 80, - useNativeDriver: true, - }).start(); - }; + const hide = useCallback(() => { + Animated.spring(translateY, { + toValue: MARKER_INACTIVE_TRANSLATE_Y, + duration: 80, + useNativeDriver: true, + }).start(); + }, [translateY]); + useEffect(() => { if (props.isActive) { show(); } else { hide(); } - }, [props.isActive, translateY]); + }, [props.isActive, show, hide]); return ( Date: Tue, 25 Jul 2023 04:23:08 +0500 Subject: [PATCH 085/187] Workspace tooltip --- src/pages/home/report/ReportActionItemFragment.js | 15 +++++++++++++++ src/pages/home/report/ReportActionItemSingle.js | 1 + 2 files changed, 16 insertions(+) diff --git a/src/pages/home/report/ReportActionItemFragment.js b/src/pages/home/report/ReportActionItemFragment.js index 010295c0b0d3..dc5ab02b6f6e 100644 --- a/src/pages/home/report/ReportActionItemFragment.js +++ b/src/pages/home/report/ReportActionItemFragment.js @@ -19,6 +19,7 @@ import CONST from '../../../CONST'; import applyStrikethrough from '../../../components/HTMLEngineProvider/applyStrikethrough'; import editedLabelStyles from '../../../styles/editedLabelStyles'; import UserDetailsTooltip from '../../../components/UserDetailsTooltip'; +import avatarPropTypes from '../../../components/avatarPropTypes'; const propTypes = { /** Users accountID */ @@ -60,6 +61,9 @@ const propTypes = { /** The accountID of the copilot who took this action on behalf of the user */ delegateAccountID: PropTypes.number, + /** icon */ + actorIcon: avatarPropTypes, + ...windowDimensionsPropTypes, /** localization props */ @@ -79,6 +83,12 @@ const defaultProps = { source: '', style: [], delegateAccountID: 0, + actorIcon: { + name: '', + source: '', + type: '', + id: 0, + }, }; function ReportActionItemFragment(props) { @@ -152,6 +162,11 @@ function ReportActionItemFragment(props) { ))} From 5f9c6f69aa9f2e0a94dd80f9d8cde46c9fa6b685 Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Tue, 25 Jul 2023 16:55:43 +0800 Subject: [PATCH 086/187] append current time to the downloaded file name --- src/libs/fileDownload/FileUtils.js | 13 +++++++++++-- src/libs/fileDownload/index.android.js | 2 +- src/libs/fileDownload/index.ios.js | 2 +- src/libs/fileDownload/index.js | 2 +- src/libs/localFileDownload/index.android.js | 5 +++-- src/libs/localFileDownload/index.ios.js | 6 ++++-- src/libs/localFileDownload/index.js | 4 +++- 7 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/libs/fileDownload/FileUtils.js b/src/libs/fileDownload/FileUtils.js index 81dcfa933660..3a9751aeb7bf 100644 --- a/src/libs/fileDownload/FileUtils.js +++ b/src/libs/fileDownload/FileUtils.js @@ -104,7 +104,7 @@ function getFileType(fileUrl) { function splitExtensionFromFileName(fullFileName) { const fileName = fullFileName.trim(); const splitFileName = fileName.split('.'); - const fileExtension = splitFileName.pop(); + const fileExtension = splitFileName.length > 1 ? splitFileName.pop() : ''; return {fileName: splitFileName.join('.'), fileExtension}; } @@ -118,4 +118,13 @@ function cleanFileName(fileName) { return fileName.replace(/[^a-zA-Z0-9\-._]/g, '_'); } -export {showGeneralErrorAlert, showSuccessAlert, showPermissionErrorAlert, splitExtensionFromFileName, getAttachmentName, getFileType, cleanFileName}; +function appendTimeToFileName(fileName) { + const file = splitExtensionFromFileName(fileName); + let newFileName = `${file.fileName} - ${new Date().toISOString()}`; + if (file.fileExtension) { + newFileName += `.${file.fileExtension}`; + } + return newFileName; +} + +export {showGeneralErrorAlert, showSuccessAlert, showPermissionErrorAlert, splitExtensionFromFileName, getAttachmentName, getFileType, cleanFileName, appendTimeToFileName}; diff --git a/src/libs/fileDownload/index.android.js b/src/libs/fileDownload/index.android.js index c14575881fea..c19301cbde49 100644 --- a/src/libs/fileDownload/index.android.js +++ b/src/libs/fileDownload/index.android.js @@ -41,7 +41,7 @@ function handleDownload(url, fileName) { // Android files will download to Download directory const path = dirs.DownloadDir; - const attachmentName = fileName || FileUtils.getAttachmentName(url); + const attachmentName = FileUtils.appendTimeToFileName(fileName) || FileUtils.getAttachmentName(url); const isLocalFile = url.startsWith('file://'); diff --git a/src/libs/fileDownload/index.ios.js b/src/libs/fileDownload/index.ios.js index 7a5aab1c1944..95d92f1e3103 100644 --- a/src/libs/fileDownload/index.ios.js +++ b/src/libs/fileDownload/index.ios.js @@ -75,7 +75,7 @@ export default function fileDownload(fileUrl, fileName) { return new Promise((resolve) => { let fileDownloadPromise = null; const fileType = FileUtils.getFileType(fileUrl); - const attachmentName = fileName || FileUtils.getAttachmentName(fileUrl); + const attachmentName = FileUtils.appendTimeToFileName(fileName) || FileUtils.getAttachmentName(fileUrl); switch (fileType) { case CONST.ATTACHMENT_FILE_TYPE.IMAGE: diff --git a/src/libs/fileDownload/index.js b/src/libs/fileDownload/index.js index 002cc17d64c9..712a6ca2affb 100644 --- a/src/libs/fileDownload/index.js +++ b/src/libs/fileDownload/index.js @@ -23,7 +23,7 @@ export default function fileDownload(url, fileName) { link.style.display = 'none'; link.setAttribute( 'download', - fileName || FileUtils.getAttachmentName(url), // generating the file name + FileUtils.appendTimeToFileName(fileName) || FileUtils.getAttachmentName(url), // generating the file name ); // Append to html link element page diff --git a/src/libs/localFileDownload/index.android.js b/src/libs/localFileDownload/index.android.js index acdc9c89e6a4..b3e39e7a7a53 100644 --- a/src/libs/localFileDownload/index.android.js +++ b/src/libs/localFileDownload/index.android.js @@ -10,13 +10,14 @@ import * as FileUtils from '../fileDownload/FileUtils'; * @param {String} textContent */ export default function localFileDownload(fileName, textContent) { + const newFileName = FileUtils.appendTimeToFileName(fileName); const dir = RNFetchBlob.fs.dirs.DocumentDir; - const path = `${dir}/${fileName}.txt`; + const path = `${dir}/${newFileName}.txt`; RNFetchBlob.fs.writeFile(path, textContent, 'utf8').then(() => { RNFetchBlob.MediaCollection.copyToMediaStore( { - name: fileName, + name: newFileName, parentFolder: '', // subdirectory in the Media Store, empty goes to 'Downloads' mimeType: 'text/plain', }, diff --git a/src/libs/localFileDownload/index.ios.js b/src/libs/localFileDownload/index.ios.js index 7113db49ac8b..1241f5a535db 100644 --- a/src/libs/localFileDownload/index.ios.js +++ b/src/libs/localFileDownload/index.ios.js @@ -1,5 +1,6 @@ import {Share} from 'react-native'; import RNFetchBlob from 'react-native-blob-util'; +import * as FileUtils from '../fileDownload/FileUtils'; /** * Writes a local file to the app's internal directory with the given fileName @@ -10,11 +11,12 @@ import RNFetchBlob from 'react-native-blob-util'; * @param {String} textContent */ export default function localFileDownload(fileName, textContent) { + const newFileName = FileUtils.appendTimeToFileName(fileName); const dir = RNFetchBlob.fs.dirs.DocumentDir; - const path = `${dir}/${fileName}.txt`; + const path = `${dir}/${newFileName}.txt`; RNFetchBlob.fs.writeFile(path, textContent, 'utf8').then(() => { - Share.share({url: path, title: fileName}).finally(() => { + Share.share({url: path, title: newFileName}).finally(() => { RNFetchBlob.fs.unlink(path); }); }); diff --git a/src/libs/localFileDownload/index.js b/src/libs/localFileDownload/index.js index f52d2fa0115e..427928834c9c 100644 --- a/src/libs/localFileDownload/index.js +++ b/src/libs/localFileDownload/index.js @@ -1,3 +1,5 @@ +import * as FileUtils from '../fileDownload/FileUtils'; + /** * Creates a Blob with the given fileName and textContent, then dynamically * creates a temporary anchor, just to programmatically click it, so the file @@ -10,7 +12,7 @@ export default function localFileDownload(fileName, textContent) { const blob = new Blob([textContent], {type: 'text/plain'}); const url = URL.createObjectURL(blob); const link = document.createElement('a'); - link.download = `${fileName}.txt`; + link.download = FileUtils.appendTimeToFileName(`${fileName}.txt`); link.href = url; link.click(); } From d08e3d495ecb6d5a97abcf878dd3c2417149bab2 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 25 Jul 2023 11:58:06 +0200 Subject: [PATCH 087/187] Add 'the' to the eslint rule message --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index be5bff9d5755..2450cfe20827 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -157,7 +157,7 @@ module.exports = { }, { name: 'underscore', - message: 'Please use corresponding method from lodash instead', + message: 'Please use the corresponding method from lodash instead', }, ], }, From f48892eddba150df7b53579ef11fe416be32728d Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 25 Jul 2023 12:18:55 +0200 Subject: [PATCH 088/187] Build github actions --- .../actions/javascript/bumpVersion/index.js | 156 ++++++++++++------ 1 file changed, 101 insertions(+), 55 deletions(-) diff --git a/.github/actions/javascript/bumpVersion/index.js b/.github/actions/javascript/bumpVersion/index.js index 9f1b86738b79..6b865e1adec7 100644 --- a/.github/actions/javascript/bumpVersion/index.js +++ b/.github/actions/javascript/bumpVersion/index.js @@ -2089,7 +2089,7 @@ exports.checkBypass = checkBypass; const debug = __nccwpck_require__(427) const { MAX_LENGTH, MAX_SAFE_INTEGER } = __nccwpck_require__(293) -const { re, t } = __nccwpck_require__(523) +const { safeRe: re, t } = __nccwpck_require__(523) const parseOptions = __nccwpck_require__(785) const { compareIdentifiers } = __nccwpck_require__(463) @@ -2105,7 +2105,7 @@ class SemVer { version = version.version } } else if (typeof version !== 'string') { - throw new TypeError(`Invalid Version: ${version}`) + throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`) } if (version.length > MAX_LENGTH) { @@ -2264,36 +2264,36 @@ class SemVer { // preminor will bump the version up to the next minor release, and immediately // down to pre-release. premajor and prepatch work the same way. - inc (release, identifier) { + inc (release, identifier, identifierBase) { switch (release) { case 'premajor': this.prerelease.length = 0 this.patch = 0 this.minor = 0 this.major++ - this.inc('pre', identifier) + this.inc('pre', identifier, identifierBase) break case 'preminor': this.prerelease.length = 0 this.patch = 0 this.minor++ - this.inc('pre', identifier) + this.inc('pre', identifier, identifierBase) break case 'prepatch': // If this is already a prerelease, it will bump to the next version // drop any prereleases that might already exist, since they are not // relevant at this point. this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) + this.inc('patch', identifier, identifierBase) + this.inc('pre', identifier, identifierBase) break // If the input is a non-prerelease version, this acts the same as // prepatch. case 'prerelease': if (this.prerelease.length === 0) { - this.inc('patch', identifier) + this.inc('patch', identifier, identifierBase) } - this.inc('pre', identifier) + this.inc('pre', identifier, identifierBase) break case 'major': @@ -2335,9 +2335,15 @@ class SemVer { break // This probably shouldn't be used publicly. // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. - case 'pre': + case 'pre': { + const base = Number(identifierBase) ? 1 : 0 + + if (!identifier && identifierBase === false) { + throw new Error('invalid increment argument: identifier is empty') + } + if (this.prerelease.length === 0) { - this.prerelease = [0] + this.prerelease = [base] } else { let i = this.prerelease.length while (--i >= 0) { @@ -2348,27 +2354,36 @@ class SemVer { } if (i === -1) { // didn't increment anything - this.prerelease.push(0) + if (identifier === this.prerelease.join('.') && identifierBase === false) { + throw new Error('invalid increment argument: identifier already exists') + } + this.prerelease.push(base) } } if (identifier) { // 1.2.0-beta.1 bumps to 1.2.0-beta.2, // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + let prerelease = [identifier, base] + if (identifierBase === false) { + prerelease = [identifier] + } if (compareIdentifiers(this.prerelease[0], identifier) === 0) { if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] + this.prerelease = prerelease } } else { - this.prerelease = [identifier, 0] + this.prerelease = prerelease } } break - + } default: throw new Error(`invalid increment argument: ${release}`) } - this.format() - this.raw = this.version + this.raw = this.format() + if (this.build.length) { + this.raw += `+${this.build.join('.')}` + } return this } } @@ -2401,35 +2416,18 @@ module.exports = minor /***/ 925: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const { MAX_LENGTH } = __nccwpck_require__(293) -const { re, t } = __nccwpck_require__(523) const SemVer = __nccwpck_require__(88) - -const parseOptions = __nccwpck_require__(785) -const parse = (version, options) => { - options = parseOptions(options) - +const parse = (version, options, throwErrors = false) => { if (version instanceof SemVer) { return version } - - if (typeof version !== 'string') { - return null - } - - if (version.length > MAX_LENGTH) { - return null - } - - const r = options.loose ? re[t.LOOSE] : re[t.FULL] - if (!r.test(version)) { - return null - } - try { return new SemVer(version, options) } catch (er) { - return null + if (!throwErrors) { + return null + } + throw er } } @@ -2475,11 +2473,29 @@ const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || // Max safe segment length for coercion. const MAX_SAFE_COMPONENT_LENGTH = 16 +// Max safe length for a build identifier. The max length minus 6 characters for +// the shortest version with a build 0.0.0+BUILD. +const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 + +const RELEASE_TYPES = [ + 'major', + 'premajor', + 'minor', + 'preminor', + 'patch', + 'prepatch', + 'prerelease', +] + module.exports = { - SEMVER_SPEC_VERSION, MAX_LENGTH, - MAX_SAFE_INTEGER, MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_SAFE_INTEGER, + RELEASE_TYPES, + SEMVER_SPEC_VERSION, + FLAG_INCLUDE_PRERELEASE: 0b001, + FLAG_LOOSE: 0b010, } @@ -2534,16 +2550,20 @@ module.exports = { /***/ 785: /***/ ((module) => { -// parse out just the options we care about so we always get a consistent -// obj with keys in a consistent order. -const opts = ['includePrerelease', 'loose', 'rtl'] -const parseOptions = options => - !options ? {} - : typeof options !== 'object' ? { loose: true } - : opts.filter(k => options[k]).reduce((o, k) => { - o[k] = true - return o - }, {}) +// parse out just the options we care about +const looseOption = Object.freeze({ loose: true }) +const emptyOpts = Object.freeze({ }) +const parseOptions = options => { + if (!options) { + return emptyOpts + } + + if (typeof options !== 'object') { + return looseOption + } + + return options +} module.exports = parseOptions @@ -2552,22 +2572,48 @@ module.exports = parseOptions /***/ 523: /***/ ((module, exports, __nccwpck_require__) => { -const { MAX_SAFE_COMPONENT_LENGTH } = __nccwpck_require__(293) +const { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH } = __nccwpck_require__(293) const debug = __nccwpck_require__(427) exports = module.exports = {} // The actual regexps go on exports.re const re = exports.re = [] +const safeRe = exports.safeRe = [] const src = exports.src = [] const t = exports.t = {} let R = 0 +const LETTERDASHNUMBER = '[a-zA-Z0-9-]' + +// Replace some greedy regex tokens to prevent regex dos issues. These regex are +// used internally via the safeRe object since all inputs in this library get +// normalized first to trim and collapse all extra whitespace. The original +// regexes are exported for userland consumption and lower level usage. A +// future breaking change could export the safer regex only with a note that +// all input should have extra whitespace removed. +const safeRegexReplacements = [ + ['\\s', 1], + ['\\d', MAX_SAFE_COMPONENT_LENGTH], + [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], +] + +const makeSafeRegex = (value) => { + for (const [token, max] of safeRegexReplacements) { + value = value + .split(`${token}*`).join(`${token}{0,${max}}`) + .split(`${token}+`).join(`${token}{1,${max}}`) + } + return value +} + const createToken = (name, value, isGlobal) => { + const safe = makeSafeRegex(value) const index = R++ debug(name, index, value) t[name] = index src[index] = value re[index] = new RegExp(value, isGlobal ? 'g' : undefined) + safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined) } // The following Regular Expressions can be used for tokenizing, @@ -2577,13 +2623,13 @@ const createToken = (name, value, isGlobal) => { // A single `0`, or a non-zero digit followed by zero or more digits. createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') -createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') +createToken('NUMERICIDENTIFIERLOOSE', '\\d+') // ## Non-numeric Identifier // Zero or more digits, followed by a letter or hyphen, and then zero or // more letters, digits, or hyphens. -createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') +createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`) // ## Main Version // Three dot-separated numeric identifiers. @@ -2618,7 +2664,7 @@ createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] // ## Build Metadata Identifier // Any combination of digits, letters, or hyphens. -createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') +createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`) // ## Build Metadata // Plus sign, followed by one or more period-separated build metadata From 512d6b979962734e1f4de9185f37aba0c794c9e5 Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Tue, 25 Jul 2023 21:02:58 +0800 Subject: [PATCH 089/187] create unit test --- tests/unit/FileUtilsTest.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tests/unit/FileUtilsTest.js diff --git a/tests/unit/FileUtilsTest.js b/tests/unit/FileUtilsTest.js new file mode 100644 index 000000000000..f439262e41d1 --- /dev/null +++ b/tests/unit/FileUtilsTest.js @@ -0,0 +1,37 @@ +import * as FileUtils from '../../src/libs/fileDownload/FileUtils'; + +describe('FileUtils', () => { + describe('splitExtensionFromFileName', () => { + it('should return correct file name and extensions', () => { + const file = FileUtils.splitExtensionFromFileName('image.jpg'); + expect(file.fileName).toEqual('image'); + expect(file.fileExtension).toEqual('jpg'); + }); + + it('should return correct file name and extensions even with multiple dots on the file name', () => { + const file = FileUtils.splitExtensionFromFileName('image.pdf.jpg'); + expect(file.fileName).toEqual('image.pdf'); + expect(file.fileExtension).toEqual('jpg'); + }); + + it('should return empty extension if the file name does not have it', () => { + const file = FileUtils.splitExtensionFromFileName('image'); + expect(file.fileName).toEqual('image'); + expect(file.fileExtension).toEqual(''); + }); + }); + + describe('appendTimeToFileName', () => { + it('should append current time to the end of the file name', () => { + const actualFileName = FileUtils.appendTimeToFileName('image.jpg'); + const expectedFileName = `image - ${new Date().toISOString()}.jpg`; + expect(actualFileName).toEqual(expectedFileName); + }); + + it('should append current time to the end of the file name without extension', () => { + const actualFileName = FileUtils.appendTimeToFileName('image'); + const expectedFileName = `image - ${new Date().toISOString()}`; + expect(actualFileName).toEqual(expectedFileName); + }); + }); +}); From b721be4e89c6a268db7012612fd308df89f5ee6b Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Tue, 25 Jul 2023 21:05:38 +0800 Subject: [PATCH 090/187] update wording --- tests/unit/FileUtilsTest.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/FileUtilsTest.js b/tests/unit/FileUtilsTest.js index f439262e41d1..05633b231fd9 100644 --- a/tests/unit/FileUtilsTest.js +++ b/tests/unit/FileUtilsTest.js @@ -2,13 +2,13 @@ import * as FileUtils from '../../src/libs/fileDownload/FileUtils'; describe('FileUtils', () => { describe('splitExtensionFromFileName', () => { - it('should return correct file name and extensions', () => { + it('should return correct file name and extension', () => { const file = FileUtils.splitExtensionFromFileName('image.jpg'); expect(file.fileName).toEqual('image'); expect(file.fileExtension).toEqual('jpg'); }); - it('should return correct file name and extensions even with multiple dots on the file name', () => { + it('should return correct file name and extension even with multiple dots on the file name', () => { const file = FileUtils.splitExtensionFromFileName('image.pdf.jpg'); expect(file.fileName).toEqual('image.pdf'); expect(file.fileExtension).toEqual('jpg'); From 9ae3e9b9c2dd8abe4ccb91011e8b92793859463f Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Tue, 25 Jul 2023 21:07:07 +0800 Subject: [PATCH 091/187] prettier --- tests/unit/FileUtilsTest.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/FileUtilsTest.js b/tests/unit/FileUtilsTest.js index 05633b231fd9..e03441840010 100644 --- a/tests/unit/FileUtilsTest.js +++ b/tests/unit/FileUtilsTest.js @@ -6,8 +6,8 @@ describe('FileUtils', () => { const file = FileUtils.splitExtensionFromFileName('image.jpg'); expect(file.fileName).toEqual('image'); expect(file.fileExtension).toEqual('jpg'); - }); - + }); + it('should return correct file name and extension even with multiple dots on the file name', () => { const file = FileUtils.splitExtensionFromFileName('image.pdf.jpg'); expect(file.fileName).toEqual('image.pdf'); From b399e3a266da36b19b491debf5b51e67147248c4 Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Tue, 25 Jul 2023 18:59:26 +0100 Subject: [PATCH 092/187] remove comment --- src/libs/ReportUtils.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index 1b3b15ca495a..b34842790695 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -2543,10 +2543,6 @@ function shouldReportShowSubscript(report) { return false; } - // if (isMoneyRequestReport(report)) { - // return false; - // } - if (isPolicyExpenseChat(report) && !isChatThread(report) && !isTaskReport(report) && !report.isOwnPolicyExpenseChat) { return true; } From 3c2fa2a00d4f98ce2aaca3af571fb4e98854b4b3 Mon Sep 17 00:00:00 2001 From: Georgia Monahan <38015950+grgia@users.noreply.github.com> Date: Tue, 25 Jul 2023 18:59:58 +0100 Subject: [PATCH 093/187] Update src/libs/ReportUtils.js Co-authored-by: Rajat Parashar --- src/libs/ReportUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index b34842790695..43a3dc1b137f 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -643,7 +643,7 @@ function isExpenseRequest(report) { function isIOURequest(report) { if (isThread(report)) { const parentReportAction = ReportActionsUtils.getParentReportAction(report); - const parentReport = lodashGet(allReports, [`${ONYXKEYS.COLLECTION.REPORT}${report.parentReportID}`]); + const parentReport = allReports[`${ONYXKEYS.COLLECTION.REPORT}${report.parentReportID}`]; return isIOUReport(parentReport) && ReportActionsUtils.isTransactionThread(parentReportAction); } return false; From 1000cb93b5ade8a4e770e9276b4ac00226a474b4 Mon Sep 17 00:00:00 2001 From: Anusha Date: Tue, 25 Jul 2023 23:17:46 +0500 Subject: [PATCH 094/187] update default values --- src/pages/home/report/ReportActionItemFragment.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/pages/home/report/ReportActionItemFragment.js b/src/pages/home/report/ReportActionItemFragment.js index dc5ab02b6f6e..982d000f3263 100644 --- a/src/pages/home/report/ReportActionItemFragment.js +++ b/src/pages/home/report/ReportActionItemFragment.js @@ -83,12 +83,7 @@ const defaultProps = { source: '', style: [], delegateAccountID: 0, - actorIcon: { - name: '', - source: '', - type: '', - id: 0, - }, + actorIcon: {}, }; function ReportActionItemFragment(props) { From ec6de1bbdde9ffc797787444fcbeb32b8e466c44 Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Wed, 26 Jul 2023 11:56:31 +0800 Subject: [PATCH 095/187] add jsdoc --- src/libs/fileDownload/FileUtils.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libs/fileDownload/FileUtils.js b/src/libs/fileDownload/FileUtils.js index 3a9751aeb7bf..4166ad8d5a32 100644 --- a/src/libs/fileDownload/FileUtils.js +++ b/src/libs/fileDownload/FileUtils.js @@ -118,6 +118,10 @@ function cleanFileName(fileName) { return fileName.replace(/[^a-zA-Z0-9\-._]/g, '_'); } +/** + * @param {String} fileName + * @returns {String} + */ function appendTimeToFileName(fileName) { const file = splitExtensionFromFileName(fileName); let newFileName = `${file.fileName} - ${new Date().toISOString()}`; From 991306434dc0ec221bed05139994dfb1d3ed33ec Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Wed, 26 Jul 2023 12:10:19 +0800 Subject: [PATCH 096/187] rename function --- src/libs/fileDownload/getAttachmentDetails.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/fileDownload/getAttachmentDetails.js b/src/libs/fileDownload/getAttachmentDetails.js index 8105a78c4799..72cbad115681 100644 --- a/src/libs/fileDownload/getAttachmentDetails.js +++ b/src/libs/fileDownload/getAttachmentDetails.js @@ -6,7 +6,7 @@ import tryResolveUrlFromApiRoot from '../tryResolveUrlFromApiRoot'; * @param {String} html * @returns {Object} */ -export default function getAttachmentName(html) { +export default function getAttachmentDetails(html) { // Files can be rendered either as anchor tag or as an image so based on that we have to form regex. const IS_IMAGE_TAG = //i.test(html); const PREVIEW_SOURCE_REGEX = new RegExp(`${CONST.ATTACHMENT_PREVIEW_ATTRIBUTE}*=*"(.+?)"`, 'i'); From 8c2f618bc8775f5a68dbaed2d2fb31675054cccd Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Wed, 26 Jul 2023 09:08:21 +0100 Subject: [PATCH 097/187] fix subscript expenseRequest borderRadius bug --- src/components/SubscriptAvatar.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/SubscriptAvatar.js b/src/components/SubscriptAvatar.js index 64faafc0ba3e..1c6f0a38c3d0 100644 --- a/src/components/SubscriptAvatar.js +++ b/src/components/SubscriptAvatar.js @@ -55,6 +55,7 @@ function SubscriptAvatar(props) { > Date: Wed, 26 Jul 2023 10:19:13 +0200 Subject: [PATCH 098/187] Trigger From 713cf0bfaa3a2c6469e0a58b967f2255868078c4 Mon Sep 17 00:00:00 2001 From: makiour Date: Wed, 26 Jul 2023 12:55:37 +0100 Subject: [PATCH 099/187] Fix currency changes after refresh although URL has currency params --- src/pages/iou/steps/MoneyRequestAmountPage.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/pages/iou/steps/MoneyRequestAmountPage.js b/src/pages/iou/steps/MoneyRequestAmountPage.js index e25f7acb0553..9f6ea55d14b4 100755 --- a/src/pages/iou/steps/MoneyRequestAmountPage.js +++ b/src/pages/iou/steps/MoneyRequestAmountPage.js @@ -276,16 +276,12 @@ function MoneyRequestAmountPage(props) { }, [props.iou.participants, props.iou.amount, props.iou.id]); useEffect(() => { - if (!props.route.params.currency) { + if (props.route.params.currency) { + setSelectedCurrencyCode(props.route.params.currency); return; } - - setSelectedCurrencyCode(props.route.params.currency); - }, [props.route.params.currency]); - - useEffect(() => { setSelectedCurrencyCode(props.iou.currency); - }, [props.iou.currency]); + }, [props.route.params.currency, props.iou.currency]); useEffect(() => { saveAmountToState(props.iou.currency, props.iou.amount); From 51c1439801255f0a4989794773788fec6ac34d04 Mon Sep 17 00:00:00 2001 From: makiour Date: Wed, 26 Jul 2023 13:21:10 +0100 Subject: [PATCH 100/187] [Ignore] Trigger CLA check --- src/pages/iou/steps/MoneyRequestAmountPage.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/iou/steps/MoneyRequestAmountPage.js b/src/pages/iou/steps/MoneyRequestAmountPage.js index 9f6ea55d14b4..1839b645b8a1 100755 --- a/src/pages/iou/steps/MoneyRequestAmountPage.js +++ b/src/pages/iou/steps/MoneyRequestAmountPage.js @@ -280,6 +280,7 @@ function MoneyRequestAmountPage(props) { setSelectedCurrencyCode(props.route.params.currency); return; } + setSelectedCurrencyCode(props.iou.currency); }, [props.route.params.currency, props.iou.currency]); From aeb76f2229a5cfbdc0f05f8aaaa419375f8c6d2d Mon Sep 17 00:00:00 2001 From: Chirag Arora Date: Wed, 26 Jul 2023 22:29:16 +0530 Subject: [PATCH 101/187] reapplying changes --- src/components/AddressSearch/index.js | 1 + src/components/OptionsSelector/BaseOptionsSelector.js | 1 + src/components/RoomNameInput/index.js | 1 + .../SelectionListRadio/BaseSelectionListRadio.js | 1 + src/pages/settings/Payments/AddDebitCardPage.js | 1 + src/pages/settings/Profile/DisplayNamePage.js | 2 ++ .../settings/Profile/PersonalDetails/AddressPage.js | 3 +++ .../settings/Profile/PersonalDetails/LegalNamePage.js | 2 ++ src/pages/tasks/NewTaskDetailsPage.js | 10 +++++----- src/pages/workspace/WorkspaceMembersPage.js | 1 + src/pages/workspace/WorkspaceSettingsPage.js | 1 + 11 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/components/AddressSearch/index.js b/src/components/AddressSearch/index.js index 795e45c6f892..e8a41ec35435 100644 --- a/src/components/AddressSearch/index.js +++ b/src/components/AddressSearch/index.js @@ -278,6 +278,7 @@ function AddressSearch(props) { } }, maxLength: props.maxInputLength, + spellCheck: false, }} styles={{ textInputContainer: [styles.flexColumn], diff --git a/src/components/OptionsSelector/BaseOptionsSelector.js b/src/components/OptionsSelector/BaseOptionsSelector.js index 0d05e8401cce..aef909f1d5c2 100755 --- a/src/components/OptionsSelector/BaseOptionsSelector.js +++ b/src/components/OptionsSelector/BaseOptionsSelector.js @@ -326,6 +326,7 @@ class BaseOptionsSelector extends Component { }} selectTextOnFocus blurOnSubmit={Boolean(this.state.allOptions.length)} + spellCheck={false} /> ); const optionsList = ( diff --git a/src/components/RoomNameInput/index.js b/src/components/RoomNameInput/index.js index 0acfde3dedcf..27b9d11c6d34 100644 --- a/src/components/RoomNameInput/index.js +++ b/src/components/RoomNameInput/index.js @@ -76,6 +76,7 @@ class RoomNameInput extends Component { onBlur={this.props.onBlur} autoFocus={this.props.autoFocus} maxLength={CONST.REPORT.MAX_ROOM_NAME_LENGTH} + spellCheck={false} /> ); } diff --git a/src/components/SelectionListRadio/BaseSelectionListRadio.js b/src/components/SelectionListRadio/BaseSelectionListRadio.js index be41b0e170fd..0d6218639d90 100644 --- a/src/components/SelectionListRadio/BaseSelectionListRadio.js +++ b/src/components/SelectionListRadio/BaseSelectionListRadio.js @@ -230,6 +230,7 @@ function BaseSelectionListRadio(props) { onChangeText={props.onChangeText} keyboardType={props.keyboardType} selectTextOnFocus + spellCheck={false} /> )} diff --git a/src/pages/settings/Payments/AddDebitCardPage.js b/src/pages/settings/Payments/AddDebitCardPage.js index 13da43710428..6cb979b633bd 100644 --- a/src/pages/settings/Payments/AddDebitCardPage.js +++ b/src/pages/settings/Payments/AddDebitCardPage.js @@ -120,6 +120,7 @@ function DebitCardPage(props) { accessibilityLabel={translate('addDebitCardPage.nameOnCard')} accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT} ref={(ref) => (nameOnCardRef.current = ref)} + spellCheck={false} /> @@ -105,6 +106,7 @@ function DisplayNamePage(props) { defaultValue={lodashGet(currentUserDetails, 'lastName', '')} maxLength={CONST.DISPLAY_NAME.MAX_LENGTH} autoCapitalize="words" + spellCheck={false} /> diff --git a/src/pages/settings/Profile/PersonalDetails/AddressPage.js b/src/pages/settings/Profile/PersonalDetails/AddressPage.js index c578e32d9e42..65c106a4e9aa 100644 --- a/src/pages/settings/Profile/PersonalDetails/AddressPage.js +++ b/src/pages/settings/Profile/PersonalDetails/AddressPage.js @@ -167,6 +167,7 @@ function AddressPage({privatePersonalDetails}) { accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT} defaultValue={street2 || ''} maxLength={CONST.FORM_CHARACTER_LIMIT} + spellCheck={false} /> @@ -192,6 +193,7 @@ function AddressPage({privatePersonalDetails}) { accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT} defaultValue={address.state || ''} maxLength={CONST.FORM_CHARACTER_LIMIT} + spellCheck={false} /> )} @@ -202,6 +204,7 @@ function AddressPage({privatePersonalDetails}) { accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT} defaultValue={address.city || ''} maxLength={CONST.FORM_CHARACTER_LIMIT} + spellCheck={false} /> @@ -107,6 +108,7 @@ function LegalNamePage(props) { accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT} defaultValue={legalLastName} maxLength={CONST.DISPLAY_NAME.MAX_LENGTH} + spellCheck={false} /> diff --git a/src/pages/tasks/NewTaskDetailsPage.js b/src/pages/tasks/NewTaskDetailsPage.js index 12bed608b88c..52b43a5c49d5 100644 --- a/src/pages/tasks/NewTaskDetailsPage.js +++ b/src/pages/tasks/NewTaskDetailsPage.js @@ -35,7 +35,7 @@ const defaultProps = { task: {}, }; -function NewTaskPage(props) { +function NewTaskDetailsPage(props) { const inputRef = useRef(); const [taskTitle, setTaskTitle] = useState(props.task.title); const [taskDescription, setTaskDescription] = useState(props.task.description || ''); @@ -121,9 +121,9 @@ function NewTaskPage(props) { ); } -NewTaskPage.displayName = 'NewTaskPage'; -NewTaskPage.propTypes = propTypes; -NewTaskPage.defaultProps = defaultProps; +NewTaskDetailsPage.displayName = 'NewTaskDetailsPage'; +NewTaskDetailsPage.propTypes = propTypes; +NewTaskDetailsPage.defaultProps = defaultProps; export default compose( withOnyx({ @@ -135,4 +135,4 @@ export default compose( }, }), withLocalize, -)(NewTaskPage); +)(NewTaskDetailsPage); diff --git a/src/pages/workspace/WorkspaceMembersPage.js b/src/pages/workspace/WorkspaceMembersPage.js index e758d738d964..5e9f80613698 100644 --- a/src/pages/workspace/WorkspaceMembersPage.js +++ b/src/pages/workspace/WorkspaceMembersPage.js @@ -453,6 +453,7 @@ function WorkspaceMembersPage(props) { onChangeText={setSearchValue} label={props.translate('optionsSelector.findMember')} accessibilityLabel={props.translate('optionsSelector.findMember')} + spellCheck={false} /> {data.length > 0 ? ( diff --git a/src/pages/workspace/WorkspaceSettingsPage.js b/src/pages/workspace/WorkspaceSettingsPage.js index 50875a17b735..815d64bce0a5 100644 --- a/src/pages/workspace/WorkspaceSettingsPage.js +++ b/src/pages/workspace/WorkspaceSettingsPage.js @@ -135,6 +135,7 @@ function WorkspaceSettingsPage(props) { containerStyles={[styles.mt4]} defaultValue={props.policy.name} maxLength={CONST.WORKSPACE_NAME_CHARACTER_LIMIT} + spellCheck={false} /> Date: Thu, 27 Jul 2023 06:27:24 +0530 Subject: [PATCH 102/187] fix: Select and copy does not copy New Expensify link in link format --- .../AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index 9e1ceaad593e..da118b8a7552 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -77,9 +77,9 @@ function BaseAnchorForCommentsOnly(props) { accessibilityRole={CONST.ACCESSIBILITY_ROLE.LINK} hrefAttrs={{ rel: props.rel, - target: isEmail ? '_self' : props.target, + target: isEmail || !linkProps.href ? '_self' : props.target, }} - href={linkProps.href} + href={linkProps.href || props.href} // Add testID so it gets selected as an anchor tag by SelectionScraper testID="a" // eslint-disable-next-line react/jsx-props-no-spreading From 06257218a16c9156135bc85644a3c042f75f5108 Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Thu, 27 Jul 2023 12:46:36 +0800 Subject: [PATCH 103/187] make the date format consistent --- src/libs/fileDownload/FileUtils.js | 6 +++--- tests/unit/FileUtilsTest.js | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libs/fileDownload/FileUtils.js b/src/libs/fileDownload/FileUtils.js index 4166ad8d5a32..fc9aed8b5345 100644 --- a/src/libs/fileDownload/FileUtils.js +++ b/src/libs/fileDownload/FileUtils.js @@ -1,7 +1,7 @@ import {Alert, Linking} from 'react-native'; -import moment from 'moment'; import CONST from '../../CONST'; import * as Localize from '../Localize'; +import DateUtils from '../DateUtils'; /** * Show alert on successful attachment download @@ -57,7 +57,7 @@ function getAttachmentName(url) { if (!url) { return ''; } - return `${moment().format('DDMMYYYYHHmmss')}.${url.split(/[#?]/)[0].split('.').pop().trim()}`; + return `${DateUtils.getDBTime()}.${url.split(/[#?]/)[0].split('.').pop().trim()}`; } /** @@ -124,7 +124,7 @@ function cleanFileName(fileName) { */ function appendTimeToFileName(fileName) { const file = splitExtensionFromFileName(fileName); - let newFileName = `${file.fileName} - ${new Date().toISOString()}`; + let newFileName = `${file.fileName} - ${DateUtils.getDBTime()}`; if (file.fileExtension) { newFileName += `.${file.fileExtension}`; } diff --git a/tests/unit/FileUtilsTest.js b/tests/unit/FileUtilsTest.js index e03441840010..8e6a0b998944 100644 --- a/tests/unit/FileUtilsTest.js +++ b/tests/unit/FileUtilsTest.js @@ -1,3 +1,4 @@ +import DateUtils from '../../src/libs/DateUtils'; import * as FileUtils from '../../src/libs/fileDownload/FileUtils'; describe('FileUtils', () => { @@ -24,13 +25,13 @@ describe('FileUtils', () => { describe('appendTimeToFileName', () => { it('should append current time to the end of the file name', () => { const actualFileName = FileUtils.appendTimeToFileName('image.jpg'); - const expectedFileName = `image - ${new Date().toISOString()}.jpg`; + const expectedFileName = `image - ${DateUtils.getDBTime()}.jpg`; expect(actualFileName).toEqual(expectedFileName); }); it('should append current time to the end of the file name without extension', () => { const actualFileName = FileUtils.appendTimeToFileName('image'); - const expectedFileName = `image - ${new Date().toISOString()}`; + const expectedFileName = `image - ${DateUtils.getDBTime()}`; expect(actualFileName).toEqual(expectedFileName); }); }); From aacee6296f3e22ed607f3f21aeb6e9aa259a27d9 Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Thu, 27 Jul 2023 09:29:02 +0200 Subject: [PATCH 104/187] fix: remove unnecessary default values --- .../AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index 8c22973977d0..89fb98e46411 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -31,7 +31,7 @@ const propTypes = { /* * This is a default anchor component for regular links. */ -function BaseAnchorForCommentsOnly({onPressIn = () => {}, onPressOut = () => {}, href = '', rel = '', target = '', children = null, style = {}, onPress = undefined, ...rest}) { +function BaseAnchorForCommentsOnly({onPressIn, onPressOut, href = '', rel = '', target = '', children = null, style = {}, onPress, ...rest}) { useEffect( () => () => { ReportActionContextMenu.hideContextMenu(); From fade5bcc5e7864a111c24ac9f51a2a788cf2b7d7 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 27 Jul 2023 11:54:04 +0200 Subject: [PATCH 105/187] Improve typescript performacne --- .gitignore | 3 +++ tsconfig.json | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 94c646a04246..a71a8a8dd522 100644 --- a/.gitignore +++ b/.gitignore @@ -95,3 +95,6 @@ storybook-static # E2E test reports tests/e2e/results/ .reassure + +# Typescript +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index b224f63add9b..d138ce81e36c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,7 @@ "es2022.string" ], "allowJs": true, + "checkJs": false, "jsx": "react-native", "noEmit": true, "isolatedModules": true, @@ -28,7 +29,8 @@ "moduleResolution": "node", "resolveJsonModule": true, "allowSyntheticDefaultImports": true, - "skipLibCheck": true + "skipLibCheck": true, + "incremental": true }, "exclude": ["**/node_modules/*", "**/dist/*", ".github/actions/**/index.js"], "include": ["src", "desktop", "web", "docs", "assets", "config", "tests", "jest", "__mocks__", ".github/**/*", ".storybook/**/*"] From 8b2bf647730dfd5a24a2dce78f412f6667d8c74d Mon Sep 17 00:00:00 2001 From: VH Date: Thu, 27 Jul 2023 17:01:04 +0700 Subject: [PATCH 106/187] Hide report thread in LHN if it doesn't have any comments regardless its pinned status --- src/libs/ReportUtils.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index 8b3a0cacffca..19811e05f9d6 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -2242,9 +2242,19 @@ function shouldReportBeInOptionList(report, currentReportId, isInGSDMode, iouRep return true; } - // Include reports if they have a draft, are pinned, or have an outstanding IOU + // Include reports if they have a draft or have an outstanding IOU // These are always relevant to the user no matter what view mode the user prefers - if (report.hasDraft || report.isPinned || isWaitingForIOUActionFromCurrentUser(report, iouReports)) { + if (report.hasDraft || isWaitingForIOUActionFromCurrentUser(report, iouReports)) { + return true; + } + + // Hide only chat threads that haven't been commented on (other threads are actionable) + if (isChatThread(report) && !report.lastMessageText) { + return false; + } + + // Include reports if they are pinned + if (report.isPinned) { return true; } @@ -2269,11 +2279,6 @@ function shouldReportBeInOptionList(report, currentReportId, isInGSDMode, iouRep return false; } - // Hide only chat threads that haven't been commented on (other threads are actionable) - if (isChatThread(report) && !report.lastMessageText) { - return false; - } - return true; } From 9058daddc82c5fe59f4ff17908da269f903c18a0 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 27 Jul 2023 13:41:44 +0200 Subject: [PATCH 107/187] Add rulesdir/onyx-props-must-have-default rule to both JS and TS --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2450cfe20827..6edd59b2e402 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -31,6 +31,7 @@ module.exports = { { files: ['*.js', '*.jsx', '*.ts', '*.tsx'], rules: { + 'rulesdir/onyx-props-must-have-default': 'off', 'react-native-a11y/has-accessibility-hint': ['off'], 'react-native-a11y/has-valid-accessibility-descriptors': [ 'error', @@ -130,7 +131,6 @@ module.exports = { 'valid-jsdoc': 'off', 'jsdoc/no-types': 'error', 'import/no-extraneous-dependencies': 'off', - 'rulesdir/onyx-props-must-have-default': 'off', 'rulesdir/prefer-underscore-method': 'off', 'rulesdir/prefer-import-module-contents': 'off', 'react/require-default-props': 'off', From 0176b1fb16000298d0fc94a6593de7efa35dbdc4 Mon Sep 17 00:00:00 2001 From: makiour Date: Thu, 27 Jul 2023 17:52:02 +0100 Subject: [PATCH 108/187] [Ignore] Undo last commit to trigger CLA checks --- src/pages/iou/steps/MoneyRequestAmountPage.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/iou/steps/MoneyRequestAmountPage.js b/src/pages/iou/steps/MoneyRequestAmountPage.js index 1839b645b8a1..9f6ea55d14b4 100755 --- a/src/pages/iou/steps/MoneyRequestAmountPage.js +++ b/src/pages/iou/steps/MoneyRequestAmountPage.js @@ -280,7 +280,6 @@ function MoneyRequestAmountPage(props) { setSelectedCurrencyCode(props.route.params.currency); return; } - setSelectedCurrencyCode(props.iou.currency); }, [props.route.params.currency, props.iou.currency]); From 16a5195aa8c2aa324229a147b341635b70781417 Mon Sep 17 00:00:00 2001 From: dhairyasenjaliya Date: Fri, 28 Jul 2023 00:34:02 +0530 Subject: [PATCH 109/187] Remove ConfirmModal From AvatarPicker --- src/components/AvatarWithImagePicker.js | 58 ++++++++++------------- src/languages/en.js | 1 - src/languages/es.js | 1 - src/pages/settings/Profile/ProfilePage.js | 1 + 4 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/components/AvatarWithImagePicker.js b/src/components/AvatarWithImagePicker.js index cea4ce944da9..97834e4db0ba 100644 --- a/src/components/AvatarWithImagePicker.js +++ b/src/components/AvatarWithImagePicker.js @@ -10,7 +10,6 @@ import * as Expensicons from './Icon/Expensicons'; import styles from '../styles/styles'; import themeColors from '../styles/themes/default'; import AttachmentPicker from './AttachmentPicker'; -import ConfirmModal from './ConfirmModal'; import AvatarCropModal from './AvatarCropModal/AvatarCropModal'; import OfflineWithFeedback from './OfflineWithFeedback'; import withLocalize, {withLocalizePropTypes} from './withLocalize'; @@ -22,6 +21,7 @@ import stylePropTypes from '../styles/stylePropTypes'; import * as FileUtils from '../libs/fileDownload/FileUtils'; import getImageResolution from '../libs/fileDownload/getImageResolution'; import PressableWithoutFeedback from './Pressable/PressableWithoutFeedback'; +import DotIndicatorMessage from './DotIndicatorMessage'; const propTypes = { /** Avatar source to display */ @@ -103,16 +103,14 @@ class AvatarWithImagePicker extends React.Component { constructor(props) { super(props); this.animation = new SpinningIndicatorAnimation(); - this.hideErrorModal = this.hideErrorModal.bind(this); - this.showErrorModal = this.showErrorModal.bind(this); + this.setErrorName = this.setErrorName.bind(this); this.isValidSize = this.isValidSize.bind(this); this.showAvatarCropModal = this.showAvatarCropModal.bind(this); this.hideAvatarCropModal = this.hideAvatarCropModal.bind(this); this.state = { isMenuVisible: false, - isErrorModalVisible: false, - errorModalPrompt: '', - errorModalTitle: '', + shoudShowValidationError: false, + validationError: '', isAvatarCropModalOpen: false, imageName: '', imageUri: '', @@ -141,15 +139,10 @@ class AvatarWithImagePicker extends React.Component { } /** - * @param {String} title * @param {String} prompt */ - showErrorModal(title, prompt) { - this.setState({isErrorModalVisible: true, errorModalTitle: title, errorModalPrompt: prompt}); - } - - hideErrorModal() { - this.setState({isErrorModalVisible: false}); + setErrorName(prompt) { + this.setState({shoudShowValidationError: true, validationError: prompt}); } /** @@ -196,24 +189,17 @@ class AvatarWithImagePicker extends React.Component { */ showAvatarCropModal(image) { if (!this.isValidExtension(image)) { - this.showErrorModal( - this.props.translate('avatarWithImagePicker.imageUploadFailed'), - this.props.translate('avatarWithImagePicker.notAllowedExtension', {allowedExtensions: CONST.AVATAR_ALLOWED_EXTENSIONS}), - ); + this.setErrorName(this.props.translate('avatarWithImagePicker.notAllowedExtension', {allowedExtensions: CONST.AVATAR_ALLOWED_EXTENSIONS})); return; } if (!this.isValidSize(image)) { - this.showErrorModal( - this.props.translate('avatarWithImagePicker.imageUploadFailed'), - this.props.translate('avatarWithImagePicker.sizeExceeded', {maxUploadSizeInMB: CONST.AVATAR_MAX_ATTACHMENT_SIZE / (1024 * 1024)}), - ); + this.setErrorName(this.props.translate('avatarWithImagePicker.sizeExceeded', {maxUploadSizeInMB: CONST.AVATAR_MAX_ATTACHMENT_SIZE / (1024 * 1024)})); return; } this.isValidResolution(image).then((isValidResolution) => { if (!isValidResolution) { - this.showErrorModal( - this.props.translate('avatarWithImagePicker.imageUploadFailed'), + this.setErrorName( this.props.translate('avatarWithImagePicker.resolutionConstraints', { minHeightInPx: CONST.AVATAR_MIN_HEIGHT_PX, minWidthInPx: CONST.AVATAR_MIN_WIDTH_PX, @@ -226,6 +212,7 @@ class AvatarWithImagePicker extends React.Component { this.setState({ isAvatarCropModalOpen: true, + shoudShowValidationError: false, isMenuVisible: false, imageUri: image.uri, imageName: image.name, @@ -263,7 +250,14 @@ class AvatarWithImagePicker extends React.Component { icon: Expensicons.Trashcan, text: this.props.translate('avatarWithImagePicker.removePhoto'), onSelected: () => { - this.props.onImageRemoved(); + this.setState( + { + shoudShowValidationError: false, + }, + () => { + this.props.onImageRemoved(); + }, + ); }, }); } @@ -333,15 +327,13 @@ class AvatarWithImagePicker extends React.Component { - + {this.state.shoudShowValidationError && ( + + )} `The selected image exceeds the maximum upload size of ${maxUploadSizeInMB}MB.`, resolutionConstraints: ({minHeightInPx, minWidthInPx, maxHeightInPx, maxWidthInPx}) => diff --git a/src/languages/es.js b/src/languages/es.js index 4006f559eb1f..4bd2e9791cc8 100644 --- a/src/languages/es.js +++ b/src/languages/es.js @@ -400,7 +400,6 @@ export default { uploadPhoto: 'Subir foto', removePhoto: 'Eliminar foto', editImage: 'Editar foto', - imageUploadFailed: 'Error al cargar la imagen', deleteWorkspaceError: 'Lo sentimos, hubo un problema eliminando el avatar de su espacio de trabajo.', sizeExceeded: ({maxUploadSizeInMB}) => `La imagen supera el tamaño máximo de ${maxUploadSizeInMB}MB.`, resolutionConstraints: ({minHeightInPx, minWidthInPx, maxHeightInPx, maxWidthInPx}) => diff --git a/src/pages/settings/Profile/ProfilePage.js b/src/pages/settings/Profile/ProfilePage.js index 07db3d0cdffb..490d8629186f 100755 --- a/src/pages/settings/Profile/ProfilePage.js +++ b/src/pages/settings/Profile/ProfilePage.js @@ -108,6 +108,7 @@ function ProfilePage(props) { errors={lodashGet(props.currentUserPersonalDetails, 'errorFields.avatar', null)} errorRowStyles={[styles.mt6]} onErrorClose={PersonalDetails.clearAvatarErrors} + style={[styles.mh5]} /> {_.map(profileSettingsOptions, (detail, index) => ( From 67ab9f73d72019026d3bf5f1926ee89c96a85739 Mon Sep 17 00:00:00 2001 From: Anusha Date: Fri, 28 Jul 2023 00:37:58 +0500 Subject: [PATCH 110/187] avatar fix --- src/pages/home/report/ReportActionItemFragment.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/pages/home/report/ReportActionItemFragment.js b/src/pages/home/report/ReportActionItemFragment.js index 982d000f3263..009c1118400b 100644 --- a/src/pages/home/report/ReportActionItemFragment.js +++ b/src/pages/home/report/ReportActionItemFragment.js @@ -157,11 +157,7 @@ function ReportActionItemFragment(props) { Date: Fri, 28 Jul 2023 02:10:21 +0530 Subject: [PATCH 111/187] added more margin top to settle with below componment --- src/components/AvatarWithImagePicker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AvatarWithImagePicker.js b/src/components/AvatarWithImagePicker.js index 97834e4db0ba..386fee4ed8dd 100644 --- a/src/components/AvatarWithImagePicker.js +++ b/src/components/AvatarWithImagePicker.js @@ -329,7 +329,7 @@ class AvatarWithImagePicker extends React.Component { {this.state.shoudShowValidationError && ( From ab031410ea710ea539ce0bc3804cca7457999629 Mon Sep 17 00:00:00 2001 From: Nikhil Vats Date: Wed, 26 Jul 2023 17:23:55 +0530 Subject: [PATCH 112/187] Fix: hide draft icon when composer hides --- src/components/LHNOptionsList/OptionRowLHN.js | 6 +++++- src/components/LHNOptionsList/OptionRowLHNData.js | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/LHNOptionsList/OptionRowLHN.js b/src/components/LHNOptionsList/OptionRowLHN.js index 3030e2227fad..8063f079a387 100644 --- a/src/components/LHNOptionsList/OptionRowLHN.js +++ b/src/components/LHNOptionsList/OptionRowLHN.js @@ -45,6 +45,9 @@ const propTypes = { /** The item that should be rendered */ // eslint-disable-next-line react/forbid-prop-types optionItem: PropTypes.object, + + /** Whether user is allowed to comment so that we can hide the draft icon if user is not allowed to comment */ + isAllowedToComment: PropTypes.bool, }; const defaultProps = { @@ -54,6 +57,7 @@ const defaultProps = { style: null, optionItem: null, isFocused: false, + isAllowedToComment: false, }; function OptionRowLHN(props) { @@ -231,7 +235,7 @@ function OptionRowLHN(props) { fill={themeColors.success} /> )} - {optionItem.hasDraftComment && ( + {optionItem.hasDraftComment && props.isAllowedToComment && ( { + const {addWorkspaceRoomOrChatErrors} = ReportUtils.getReportOfflinePendingActionAndErrors(fullReport); + // if composer is hidden then user is not allowed to comment therefore draft icon should be hidden + return !ReportUtils.shouldHideComposer(fullReport, addWorkspaceRoomOrChatErrors); + }, [fullReport]); + useEffect(() => { if (!optionItem || optionItem.hasDraftComment || !comment || comment.length <= 0 || isFocused) { return; @@ -94,6 +101,7 @@ function OptionRowLHNData({shouldDisableFocusOptions, currentReportID, fullRepor {...propsToForward} isFocused={isFocused} optionItem={optionItem} + isAllowedToComment={isAllowedToComment} /> ); } From 6d414cd78c5656fbc4af27273391b9dfa1b2bc0d Mon Sep 17 00:00:00 2001 From: c3024 Date: Fri, 28 Jul 2023 07:22:12 +0530 Subject: [PATCH 113/187] use getIconsForParticipants for assignee in task --- src/libs/actions/Task.js | 5 ++--- src/pages/tasks/NewTaskPage.js | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index aa383e94ecdd..079f2d6e40d1 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -571,7 +571,7 @@ function clearOutTaskInfoAndNavigate(reportID) { * @param {Object} details * @returns {Object} */ -function getAssignee(details) { +function getAssignee(details, personalDetails) { if (!details) { return { icons: [], @@ -579,9 +579,8 @@ function getAssignee(details) { subtitle: '', }; } - const source = UserUtils.getAvatar(lodashGet(details, 'avatar', ''), lodashGet(details, 'accountID', -1)); return { - icons: [{source, type: 'avatar', name: details.login}], + icons: ReportUtils.getIconsForParticipants([details.accountID], personalDetails), displayName: details.displayName, subtitle: details.login, }; diff --git a/src/pages/tasks/NewTaskPage.js b/src/pages/tasks/NewTaskPage.js index 3e9cbb4dfdeb..d50c65ce119b 100644 --- a/src/pages/tasks/NewTaskPage.js +++ b/src/pages/tasks/NewTaskPage.js @@ -82,7 +82,7 @@ function NewTaskPage(props) { if (!assigneeDetails) { return setErrorMessage(props.translate('task.assigneeError')); } - const displayDetails = Task.getAssignee(assigneeDetails); + const displayDetails = Task.getAssignee(assigneeDetails, props.personalDetails); setAssignee(displayDetails); } From b1bd27e774a2b2924043299e2cd1e146a46836ac Mon Sep 17 00:00:00 2001 From: c3024 Date: Fri, 28 Jul 2023 08:11:20 +0530 Subject: [PATCH 114/187] add JSDoc personalDetails to getAssignee --- src/libs/actions/Task.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 079f2d6e40d1..af301f3ecbb9 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -569,6 +569,7 @@ function clearOutTaskInfoAndNavigate(reportID) { * Get the assignee data * * @param {Object} details + * @param {Object} personalDetails * @returns {Object} */ function getAssignee(details, personalDetails) { From fa463f0df2d1f9f810998b3060918b8c3d8072ef Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Fri, 28 Jul 2023 12:48:29 +0800 Subject: [PATCH 115/187] remove spaces between hyphen --- src/libs/fileDownload/FileUtils.js | 2 +- tests/unit/FileUtilsTest.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libs/fileDownload/FileUtils.js b/src/libs/fileDownload/FileUtils.js index fc9aed8b5345..9faa5c39626c 100644 --- a/src/libs/fileDownload/FileUtils.js +++ b/src/libs/fileDownload/FileUtils.js @@ -124,7 +124,7 @@ function cleanFileName(fileName) { */ function appendTimeToFileName(fileName) { const file = splitExtensionFromFileName(fileName); - let newFileName = `${file.fileName} - ${DateUtils.getDBTime()}`; + let newFileName = `${file.fileName}-${DateUtils.getDBTime()}`; if (file.fileExtension) { newFileName += `.${file.fileExtension}`; } diff --git a/tests/unit/FileUtilsTest.js b/tests/unit/FileUtilsTest.js index 8e6a0b998944..5b6ad7fe3ad3 100644 --- a/tests/unit/FileUtilsTest.js +++ b/tests/unit/FileUtilsTest.js @@ -25,13 +25,13 @@ describe('FileUtils', () => { describe('appendTimeToFileName', () => { it('should append current time to the end of the file name', () => { const actualFileName = FileUtils.appendTimeToFileName('image.jpg'); - const expectedFileName = `image - ${DateUtils.getDBTime()}.jpg`; + const expectedFileName = `image-${DateUtils.getDBTime()}.jpg`; expect(actualFileName).toEqual(expectedFileName); }); it('should append current time to the end of the file name without extension', () => { const actualFileName = FileUtils.appendTimeToFileName('image'); - const expectedFileName = `image - ${DateUtils.getDBTime()}`; + const expectedFileName = `image-${DateUtils.getDBTime()}`; expect(actualFileName).toEqual(expectedFileName); }); }); From 2777af34320c9c231b018174999557584192f41c Mon Sep 17 00:00:00 2001 From: joh42 <138504087+joh42@users.noreply.github.com> Date: Fri, 28 Jul 2023 10:34:12 +0200 Subject: [PATCH 116/187] Fixed regression from PR 23306 --- src/components/Form.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Form.js b/src/components/Form.js index ffcd3cbe8cd5..ba6b571dc43c 100644 --- a/src/components/Form.js +++ b/src/components/Form.js @@ -147,7 +147,10 @@ function Form(props) { setErrors(touchedInputErrors); } - lastValidatedValues.current = values; + const atLeastOneInputTouched = _.keys(touchedInputs.current).length > 0 + if (atLeastOneInputTouched) { + lastValidatedValues.current = values; + } return touchedInputErrors; }, From 873e2a62b929db0b9cfbcbee227c46ef5fb7f8e9 Mon Sep 17 00:00:00 2001 From: joh42 <138504087+joh42@users.noreply.github.com> Date: Fri, 28 Jul 2023 10:45:37 +0200 Subject: [PATCH 117/187] Corrected variable naming --- src/components/Form.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Form.js b/src/components/Form.js index ba6b571dc43c..9f93046b5d44 100644 --- a/src/components/Form.js +++ b/src/components/Form.js @@ -147,8 +147,8 @@ function Form(props) { setErrors(touchedInputErrors); } - const atLeastOneInputTouched = _.keys(touchedInputs.current).length > 0 - if (atLeastOneInputTouched) { + const isAtLeastOneInputTouched = _.keys(touchedInputs.current).length > 0 + if (isAtLeastOneInputTouched) { lastValidatedValues.current = values; } From f850a6011a53a7700dacdd942aa07100d7bc6dda Mon Sep 17 00:00:00 2001 From: joh42 <138504087+joh42@users.noreply.github.com> Date: Fri, 28 Jul 2023 10:46:38 +0200 Subject: [PATCH 118/187] added semicolon --- src/components/Form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Form.js b/src/components/Form.js index 9f93046b5d44..3ea5c13d68f4 100644 --- a/src/components/Form.js +++ b/src/components/Form.js @@ -147,7 +147,7 @@ function Form(props) { setErrors(touchedInputErrors); } - const isAtLeastOneInputTouched = _.keys(touchedInputs.current).length > 0 + const isAtLeastOneInputTouched = _.keys(touchedInputs.current).length > 0; if (isAtLeastOneInputTouched) { lastValidatedValues.current = values; } From 22be8c2a31dcc4fceae2c31d9f2c7aab23cfd702 Mon Sep 17 00:00:00 2001 From: dhairyasenjaliya Date: Fri, 28 Jul 2023 14:19:18 +0530 Subject: [PATCH 119/187] Rename Function --- src/components/AvatarWithImagePicker.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/AvatarWithImagePicker.js b/src/components/AvatarWithImagePicker.js index 386fee4ed8dd..c03fd1cdf767 100644 --- a/src/components/AvatarWithImagePicker.js +++ b/src/components/AvatarWithImagePicker.js @@ -103,7 +103,7 @@ class AvatarWithImagePicker extends React.Component { constructor(props) { super(props); this.animation = new SpinningIndicatorAnimation(); - this.setErrorName = this.setErrorName.bind(this); + this.setError = this.setError.bind(this); this.isValidSize = this.isValidSize.bind(this); this.showAvatarCropModal = this.showAvatarCropModal.bind(this); this.hideAvatarCropModal = this.hideAvatarCropModal.bind(this); @@ -139,10 +139,10 @@ class AvatarWithImagePicker extends React.Component { } /** - * @param {String} prompt + * @param {String} error */ - setErrorName(prompt) { - this.setState({shoudShowValidationError: true, validationError: prompt}); + setError(error) { + this.setState({shoudShowValidationError: true, validationError: error}); } /** @@ -189,17 +189,17 @@ class AvatarWithImagePicker extends React.Component { */ showAvatarCropModal(image) { if (!this.isValidExtension(image)) { - this.setErrorName(this.props.translate('avatarWithImagePicker.notAllowedExtension', {allowedExtensions: CONST.AVATAR_ALLOWED_EXTENSIONS})); + this.setError(this.props.translate('avatarWithImagePicker.notAllowedExtension', {allowedExtensions: CONST.AVATAR_ALLOWED_EXTENSIONS})); return; } if (!this.isValidSize(image)) { - this.setErrorName(this.props.translate('avatarWithImagePicker.sizeExceeded', {maxUploadSizeInMB: CONST.AVATAR_MAX_ATTACHMENT_SIZE / (1024 * 1024)})); + this.setError(this.props.translate('avatarWithImagePicker.sizeExceeded', {maxUploadSizeInMB: CONST.AVATAR_MAX_ATTACHMENT_SIZE / (1024 * 1024)})); return; } this.isValidResolution(image).then((isValidResolution) => { if (!isValidResolution) { - this.setErrorName( + this.setError( this.props.translate('avatarWithImagePicker.resolutionConstraints', { minHeightInPx: CONST.AVATAR_MIN_HEIGHT_PX, minWidthInPx: CONST.AVATAR_MIN_WIDTH_PX, From ab054b253cd5da1244c654b930dc39689da441ae Mon Sep 17 00:00:00 2001 From: Nikhil Vats Date: Fri, 28 Jul 2023 18:18:25 +0530 Subject: [PATCH 120/187] Move isAllowedToComment to SidebarUtils --- src/components/LHNOptionsList/OptionRowLHN.js | 6 +----- src/components/LHNOptionsList/OptionRowLHNData.js | 8 -------- src/libs/SidebarUtils.js | 6 ++++++ 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/components/LHNOptionsList/OptionRowLHN.js b/src/components/LHNOptionsList/OptionRowLHN.js index 8063f079a387..e94a5ba66439 100644 --- a/src/components/LHNOptionsList/OptionRowLHN.js +++ b/src/components/LHNOptionsList/OptionRowLHN.js @@ -45,9 +45,6 @@ const propTypes = { /** The item that should be rendered */ // eslint-disable-next-line react/forbid-prop-types optionItem: PropTypes.object, - - /** Whether user is allowed to comment so that we can hide the draft icon if user is not allowed to comment */ - isAllowedToComment: PropTypes.bool, }; const defaultProps = { @@ -57,7 +54,6 @@ const defaultProps = { style: null, optionItem: null, isFocused: false, - isAllowedToComment: false, }; function OptionRowLHN(props) { @@ -235,7 +231,7 @@ function OptionRowLHN(props) { fill={themeColors.success} /> )} - {optionItem.hasDraftComment && props.isAllowedToComment && ( + {optionItem.hasDraftComment && optionItem.isAllowedToComment && ( { - const {addWorkspaceRoomOrChatErrors} = ReportUtils.getReportOfflinePendingActionAndErrors(fullReport); - // if composer is hidden then user is not allowed to comment therefore draft icon should be hidden - return !ReportUtils.shouldHideComposer(fullReport, addWorkspaceRoomOrChatErrors); - }, [fullReport]); - useEffect(() => { if (!optionItem || optionItem.hasDraftComment || !comment || comment.length <= 0 || isFocused) { return; @@ -101,7 +94,6 @@ function OptionRowLHNData({shouldDisableFocusOptions, currentReportID, fullRepor {...propsToForward} isFocused={isFocused} optionItem={optionItem} - isAllowedToComment={isAllowedToComment} /> ); } diff --git a/src/libs/SidebarUtils.js b/src/libs/SidebarUtils.js index dfb1637419cb..5e960719fdb5 100644 --- a/src/libs/SidebarUtils.js +++ b/src/libs/SidebarUtils.js @@ -227,6 +227,7 @@ function getOptionData(report, personalDetails, preferredLocale, policy) { isExpenseRequest: false, isWaitingOnBankAccount: false, isLastMessageDeletedParentAction: false, + isAllowedToComment: false, }; const participantPersonalDetailList = _.values(OptionsListUtils.getPersonalDetailsForAccountIDs(report.participantAccountIDs, personalDetails)); @@ -261,6 +262,11 @@ function getOptionData(report, personalDetails, preferredLocale, policy) { result.parentReportID = report.parentReportID || null; result.isWaitingOnBankAccount = report.isWaitingOnBankAccount; result.notificationPreference = report.notificationPreference || null; + + const {addWorkspaceRoomOrChatErrors} = ReportUtils.getReportOfflinePendingActionAndErrors(report); + // if composer is hidden then user is not allowed to comment, this is used to hide draft icon + result.isAllowedToComment = !ReportUtils.shouldHideComposer(report, addWorkspaceRoomOrChatErrors); + const hasMultipleParticipants = participantPersonalDetailList.length > 1 || result.isChatRoom || result.isPolicyExpenseChat; const subtitle = ReportUtils.getChatRoomSubtitle(report); From 88216fd27f3af9fd471446553a6d9d56f7a7e393 Mon Sep 17 00:00:00 2001 From: Nikhil Vats Date: Fri, 28 Jul 2023 18:39:00 +0530 Subject: [PATCH 121/187] Change default value of isAllowedToComment --- src/libs/SidebarUtils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/SidebarUtils.js b/src/libs/SidebarUtils.js index 5e960719fdb5..dd55b025b55e 100644 --- a/src/libs/SidebarUtils.js +++ b/src/libs/SidebarUtils.js @@ -227,7 +227,7 @@ function getOptionData(report, personalDetails, preferredLocale, policy) { isExpenseRequest: false, isWaitingOnBankAccount: false, isLastMessageDeletedParentAction: false, - isAllowedToComment: false, + isAllowedToComment: true, }; const participantPersonalDetailList = _.values(OptionsListUtils.getPersonalDetailsForAccountIDs(report.participantAccountIDs, personalDetails)); @@ -264,7 +264,7 @@ function getOptionData(report, personalDetails, preferredLocale, policy) { result.notificationPreference = report.notificationPreference || null; const {addWorkspaceRoomOrChatErrors} = ReportUtils.getReportOfflinePendingActionAndErrors(report); - // if composer is hidden then user is not allowed to comment, this is used to hide draft icon + // If the composer is hidden then the user is not allowed to comment, same can be used to hide the draft icon. result.isAllowedToComment = !ReportUtils.shouldHideComposer(report, addWorkspaceRoomOrChatErrors); const hasMultipleParticipants = participantPersonalDetailList.length > 1 || result.isChatRoom || result.isPolicyExpenseChat; From c5cfe64787dd66131cac177ae073f45876717538 Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Fri, 28 Jul 2023 21:50:04 +0700 Subject: [PATCH 122/187] disable go to profile page for optimistic user --- src/components/MoneyRequestConfirmationList.js | 7 ++++++- src/components/OptionsList/BaseOptionsList.js | 2 +- src/components/ReportWelcomeText.js | 16 ++++++++++------ src/libs/OptionsListUtils.js | 1 + src/libs/ReportUtils.js | 10 ++++++++++ src/libs/actions/Report.js | 1 + src/pages/ReportParticipantsPage.js | 5 ++++- src/pages/home/HeaderView.js | 3 ++- 8 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.js b/src/components/MoneyRequestConfirmationList.js index b376e02b1095..02f8d3871ac4 100755 --- a/src/components/MoneyRequestConfirmationList.js +++ b/src/components/MoneyRequestConfirmationList.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import {withOnyx} from 'react-native-onyx'; import _ from 'underscore'; import styles from '../styles/styles'; +import * as ReportUtils from '../libs/ReportUtils'; import * as OptionsListUtils from '../libs/OptionsListUtils'; import OptionsSelector from './OptionsSelector'; import ONYXKEYS from '../ONYXKEYS'; @@ -164,9 +165,13 @@ function MoneyRequestConfirmationList(props) { }, ); } else { + const formattedSelectedParticipants = _.map(props.selectedParticipants, (participant) => ({ + ...participant, + isDisabled: ReportUtils.isOptimisticPersonalDetail(participant.accountID), + })); sections.push({ title: translate('common.to'), - data: props.selectedParticipants, + data: formattedSelectedParticipants, shouldShow: true, indexOffset: 0, }); diff --git a/src/components/OptionsList/BaseOptionsList.js b/src/components/OptionsList/BaseOptionsList.js index 9c5777e222c9..28c9b1e70940 100644 --- a/src/components/OptionsList/BaseOptionsList.js +++ b/src/components/OptionsList/BaseOptionsList.js @@ -160,7 +160,7 @@ class BaseOptionsList extends Component { * @return {Component} */ renderItem({item, index, section}) { - const isDisabled = this.props.isDisabled || section.isDisabled; + const isDisabled = this.props.isDisabled || section.isDisabled || !!item.isDisabled; return ( ( - Navigation.navigate(ROUTES.getProfileRoute(accountID))} - > - {displayName} - + {ReportUtils.isOptimisticPersonalDetail(accountID) ? ( + {displayName} + ) : ( + Navigation.navigate(ROUTES.getProfileRoute(accountID))} + > + {displayName} + + )} {!_.isEmpty(pronouns) && {` (${pronouns})`}} {index === displayNamesWithTooltips.length - 1 && .} diff --git a/src/libs/OptionsListUtils.js b/src/libs/OptionsListUtils.js index 31ebab0ea0d2..55d0e07e16a3 100644 --- a/src/libs/OptionsListUtils.js +++ b/src/libs/OptionsListUtils.js @@ -920,6 +920,7 @@ function getIOUConfirmationOptionsFromParticipants(participants, amountText) { return _.map(participants, (participant) => ({ ...participant, descriptiveText: amountText, + isDisabled: ReportUtils.isOptimisticPersonalDetail(participant.accountID), })); } diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index a96de9cc02c6..0dff0407031c 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -403,6 +403,15 @@ function getBankAccountRoute(report) { return isPolicyExpenseChat(report) ? ROUTES.getBankAccountRoute('', report.policyID) : ROUTES.SETTINGS_ADD_BANK_ACCOUNT; } +/** + * Check if personal detail of accountID is empty or optimistic data + * @param {String} accountID user accountID + * @returns {Boolean} + */ +function isOptimisticPersonalDetail(accountID) { + return _.isEmpty(allPersonalDetails[accountID]) || !!allPersonalDetails[accountID].isOptimisticPersonalDetail; +} + /** * Checks if a report is a task report from a policy expense chat. * @@ -2841,6 +2850,7 @@ export { getAllPolicyReports, getIOUReportActionMessage, getDisplayNameForParticipant, + isOptimisticPersonalDetail, isChatReport, isCurrentUserSubmitter, isExpenseReport, diff --git a/src/libs/actions/Report.js b/src/libs/actions/Report.js index c42abfe2d067..ebd5e32d1ad2 100644 --- a/src/libs/actions/Report.js +++ b/src/libs/actions/Report.js @@ -475,6 +475,7 @@ function openReport(reportID, participantLoginList = [], newReportObject = {}, p accountID, avatar: UserUtils.getDefaultAvatarURL(accountID), displayName: login, + isOptimisticPersonalDetail: true, }; failurePersonalDetails[accountID] = allPersonalDetails[accountID] || null; diff --git a/src/pages/ReportParticipantsPage.js b/src/pages/ReportParticipantsPage.js index 86a841c2cd27..aa7f5f840086 100755 --- a/src/pages/ReportParticipantsPage.js +++ b/src/pages/ReportParticipantsPage.js @@ -86,7 +86,10 @@ const getAllParticipants = (report, personalDetails, translate) => { }; function ReportParticipantsPage(props) { - const participants = getAllParticipants(props.report, props.personalDetails, props.translate); + const participants = _.map(getAllParticipants(props.report, props.personalDetails, props.translate), (participant) => ({ + ...participant, + isDisabled: ReportUtils.isOptimisticPersonalDetail(participant.accountID), + })); return ( diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 7622a0e73f18..9925153293df 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -134,6 +134,7 @@ function HeaderView(props) { const icons = ReportUtils.getIcons(reportHeaderData, props.personalDetails); const brickRoadIndicator = ReportUtils.hasReportNameError(props.report) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : ''; const shouldShowBorderBottom = !isTaskReport || !props.isSmallScreenWidth; + const isOptimisticDetail = !isMultipleParticipant && ReportUtils.isOptimisticPersonalDetail(participants[0]) && !props.report.parentReportID; return ( ReportUtils.navigateToDetailsPage(props.report)} style={[styles.flexRow, styles.alignItemsCenter, styles.flex1]} - disabled={isTaskReport && !ReportUtils.isOpenTaskReport(props.report)} + disabled={(isTaskReport && !ReportUtils.isOpenTaskReport(props.report)) || isOptimisticDetail} accessibilityLabel={title} accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON} > From 9241de7022870ba7f95676b34bbb6b7a8c8b637c Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Fri, 28 Jul 2023 22:16:27 +0700 Subject: [PATCH 123/187] fix lint --- src/components/MoneyRequestConfirmationList.js | 6 +++--- src/pages/ReportParticipantsPage.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.js b/src/components/MoneyRequestConfirmationList.js index 02f8d3871ac4..7a296376cc04 100755 --- a/src/components/MoneyRequestConfirmationList.js +++ b/src/components/MoneyRequestConfirmationList.js @@ -166,9 +166,9 @@ function MoneyRequestConfirmationList(props) { ); } else { const formattedSelectedParticipants = _.map(props.selectedParticipants, (participant) => ({ - ...participant, - isDisabled: ReportUtils.isOptimisticPersonalDetail(participant.accountID), - })); + ...participant, + isDisabled: ReportUtils.isOptimisticPersonalDetail(participant.accountID), + })); sections.push({ title: translate('common.to'), data: formattedSelectedParticipants, diff --git a/src/pages/ReportParticipantsPage.js b/src/pages/ReportParticipantsPage.js index aa7f5f840086..c1008c9cd46d 100755 --- a/src/pages/ReportParticipantsPage.js +++ b/src/pages/ReportParticipantsPage.js @@ -87,9 +87,9 @@ const getAllParticipants = (report, personalDetails, translate) => { function ReportParticipantsPage(props) { const participants = _.map(getAllParticipants(props.report, props.personalDetails, props.translate), (participant) => ({ - ...participant, - isDisabled: ReportUtils.isOptimisticPersonalDetail(participant.accountID), - })); + ...participant, + isDisabled: ReportUtils.isOptimisticPersonalDetail(participant.accountID), + })); return ( From ede6ee7a6eaf13e74aab1c3677fdc89424f4b7fd Mon Sep 17 00:00:00 2001 From: Georgia Monahan Date: Fri, 28 Jul 2023 16:51:57 +0100 Subject: [PATCH 124/187] remove color style --- src/components/SubscriptAvatar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/SubscriptAvatar.js b/src/components/SubscriptAvatar.js index 1c6f0a38c3d0..05202e720bd4 100644 --- a/src/components/SubscriptAvatar.js +++ b/src/components/SubscriptAvatar.js @@ -55,7 +55,7 @@ function SubscriptAvatar(props) { > Date: Sat, 29 Jul 2023 07:26:43 +0530 Subject: [PATCH 125/187] use assigneeAccountID at details for getAssignee --- src/libs/actions/Task.js | 5 +++-- src/pages/tasks/NewTaskPage.js | 7 +------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index af301f3ecbb9..f703408ed151 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -568,11 +568,12 @@ function clearOutTaskInfoAndNavigate(reportID) { /** * Get the assignee data * - * @param {Object} details + * @param {string} assigneeAccountID * @param {Object} personalDetails * @returns {Object} */ -function getAssignee(details, personalDetails) { +function getAssignee(assigneeAccountID, personalDetails) { + const details = personalDetails[assigneeAccountID]; if (!details) { return { icons: [], diff --git a/src/pages/tasks/NewTaskPage.js b/src/pages/tasks/NewTaskPage.js index d50c65ce119b..4b1aa0c0101b 100644 --- a/src/pages/tasks/NewTaskPage.js +++ b/src/pages/tasks/NewTaskPage.js @@ -17,7 +17,6 @@ import MenuItemWithTopDescription from '../../components/MenuItemWithTopDescript import MenuItem from '../../components/MenuItem'; import reportPropTypes from '../reportPropTypes'; import * as Task from '../../libs/actions/Task'; -import * as OptionsListUtils from '../../libs/OptionsListUtils'; import * as ReportUtils from '../../libs/ReportUtils'; import FormAlertWithSubmitButton from '../../components/FormAlertWithSubmitButton'; import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView'; @@ -78,11 +77,7 @@ function NewTaskPage(props) { // If we have an assignee, we want to set the assignee data // If there's an issue with the assignee chosen, we want to notify the user if (props.task.assignee) { - const assigneeDetails = lodashGet(OptionsListUtils.getPersonalDetailsForAccountIDs([props.task.assigneeAccountID], props.personalDetails), props.task.assigneeAccountID); - if (!assigneeDetails) { - return setErrorMessage(props.translate('task.assigneeError')); - } - const displayDetails = Task.getAssignee(assigneeDetails, props.personalDetails); + const displayDetails = Task.getAssignee(props.task.assigneeAccountID, props.personalDetails); setAssignee(displayDetails); } From be55d5e4918b01199d2f963a4be546385bd9efb5 Mon Sep 17 00:00:00 2001 From: tienifr Date: Sat, 29 Jul 2023 12:01:12 +0700 Subject: [PATCH 126/187] fix: 23811 handle mentions renderer not receiving props --- .../HTMLEngineProvider/HTMLRenderers/MentionUserRenderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/HTMLEngineProvider/HTMLRenderers/MentionUserRenderer.js b/src/components/HTMLEngineProvider/HTMLRenderers/MentionUserRenderer.js index d944f7bf70be..7f7753dfea44 100644 --- a/src/components/HTMLEngineProvider/HTMLRenderers/MentionUserRenderer.js +++ b/src/components/HTMLEngineProvider/HTMLRenderers/MentionUserRenderer.js @@ -32,7 +32,7 @@ function MentionUserRenderer(props) { const defaultRendererProps = _.omit(props, ['TDefaultRenderer', 'style']); // We need to remove the leading @ from data as it is not part of the login - const loginWithoutLeadingAt = props.tnode.data.slice(1); + const loginWithoutLeadingAt = props.tnode.data ? props.tnode.data.slice(1) : ''; const accountID = _.first(PersonalDetailsUtils.getAccountIDsByLogins([loginWithoutLeadingAt])); From 1f5c81001e17789e5c739e584938d4c44677a4e5 Mon Sep 17 00:00:00 2001 From: Hans Date: Sun, 30 Jul 2023 09:18:59 +0700 Subject: [PATCH 127/187] fix emoji cut off with long emoji name --- src/styles/styles.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/styles/styles.js b/src/styles/styles.js index 0fe77205e9ad..7d9bcb9d2b85 100644 --- a/src/styles/styles.js +++ b/src/styles/styles.js @@ -203,6 +203,9 @@ const styles = { }, emojiSuggestionsText: { fontSize: variables.fontSizeMedium, + flex: 1, + ...wordBreak.breakWord, + paddingRight: 10, }, mentionSuggestionsAvatarContainer: { From 5ce80811a54d28b7305caab32a13b9cf80ecd6fa Mon Sep 17 00:00:00 2001 From: Hans Date: Sun, 30 Jul 2023 09:19:04 +0700 Subject: [PATCH 128/187] fix emoji cut off with long emoji name --- src/styles/styles.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/styles.js b/src/styles/styles.js index 7d9bcb9d2b85..ef6d9da73909 100644 --- a/src/styles/styles.js +++ b/src/styles/styles.js @@ -205,7 +205,7 @@ const styles = { fontSize: variables.fontSizeMedium, flex: 1, ...wordBreak.breakWord, - paddingRight: 10, + ...spacing.pr4, }, mentionSuggestionsAvatarContainer: { From 4c4faa3d3e2b1df3e0b21ed710ec47e413f15c1f Mon Sep 17 00:00:00 2001 From: Parshvi16 <91120214+Parshvi16@users.noreply.github.com> Date: Sun, 30 Jul 2023 18:07:51 +0530 Subject: [PATCH 129/187] migrated ScrollViewWithContext to a functional component --- src/components/ScrollViewWithContext.js | 100 ++++++++++-------------- 1 file changed, 43 insertions(+), 57 deletions(-) diff --git a/src/components/ScrollViewWithContext.js b/src/components/ScrollViewWithContext.js index c49dbffe006b..e500cc623d6f 100644 --- a/src/components/ScrollViewWithContext.js +++ b/src/components/ScrollViewWithContext.js @@ -1,68 +1,54 @@ -import React from 'react'; -import {ScrollView} from 'react-native'; +import React, { useState } from 'react'; +import { ScrollView } from 'react-native'; const MIN_SMOOTH_SCROLL_EVENT_THROTTLE = 16; const ScrollContext = React.createContext(); +const defaultScrollViewRef = React.createRef(); // eslint-disable-next-line react/forbid-foreign-prop-types const propTypes = ScrollView.propTypes; -/* - * is a wrapper around that provides a ref to the . - * can be used as a direct replacement for - * if it contains one or more / components. - * Using this wrapper will automatically handle scrolling to the picker's - * when the picker modal is opened - */ -class ScrollViewWithContext extends React.Component { - constructor(props) { - super(props); - - this.state = { - contentOffsetY: 0, - }; - this.scrollViewRef = this.props.innerRef || React.createRef(null); - - this.setContextScrollPosition = this.setContextScrollPosition.bind(this); - } - - setContextScrollPosition(event) { - if (this.props.onScroll) { - this.props.onScroll(event); - } - this.setState({contentOffsetY: event.nativeEvent.contentOffset.y}); - } - - render() { - return ( - - - {this.props.children} - - - ); - } -} -ScrollViewWithContext.propTypes = propTypes; +const ScrollViewWithContext = React.forwardRef( + ({ onScroll, scrollEventThrottle, children, innerRef, ...restProps }, ref) => { + const [contentOffsetY, setContentOffsetY] = useState(0); + const scrollViewRef = innerRef || ref || defaultScrollViewRef; + + const setContextScrollPosition = (event) => { + if (onScroll) { + onScroll(event); + } + setContentOffsetY(event.nativeEvent.contentOffset.y); + }; + + return ( + + + {children} + + + ); + } +); + +ScrollViewWithContext.propTypes = propTypes export default React.forwardRef((props, ref) => ( - + )); - -export {ScrollContext}; +export { ScrollContext }; \ No newline at end of file From 5d299e679e798f66be73b1c3d5479cb92b876d65 Mon Sep 17 00:00:00 2001 From: Parshvi16 <91120214+Parshvi16@users.noreply.github.com> Date: Mon, 31 Jul 2023 09:51:28 +0530 Subject: [PATCH 130/187] added onPress to avoid refreshing of page --- .../AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js index da118b8a7552..5f34f5cefbd6 100644 --- a/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js +++ b/src/components/AnchorForCommentsOnly/BaseAnchorForCommentsOnly.js @@ -80,6 +80,14 @@ function BaseAnchorForCommentsOnly(props) { target: isEmail || !linkProps.href ? '_self' : props.target, }} href={linkProps.href || props.href} + onPress={(event) => { + if (!linkProps.onPress) { + return; + } + + event.preventDefault(); + linkProps.onPress(); + }} // Add testID so it gets selected as an anchor tag by SelectionScraper testID="a" // eslint-disable-next-line react/jsx-props-no-spreading From e7247816d0e69477d7a753f89f19563247684892 Mon Sep 17 00:00:00 2001 From: Hans Date: Mon, 31 Jul 2023 12:15:54 +0700 Subject: [PATCH 131/187] block user from archived room setting --- src/libs/ReportUtils.js | 2 +- src/pages/ReportParticipantsPage.js | 2 +- src/pages/settings/Report/WriteCapabilityPage.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index 0e8c14f5cd50..edbad90fe3db 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -2745,7 +2745,7 @@ function getPolicy(policyID) { * @returns {Boolean} */ function shouldDisableSettings(report) { - return !isPolicyExpenseChat(report) && !isChatRoom(report) && !isChatThread(report); + return !isPolicyExpenseChat(report) && !isChatRoom(report) && !isChatThread(report) || isArchivedRoom(report); } /** diff --git a/src/pages/ReportParticipantsPage.js b/src/pages/ReportParticipantsPage.js index 86a841c2cd27..abcd4601de39 100755 --- a/src/pages/ReportParticipantsPage.js +++ b/src/pages/ReportParticipantsPage.js @@ -91,7 +91,7 @@ function ReportParticipantsPage(props) { return ( {({safeAreaPaddingBottomStyle}) => ( - + From ae0a51608f5d2096089930d7dc86a11b948524f0 Mon Sep 17 00:00:00 2001 From: Hans Date: Mon, 31 Jul 2023 13:14:09 +0700 Subject: [PATCH 132/187] update case for title --- src/libs/ReportUtils.js | 2 +- src/pages/settings/Report/NotificationPreferencePage.js | 2 +- src/pages/settings/Report/ReportSettingsPage.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index edbad90fe3db..0e8c14f5cd50 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -2745,7 +2745,7 @@ function getPolicy(policyID) { * @returns {Boolean} */ function shouldDisableSettings(report) { - return !isPolicyExpenseChat(report) && !isChatRoom(report) && !isChatThread(report) || isArchivedRoom(report); + return !isPolicyExpenseChat(report) && !isChatRoom(report) && !isChatThread(report); } /** diff --git a/src/pages/settings/Report/NotificationPreferencePage.js b/src/pages/settings/Report/NotificationPreferencePage.js index a32245b10518..9765cf1ae0b4 100644 --- a/src/pages/settings/Report/NotificationPreferencePage.js +++ b/src/pages/settings/Report/NotificationPreferencePage.js @@ -25,7 +25,7 @@ const propTypes = { const greenCheckmark = {src: Expensicons.Checkmark, color: themeColors.success}; function NotificationPreferencePage(props) { - const shouldDisableNotificationPreferences = ReportUtils.shouldDisableSettings(props.report); + const shouldDisableNotificationPreferences = ReportUtils.shouldDisableSettings(props.report) || ReportUtils.isArchivedRoom(props.report); const notificationPreferenceOptions = _.map(props.translate('notificationPreferencesPage.notificationPreferences'), (preference, key) => ({ value: key, text: preference, diff --git a/src/pages/settings/Report/ReportSettingsPage.js b/src/pages/settings/Report/ReportSettingsPage.js index 975402dd5a61..b21c4b971dca 100644 --- a/src/pages/settings/Report/ReportSettingsPage.js +++ b/src/pages/settings/Report/ReportSettingsPage.js @@ -63,7 +63,7 @@ function ReportSettingsPage(props) { const shouldDisableWelcomeMessage = ReportUtils.isArchivedRoom(report) || !ReportUtils.isChatRoom(report) || _.isEmpty(linkedWorkspace) || linkedWorkspace.role !== CONST.POLICY.ROLE.ADMIN; - const shouldDisableSettings = _.isEmpty(report) || ReportUtils.shouldDisableSettings(report); + const shouldDisableSettings = _.isEmpty(report) || ReportUtils.shouldDisableSettings(report) || ReportUtils.isArchivedRoom(report); const shouldShowRoomName = !ReportUtils.isPolicyExpenseChat(report) && !ReportUtils.isChatThread(report); const notificationPreference = translate(`notificationPreferencesPage.notificationPreferences.${report.notificationPreference}`); const writeCapability = ReportUtils.isAdminRoom(report) ? CONST.REPORT.WRITE_CAPABILITIES.ADMINS : report.writeCapability || CONST.REPORT.WRITE_CAPABILITIES.ALL; From a098161aa20212d39ad41160329a1cfa93dfe402 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Mon, 31 Jul 2023 11:14:35 +0300 Subject: [PATCH 133/187] [23304] Update tasks status color. --- src/components/ReportActionItem/TaskAction.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/ReportActionItem/TaskAction.js b/src/components/ReportActionItem/TaskAction.js index 09277363ab2e..622e6f2931ab 100644 --- a/src/components/ReportActionItem/TaskAction.js +++ b/src/components/ReportActionItem/TaskAction.js @@ -38,26 +38,26 @@ const defaultProps = { function TaskAction(props) { const taskReportName = props.taskReport.reportName || ''; - let messageLinkText = ''; + let taskStatusText = ''; switch (props.actionName) { case CONST.REPORT.ACTIONS.TYPE.TASKCOMPLETED: - messageLinkText = props.translate('task.messages.completed'); + taskStatusText = props.translate('task.messages.completed'); break; case CONST.REPORT.ACTIONS.TYPE.TASKCANCELLED: - messageLinkText = props.translate('task.messages.canceled'); + taskStatusText = props.translate('task.messages.canceled'); break; case CONST.REPORT.ACTIONS.TYPE.TASKREOPENED: - messageLinkText = props.translate('task.messages.reopened'); + taskStatusText = props.translate('task.messages.reopened'); break; default: - messageLinkText = props.translate('task.task'); + taskStatusText = props.translate('task.task'); } return ( <> - {messageLinkText} + {taskStatusText} {` ${taskReportName}`} From d234548e106e315801a4e075851a73fe2be08abb Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 31 Jul 2023 11:10:57 +0200 Subject: [PATCH 134/187] Fix some of TS performance issues --- .github/workflows/typecheck.yml | 2 +- .gitignore | 2 +- src/libs/actions/Device/getDeviceInfo/getOSAndName/index.js | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index f4166d6b153a..de433b2ae88a 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -11,7 +11,7 @@ jobs: if: ${{ github.actor != 'OSBotify' || github.event_name == 'workflow_call' }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: actions/checkout@v3 - uses: Expensify/App/.github/actions/composite/setupNode@main diff --git a/.gitignore b/.gitignore index a71a8a8dd522..ed68f7e27c32 100644 --- a/.gitignore +++ b/.gitignore @@ -97,4 +97,4 @@ tests/e2e/results/ .reassure # Typescript -tsconfig.tsbuildinfo \ No newline at end of file +tsconfig.tsbuildinfo diff --git a/src/libs/actions/Device/getDeviceInfo/getOSAndName/index.js b/src/libs/actions/Device/getDeviceInfo/getOSAndName/index.js index 83bab127aa79..29b004412f64 100644 --- a/src/libs/actions/Device/getDeviceInfo/getOSAndName/index.js +++ b/src/libs/actions/Device/getDeviceInfo/getOSAndName/index.js @@ -1,3 +1,4 @@ -import * as Device from 'expensify-common/lib/Device'; +// Don't import this file with '* as Device'. It's known to make VSCode IntelliSense crash. +import {getOSAndName} from 'expensify-common/lib/Device'; -export default Device.getOSAndName; +export default getOSAndName; From d77ff1a3eed2c480fac84d8ab61a9a677cf209b2 Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Mon, 31 Jul 2023 17:04:09 +0700 Subject: [PATCH 135/187] disable go to profile page for avatar of action item created --- src/libs/ReportUtils.js | 12 ++++++++++++ src/pages/home/HeaderView.js | 4 ++-- src/pages/home/report/ReportActionItemCreated.js | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index 341febe6a9f8..8d6a4462d7ad 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -412,6 +412,17 @@ function isOptimisticPersonalDetail(accountID) { return _.isEmpty(allPersonalDetails[accountID]) || !!allPersonalDetails[accountID].isOptimisticPersonalDetail; } +/** + * Check if report is a DM and personal detail of participant is optimistic data + * @param {String} report + * @returns {Boolean} + */ +function shouldDisableDetailPage(report) { + const participants = lodashGet(report, 'participantAccountIDs', []); + const isMultipleParticipant = participants.length > 1; + return !isMultipleParticipant && isOptimisticPersonalDetail(participants[0]) && !report.parentReportID; +} + /** * Checks if a report is a task report from a policy expense chat. * @@ -2849,6 +2860,7 @@ export { getIOUReportActionMessage, getDisplayNameForParticipant, isOptimisticPersonalDetail, + shouldDisableDetailPage, isChatReport, isCurrentUserSubmitter, isExpenseReport, diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 9925153293df..1816e5a39caf 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -134,7 +134,7 @@ function HeaderView(props) { const icons = ReportUtils.getIcons(reportHeaderData, props.personalDetails); const brickRoadIndicator = ReportUtils.hasReportNameError(props.report) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : ''; const shouldShowBorderBottom = !isTaskReport || !props.isSmallScreenWidth; - const isOptimisticDetail = !isMultipleParticipant && ReportUtils.isOptimisticPersonalDetail(participants[0]) && !props.report.parentReportID; + const shouldDisableDetailPage = ReportUtils.shouldDisableDetailPage(props.report); return ( ReportUtils.navigateToDetailsPage(props.report)} style={[styles.flexRow, styles.alignItemsCenter, styles.flex1]} - disabled={(isTaskReport && !ReportUtils.isOpenTaskReport(props.report)) || isOptimisticDetail} + disabled={(isTaskReport && !ReportUtils.isOpenTaskReport(props.report)) || shouldDisableDetailPage} accessibilityLabel={title} accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON} > diff --git a/src/pages/home/report/ReportActionItemCreated.js b/src/pages/home/report/ReportActionItemCreated.js index c4dad05beb3b..b7716e22a851 100644 --- a/src/pages/home/report/ReportActionItemCreated.js +++ b/src/pages/home/report/ReportActionItemCreated.js @@ -53,6 +53,7 @@ function ReportActionItemCreated(props) { } const icons = ReportUtils.getIcons(props.report, props.personalDetails); + const shouldDisableDetailPage = ReportUtils.shouldDisableDetailPage(props.report); return ( Date: Mon, 31 Jul 2023 12:04:54 +0200 Subject: [PATCH 136/187] Introduce a different approach for lottie animations, improve TS performance --- .eslintrc.js | 24 +++++++++---------- src/components/ConfirmationPage.js | 4 ++-- src/components/LottieAnimations.js | 12 +++++----- .../ReimbursementAccountLoadingIndicator.js | 4 ++-- src/pages/EnablePayments/ActivateStep.js | 5 ++-- .../Security/TwoFactorAuth/SuccessPage.js | 4 ++-- src/pages/signin/SignInHeroImage.js | 4 ++-- 7 files changed, 28 insertions(+), 29 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 6edd59b2e402..b2d7bee60fd1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,4 +1,4 @@ -const globalRestrictedImport = [ +const restrictedImportPaths = [ { name: 'react-native', importNames: ['useWindowDimensions', 'StatusBar', 'TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight', 'Pressable'], @@ -16,6 +16,13 @@ const globalRestrictedImport = [ }, ]; +const restrictedImportPatterns = [ + { + group: ['**/assets/animations/**/*.json'], + message: "Do not import animations directly. Please use the 'src/components/LottieAnimations' import instead.", + }, +]; + module.exports = { extends: ['expensify', 'plugin:storybook/recommended', 'plugin:react-hooks/recommended', 'prettier', 'plugin:react-native-a11y/basic'], plugins: ['react-hooks', 'react-native-a11y'], @@ -64,7 +71,8 @@ module.exports = { 'no-restricted-imports': [ 'error', { - paths: globalRestrictedImport, + paths: restrictedImportPaths, + patterns: restrictedImportPatterns, }, ], }, @@ -145,21 +153,13 @@ module.exports = { 'error', { paths: [ - ...globalRestrictedImport, - { - name: 'lodash/get', - message: 'Please use optional chaining and nullish coalescing instead.', - }, - { - name: 'lodash', - importNames: ['get'], - message: 'Please use optional chaining and nullish coalescing instead.', - }, + ...restrictedImportPaths, { name: 'underscore', message: 'Please use the corresponding method from lodash instead', }, ], + patterns: restrictedImportPatterns, }, ], }, diff --git a/src/components/ConfirmationPage.js b/src/components/ConfirmationPage.js index 1dc56b0afa6f..ffa3c780f154 100644 --- a/src/components/ConfirmationPage.js +++ b/src/components/ConfirmationPage.js @@ -2,7 +2,7 @@ import React from 'react'; import {View} from 'react-native'; import PropTypes from 'prop-types'; import Lottie from 'lottie-react-native'; -import FireworksAnimation from '../../assets/animations/Fireworks.json'; +import * as LottieAnimations from './LottieAnimations'; import Text from './Text'; import styles from '../styles/styles'; import Button from './Button'; @@ -30,7 +30,7 @@ const propTypes = { }; const defaultProps = { - animation: FireworksAnimation, + animation: LottieAnimations.Fireworks, heading: '', description: '', buttonText: '', diff --git a/src/components/LottieAnimations.js b/src/components/LottieAnimations.js index 0eb172c511dd..93cb6dca281a 100644 --- a/src/components/LottieAnimations.js +++ b/src/components/LottieAnimations.js @@ -1,8 +1,8 @@ -import ExpensifyLounge from '../../assets/animations/ExpensifyLounge.json'; -import Fireworks from '../../assets/animations/Fireworks.json'; -import Hands from '../../assets/animations/Hands.json'; -import PreferencesDJ from '../../assets/animations/PreferencesDJ.json'; -import ReviewingBankInfo from '../../assets/animations/ReviewingBankInfo.json'; -import WorkspacePlanet from '../../assets/animations/WorkspacePlanet.json'; +const ExpensifyLounge = require('../../assets/animations/ExpensifyLounge.json'); +const Fireworks = require('../../assets/animations/Fireworks.json'); +const Hands = require('../../assets/animations/Hands.json'); +const PreferencesDJ = require('../../assets/animations/PreferencesDJ.json'); +const ReviewingBankInfo = require('../../assets/animations/ReviewingBankInfo.json'); +const WorkspacePlanet = require('../../assets/animations/WorkspacePlanet.json'); export {ExpensifyLounge, Fireworks, Hands, PreferencesDJ, ReviewingBankInfo, WorkspacePlanet}; diff --git a/src/components/ReimbursementAccountLoadingIndicator.js b/src/components/ReimbursementAccountLoadingIndicator.js index 816eb7590088..576a40b8233c 100644 --- a/src/components/ReimbursementAccountLoadingIndicator.js +++ b/src/components/ReimbursementAccountLoadingIndicator.js @@ -2,7 +2,7 @@ import React from 'react'; import {StyleSheet, View} from 'react-native'; import PropTypes from 'prop-types'; import Lottie from 'lottie-react-native'; -import ReviewingBankInfoAnimation from '../../assets/animations/ReviewingBankInfo.json'; +import * as LottieAnimations from './LottieAnimations'; import styles from '../styles/styles'; import withLocalize, {withLocalizePropTypes} from './withLocalize'; import Text from './Text'; @@ -36,7 +36,7 @@ function ReimbursementAccountLoadingIndicator(props) { {props.isSubmittingVerificationsData ? ( Date: Mon, 31 Jul 2023 12:07:25 +0200 Subject: [PATCH 137/187] fix: disable confirm button if offline --- src/components/ConfirmContent.js | 16 +++++++++++++++- src/components/ConfirmModal.js | 5 +++++ src/pages/settings/Security/CloseAccountPage.js | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/components/ConfirmContent.js b/src/components/ConfirmContent.js index 7af2eb6d1d3e..d7d222da1e67 100644 --- a/src/components/ConfirmContent.js +++ b/src/components/ConfirmContent.js @@ -6,6 +6,9 @@ import Header from './Header'; import styles from '../styles/styles'; import Button from './Button'; import withLocalize, {withLocalizePropTypes} from './withLocalize'; +import {withNetwork} from './OnyxProvider'; +import networkPropTypes from './networkPropTypes'; +import compose from '../libs/compose'; import Text from './Text'; const propTypes = { @@ -33,6 +36,9 @@ const propTypes = { /** Whether we should use the danger button color. Use if the action is destructive */ danger: PropTypes.bool, + /** Whether we should disable the confirm button when offline */ + shouldDisableConfirmButtonWhenOffline: PropTypes.bool, + /** Whether we should show the cancel button */ shouldShowCancelButton: PropTypes.bool, @@ -40,6 +46,9 @@ const propTypes = { // eslint-disable-next-line react/forbid-prop-types contentStyles: PropTypes.arrayOf(PropTypes.object), + /** Information about the network */ + network: networkPropTypes.isRequired, + ...withLocalizePropTypes, }; @@ -50,6 +59,7 @@ const defaultProps = { success: true, danger: false, onCancel: () => {}, + shouldDisableConfirmButtonWhenOffline: false, shouldShowCancelButton: true, contentStyles: [], }; @@ -70,6 +80,7 @@ function ConfirmContent(props) { onPress={props.onConfirm} pressOnEnter text={props.confirmText || props.translate('common.yes')} + isDisabled={props.network.isOffline && props.shouldDisableConfirmButtonWhenOffline} /> {props.shouldShowCancelButton && (