From 8c2289756dcc440bce10fc924b927b136a97b0c2 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 18 Jan 2024 20:58:11 +0100 Subject: [PATCH 01/18] Initial TS setup for react-native-onyx --- .eslintignore | 3 + .eslintrc.js | 64 +- babel.config.js | 2 +- lib/index.d.ts | 5 +- lib/index.js | 3 +- lib/useOnyx.ts | 11 + package-lock.json | 6153 ++++++++++++++++++++++++++++++++++----------- package.json | 20 +- tsconfig.json | 24 + webpack.config.js | 6 +- 10 files changed, 4731 insertions(+), 1560 deletions(-) create mode 100644 lib/useOnyx.ts create mode 100644 tsconfig.json diff --git a/.eslintignore b/.eslintignore index cd4efd8e5..d1b71675e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,4 @@ *.d.ts +dist +node_modules +*.config.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 34a1cd4f9..3ebe2e061 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,19 +1,61 @@ module.exports = { extends: ['expensify', 'prettier'], - rules: { - // Overwriting this for now because web-e will conflict with this - 'react/jsx-filename-extension': [1, {extensions: ['.js']}], - 'rulesdir/no-multiple-onyx-in-file': 'off', - }, + parser: '@babel/eslint-parser', env: { jest: true, }, - settings: { - 'import/resolver': { - node: { - extensions: ['.js', '.native.js', '.web.js'], + ignorePatterns: 'dist', + overrides: [ + { + files: ['*.js', '*.jsx'], + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.website.js', '.desktop.js', '.native.js', '.ios.js', '.android.js', '.config.js', '.ts', '.tsx'], + }, + }, + }, + rules: { + // Overwriting this for now because web-e will conflict with this + 'react/jsx-filename-extension': [1, {extensions: ['.js']}], + 'rulesdir/no-multiple-onyx-in-file': 'off', + 'import/extensions': [ + 'error', + 'ignorePackages', + { + js: 'never', + jsx: 'never', + ts: 'never', + tsx: 'never', + }, + ], }, }, - }, - ignorePatterns: 'dist', + { + files: ['*.ts', '*.tsx'], + extends: ['expensify', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/stylistic', 'plugin:import/typescript', 'prettier', 'plugin:prettier/recommended'], + plugins: ['react', 'react-native', 'import', '@typescript-eslint'], + parser: '@typescript-eslint/parser', + parserOptions: { + project: './tsconfig.json', + }, + rules: { + 'rulesdir/prefer-underscore-method': 'off', + 'react/jsx-props-no-spreading': 'off', + 'react/require-default-props': 'off', + 'react/jsx-filename-extension': ['error', {extensions: ['.tsx', '.jsx']}], + 'import/no-unresolved': 'error', + 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], + 'no-use-before-define': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/no-unused-vars': ['error', {argsIgnorePattern: '^_'}], + '@typescript-eslint/consistent-type-imports': ['error', {prefer: 'type-imports'}], + '@typescript-eslint/consistent-type-exports': ['error', {fixMixedExportsWithInlineTypeSpecifier: false}], + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/array-type': ['error', {default: 'array-simple'}], + '@typescript-eslint/consistent-type-definitions': 'off', + 'rulesdir/no-multiple-onyx-in-file': 'off', + }, + }, + ], }; diff --git a/babel.config.js b/babel.config.js index af929b445..b03a0eb37 100644 --- a/babel.config.js +++ b/babel.config.js @@ -5,7 +5,7 @@ module.exports = (api) => { // Default browser list is a reasonable preset covering a wide list of non-dead browsers // https://github.com/browserslist/browserslist#best-practices targets: 'defaults', - presets: ['@babel/preset-env', '@babel/preset-react'], + presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'], }; } diff --git a/lib/index.d.ts b/lib/index.d.ts index b2275cd97..d51d061ff 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,6 +1,7 @@ import Onyx, {OnyxUpdate, ConnectOptions} from './Onyx'; -import {CustomTypeOptions, OnyxCollection, OnyxEntry} from './types'; +import OnyxUtils from './OnyxUtils'; +import {CustomTypeOptions, OnyxCollection, OnyxEntry, NullishDeep, KeyValueMapping} from './types'; import withOnyx from './withOnyx'; export default Onyx; -export {CustomTypeOptions, OnyxCollection, OnyxEntry, OnyxUpdate, withOnyx, ConnectOptions}; +export {OnyxUtils, CustomTypeOptions, OnyxCollection, OnyxEntry, OnyxUpdate, withOnyx, ConnectOptions, NullishDeep, KeyValueMapping}; diff --git a/lib/index.js b/lib/index.js index bb2bba7e2..b50e88d2e 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,5 +1,6 @@ import Onyx from './Onyx'; import withOnyx from './withOnyx'; +import useOnyx from './useOnyx'; export default Onyx; -export {withOnyx}; +export {withOnyx, useOnyx}; diff --git a/lib/useOnyx.ts b/lib/useOnyx.ts new file mode 100644 index 000000000..f8e6b8220 --- /dev/null +++ b/lib/useOnyx.ts @@ -0,0 +1,11 @@ +// It's just a test file to test typescript +import type {Dispatch, SetStateAction} from 'react'; +import {useState} from 'react'; + +function useOnyx(key: string, defaultValue: T): [T, Dispatch>] { + const [value, setValue] = useState(defaultValue); + + return [value, setValue]; +} + +export default useOnyx; diff --git a/package-lock.json b/package-lock.json index 5c1169112..fe6ec2ad2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,21 +15,29 @@ }, "devDependencies": { "@babel/core": "7.20.12", + "@babel/eslint-parser": "^7.23.3", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.23.3", + "@lwc/eslint-plugin-lwc": "^1.7.2", "@playwright/test": "^1.38.1", - "@react-native-community/eslint-config": "^2.0.0", + "@react-native-community/eslint-config": "^3.2.0", "@testing-library/jest-native": "^3.4.2", "@testing-library/react-native": "^7.0.2", + "@types/jest": "^28.1.8", "@types/node": "^20.7.1", "@types/react": "^18.2.14", + "@types/react-native": "^0.70.0", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", "babel-eslint": "^10.1.0", "babel-jest": "^26.2.2", "babel-loader": "^8.2.5", - "eslint": "^7.6.0", - "eslint-config-expensify": "^2.0.42", + "eslint": "^8.56.0", + "eslint-config-expensify": "^2.0.43", "eslint-config-prettier": "^8.8.0", - "eslint-plugin-jsx-a11y": "^6.6.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-react": "^7.31.10", "idb-keyval": "^6.2.1", "jest": "^26.5.2", @@ -46,6 +54,7 @@ "react-native-quick-sqlite": "^8.0.6", "react-test-renderer": "18.1.0", "type-fest": "^3.12.0", + "typescript": "^5.3.3", "webpack": "^5.72.1", "webpack-cli": "^4.9.2", "webpack-merge": "^5.8.0" @@ -77,6 +86,15 @@ } } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -91,17 +109,32 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", @@ -150,6 +183,42 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/eslint-parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", + "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", + "dev": true, + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.0.tgz", @@ -180,12 +249,12 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -248,19 +317,20 @@ "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -269,6 +339,15 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", @@ -312,9 +391,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -333,13 +412,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -358,64 +437,64 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "dependencies": { - "@babel/types": "^7.21.0" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", - "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -440,80 +519,80 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "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.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" @@ -549,13 +628,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -577,9 +656,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.0.tgz", - "integrity": "sha512-ONjtg4renj14A9pj3iA5T5+r5Eijxbr2eNIkMBTC74occDSsRZUpe8vowmowAjFR1imWlkD8eEmjYXiREZpGZg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1024,12 +1103,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1141,12 +1220,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1421,14 +1500,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1769,14 +1848,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1968,14 +2048,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -2026,39 +2108,32 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true }, "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.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -2095,13 +2170,13 @@ } }, "node_modules/@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2139,6 +2214,128 @@ "node": ">=10.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/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/@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/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@hapi/address": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.0.tgz", @@ -2187,6 +2384,39 @@ "@hapi/hoek": "^11.0.2" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2415,6 +2645,27 @@ "node": ">= 10.14.2" } }, + "node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/fake-timers": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", @@ -2679,40 +2930,136 @@ } }, "node_modules/@lwc/eslint-plugin-lwc": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@lwc/eslint-plugin-lwc/-/eslint-plugin-lwc-0.11.0.tgz", - "integrity": "sha512-wJOD4XWOH91GaZfypMSKfEeMXqMfvKdsb2gSJ/9FEwJVlziKg1aagtRYJh2ln3DyEZV33tBC/p/dWzIeiwa1tg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@lwc/eslint-plugin-lwc/-/eslint-plugin-lwc-1.7.2.tgz", + "integrity": "sha512-fvdW/yvkNfqgt2Cc4EJCRYE55QJVNXdDaVTHRk5i1kkKP2Xj3GG0nAsYwXYqApEeRpUTpUZljPlO29/SWRXJoA==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "globals": "^13.24.0", + "minimatch": "^9.0.3" }, "engines": { "node": ">=10.0.0" }, "peerDependencies": { - "babel-eslint": "^10", - "eslint": "^6 || ^7" + "@babel/eslint-parser": "^7", + "eslint": "^7 || ^8" } }, - "node_modules/@playwright/test": { - "version": "1.38.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.1.tgz", - "integrity": "sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ==", + "node_modules/@lwc/eslint-plugin-lwc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "playwright": "1.38.1" + "balanced-match": "^1.0.0" + } + }, + "node_modules/@lwc/eslint-plugin-lwc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" }, - "bin": { - "playwright": "cli.js" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lwc/eslint-plugin-lwc/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@react-native-community/cli": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-10.1.3.tgz", - "integrity": "sha512-kzh6bYLGN1q1q0IiczKSP1LTrovFeVzppYRTKohPI9VdyZwp7b5JOgaQMB/Ijtwm3MxBDrZgV9AveH/eUmUcKQ==", + "node_modules/@lwc/eslint-plugin-lwc/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/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@playwright/test": { + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.1.tgz", + "integrity": "sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ==", + "dev": true, + "dependencies": { + "playwright": "1.38.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@react-native-community/cli": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-10.1.3.tgz", + "integrity": "sha512-kzh6bYLGN1q1q0IiczKSP1LTrovFeVzppYRTKohPI9VdyZwp7b5JOgaQMB/Ijtwm3MxBDrZgV9AveH/eUmUcKQ==", "dev": true, "dependencies": { "@react-native-community/cli-clean": "^10.1.1", @@ -3161,48 +3508,267 @@ } }, "node_modules/@react-native-community/eslint-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-2.0.0.tgz", - "integrity": "sha512-vHaMMfvMp9BWCQQ0lNIXibOJTcXIbYUQ8dSUsMOsrXgVkeVQJj88OwrKS00rQyqwMaC4/a6HuDiFzYUkGKOpVg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-3.2.0.tgz", + "integrity": "sha512-ZjGvoeiBtCbd506hQqwjKmkWPgynGUoJspG8/MuV/EfKnkjCtBmeJvq2n+sWbWEvL9LWXDp2GJmPzmvU5RSvKQ==", "dev": true, "dependencies": { + "@babel/core": "^7.14.0", + "@babel/eslint-parser": "^7.18.2", "@react-native-community/eslint-plugin": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^3.1.0", - "@typescript-eslint/parser": "^3.1.0", - "babel-eslint": "^10.1.0", - "eslint-config-prettier": "^6.10.1", - "eslint-plugin-eslint-comments": "^3.1.2", - "eslint-plugin-flowtype": "2.50.3", - "eslint-plugin-jest": "22.4.1", - "eslint-plugin-prettier": "3.1.2", - "eslint-plugin-react": "^7.20.0", - "eslint-plugin-react-hooks": "^4.0.4", - "eslint-plugin-react-native": "^3.8.1", - "prettier": "^2.0.2" + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-ft-flow": "^2.0.1", + "eslint-plugin-jest": "^26.5.3", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-native": "^4.0.0" }, "peerDependencies": { - "eslint": ">=6" + "eslint": ">=8", + "prettier": ">=2" } }, - "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==", + "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "dependencies": { - "get-stdin": "^6.0.0" + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "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" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "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/@react-native-community/eslint-config/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "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/@react-native-community/eslint-config/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "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/@react-native-community/eslint-config/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "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/@react-native-community/eslint-config/node_modules/eslint-plugin-jest": { + "version": "26.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz", + "integrity": "sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": ">=3.14.1" + "@typescript-eslint/eslint-plugin": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/@react-native-community/eslint-config/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@react-native-community/eslint-config/node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" } }, "node_modules/@react-native-community/eslint-plugin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/eslint-plugin/-/eslint-plugin-1.1.0.tgz", - "integrity": "sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-plugin/-/eslint-plugin-1.3.0.tgz", + "integrity": "sha512-+zDZ20NUnSWghj7Ku5aFphMzuM9JulqCW+aPXT6IfIXFbb8tzYTTOSeRFOtuekJ99ibW2fUCSsjuKNlwDIbHFg==", "dev": true }, "node_modules/@react-native/assets": { @@ -3418,12 +3984,6 @@ "@types/estree": "*" } }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", @@ -3463,103 +4023,326 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", - "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", - "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", + "node_modules/@types/jest": { + "version": "28.1.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", + "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", "dev": true, "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "expect": "^28.0.0", + "pretty-format": "^28.0.0" } }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "node_modules/@types/jest/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } }, - "node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "node_modules/@types/jest/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", - "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", + "node_modules/@types/jest/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "3.10.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", + "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", + "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-native": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.0.tgz", + "integrity": "sha512-yBN7qJDfs0Vwr34NyfW1SWzalHQoYtpUWf0t4UJY9C5ft58BRr46+r92I0v+l3QX4VNsSRMHVAAWqLLCbIkM+g==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz", + "integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/type-utils": "6.19.0", + "@typescript-eslint/utils": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^3.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3567,50 +4350,80 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", + "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", + "debug": "^4.3.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", + "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", "dev": true, "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz", + "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/utils": "6.19.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3619,12 +4432,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", + "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", "dev": true, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3632,22 +4445,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", + "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3659,22 +4472,90 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", + "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", + "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/types": "6.19.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -3907,9 +4788,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3950,9 +4831,9 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -4010,15 +4891,6 @@ "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", "dev": true }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escape-sequences": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", @@ -4100,9 +4972,9 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" @@ -4121,9 +4993,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -4194,16 +5066,29 @@ "node": ">=12.17" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -4213,6 +5098,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -4222,15 +5116,34 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -4241,14 +5154,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -4258,6 +5171,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -4323,6 +5257,15 @@ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4341,10 +5284,22 @@ "node": ">= 4.5.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true, "engines": { "node": ">=4" @@ -4956,13 +5911,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5620,17 +6576,6 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -5793,10 +6738,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -5870,12 +6814,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -5972,6 +6931,15 @@ "prop-types": "*" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -6000,6 +6968,18 @@ "node": ">= 6" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dmd": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/dmd/-/dmd-6.0.0.tgz", @@ -6144,18 +7124,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/entities": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", @@ -6206,35 +7174,50 @@ } }, "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", - "has": "^1.0.3", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -6243,12 +7226,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -6382,62 +7401,64 @@ } }, "node_modules/eslint": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz", - "integrity": "sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.0", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^1.3.0", - "espree": "^7.2.0", - "esquery": "^1.2.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-expensify": { - "version": "2.0.42", - "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.42.tgz", - "integrity": "sha512-TNwbfIGjOp4EjT6HKEpp10mr6dkBNCNMTeMmpuQyS0Nqv1tRGJltoU3GFmUHJywrLkEmu21iC0NNMmoJ1XzmLg==", + "version": "2.0.43", + "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.43.tgz", + "integrity": "sha512-kLd6NyYbyb3mCB6VH6vu49/RllwNo0rdXcLUUGB7JGny+2N19jOmBJ4/GLKsbpFzvEZEghXfn7BITPRkxVJcgg==", "dev": true, "dependencies": { "@lwc/eslint-plugin-lwc": "^0.11.0", @@ -6454,6 +7475,22 @@ "underscore": "^1.13.1" } }, + "node_modules/eslint-config-expensify/node_modules/@lwc/eslint-plugin-lwc": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@lwc/eslint-plugin-lwc/-/eslint-plugin-lwc-0.11.0.tgz", + "integrity": "sha512-wJOD4XWOH91GaZfypMSKfEeMXqMfvKdsb2gSJ/9FEwJVlziKg1aagtRYJh2ln3DyEZV33tBC/p/dWzIeiwa1tg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "babel-eslint": "^10", + "eslint": "^6 || ^7" + } + }, "node_modules/eslint-config-expensify/node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -6840,13 +7877,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -6859,16 +7897,20 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { @@ -6919,48 +7961,54 @@ } }, "node_modules/eslint-plugin-eslint-comments/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" } }, - "node_modules/eslint-plugin-flowtype": { - "version": "2.50.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", - "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", + "node_modules/eslint-plugin-ft-flow": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-2.0.3.tgz", + "integrity": "sha512-Vbsd/b+LYA99jUbsL6viEUWShFaYQt2YQs3QN3f+aeszOhh2sgdcU0mjzDyD4yyBvMc8qy2uwvBBWfMzEX06tg==", "dev": true, "dependencies": { - "lodash": "^4.17.10" + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" }, "engines": { - "node": ">=4" + "node": ">=12.22.0" }, "peerDependencies": { - "eslint": ">=2.0.0" + "@babel/eslint-parser": "^7.12.0", + "eslint": "^8.1.0" } }, "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -6970,12 +8018,12 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -6990,96 +8038,219 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "node_modules/eslint-plugin-jest": { - "version": "22.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz", - "integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, "engines": { - "node": ">=6" + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" }, "peerDependencies": { - "eslint": ">=5" + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "node_modules/eslint-plugin-react": { + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "semver": "^6.3.0" + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" }, "engines": { - "node": ">=4.0" + "node": ">=4" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-native": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz", + "integrity": "sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==", "dev": true, "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "eslint-plugin-react-native-globals": "^0.1.1" }, - "engines": { - "node": ">=6.0" + "peerDependencies": { + "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/eslint-plugin-react-native-globals": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", + "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", "dev": true }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "esutils": "^2.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { "node": ">=4.0" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "node_modules/eslint-plugin-react/node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", @@ -7088,209 +8259,311 @@ "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-prettier": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", - "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", + "node_modules/eslint-plugin-rulesdir": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-rulesdir/-/eslint-plugin-rulesdir-0.2.1.tgz", + "integrity": "sha512-t7rQvEyfE4JZJu6dPl4/uVr6Fr0fxopBhzVbtq3isfOHMKdlIe9xW/5CtIaWZI0E1U+wzAk0lEnZC8laCD5YLA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" }, - "peerDependencies": { - "eslint": ">= 5.0.0", - "prettier": ">= 1.13.0" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", - "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react-native": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.10.0.tgz", - "integrity": "sha512-4f5+hHYYq5wFhB5eptkPEAR7FfvqbS7AzScUOANfAMZtYw5qgnCxRq45bpfBaQF+iyPMim5Q8pubcpvLv75NAg==", + "node_modules/eslint/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "@babel/traverse": "^7.7.4", - "eslint-plugin-react-native-globals": "^0.1.1" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, - "peerDependencies": { - "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7" + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-plugin-react-native-globals": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", - "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", + "node_modules/eslint/node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">= 4" } }, - "node_modules/eslint-plugin-react/node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/eslint/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": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "p-locate": "^5.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-rulesdir": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-rulesdir/-/eslint-plugin-rulesdir-0.2.1.tgz", - "integrity": "sha512-t7rQvEyfE4JZJu6dPl4/uVr6Fr0fxopBhzVbtq3isfOHMKdlIe9xW/5CtIaWZI0E1U+wzAk0lEnZC8laCD5YLA==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=4.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint/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==", "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=6" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "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": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -7307,9 +8580,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -7787,9 +9060,9 @@ "dev": true }, "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "node_modules/fast-equals": { @@ -7797,6 +9070,22 @@ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz", "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==" }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -7815,6 +9104,15 @@ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -7975,18 +9273,6 @@ "node": ">=6" } }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -8016,6 +9302,15 @@ "node": ">=0.4.0" } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -8104,21 +9399,24 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -8161,14 +9459,15 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8183,15 +9482,6 @@ "node": ">=8.0.0" } }, - "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, - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -8267,28 +9557,84 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/globby/node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { @@ -8297,6 +9643,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -8369,12 +9721,24 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8470,6 +9834,18 @@ "node": ">=0.10.0" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hermes-estree": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", @@ -8651,9 +10027,9 @@ } }, "node_modules/import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", @@ -8661,6 +10037,9 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-local": { @@ -8849,13 +10228,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -8901,12 +10280,41 @@ "node": ">=0.10.0" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -8966,12 +10374,12 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9002,10 +10410,13 @@ } }, "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -9079,6 +10490,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -9097,10 +10520,25 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -9118,6 +10556,15 @@ "node": ">=8" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -9154,6 +10601,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -9188,6 +10644,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -9239,6 +10704,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -9257,6 +10737,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -9269,6 +10758,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -9404,6 +10906,19 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "node_modules/jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", @@ -10989,6 +12504,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -11047,6 +12568,15 @@ "node": ">=4.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -11072,12 +12602,15 @@ "dev": true }, "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/leven": { @@ -11140,19 +12673,6 @@ "node": ">=8.9.0" } }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -11171,6 +12691,12 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.omit": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", @@ -11237,6 +12763,18 @@ "loose-envify": "cli.js" } }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -11346,6 +12884,15 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/metro": { "version": "0.73.7", "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.7.tgz", @@ -12360,10 +13907,13 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -12448,6 +13998,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -12686,9 +14242,9 @@ "dev": true }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12743,28 +14299,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -12773,6 +14329,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.hasown": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", @@ -12799,14 +14367,14 @@ } }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -12873,17 +14441,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -12942,39 +14510,6 @@ "node": ">=4" } }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -13062,6 +14597,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -13382,6 +14926,26 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", @@ -14209,6 +15773,26 @@ "node": ">=0.10.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -14256,14 +15840,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -14383,12 +15967,12 @@ } }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -14458,6 +16042,16 @@ "node": ">=0.12" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -14488,6 +16082,29 @@ "node": ">=0.12.0" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -14500,6 +16117,30 @@ "npm": ">=2.0.0" } }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -14742,10 +16383,13 @@ } }, "node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -14870,6 +16514,36 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -15434,6 +17108,12 @@ "node": ">=10" } }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, "node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -15488,29 +17168,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15528,19 +17225,10 @@ "node": ">=8" } }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" @@ -15809,12 +17497,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, "node_modules/terser-webpack-plugin/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -16079,22 +17761,34 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -16103,12 +17797,6 @@ "json5": "lib/cli.js" } }, - "node_modules/tsconfig-paths/node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -16116,9 +17804,9 @@ "dev": true }, "node_modules/tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" @@ -16163,6 +17851,71 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -16173,17 +17926,16 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/typical": { @@ -16786,12 +18538,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -16872,12 +18618,78 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -17072,6 +18884,12 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", @@ -17220,6 +19038,12 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -17231,12 +19055,26 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "@babel/compat-data": { @@ -17276,6 +19114,31 @@ } } }, + "@babel/eslint-parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", + "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", + "dev": true, + "requires": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, "@babel/generator": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.0.tgz", @@ -17302,12 +19165,12 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -17357,19 +19220,28 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, "@babel/helper-create-regexp-features-plugin": { @@ -17405,9 +19277,9 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-explode-assignable-expression": { @@ -17420,13 +19292,13 @@ } }, "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { @@ -17439,52 +19311,49 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "requires": { - "@babel/types": "^7.21.0" + "@babel/types": "^7.23.0" } }, "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", - "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" } }, "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-remap-async-to-generator": { @@ -17500,62 +19369,59 @@ } }, "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" } }, "@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.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "requires": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true }, "@babel/helper-wrap-function": { @@ -17582,13 +19448,13 @@ } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -17606,9 +19472,9 @@ } }, "@babel/parser": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.0.tgz", - "integrity": "sha512-ONjtg4renj14A9pj3iA5T5+r5Eijxbr2eNIkMBTC74occDSsRZUpe8vowmowAjFR1imWlkD8eEmjYXiREZpGZg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -17900,12 +19766,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -17981,12 +19847,12 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-arrow-functions": { @@ -18158,14 +20024,14 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" } }, "@babel/plugin-transform-modules-systemjs": { @@ -18382,14 +20248,15 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" } }, "@babel/plugin-transform-unicode-escapes": { @@ -18541,14 +20408,16 @@ } }, "@babel/preset-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" } }, "@babel/register": { @@ -18583,33 +20452,31 @@ } }, "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dev": true, "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + } } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { @@ -18639,13 +20506,13 @@ } }, "@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -18671,6 +20538,90 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "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 + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "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" + } + }, + "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/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true + }, "@hapi/address": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.0.tgz", @@ -18713,6 +20664,29 @@ "@hapi/hoek": "^11.0.2" } }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -18896,6 +20870,23 @@ "jest-mock": "^26.6.2" } }, + "@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + }, + "dependencies": { + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + } + } + }, "@jest/fake-timers": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", @@ -19117,12 +21108,83 @@ } }, "@lwc/eslint-plugin-lwc": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@lwc/eslint-plugin-lwc/-/eslint-plugin-lwc-0.11.0.tgz", - "integrity": "sha512-wJOD4XWOH91GaZfypMSKfEeMXqMfvKdsb2gSJ/9FEwJVlziKg1aagtRYJh2ln3DyEZV33tBC/p/dWzIeiwa1tg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@lwc/eslint-plugin-lwc/-/eslint-plugin-lwc-1.7.2.tgz", + "integrity": "sha512-fvdW/yvkNfqgt2Cc4EJCRYE55QJVNXdDaVTHRk5i1kkKP2Xj3GG0nAsYwXYqApEeRpUTpUZljPlO29/SWRXJoA==", "dev": true, "requires": { - "minimatch": "^3.0.4" + "globals": "^13.24.0", + "minimatch": "^9.0.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "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 + } + } + }, + "@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "requires": { + "eslint-scope": "5.1.1" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, "@playwright/test": { @@ -19509,41 +21571,152 @@ } }, "@react-native-community/eslint-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-2.0.0.tgz", - "integrity": "sha512-vHaMMfvMp9BWCQQ0lNIXibOJTcXIbYUQ8dSUsMOsrXgVkeVQJj88OwrKS00rQyqwMaC4/a6HuDiFzYUkGKOpVg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-3.2.0.tgz", + "integrity": "sha512-ZjGvoeiBtCbd506hQqwjKmkWPgynGUoJspG8/MuV/EfKnkjCtBmeJvq2n+sWbWEvL9LWXDp2GJmPzmvU5RSvKQ==", "dev": true, "requires": { + "@babel/core": "^7.14.0", + "@babel/eslint-parser": "^7.18.2", "@react-native-community/eslint-plugin": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^3.1.0", - "@typescript-eslint/parser": "^3.1.0", - "babel-eslint": "^10.1.0", - "eslint-config-prettier": "^6.10.1", - "eslint-plugin-eslint-comments": "^3.1.2", - "eslint-plugin-flowtype": "2.50.3", - "eslint-plugin-jest": "22.4.1", - "eslint-plugin-prettier": "3.1.2", - "eslint-plugin-react": "^7.20.0", - "eslint-plugin-react-hooks": "^4.0.4", - "eslint-plugin-react-native": "^3.8.1", - "prettier": "^2.0.2" + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-ft-flow": "^2.0.1", + "eslint-plugin-jest": "^26.5.3", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-native": "^4.0.0" }, "dependencies": { - "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==", + "@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "requires": { - "get-stdin": "^6.0.0" + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" } + }, + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "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.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "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.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-plugin-jest": { + "version": "26.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz", + "integrity": "sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^5.10.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true } } }, "@react-native-community/eslint-plugin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/eslint-plugin/-/eslint-plugin-1.1.0.tgz", - "integrity": "sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-plugin/-/eslint-plugin-1.3.0.tgz", + "integrity": "sha512-+zDZ20NUnSWghj7Ku5aFphMzuM9JulqCW+aPXT6IfIXFbb8tzYTTOSeRFOtuekJ99ibW2fUCSsjuKNlwDIbHFg==", "dev": true }, "@react-native/assets": { @@ -19735,12 +21908,6 @@ "@types/estree": "*" } }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, "@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", @@ -19780,10 +21947,170 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "28.1.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", + "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", + "dev": true, + "requires": { + "expect": "^28.0.0", + "pretty-format": "^28.0.0" + }, + "dependencies": { + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true + }, + "@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, + "expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/json5": { @@ -19827,12 +22154,27 @@ "csstype": "^3.0.2" } }, + "@types/react-native": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.0.tgz", + "integrity": "sha512-yBN7qJDfs0Vwr34NyfW1SWzalHQoYtpUWf0t4UJY9C5ft58BRr46+r92I0v+l3QX4VNsSRMHVAAWqLLCbIkM+g==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, "@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", "dev": true }, + "@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -19855,76 +22197,148 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", - "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz", + "integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/type-utils": "6.19.0", + "@typescript-eslint/utils": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", + "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "3.10.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", + "debug": "^4.3.4" } }, - "@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "@typescript-eslint/scope-manager": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", + "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", "dev": true, "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0" } }, - "@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", + "@typescript-eslint/type-utils": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz", + "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==", "dev": true, "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/utils": "6.19.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", + "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", + "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", "dev": true, "requires": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", + "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", + "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/types": "6.19.0", + "eslint-visitor-keys": "^3.4.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } } }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -20138,9 +22552,9 @@ } }, "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true }, "acorn-globals": { @@ -20169,9 +22583,9 @@ "requires": {} }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, @@ -20215,12 +22629,6 @@ "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", "dev": true }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-escape-sequences": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", @@ -20284,9 +22692,9 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -20299,9 +22707,9 @@ } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -20357,49 +22765,93 @@ "integrity": "sha512-mixVv03GOOn/ubHE4STQ+uevX42ETdk0JoMVEjNkSOCT7WgERh7C8/+NyhWYNpE3BN69pxFyJIBcF7CxWz/+4A==", "dev": true }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, + "arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -20458,6 +22910,15 @@ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, + "asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -20470,10 +22931,16 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true }, "axobject-query": { @@ -20931,13 +23398,14 @@ } }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" } }, "caller-callsite": { @@ -21468,12 +23936,6 @@ "browserslist": "^4.21.4" } }, - "core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", - "dev": true - }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -21612,9 +24074,9 @@ "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -21665,12 +24127,24 @@ "clone": "^1.0.2" } }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "requires": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } @@ -21745,6 +24219,12 @@ "prop-types": "*" } }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true + }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -21763,6 +24243,15 @@ "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, "dmd": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/dmd/-/dmd-6.0.0.tgz", @@ -21878,15 +24367,6 @@ "tapable": "^2.2.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "entities": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", @@ -21928,35 +24408,72 @@ } }, "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", - "has": "^1.0.3", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + } + }, + "es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "requires": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" } }, "es-module-lexer": { @@ -21965,6 +24482,17 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + } + }, "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -22018,99 +24546,254 @@ "dependencies": { "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.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 + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "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": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "argparse": "^2.0.1" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "p-locate": "^5.0.0" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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==", "dev": true }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "glob": "^7.1.3" } + }, + "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": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz", - "integrity": "sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.0", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^1.3.0", - "espree": "^7.2.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, "eslint-config-expensify": { - "version": "2.0.42", - "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.42.tgz", - "integrity": "sha512-TNwbfIGjOp4EjT6HKEpp10mr6dkBNCNMTeMmpuQyS0Nqv1tRGJltoU3GFmUHJywrLkEmu21iC0NNMmoJ1XzmLg==", + "version": "2.0.43", + "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.43.tgz", + "integrity": "sha512-kLd6NyYbyb3mCB6VH6vu49/RllwNo0rdXcLUUGB7JGny+2N19jOmBJ4/GLKsbpFzvEZEghXfn7BITPRkxVJcgg==", "dev": true, "requires": { "@lwc/eslint-plugin-lwc": "^0.11.0", @@ -22127,6 +24810,15 @@ "underscore": "^1.13.1" }, "dependencies": { + "@lwc/eslint-plugin-lwc": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@lwc/eslint-plugin-lwc/-/eslint-plugin-lwc-0.11.0.tgz", + "integrity": "sha512-wJOD4XWOH91GaZfypMSKfEeMXqMfvKdsb2gSJ/9FEwJVlziKg1aagtRYJh2ln3DyEZV33tBC/p/dWzIeiwa1tg==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -22411,13 +25103,14 @@ "requires": {} }, "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" }, "dependencies": { "debug": { @@ -22432,13 +25125,12 @@ } }, "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "dependencies": { "debug": { @@ -22473,50 +25165,55 @@ }, "dependencies": { "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true } } }, - "eslint-plugin-flowtype": { - "version": "2.50.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", - "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", + "eslint-plugin-ft-flow": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-2.0.3.tgz", + "integrity": "sha512-Vbsd/b+LYA99jUbsL6viEUWShFaYQt2YQs3QN3f+aeszOhh2sgdcU0mjzDyD4yyBvMc8qy2uwvBBWfMzEX06tg==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" } }, "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "doctrine": { @@ -22528,59 +25225,60 @@ "esutils": "^2.0.2" } }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, - "eslint-plugin-jest": { - "version": "22.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz", - "integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==", - "dev": true, - "requires": {} - }, "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", "dev": true, "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "semver": "^6.3.0" + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" }, "dependencies": { "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "requires": { + "dequal": "^2.0.3" + } + }, + "ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "dequal": "^2.0.3" } }, "emoji-regex": { @@ -22590,27 +25288,23 @@ "dev": true }, "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, "eslint-plugin-prettier": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", - "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -22684,19 +25378,18 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", - "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, "requires": {} }, "eslint-plugin-react-native": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.10.0.tgz", - "integrity": "sha512-4f5+hHYYq5wFhB5eptkPEAR7FfvqbS7AzScUOANfAMZtYw5qgnCxRq45bpfBaQF+iyPMim5Q8pubcpvLv75NAg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz", + "integrity": "sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==", "dev": true, "requires": { - "@babel/traverse": "^7.7.4", "eslint-plugin-react-native-globals": "^0.1.1" } }, @@ -22738,20 +25431,20 @@ "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true } } @@ -22763,9 +25456,9 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "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" @@ -23146,9 +25839,9 @@ "dev": true }, "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "fast-equals": { @@ -23156,6 +25849,19 @@ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz", "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==" }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -23174,6 +25880,15 @@ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, + "fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -23306,15 +26021,6 @@ } } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -23338,6 +26044,15 @@ "integrity": "sha512-2hJ5ACYeJCzNtiVULov6pljKOLygy0zddoqSI1fFetM+XRPpRshFdGEijtqlamA1XwyZ+7rhryI6FQFzvtLWUQ==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -23401,21 +26116,21 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" } }, "functional-red-black-tree": { @@ -23443,14 +26158,15 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-package-type": { @@ -23459,12 +26175,6 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, - "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": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -23536,12 +26246,58 @@ } } }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true + } + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -23593,14 +26349,20 @@ "dev": true }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "requires": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -23668,6 +26430,15 @@ } } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "hermes-estree": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", @@ -23803,9 +26574,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -23957,13 +26728,13 @@ } }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, @@ -24002,12 +26773,32 @@ } } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -24049,12 +26840,12 @@ } }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-data-descriptor": { @@ -24078,10 +26869,13 @@ } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-descriptor": { "version": "0.1.6", @@ -24127,6 +26921,15 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, + "is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -24139,10 +26942,19 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -24154,6 +26966,12 @@ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -24175,6 +26993,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -24200,6 +27024,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -24233,6 +27063,15 @@ "has-symbols": "^1.0.1" } }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -24245,6 +27084,12 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -24254,6 +27099,16 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -24360,6 +27215,19 @@ "istanbul-lib-report": "^3.0.0" } }, + "iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", @@ -25629,6 +28497,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -25678,6 +28552,15 @@ "object.assign": "^4.1.0" } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -25697,12 +28580,12 @@ "dev": true }, "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "requires": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" } }, "leven": { @@ -25753,16 +28636,6 @@ "json5": "^2.1.2" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -25781,6 +28654,12 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.omit": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", @@ -25835,6 +28714,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -25920,6 +28808,12 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "metro": { "version": "0.73.7", "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.7.tgz", @@ -26769,9 +29663,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mixin-deep": { @@ -26847,6 +29741,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -27039,9 +29939,9 @@ "dev": true }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true }, "object-keys": { @@ -27078,25 +29978,37 @@ } }, "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" } }, "object.hasown": { @@ -27119,14 +30031,14 @@ } }, "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "on-finished": { @@ -27172,17 +30084,17 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" } }, "ora": { @@ -27220,30 +30132,6 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -27307,6 +30195,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -27548,6 +30442,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", @@ -28234,6 +31134,20 @@ } } }, + "reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -28275,14 +31189,14 @@ } }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" } }, "regexpp": { @@ -28374,12 +31288,12 @@ } }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -28429,6 +31343,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -28450,6 +31370,15 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -28459,6 +31388,26 @@ "tslib": "^1.9.0" } }, + "safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -28662,10 +31611,13 @@ } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "send": { "version": "0.18.0", @@ -28767,6 +31719,30 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -29227,6 +32203,12 @@ "strip-ansi": "^6.0.0" } }, + "string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -29271,26 +32253,37 @@ "side-channel": "^1.0.4" } }, + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "strip-ansi": { @@ -29300,20 +32293,12 @@ "dev": true, "requires": { "ansi-regex": "^5.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - } } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-eof": { @@ -29501,12 +32486,6 @@ "terser": "^5.7.2" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -29726,32 +32705,33 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "requires": {} + }, "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "requires": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true } } }, @@ -29762,9 +32742,9 @@ "dev": true }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -29791,6 +32771,53 @@ "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", "dev": true }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -29801,11 +32828,10 @@ } }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "peer": true + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true }, "typical": { "version": "2.6.1", @@ -30150,12 +33176,6 @@ "webpack-sources": "^3.2.3" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -30325,12 +33345,65 @@ "is-symbol": "^1.0.3" } }, + "which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, + "which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -30483,6 +33556,12 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", diff --git a/package.json b/package.json index 64b6dfc84..8e1c18ce6 100644 --- a/package.json +++ b/package.json @@ -34,9 +34,10 @@ "types": "lib/index.d.ts", "scripts": { "lint": "eslint .", + "typecheck": "tsc --noEmit", "lint-tests": "eslint tests/**", "test": "jest", - "build": "webpack --config webpack.config.js", + "build": "webpack --config webpack.config.js && tsc", "build:docs": "node buildDocs.js", "e2e": "playwright test", "e2e-ui": "playwright test --ui", @@ -49,21 +50,29 @@ }, "devDependencies": { "@babel/core": "7.20.12", + "@babel/eslint-parser": "^7.23.3", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.23.3", + "@lwc/eslint-plugin-lwc": "^1.7.2", "@playwright/test": "^1.38.1", - "@react-native-community/eslint-config": "^2.0.0", + "@react-native-community/eslint-config": "^3.2.0", "@testing-library/jest-native": "^3.4.2", "@testing-library/react-native": "^7.0.2", + "@types/jest": "^28.1.8", "@types/node": "^20.7.1", "@types/react": "^18.2.14", + "@types/react-native": "^0.70.0", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", "babel-eslint": "^10.1.0", "babel-jest": "^26.2.2", "babel-loader": "^8.2.5", - "eslint": "^7.6.0", - "eslint-config-expensify": "^2.0.42", + "eslint": "^8.56.0", + "eslint-config-expensify": "^2.0.43", "eslint-config-prettier": "^8.8.0", - "eslint-plugin-jsx-a11y": "^6.6.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-react": "^7.31.10", "idb-keyval": "^6.2.1", "jest": "^26.5.2", @@ -80,6 +89,7 @@ "react-native-quick-sqlite": "^8.0.6", "react-test-renderer": "18.1.0", "type-fest": "^3.12.0", + "typescript": "^5.3.3", "webpack": "^5.72.1", "webpack-cli": "^4.9.2", "webpack-merge": "^5.8.0" diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..1d7a6c0f7 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,24 @@ + +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "types": ["react-native", "jest"], + "lib": ["esnext"], + "allowJs": true, + "checkJs": false, + "jsx": "react-native", + "isolatedModules": true, + "strict": true, + "emitDeclarationOnly": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "declaration": true, + "rootDir": "./lib", + }, + "include": ["."], + "exclude": ["**/node_modules/**/*", "**/dist/**/*", "*.config.js"] +} diff --git a/webpack.config.js b/webpack.config.js index 1ca1aec7d..02a1a1a87 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -8,12 +8,12 @@ const commonConfig = { devtool: 'source-map', entry: './lib/index.js', resolve: { - extensions: ['.jsx', '.js'], + extensions: ['.tsx', '.ts', '.jsx', '.js'], }, module: { rules: [ { - test: /\.js$/, + test: /\.(js|ts)x?$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', @@ -50,7 +50,7 @@ const webConfig = merge(commonConfig, { }, resolve: { // Resolve any web specific JS file as a normal JS file - extensions: ['.web.js'], + extensions: ['.web.ts', '.web.js'], }, }); From af75bd6fa546f5ad947f49d8cf475aa41a110389 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 19 Jan 2024 17:05:37 +0100 Subject: [PATCH 02/18] Remove webpack and babel in favor of TS --- .eslintrc.js | 1 - .prettierignore | 2 +- README.md | 4 +-- babel.config.js | 15 ----------- lib/index.d.ts | 3 +-- native.js | 11 -------- package.json | 16 +++--------- tsconfig.json | 7 +++-- web.js | 12 --------- webpack.config.js | 66 ----------------------------------------------- 10 files changed, 10 insertions(+), 127 deletions(-) delete mode 100644 babel.config.js delete mode 100644 native.js delete mode 100644 web.js delete mode 100644 webpack.config.js diff --git a/.eslintrc.js b/.eslintrc.js index 3ebe2e061..d7bb1207b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,6 @@ module.exports = { env: { jest: true, }, - ignorePatterns: 'dist', overrides: [ { files: ['*.js', '*.jsx'], diff --git a/.prettierignore b/.prettierignore index 1ece4521f..ab2c9d126 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,4 @@ -dist/**/*.js +dist package.json package-lock.json *.html diff --git a/README.md b/README.md index 5734cad07..d012e5cf7 100644 --- a/README.md +++ b/README.md @@ -433,9 +433,7 @@ The action logs use this naming convention: `react-native` bundles source using the `metro` bundler. `metro` does not follow symlinks, so we can't use `npm link` to link a local version of Onyx during development -To quickly test small changes you can directly go to `node_modules/react-native-onyx` in the parent project and: -- tweak original source if you're testing over a react-native project -- tweak `dist/web.development.js` for non react-native-projects +To quickly test small changes you can directly go to `node_modules/react-native-onyx` in the parent project and tweak original source code. To continuously work on Onyx we have to set up a task that copies content to parent project's `node_modules/react-native-onyx`: 1. Work on Onyx feature or a fix diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index b03a0eb37..000000000 --- a/babel.config.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = (api) => { - const isWeb = api.caller((caller) => caller && caller.target === 'web'); - if (isWeb) { - return { - // Default browser list is a reasonable preset covering a wide list of non-dead browsers - // https://github.com/browserslist/browserslist#best-practices - targets: 'defaults', - presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'], - }; - } - - return { - presets: ['module:metro-react-native-babel-preset'], - }; -}; diff --git a/lib/index.d.ts b/lib/index.d.ts index d51d061ff..2a92b2d4d 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,7 +1,6 @@ import Onyx, {OnyxUpdate, ConnectOptions} from './Onyx'; -import OnyxUtils from './OnyxUtils'; import {CustomTypeOptions, OnyxCollection, OnyxEntry, NullishDeep, KeyValueMapping} from './types'; import withOnyx from './withOnyx'; export default Onyx; -export {OnyxUtils, CustomTypeOptions, OnyxCollection, OnyxEntry, OnyxUpdate, withOnyx, ConnectOptions, NullishDeep, KeyValueMapping}; +export {CustomTypeOptions, OnyxCollection, OnyxEntry, OnyxUpdate, withOnyx, ConnectOptions, NullishDeep, KeyValueMapping}; diff --git a/native.js b/native.js deleted file mode 100644 index 00146d6f9..000000000 --- a/native.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @file - * Native entry point for Onyx - * This file is resolved by react-native projects - */ -import Onyx from './lib'; - -// We resolve pure source for react-native projects and let `metro` bundle it -// We can test small changes directly from the parent project `node_modules/react-native-onyx` source -export * from './lib'; -export default Onyx; diff --git a/package.json b/package.json index 8e1c18ce6..58ec59408 100644 --- a/package.json +++ b/package.json @@ -21,23 +21,18 @@ }, "files": [ "dist/**/*", - "lib/**/*", - "native.js", - "web.js", "API.md", "README.md", "LICENSE.md" ], - "react-native": "native.js", - "main": "native.js", - "browser": "web.js", - "types": "lib/index.d.ts", + "main": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { "lint": "eslint .", "typecheck": "tsc --noEmit", "lint-tests": "eslint tests/**", "test": "jest", - "build": "webpack --config webpack.config.js && tsc", + "build": "tsc && cp ./lib/*.d.ts ./dist", "build:docs": "node buildDocs.js", "e2e": "playwright test", "e2e-ui": "playwright test --ui", @@ -89,10 +84,7 @@ "react-native-quick-sqlite": "^8.0.6", "react-test-renderer": "18.1.0", "type-fest": "^3.12.0", - "typescript": "^5.3.3", - "webpack": "^5.72.1", - "webpack-cli": "^4.9.2", - "webpack-merge": "^5.8.0" + "typescript": "^5.3.3" }, "peerDependencies": { "idb-keyval": "^6.2.1", diff --git a/tsconfig.json b/tsconfig.json index 1d7a6c0f7..63dc1e63a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ { "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { - "target": "esnext", + "target": "es2015", "module": "esnext", "types": ["react-native", "jest"], "lib": ["esnext"], @@ -11,14 +11,13 @@ "jsx": "react-native", "isolatedModules": true, "strict": true, - "emitDeclarationOnly": true, "moduleResolution": "node", "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "skipLibCheck": true, "declaration": true, - "rootDir": "./lib", + "outDir": "./dist", }, - "include": ["."], + "include": ["./lib"], "exclude": ["**/node_modules/**/*", "**/dist/**/*", "*.config.js"] } diff --git a/web.js b/web.js deleted file mode 100644 index e08693dcf..000000000 --- a/web.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @file - * Web entry point for Onyx - * This file is resolved by non react-native projects - * Like React for web or pure JS - */ - -if (process.env.NODE_ENV === 'production') { - module.exports = require('./dist/web.min'); -} else { - module.exports = require('./dist/web.development'); -} diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 02a1a1a87..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,66 +0,0 @@ -const path = require('path'); -const {merge} = require('webpack-merge'); -const _ = require('underscore'); -const pkg = require('./package.json'); - -const commonConfig = { - mode: 'production', - devtool: 'source-map', - entry: './lib/index.js', - resolve: { - extensions: ['.tsx', '.ts', '.jsx', '.js'], - }, - module: { - rules: [ - { - test: /\.(js|ts)x?$/, - exclude: /(node_modules)/, - use: { - loader: 'babel-loader', - options: { - generatorOpts: { - // We instruct babel to keep generated code as close to original source as possible - // Production builds would strip comments and minify code regardless the config here - // but development builds would retain jsdocs and method lines - compact: false, - retainLines: true, - comments: true, - }, - }, - }, - }, - ], - }, - externals: ['react-native', /^lodash\/.+$/, ..._.keys(pkg.peerDependencies), ..._.keys(pkg.dependencies)], - output: { - path: path.resolve(__dirname, 'dist'), - library: { - name: 'react-native-onyx', - type: 'umd', - }, - }, -}; - -const webConfig = merge(commonConfig, { - output: { - filename: 'web.min.js', - library: { - name: 'react-native-onyx/web', - }, - }, - resolve: { - // Resolve any web specific JS file as a normal JS file - extensions: ['.web.ts', '.web.js'], - }, -}); - -// Web projects using Onyx would resolve this configuration during development (webpack-dev-server) -// If we want to experiment with Onyx locally we can edit the `.development` script since it's not minified -const webDevConfig = merge(webConfig, { - mode: 'development', - output: { - filename: 'web.development.js', - }, -}); - -module.exports = [webConfig, webDevConfig]; From 9dd1ae7761d7368988a0fdae66b7401bc742d64c Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 19 Jan 2024 22:53:27 +0100 Subject: [PATCH 03/18] Fix lint and typecheck --- .eslintrc.js | 3 +- lib/withOnyx.js | 2 +- package-lock.json | 1941 ++++--------------------------------------- package.json | 11 +- tsconfig.build.json | 6 + tsconfig.json | 5 +- 6 files changed, 186 insertions(+), 1782 deletions(-) create mode 100644 tsconfig.build.json diff --git a/.eslintrc.js b/.eslintrc.js index d7bb1207b..5c0cea653 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { extends: ['expensify', 'prettier'], - parser: '@babel/eslint-parser', + parser: '@typescript-eslint/parser', env: { jest: true, }, @@ -34,7 +34,6 @@ module.exports = { files: ['*.ts', '*.tsx'], extends: ['expensify', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/stylistic', 'plugin:import/typescript', 'prettier', 'plugin:prettier/recommended'], plugins: ['react', 'react-native', 'import', '@typescript-eslint'], - parser: '@typescript-eslint/parser', parserOptions: { project: './tsconfig.json', }, diff --git a/lib/withOnyx.js b/lib/withOnyx.js index 995e76ae8..fb980fc01 100644 --- a/lib/withOnyx.js +++ b/lib/withOnyx.js @@ -42,7 +42,7 @@ export default function (mapOnyxToState, shouldDelayUpdates = false) { return (WrappedComponent) => { const displayName = getDisplayName(WrappedComponent); class withOnyx extends React.Component { - pendingSetStates = []; + ppendingSetStates = []; constructor(props) { super(props); diff --git a/package-lock.json b/package-lock.json index fe6ec2ad2..6ac46ee8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,11 +14,7 @@ "underscore": "^1.13.6" }, "devDependencies": { - "@babel/core": "7.20.12", "@babel/eslint-parser": "^7.23.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.23.3", "@lwc/eslint-plugin-lwc": "^1.7.2", "@playwright/test": "^1.38.1", "@react-native-community/eslint-config": "^3.2.0", @@ -30,9 +26,6 @@ "@types/react-native": "^0.70.0", "@typescript-eslint/eslint-plugin": "^6.19.0", "@typescript-eslint/parser": "^6.19.0", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.2.2", - "babel-loader": "^8.2.5", "eslint": "^8.56.0", "eslint-config-expensify": "^2.0.43", "eslint-config-prettier": "^8.8.0", @@ -43,7 +36,6 @@ "jest": "^26.5.2", "jest-cli": "^26.5.2", "jsdoc-to-markdown": "^7.1.0", - "metro-react-native-babel-preset": "^0.72.3", "prettier": "^2.8.8", "prop-types": "^15.7.2", "react": "18.2.0", @@ -54,10 +46,7 @@ "react-native-quick-sqlite": "^8.0.6", "react-test-renderer": "18.1.0", "type-fest": "^3.12.0", - "typescript": "^5.3.3", - "webpack": "^5.72.1", - "webpack-cli": "^4.9.2", - "webpack-merge": "^5.8.0" + "typescript": "^5.3.3" }, "engines": { "node": "20.9.0", @@ -265,6 +254,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -369,6 +359,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -386,6 +377,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -404,6 +396,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, + "peer": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -672,6 +665,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -687,6 +681,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -738,6 +733,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -755,6 +751,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -784,6 +781,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -800,6 +798,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -816,6 +815,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -848,6 +848,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -916,6 +917,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -932,6 +934,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -950,6 +953,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1002,6 +1006,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1041,6 +1046,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1068,6 +1074,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -1194,6 +1201,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1363,6 +1371,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1379,6 +1388,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1394,6 +1404,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1488,6 +1499,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.19.6", "@babel/helper-plugin-utils": "^7.19.0" @@ -1521,6 +1533,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.19.6", @@ -1539,6 +1552,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1571,6 +1585,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1661,21 +1676,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", @@ -1700,27 +1700,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" @@ -1737,6 +1722,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1837,6 +1823,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1870,6 +1857,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1901,6 +1889,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", "dev": true, + "peer": true, "dependencies": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -1990,6 +1979,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -2016,6 +2006,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2027,26 +2018,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/preset-typescript": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", @@ -2205,15 +2176,6 @@ "node": ">=0.1.95" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -3964,32 +3926,6 @@ "@babel/types": "^7.3.0" } }, - "node_modules/@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, "node_modules/@types/graceful-fs": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", @@ -4556,200 +4492,6 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", - "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", - "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", - "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -4821,15 +4563,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -4876,15 +4609,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/anser": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", @@ -5363,196 +5087,82 @@ "@babel/core": "^7.0.0" } }, - "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "node": ">=8" } }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "node": ">= 10.14.2" } }, - "node_modules/babel-loader/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==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, + "peer": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-loader/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==", + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "peer": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/babel-loader/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==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, + "peer": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-loader/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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/babel-loader/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" }, @@ -5737,15 +5347,6 @@ } ] }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -6100,15 +5701,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -6568,6 +6160,7 @@ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.21.4" }, @@ -7084,15 +6677,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -7111,19 +6695,6 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", - "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/entities": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", @@ -7248,12 +6819,6 @@ "safe-array-concat": "^1.0.1" } }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, "node_modules/es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", @@ -8657,15 +8222,6 @@ "node": ">=6" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/exec-sh": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", @@ -9098,12 +8654,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "node_modules/fastq": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", @@ -9551,12 +9101,6 @@ "node": ">= 6" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, "node_modules/globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", @@ -9958,15 +9502,6 @@ "node": ">= 6" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -12650,29 +12185,6 @@ "uc.micro": "^1.0.1" } }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -12689,7 +12201,8 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "peer": true }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -13360,56 +12873,6 @@ "uglify-es": "^3.1.9" } }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz", - "integrity": "sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.14.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.2.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-exponentiation-operator": "^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/metro-react-native-babel-transformer": { "version": "0.73.7", "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.7.tgz", @@ -14952,15 +14415,6 @@ "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", "dev": true }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -15822,6 +15276,7 @@ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, + "peer": true, "dependencies": { "@babel/runtime": "^7.8.4" } @@ -16364,24 +15819,6 @@ "loose-envify": "^1.1.0" } }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -16484,15 +15921,6 @@ "node": ">=0.10.0" } }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", @@ -17392,15 +16820,6 @@ "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", "dev": true }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/temp": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", @@ -17463,105 +16882,15 @@ "node": ">=10" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "dependencies": { - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { "node": ">=8" @@ -18303,19 +17632,6 @@ "makeerror": "1.0.12" } }, - "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -18331,231 +17647,6 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "node_modules/webpack": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", - "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-cli/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/webpack-cli/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-cli/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-cli/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-cli/node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -18690,12 +17781,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -19178,6 +18263,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, + "peer": true, "requires": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -19259,6 +18345,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, + "peer": true, "requires": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -19272,7 +18359,8 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -19287,6 +18375,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, + "peer": true, "requires": { "@babel/types": "^7.18.6" } @@ -19482,6 +18571,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -19491,6 +18581,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -19524,6 +18615,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, + "peer": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -19535,6 +18627,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -19555,6 +18648,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -19565,6 +18659,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -19575,6 +18670,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -19595,6 +18691,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -19639,6 +18736,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, + "peer": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -19649,6 +18747,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dev": true, + "peer": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -19661,6 +18760,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, + "peer": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -19698,6 +18798,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -19725,6 +18826,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -19743,6 +18845,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.19.0" } @@ -19833,6 +18936,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -19941,6 +19045,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, + "peer": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -19951,6 +19056,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -19960,6 +19066,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, + "peer": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -20018,6 +19125,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "dev": true, + "peer": true, "requires": { "@babel/helper-module-transforms": "^7.19.6", "@babel/helper-plugin-utils": "^7.19.0" @@ -20039,6 +19147,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "dev": true, + "peer": true, "requires": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.19.6", @@ -20051,6 +19160,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, + "peer": true, "requires": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -20071,6 +19181,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -20125,15 +19236,6 @@ "@babel/types": "^7.20.7" } }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, "@babel/plugin-transform-react-jsx-self": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", @@ -20152,21 +19254,12 @@ "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, "@babel/plugin-transform-regenerator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" @@ -20177,6 +19270,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -20243,6 +19337,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -20264,6 +19359,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -20283,6 +19379,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", "dev": true, + "peer": true, "requires": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -20365,7 +19462,8 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -20385,6 +19483,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -20393,20 +19492,6 @@ "esutils": "^2.0.2" } }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, "@babel/preset-typescript": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", @@ -20532,12 +19617,6 @@ "minimist": "^1.2.0" } }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -21888,32 +20967,6 @@ "@babel/types": "^7.3.0" } }, - "@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, "@types/graceful-fs": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", @@ -22339,187 +21392,6 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", - "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", - "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", - "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, "abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -22575,13 +21447,6 @@ } } }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -22616,13 +21481,6 @@ "uri-js": "^4.2.2" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, "anser": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", @@ -22948,125 +21806,42 @@ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "requires": {} - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "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==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true, + "requires": {} + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" } }, "babel-plugin-istanbul": { @@ -23099,6 +21874,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, + "peer": true, "requires": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -23109,7 +21885,8 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -23118,6 +21895,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, + "peer": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -23128,6 +21906,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, + "peer": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.3" } @@ -23270,12 +22049,6 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -23533,12 +22306,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -23932,6 +22699,7 @@ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.21.4" } @@ -24336,12 +23104,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -24357,16 +23119,6 @@ "once": "^1.4.0" } }, - "enhanced-resolve": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", - "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, "entities": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", @@ -24476,12 +23228,6 @@ "safe-array-concat": "^1.0.1" } }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, "es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", @@ -25513,12 +24259,6 @@ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, "exec-sh": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", @@ -25874,12 +24614,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "fastq": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", @@ -26223,12 +24957,6 @@ "is-glob": "^4.0.1" } }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, "globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", @@ -26534,12 +25262,6 @@ "debug": "4" } }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -28619,23 +27341,6 @@ "uc.micro": "^1.0.1" } }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -28652,7 +27357,8 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "peer": true }, "lodash.merge": { "version": "4.6.2", @@ -29407,53 +28113,6 @@ "uglify-es": "^3.1.9" } }, - "metro-react-native-babel-preset": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz", - "integrity": "sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==", - "dev": true, - "requires": { - "@babel/core": "^7.14.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.2.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-exponentiation-operator": "^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.7", "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.7.tgz", @@ -30454,15 +29113,6 @@ "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", "dev": true }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -31174,6 +29824,7 @@ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, + "peer": true, "requires": { "@babel/runtime": "^7.8.4" } @@ -31599,17 +30250,6 @@ "loose-envify": "^1.1.0" } }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -31692,15 +30332,6 @@ "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", "dev": true }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, "serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", @@ -32421,12 +31052,6 @@ "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", "dev": true }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, "temp": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", @@ -32473,58 +31098,6 @@ "source-map-support": "~0.5.20" } }, - "terser-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", - "dev": true, - "requires": { - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "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 - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -33119,16 +31692,6 @@ "makeerror": "1.0.12" } }, - "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -33144,154 +31707,6 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "webpack": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", - "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -33404,12 +31819,6 @@ "has-tostringtag": "^1.0.0" } }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index 58ec59408..ad7a19536 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,8 @@ "scripts": { "lint": "eslint .", "typecheck": "tsc --noEmit", - "lint-tests": "eslint tests/**", "test": "jest", - "build": "tsc && cp ./lib/*.d.ts ./dist", + "build": "tsc -p tsconfig.build.json && cp ./lib/*.d.ts ./dist", "build:docs": "node buildDocs.js", "e2e": "playwright test", "e2e-ui": "playwright test --ui", @@ -44,11 +43,7 @@ "underscore": "^1.13.6" }, "devDependencies": { - "@babel/core": "7.20.12", "@babel/eslint-parser": "^7.23.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.23.3", "@lwc/eslint-plugin-lwc": "^1.7.2", "@playwright/test": "^1.38.1", "@react-native-community/eslint-config": "^3.2.0", @@ -60,9 +55,6 @@ "@types/react-native": "^0.70.0", "@typescript-eslint/eslint-plugin": "^6.19.0", "@typescript-eslint/parser": "^6.19.0", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.2.2", - "babel-loader": "^8.2.5", "eslint": "^8.56.0", "eslint-config-expensify": "^2.0.43", "eslint-config-prettier": "^8.8.0", @@ -73,7 +65,6 @@ "jest": "^26.5.2", "jest-cli": "^26.5.2", "jsdoc-to-markdown": "^7.1.0", - "metro-react-native-babel-preset": "^0.72.3", "prettier": "^2.8.8", "prop-types": "^15.7.2", "react": "18.2.0", diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 000000000..333bb7373 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,6 @@ + +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", + "include": ["./lib"], +} diff --git a/tsconfig.json b/tsconfig.json index 63dc1e63a..c99eef8ff 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "compilerOptions": { "target": "es2015", "module": "esnext", - "types": ["react-native", "jest"], + "types": ["react-native", "jest", "node"], "lib": ["esnext"], "allowJs": true, "checkJs": false, @@ -18,6 +18,5 @@ "declaration": true, "outDir": "./dist", }, - "include": ["./lib"], - "exclude": ["**/node_modules/**/*", "**/dist/**/*", "*.config.js"] + "exclude": ["**/node_modules/**/*", "**/dist/**/*"] } From 98d2e84ef8bc998dee5c25cfa37706bfe6a24bb5 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 19 Jan 2024 22:59:56 +0100 Subject: [PATCH 04/18] Run prettier --- lib/utils.d.ts | 4 ++-- package-lock.json | 1 + package.json | 32 ++------------------------------ tsconfig.build.json | 7 +++---- tsconfig.json | 39 +++++++++++++++++++-------------------- 5 files changed, 27 insertions(+), 56 deletions(-) diff --git a/lib/utils.d.ts b/lib/utils.d.ts index 533384af6..8fc36e590 100644 --- a/lib/utils.d.ts +++ b/lib/utils.d.ts @@ -1,4 +1,4 @@ -import { OnyxKey } from './types'; +import {OnyxKey} from './types'; /** * Merges two objects and removes null values if "shouldRemoveNullObjectValues" is set to true @@ -14,4 +14,4 @@ declare function fastMerge(target: T, source: T, shouldRemoveNullObjectValues */ declare function formatActionName(method: string, key?: OnyxKey): string; -export default { fastMerge, formatActionName }; +export default {fastMerge, formatActionName}; diff --git a/package-lock.json b/package-lock.json index 6ac46ee8f..e77eb68f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@lwc/eslint-plugin-lwc": "^1.7.2", "@playwright/test": "^1.38.1", "@react-native-community/eslint-config": "^3.2.0", + "@react-native/polyfills": "^2.0.0", "@testing-library/jest-native": "^3.4.2", "@testing-library/react-native": "^7.0.2", "@types/jest": "^28.1.8", diff --git a/package.json b/package.json index ad7a19536..0480d9236 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "keywords": [ "React Native", "React", - "Persistant storage", + "Persistent storage", "Pub/Sub" ], "repository": { @@ -43,10 +43,10 @@ "underscore": "^1.13.6" }, "devDependencies": { - "@babel/eslint-parser": "^7.23.3", "@lwc/eslint-plugin-lwc": "^1.7.2", "@playwright/test": "^1.38.1", "@react-native-community/eslint-config": "^3.2.0", + "@react-native/polyfills": "^2.0.0", "@testing-library/jest-native": "^3.4.2", "@testing-library/react-native": "^7.0.2", "@types/jest": "^28.1.8", @@ -103,33 +103,5 @@ "node": "20.9.0", "npm": "10.1.0" }, - "jest": { - "preset": "react-native", - "transform": { - "^.+\\.jsx?$": "babel-jest" - }, - "transformIgnorePatterns": [ - "node_modules/(?!react-native)/" - ], - "testPathIgnorePatterns": [ - "/node_modules/", - "/tests/unit/mocks/", - "/tests/e2e/" - ], - "testMatch": [ - "**/tests/unit/**/*.[jt]s?(x)", - "**/?(*.)+(spec|test).[jt]s?(x)" - ], - "globals": { - "__DEV__": true, - "WebSocket": {} - }, - "timers": "fake", - "testEnvironment": "jsdom", - "setupFilesAfterEnv": [ - "@testing-library/jest-native/extend-expect", - "./jestSetup.js" - ] - }, "sideEffects": false } diff --git a/tsconfig.build.json b/tsconfig.build.json index 333bb7373..78e6b52a3 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,6 +1,5 @@ - { - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "include": ["./lib"], + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", + "include": ["./lib"] } diff --git a/tsconfig.json b/tsconfig.json index c99eef8ff..21299c904 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,21 @@ - { - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "target": "es2015", - "module": "esnext", - "types": ["react-native", "jest", "node"], - "lib": ["esnext"], - "allowJs": true, - "checkJs": false, - "jsx": "react-native", - "isolatedModules": true, - "strict": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "allowSyntheticDefaultImports": true, - "skipLibCheck": true, - "declaration": true, - "outDir": "./dist", - }, - "exclude": ["**/node_modules/**/*", "**/dist/**/*"] + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "target": "es2015", + "module": "esnext", + "types": ["react-native", "jest", "node"], + "lib": ["esnext"], + "allowJs": true, + "checkJs": false, + "jsx": "react-native", + "isolatedModules": true, + "strict": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "declaration": true, + "outDir": "./dist" + }, + "exclude": ["**/node_modules/**/*", "**/dist/**/*"] } From 932b6c515e07bf8093612d4fe572158a2bf40693 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 19 Jan 2024 23:00:09 +0100 Subject: [PATCH 05/18] Generate docs --- API.md | 105 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 83 insertions(+), 22 deletions(-) diff --git a/API.md b/API.md index 1102db0ac..02cc989d1 100644 --- a/API.md +++ b/API.md @@ -5,6 +5,15 @@ ## Functions
+
sendActionToDevTools(method, key, value, mergedValue)
+

Sends an action to DevTools extension

+
+
maybeFlushBatchUpdates() ⇒ Promise
+

We are batching together onyx updates. This helps with use cases where we schedule onyx updates after each other. +This happens for example in the Onyx.update function, where we process API responses that might contain a lot of +update operations. Instead of calling the subscribers for each update operation, we batch them together which will +cause react to schedule the updates at once instead of after each other. This is mainly a performance optimization.

+
getSubsetOfData(sourceData, selector, [withOnyxInstanceState]) ⇒ Mixed

Uses a selector function to return a simplified version of sourceData

@@ -25,12 +34,6 @@ If the requested key is a collection, it will return an object with all the coll
disconnect(connectionID, [keyToRemoveFromEvictionBlocklist])

Remove the listener for a react component

-
maybeFlushBatchUpdates() ⇒ Promise
-

We are batching together onyx updates. This helps with use cases where we schedule onyx updates after each other. -This happens for example in the Onyx.update function, where we process API responses that might contain a lot of -update operations. Instead of calling the subscribers for each update operation, we batch them together which will -cause react to schedule the updates at once instead of after each other. This is mainly a performance optimization.

-
scheduleSubscriberUpdate(key, value, [canUpdateSubscriber]) ⇒ Promise

Schedules an update that will be appended to the macro task queue (so it doesn't update the subscribers immediately).

@@ -39,11 +42,15 @@ cause react to schedule the updates at once instead of after each other. This is so that keysChanged() is triggered for the collection and not keyChanged(). If this was not done, then the subscriber callbacks receive the data in a different format than they normally expect and it breaks code.

-
broadcastUpdate(key, value, hasChanged, method) ⇒ Promise
+
broadcastUpdate(key, value, method, hasChanged, wasRemoved) ⇒ Promise

Notifys subscribers and writes current value to cache

hasPendingMergeForKey(key) ⇒ Boolean
+
removeNullValues(key, value) ⇒ Mixed
+

Removes a key from storage if the value is null. +Otherwise removes all nested null values in objects and returns the object

+
set(key, value) ⇒ Promise

Write a value to our store with the given key

@@ -83,11 +90,41 @@ value will be saved to storage after the default value.

setMemoryOnlyKeys(keyList)

When set these keys will not be persisted to storage

+
onClear(callback)
+

Sets the callback to be called when the clear finishes executing.

+
+
subscribeToEvents()
+

Subscribes to the Broadcast channel and executes actions based on the +types of events.

+
init([options])

Initialize the store with actions and listening for storage events

+ + +## sendActionToDevTools(method, key, value, mergedValue) +Sends an action to DevTools extension + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| method | string | Onyx method from METHOD | +| key | string | Onyx key that was changed | +| value | any | contains the change that was made by the method | +| mergedValue | any | (optional) value that was written in the storage after a merge method was executed. | + + + +## maybeFlushBatchUpdates() ⇒ Promise +We are batching together onyx updates. This helps with use cases where we schedule onyx updates after each other. +This happens for example in the Onyx.update function, where we process API responses that might contain a lot of +update operations. Instead of calling the subscribers for each update operation, we batch them together which will +cause react to schedule the updates at once instead of after each other. This is mainly a performance optimization. + +**Kind**: global function ## getSubsetOfData(sourceData, selector, [withOnyxInstanceState]) ⇒ Mixed @@ -182,15 +219,6 @@ Remove the listener for a react component ```js Onyx.disconnect(connectionID); ``` - - -## maybeFlushBatchUpdates() ⇒ Promise -We are batching together onyx updates. This helps with use cases where we schedule onyx updates after each other. -This happens for example in the Onyx.update function, where we process API responses that might contain a lot of -update operations. Instead of calling the subscribers for each update operation, we batch them together which will -cause react to schedule the updates at once instead of after each other. This is mainly a performance optimization. - -**Kind**: global function ## scheduleSubscriberUpdate(key, value, [canUpdateSubscriber]) ⇒ Promise @@ -224,26 +252,41 @@ subscriber callbacks receive the data in a different format than they normally e -## broadcastUpdate(key, value, hasChanged, method) ⇒ Promise +## broadcastUpdate(key, value, method, hasChanged, wasRemoved) ⇒ Promise Notifys subscribers and writes current value to cache **Kind**: global function +| Param | Type | Default | +| --- | --- | --- | +| key | String | | +| value | \* | | +| method | String | | +| hasChanged | Boolean | | +| wasRemoved | Boolean | false | + + + +## hasPendingMergeForKey(key) ⇒ Boolean +**Kind**: global function + | Param | Type | | --- | --- | | key | String | -| value | \* | -| hasChanged | Boolean | -| method | String | - + + +## removeNullValues(key, value) ⇒ Mixed +Removes a key from storage if the value is null. +Otherwise removes all nested null values in objects and returns the object -## hasPendingMergeForKey(key) ⇒ Boolean **Kind**: global function +**Returns**: Mixed - The value without null values and a boolean "wasRemoved", which indicates if the key got removed completely | Param | Type | | --- | --- | | key | String | +| value | Mixed | @@ -367,6 +410,24 @@ When set these keys will not be persisted to storage | --- | --- | | keyList | Array.<string> | + + +## onClear(callback) +Sets the callback to be called when the clear finishes executing. + +**Kind**: global function + +| Param | Type | +| --- | --- | +| callback | function | + + + +## subscribeToEvents() +Subscribes to the Broadcast channel and executes actions based on the +types of events. + +**Kind**: global function ## init([options]) From d0ce7d39698d4c8fcf58b22edd18f731b935040b Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 19 Jan 2024 23:00:28 +0100 Subject: [PATCH 06/18] Move jest config to config file --- jest.config.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 jest.config.js diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..9a3c885d6 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,16 @@ +module.exports = { + preset: 'react-native', + transform: { + '^.+\\.jsx?$': 'babel-jest', + }, + transformIgnorePatterns: ['node_modules/(?!react-native)/'], + testPathIgnorePatterns: ['/node_modules/', '/tests/unit/mocks/', '/tests/e2e/'], + testMatch: ['**/tests/unit/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], + globals: { + __DEV__: true, + WebSocket: {}, + }, + timers: 'fake', + testEnvironment: 'jsdom', + setupFilesAfterEnv: ['@testing-library/jest-native/extend-expect', './jestSetup.js'], +}; From 16c0f0492e6bb7b173601d9db60083ee8250ec8e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Sat, 20 Jan 2024 00:02:53 +0100 Subject: [PATCH 07/18] Fix e2e --- package-lock.json | 1 - tests/e2e/app/babel.config.js | 2 +- tests/e2e/app/craco.config.js | 11 +++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index e77eb68f7..c7f8e9662 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,6 @@ "underscore": "^1.13.6" }, "devDependencies": { - "@babel/eslint-parser": "^7.23.3", "@lwc/eslint-plugin-lwc": "^1.7.2", "@playwright/test": "^1.38.1", "@react-native-community/eslint-config": "^3.2.0", diff --git a/tests/e2e/app/babel.config.js b/tests/e2e/app/babel.config.js index 371e7f80b..bd235cca3 100644 --- a/tests/e2e/app/babel.config.js +++ b/tests/e2e/app/babel.config.js @@ -7,7 +7,7 @@ module.exports = { [ 'module-resolver', { - extensions: ['.js', '.jsx', '.json'], + extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'], alias: { [pak.name]: path.join(__dirname, '../../../', pak.source), }, diff --git a/tests/e2e/app/craco.config.js b/tests/e2e/app/craco.config.js index 660d70f82..328b9ce49 100644 --- a/tests/e2e/app/craco.config.js +++ b/tests/e2e/app/craco.config.js @@ -1,3 +1,4 @@ +const {getLoader, loaderByName} = require('@craco/craco'); const {CracoAliasPlugin} = require('react-app-alias-ex'); module.exports = { @@ -10,4 +11,14 @@ module.exports = { eslint: { enable: false, }, + webpack: { + configure: (webpackConfig) => { + const {isFound, match} = getLoader(webpackConfig, loaderByName('babel-loader')); + if (isFound) { + match.loader.include = /\.[jt]sx?$/; + } + webpackConfig.resolve.extensions.push('.ts', '.tsx'); + return webpackConfig; + }, + }, }; From 7e35ad49ba8a97e313ee320f301b01dd9e071cd2 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Sat, 20 Jan 2024 01:28:18 +0100 Subject: [PATCH 08/18] Fix jest --- babel.config.js | 3 + jest.config.js | 3 +- package-lock.json | 254 +++++++++++++++++++++++++++++++++------------- package.json | 1 + 4 files changed, 189 insertions(+), 72 deletions(-) create mode 100644 babel.config.js diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..80ce241fc --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:metro-react-native-babel-preset'], +}; diff --git a/jest.config.js b/jest.config.js index 9a3c885d6..7e201e458 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,9 +1,8 @@ module.exports = { preset: 'react-native', transform: { - '^.+\\.jsx?$': 'babel-jest', + '\\.[jt]sx?$': 'babel-jest', }, - transformIgnorePatterns: ['node_modules/(?!react-native)/'], testPathIgnorePatterns: ['/node_modules/', '/tests/unit/mocks/', '/tests/e2e/'], testMatch: ['**/tests/unit/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], globals: { diff --git a/package-lock.json b/package-lock.json index c7f8e9662..668ba0f67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,7 @@ "jest": "^26.5.2", "jest-cli": "^26.5.2", "jsdoc-to-markdown": "^7.1.0", + "metro-react-native-babel-preset": "^0.77.0", "prettier": "^2.8.8", "prop-types": "^15.7.2", "react": "18.2.0", @@ -494,15 +495,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -592,15 +592,14 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" @@ -848,7 +847,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -896,13 +894,14 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1055,12 +1054,12 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", + "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1258,14 +1257,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1417,13 +1416,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", + "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -5176,6 +5175,15 @@ "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", "dev": true }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", @@ -12873,6 +12881,59 @@ "uglify-es": "^3.1.9" } }, + "node_modules/metro-react-native-babel-preset": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.77.0.tgz", + "integrity": "sha512-HPPD+bTxADtoE4y/4t1txgTQ1LVR6imOBy7RMHUsqMVTbekoi8Ph5YI9vKX2VMPtVWeFt0w9YnCSLPa76GcXsA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.4.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, "node_modules/metro-react-native-babel-transformer": { "version": "0.73.7", "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.7.tgz", @@ -18446,15 +18507,14 @@ "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" } }, "@babel/helper-replace-supers": { @@ -18514,15 +18574,14 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" } }, "@babel/helpers": { @@ -18691,7 +18750,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, - "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -18721,13 +18779,13 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, @@ -18832,12 +18890,12 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", + "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-import-assertions": { @@ -18969,14 +19027,14 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -19073,13 +19131,13 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", + "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.23.3" } }, "@babel/plugin-transform-for-of": { @@ -21917,6 +21975,15 @@ "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", "dev": true }, + "babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, "babel-preset-current-node-syntax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", @@ -28113,6 +28180,53 @@ "uglify-es": "^3.1.9" } }, + "metro-react-native-babel-preset": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.77.0.tgz", + "integrity": "sha512-HPPD+bTxADtoE4y/4t1txgTQ1LVR6imOBy7RMHUsqMVTbekoi8Ph5YI9vKX2VMPtVWeFt0w9YnCSLPa76GcXsA==", + "dev": true, + "requires": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.4.0" + } + }, "metro-react-native-babel-transformer": { "version": "0.73.7", "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.7.tgz", diff --git a/package.json b/package.json index 0480d9236..38d49e81c 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "jest": "^26.5.2", "jest-cli": "^26.5.2", "jsdoc-to-markdown": "^7.1.0", + "metro-react-native-babel-preset": "^0.77.0", "prettier": "^2.8.8", "prop-types": "^15.7.2", "react": "18.2.0", From 7de4abbffb244199740ed090600f12a72d4cbe00 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Sat, 20 Jan 2024 01:28:30 +0100 Subject: [PATCH 09/18] Fix a typo --- lib/withOnyx.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/withOnyx.js b/lib/withOnyx.js index fb980fc01..995e76ae8 100644 --- a/lib/withOnyx.js +++ b/lib/withOnyx.js @@ -42,7 +42,7 @@ export default function (mapOnyxToState, shouldDelayUpdates = false) { return (WrappedComponent) => { const displayName = getDisplayName(WrappedComponent); class withOnyx extends React.Component { - ppendingSetStates = []; + pendingSetStates = []; constructor(props) { super(props); From c5f4588ed09bba118d2e78b900383ec54bcae12c Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Sat, 20 Jan 2024 01:29:06 +0100 Subject: [PATCH 10/18] Adjust tsconfig after testing in newdot --- tsconfig.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 21299c904..a8835f964 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,20 +2,20 @@ "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { "target": "es2015", - "module": "esnext", - "types": ["react-native", "jest", "node"], + "module": "commonjs", + "types": ["react-native", "react", "jest", "node"], "lib": ["esnext"], "allowJs": true, "checkJs": false, - "jsx": "react-native", + "jsx": "react", "isolatedModules": true, "strict": true, "moduleResolution": "node", "resolveJsonModule": true, - "allowSyntheticDefaultImports": true, + "esModuleInterop": true, "skipLibCheck": true, "declaration": true, - "outDir": "./dist" + "outDir": "./dist", }, "exclude": ["**/node_modules/**/*", "**/dist/**/*"] } From f0e3eeb2eb55ea7fbb1a21e5061a9ecd1f4437e0 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jan 2024 07:41:50 +0100 Subject: [PATCH 11/18] Bump major version --- lib/{batch.native.js => batch.native.ts} | 0 lib/{batch.js => batch.ts} | 0 lib/useOnyx.ts | 11 ----------- package-lock.json | 19 +++++++++++++++++++ package.json | 3 ++- 5 files changed, 21 insertions(+), 12 deletions(-) rename lib/{batch.native.js => batch.native.ts} (100%) rename lib/{batch.js => batch.ts} (100%) delete mode 100644 lib/useOnyx.ts diff --git a/lib/batch.native.js b/lib/batch.native.ts similarity index 100% rename from lib/batch.native.js rename to lib/batch.native.ts diff --git a/lib/batch.js b/lib/batch.ts similarity index 100% rename from lib/batch.js rename to lib/batch.ts diff --git a/lib/useOnyx.ts b/lib/useOnyx.ts deleted file mode 100644 index f8e6b8220..000000000 --- a/lib/useOnyx.ts +++ /dev/null @@ -1,11 +0,0 @@ -// It's just a test file to test typescript -import type {Dispatch, SetStateAction} from 'react'; -import {useState} from 'react'; - -function useOnyx(key: string, defaultValue: T): [T, Dispatch>] { - const [value, setValue] = useState(defaultValue); - - return [value, setValue]; -} - -export default useOnyx; diff --git a/package-lock.json b/package-lock.json index 97241b134..eeb3d08bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "@types/jest": "^28.1.8", "@types/node": "^20.11.5", "@types/react": "^18.2.14", + "@types/react-dom": "^18.2.18", "@types/react-native": "^0.70.0", "@typescript-eslint/eslint-plugin": "^6.19.0", "@typescript-eslint/parser": "^6.19.0", @@ -4211,6 +4212,15 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/react-dom": { + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", + "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-native": { "version": "0.70.0", "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.0.tgz", @@ -21277,6 +21287,15 @@ "csstype": "^3.0.2" } }, + "@types/react-dom": { + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", + "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, "@types/react-native": { "version": "0.70.0", "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.0.tgz", diff --git a/package.json b/package.json index a92faf660..e858346b0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-onyx", - "version": "1.0.129", + "version": "2.0.0", "author": "Expensify, Inc.", "homepage": "https://expensify.com", "description": "State management for React Native", @@ -52,6 +52,7 @@ "@types/jest": "^28.1.8", "@types/node": "^20.11.5", "@types/react": "^18.2.14", + "@types/react-dom": "^18.2.18", "@types/react-native": "^0.70.0", "@typescript-eslint/eslint-plugin": "^6.19.0", "@typescript-eslint/parser": "^6.19.0", From 1c17ad425ef231c6c7e71fb059df9f7b3e5ebd10 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jan 2024 07:43:20 +0100 Subject: [PATCH 12/18] Run prettier --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index a8835f964..151eefc85 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "esModuleInterop": true, "skipLibCheck": true, "declaration": true, - "outDir": "./dist", + "outDir": "./dist" }, "exclude": ["**/node_modules/**/*", "**/dist/**/*"] } From 888f593b8bcb0f221f404af91b3a48f2c693da0d Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jan 2024 15:20:56 +0100 Subject: [PATCH 13/18] Remove onyx from index.js --- lib/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/index.js b/lib/index.js index b50e88d2e..bb2bba7e2 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,6 +1,5 @@ import Onyx from './Onyx'; import withOnyx from './withOnyx'; -import useOnyx from './useOnyx'; export default Onyx; -export {withOnyx, useOnyx}; +export {withOnyx}; From 075f14c2f48014490a55a4960655996c91462920 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jan 2024 16:53:19 +0100 Subject: [PATCH 14/18] Raname .web.js to just .js --- .../{index.web.js => index.js} | 0 lib/broadcast/{index.web.js => index.js} | 0 lib/metrics/{index.web.js => index.js} | 0 lib/storage/{index.web.js => index.js} | 0 package/API.md | 457 ++++++++++++++++++ package/LICENSE.md | 21 + package/README.md | 451 +++++++++++++++++ package/package.json | 109 +++++ react-native-onyx-2.0.0.tgz | Bin 0 -> 64024 bytes tests/unit/webMetricsTest.js | 2 +- 10 files changed, 1039 insertions(+), 1 deletion(-) rename lib/ActiveClientManager/{index.web.js => index.js} (100%) rename lib/broadcast/{index.web.js => index.js} (100%) rename lib/metrics/{index.web.js => index.js} (100%) rename lib/storage/{index.web.js => index.js} (100%) create mode 100644 package/API.md create mode 100644 package/LICENSE.md create mode 100644 package/README.md create mode 100644 package/package.json create mode 100644 react-native-onyx-2.0.0.tgz diff --git a/lib/ActiveClientManager/index.web.js b/lib/ActiveClientManager/index.js similarity index 100% rename from lib/ActiveClientManager/index.web.js rename to lib/ActiveClientManager/index.js diff --git a/lib/broadcast/index.web.js b/lib/broadcast/index.js similarity index 100% rename from lib/broadcast/index.web.js rename to lib/broadcast/index.js diff --git a/lib/metrics/index.web.js b/lib/metrics/index.js similarity index 100% rename from lib/metrics/index.web.js rename to lib/metrics/index.js diff --git a/lib/storage/index.web.js b/lib/storage/index.js similarity index 100% rename from lib/storage/index.web.js rename to lib/storage/index.js diff --git a/package/API.md b/package/API.md new file mode 100644 index 000000000..02cc989d1 --- /dev/null +++ b/package/API.md @@ -0,0 +1,457 @@ + + +# API Reference + +## Functions + +
+
sendActionToDevTools(method, key, value, mergedValue)
+

Sends an action to DevTools extension

+
+
maybeFlushBatchUpdates() ⇒ Promise
+

We are batching together onyx updates. This helps with use cases where we schedule onyx updates after each other. +This happens for example in the Onyx.update function, where we process API responses that might contain a lot of +update operations. Instead of calling the subscribers for each update operation, we batch them together which will +cause react to schedule the updates at once instead of after each other. This is mainly a performance optimization.

+
+
getSubsetOfData(sourceData, selector, [withOnyxInstanceState]) ⇒ Mixed
+

Uses a selector function to return a simplified version of sourceData

+
+
reduceCollectionWithSelector(collection, selector, [withOnyxInstanceState]) ⇒ Object
+

Takes a collection of items (eg. {testKey_1:{a:'a'}, testKey_2:{b:'b'}}) +and runs it through a reducer function to return a subset of the data according to a selector. +The resulting collection will only contain items that are returned by the selector.

+
+
isCollectionMemberKey(collectionKey, key) ⇒ Boolean
+
+
tryGetCachedValue(key, mapping) ⇒ Mixed
+

Tries to get a value from the cache. If the value is not present in cache it will return the default value or undefined. +If the requested key is a collection, it will return an object with all the collection members.

+
+
connect(mapping) ⇒ Number
+

Subscribes a react component's state directly to a store key

+
+
disconnect(connectionID, [keyToRemoveFromEvictionBlocklist])
+

Remove the listener for a react component

+
+
scheduleSubscriberUpdate(key, value, [canUpdateSubscriber]) ⇒ Promise
+

Schedules an update that will be appended to the macro task queue (so it doesn't update the subscribers immediately).

+
+
scheduleNotifyCollectionSubscribers(key, value) ⇒ Promise
+

This method is similar to notifySubscribersOnNextTick but it is built for working specifically with collections +so that keysChanged() is triggered for the collection and not keyChanged(). If this was not done, then the +subscriber callbacks receive the data in a different format than they normally expect and it breaks code.

+
+
broadcastUpdate(key, value, method, hasChanged, wasRemoved) ⇒ Promise
+

Notifys subscribers and writes current value to cache

+
+
hasPendingMergeForKey(key) ⇒ Boolean
+
+
removeNullValues(key, value) ⇒ Mixed
+

Removes a key from storage if the value is null. +Otherwise removes all nested null values in objects and returns the object

+
+
set(key, value) ⇒ Promise
+

Write a value to our store with the given key

+
+
multiSet(data) ⇒ Promise
+

Sets multiple keys and values

+
+
merge(key, changes) ⇒ Promise
+

Merge a new value into an existing value at a key.

+

The types of values that can be merged are Object and Array. To set another type of value use Onyx.set(). +Values of type Object get merged with the old value, whilst for Array's we simply replace the current value with the new one.

+

Calls to Onyx.merge() are batched so that any calls performed in a single tick will stack in a queue and get +applied in the order they were called. Note: Onyx.set() calls do not work this way so use caution when mixing +Onyx.merge() and Onyx.set().

+
+
clear(keysToPreserve) ⇒ Promise.<void>
+

Clear out all the data in the store

+

Note that calling Onyx.clear() and then Onyx.set() on a key with a default +key state may store an unexpected value in Storage.

+

E.g. +Onyx.clear(); +Onyx.set(ONYXKEYS.DEFAULT_KEY, 'default'); +Storage.getItem(ONYXKEYS.DEFAULT_KEY) + .then((storedValue) => console.log(storedValue)); +null is logged instead of the expected 'default'

+

Onyx.set() might call Storage.setItem() before Onyx.clear() calls +Storage.setItem(). Use Onyx.merge() instead if possible. Onyx.merge() calls +Onyx.get(key) before calling Storage.setItem() via Onyx.set(). +Storage.setItem() from Onyx.clear() will have already finished and the merged +value will be saved to storage after the default value.

+
+
mergeCollection(collectionKey, collection) ⇒ Promise
+

Merges a collection based on their keys

+
+
update(data) ⇒ Promise
+

Insert API responses and lifecycle data into Onyx

+
+
setMemoryOnlyKeys(keyList)
+

When set these keys will not be persisted to storage

+
+
onClear(callback)
+

Sets the callback to be called when the clear finishes executing.

+
+
subscribeToEvents()
+

Subscribes to the Broadcast channel and executes actions based on the +types of events.

+
+
init([options])
+

Initialize the store with actions and listening for storage events

+
+
+ + + +## sendActionToDevTools(method, key, value, mergedValue) +Sends an action to DevTools extension + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| method | string | Onyx method from METHOD | +| key | string | Onyx key that was changed | +| value | any | contains the change that was made by the method | +| mergedValue | any | (optional) value that was written in the storage after a merge method was executed. | + + + +## maybeFlushBatchUpdates() ⇒ Promise +We are batching together onyx updates. This helps with use cases where we schedule onyx updates after each other. +This happens for example in the Onyx.update function, where we process API responses that might contain a lot of +update operations. Instead of calling the subscribers for each update operation, we batch them together which will +cause react to schedule the updates at once instead of after each other. This is mainly a performance optimization. + +**Kind**: global function + + +## getSubsetOfData(sourceData, selector, [withOnyxInstanceState]) ⇒ Mixed +Uses a selector function to return a simplified version of sourceData + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| sourceData | Mixed | | +| selector | function | Function that takes sourceData and returns a simplified version of it | +| [withOnyxInstanceState] | Object | | + + + +## reduceCollectionWithSelector(collection, selector, [withOnyxInstanceState]) ⇒ Object +Takes a collection of items (eg. {testKey_1:{a:'a'}, testKey_2:{b:'b'}}) +and runs it through a reducer function to return a subset of the data according to a selector. +The resulting collection will only contain items that are returned by the selector. + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| collection | Object | | +| selector | String \| function | (see method docs for getSubsetOfData() for full details) | +| [withOnyxInstanceState] | Object | | + + + +## isCollectionMemberKey(collectionKey, key) ⇒ Boolean +**Kind**: global function + +| Param | Type | +| --- | --- | +| collectionKey | String | +| key | String | + + + +## tryGetCachedValue(key, mapping) ⇒ Mixed +Tries to get a value from the cache. If the value is not present in cache it will return the default value or undefined. +If the requested key is a collection, it will return an object with all the collection members. + +**Kind**: global function + +| Param | Type | +| --- | --- | +| key | String | +| mapping | Object | + + + +## connect(mapping) ⇒ Number +Subscribes a react component's state directly to a store key + +**Kind**: global function +**Returns**: Number - an ID to use when calling disconnect + +| Param | Type | Description | +| --- | --- | --- | +| mapping | Object | the mapping information to connect Onyx to the components state | +| mapping.key | String | ONYXKEY to subscribe to | +| [mapping.statePropertyName] | String | the name of the property in the state to connect the data to | +| [mapping.withOnyxInstance] | Object | whose setState() method will be called with any changed data This is used by React components to connect to Onyx | +| [mapping.callback] | function | a method that will be called with changed data This is used by any non-React code to connect to Onyx | +| [mapping.initWithStoredValues] | Boolean | If set to false, then no data will be prefilled into the component | +| [mapping.waitForCollectionCallback] | Boolean | If set to true, it will return the entire collection to the callback as a single object | +| [mapping.selector] | function | THIS PARAM IS ONLY USED WITH withOnyx(). If included, this will be used to subscribe to a subset of an Onyx key's data. The sourceData and withOnyx state are passed to the selector and should return the simplified data. Using this setting on `withOnyx` can have very positive performance benefits because the component will only re-render when the subset of data changes. Otherwise, any change of data on any property would normally cause the component to re-render (and that can be expensive from a performance standpoint). | +| [mapping.initialValue] | String \| Number \| Boolean \| Object | THIS PARAM IS ONLY USED WITH withOnyx(). If included, this will be passed to the component so that something can be rendered while data is being fetched from the DB. Note that it will not cause the component to have the loading prop set to true. | | + +**Example** +```js +const connectionID = Onyx.connect({ + key: ONYXKEYS.SESSION, + callback: onSessionChange, +}); +``` + + +## disconnect(connectionID, [keyToRemoveFromEvictionBlocklist]) +Remove the listener for a react component + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| connectionID | Number | unique id returned by call to Onyx.connect() | +| [keyToRemoveFromEvictionBlocklist] | String | | + +**Example** +```js +Onyx.disconnect(connectionID); +``` + + +## scheduleSubscriberUpdate(key, value, [canUpdateSubscriber]) ⇒ Promise +Schedules an update that will be appended to the macro task queue (so it doesn't update the subscribers immediately). + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| key | String | | +| value | \* | | +| [canUpdateSubscriber] | function | only subscribers that pass this truth test will be updated | + +**Example** +```js +scheduleSubscriberUpdate(key, value, subscriber => subscriber.initWithStoredValues === false) +``` + + +## scheduleNotifyCollectionSubscribers(key, value) ⇒ Promise +This method is similar to notifySubscribersOnNextTick but it is built for working specifically with collections +so that keysChanged() is triggered for the collection and not keyChanged(). If this was not done, then the +subscriber callbacks receive the data in a different format than they normally expect and it breaks code. + +**Kind**: global function + +| Param | Type | +| --- | --- | +| key | String | +| value | \* | + + + +## broadcastUpdate(key, value, method, hasChanged, wasRemoved) ⇒ Promise +Notifys subscribers and writes current value to cache + +**Kind**: global function + +| Param | Type | Default | +| --- | --- | --- | +| key | String | | +| value | \* | | +| method | String | | +| hasChanged | Boolean | | +| wasRemoved | Boolean | false | + + + +## hasPendingMergeForKey(key) ⇒ Boolean +**Kind**: global function + +| Param | Type | +| --- | --- | +| key | String | + + + +## removeNullValues(key, value) ⇒ Mixed +Removes a key from storage if the value is null. +Otherwise removes all nested null values in objects and returns the object + +**Kind**: global function +**Returns**: Mixed - The value without null values and a boolean "wasRemoved", which indicates if the key got removed completely + +| Param | Type | +| --- | --- | +| key | String | +| value | Mixed | + + + +## set(key, value) ⇒ Promise +Write a value to our store with the given key + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| key | String | ONYXKEY to set | +| value | \* | value to store | + + + +## multiSet(data) ⇒ Promise +Sets multiple keys and values + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| data | Object | object keyed by ONYXKEYS and the values to set | + +**Example** +```js +Onyx.multiSet({'key1': 'a', 'key2': 'b'}); +``` + + +## merge(key, changes) ⇒ Promise +Merge a new value into an existing value at a key. + +The types of values that can be merged are `Object` and `Array`. To set another type of value use `Onyx.set()`. +Values of type `Object` get merged with the old value, whilst for `Array`'s we simply replace the current value with the new one. + +Calls to `Onyx.merge()` are batched so that any calls performed in a single tick will stack in a queue and get +applied in the order they were called. Note: `Onyx.set()` calls do not work this way so use caution when mixing +`Onyx.merge()` and `Onyx.set()`. + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| key | String | ONYXKEYS key | +| changes | Object \| Array | Object or Array value to merge | + +**Example** +```js +Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Joe']); // -> ['Joe'] +Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Jack']); // -> ['Joe', 'Jack'] +Onyx.merge(ONYXKEYS.POLICY, {id: 1}); // -> {id: 1} +Onyx.merge(ONYXKEYS.POLICY, {name: 'My Workspace'}); // -> {id: 1, name: 'My Workspace'} +``` + + +## clear(keysToPreserve) ⇒ Promise.<void> +Clear out all the data in the store + +Note that calling Onyx.clear() and then Onyx.set() on a key with a default +key state may store an unexpected value in Storage. + +E.g. +Onyx.clear(); +Onyx.set(ONYXKEYS.DEFAULT_KEY, 'default'); +Storage.getItem(ONYXKEYS.DEFAULT_KEY) + .then((storedValue) => console.log(storedValue)); +null is logged instead of the expected 'default' + +Onyx.set() might call Storage.setItem() before Onyx.clear() calls +Storage.setItem(). Use Onyx.merge() instead if possible. Onyx.merge() calls +Onyx.get(key) before calling Storage.setItem() via Onyx.set(). +Storage.setItem() from Onyx.clear() will have already finished and the merged +value will be saved to storage after the default value. + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| keysToPreserve | Array | is a list of ONYXKEYS that should not be cleared with the rest of the data | + + + +## mergeCollection(collectionKey, collection) ⇒ Promise +Merges a collection based on their keys + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| collectionKey | String | e.g. `ONYXKEYS.COLLECTION.REPORT` | +| collection | Object | Object collection keyed by individual collection member keys and values | + +**Example** +```js +Onyx.mergeCollection(ONYXKEYS.COLLECTION.REPORT, { + [`${ONYXKEYS.COLLECTION.REPORT}1`]: report1, + [`${ONYXKEYS.COLLECTION.REPORT}2`]: report2, +}); +``` + + +## update(data) ⇒ Promise +Insert API responses and lifecycle data into Onyx + +**Kind**: global function +**Returns**: Promise - resolves when all operations are complete + +| Param | Type | Description | +| --- | --- | --- | +| data | Array | An array of objects with shape {onyxMethod: oneOf('set', 'merge', 'mergeCollection', 'multiSet', 'clear'), key: string, value: *} | + + + +## setMemoryOnlyKeys(keyList) +When set these keys will not be persisted to storage + +**Kind**: global function + +| Param | Type | +| --- | --- | +| keyList | Array.<string> | + + + +## onClear(callback) +Sets the callback to be called when the clear finishes executing. + +**Kind**: global function + +| Param | Type | +| --- | --- | +| callback | function | + + + +## subscribeToEvents() +Subscribes to the Broadcast channel and executes actions based on the +types of events. + +**Kind**: global function + + +## init([options]) +Initialize the store with actions and listening for storage events + +**Kind**: global function + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| [options] | Object | {} | config object | +| [options.keys] | Object | {} | `ONYXKEYS` constants object | +| [options.initialKeyStates] | Object | {} | initial data to set when `init()` and `clear()` is called | +| [options.safeEvictionKeys] | Array.<String> | [] | This is an array of keys (individual or collection patterns) that when provided to Onyx are flagged as "safe" for removal. Any components subscribing to these keys must also implement a canEvict option. See the README for more info. | +| [options.maxCachedKeysCount] | Number | 55 | Sets how many recent keys should we try to keep in cache Setting this to 0 would practically mean no cache We try to free cache when we connect to a safe eviction key | +| [options.captureMetrics] | Boolean | | Enables Onyx benchmarking and exposes the get/print/reset functions | +| [options.shouldSyncMultipleInstances] | Boolean | | Auto synchronize storage events between multiple instances of Onyx running in different tabs/windows. Defaults to true for platforms that support local storage (web/desktop) | +| [options.debugSetState] | Boolean | | Enables debugging setState() calls to connected components. | + +**Example** +```js +Onyx.init({ + keys: ONYXKEYS, + initialKeyStates: { + [ONYXKEYS.SESSION]: {loading: false}, + }, +}); +``` diff --git a/package/LICENSE.md b/package/LICENSE.md new file mode 100644 index 000000000..6ae248472 --- /dev/null +++ b/package/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Expensify Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/package/README.md b/package/README.md new file mode 100644 index 000000000..d012e5cf7 --- /dev/null +++ b/package/README.md @@ -0,0 +1,451 @@ +# `react-native-onyx` +Awesome persistent storage solution wrapped in a Pub/Sub library. + +# Features + +- Onyx stores and retrieves data from persistent storage +- Data is stored as key/value pairs, where the value can be anything from a single piece of data to a complex object +- Collections of data are usually not stored as a single key (e.g. an array with multiple objects), but as individual keys+ID (e.g. `report_1234`, `report_4567`, etc.). Store collections as individual keys when a component will bind directly to one of those keys. For example: reports are stored as individual keys because `SidebarLink.js` binds to the individual report keys for each link. However, report actions are stored as an array of objects because nothing binds directly to a single report action. +- Onyx allows other code to subscribe to changes in data, and then publishes change events whenever data is changed +- Anything needing to read Onyx data needs to: + 1. Know what key the data is stored in (for web, you can find this by looking in the JS console > Application > local storage) + 2. Subscribe to changes of the data for a particular key or set of keys. React components use `withOnyx()` and non-React libs use `Onyx.connect()`. + 3. Get initialized with the current value of that key from persistent storage (Onyx does this by calling `setState()` or triggering the `callback` with the values currently on disk as part of the connection process) +- Subscribing to Onyx keys is done using a constant defined in `ONYXKEYS`. Each Onyx key represents either a collection of items or a specific entry in storage. For example, since all reports are stored as individual keys like `report_1234`, if code needs to know about all the reports (e.g. display a list of them in the nav menu), then it would subscribe to the key `ONYXKEYS.COLLECTION.REPORT`. + +# Getting Started + +## Installation + +Onyx is published to [`npm`](https://www.npmjs.com/package/react-native-onyx) + +```shell +npm install react-native-onyx --save +``` + +## Initialization + +To initialize Onyx we call `Onyx.init()` with a configuration object. + +```javascript +import Onyx from 'react-native-onyx'; + +const ONYXKEYS = { + SESSION: 'session', +}; + +const config = { + keys: ONYXKEYS, +}; + +Onyx.init(config); +``` + +### Usage in non react-native projects +Onyx can be used in non react-native projects, by leveraging the `browser` field in `package.json` +Bundlers like Webpack respect that field and import code from the specified path +We import Onyx the same way shown above - `import Onyx from 'react-native-onyx'` + +## Setting data + +To store some data we can use the `Onyx.set()` method. + +```javascript +API.Authenticate(params) + .then((response) => { + Onyx.set(ONYXKEYS.SESSION, {token: response.token}); + }); +``` + +The data will then be cached and stored via [`AsyncStorage`](https://github.com/react-native-async-storage/async-storage). + +## Merging data + +We can also use `Onyx.merge()` to merge new `Object` or `Array` data in with existing data. + +For `Array` the default behavior is to replace it fully, effectively making it equivalent to set: + +```javascript +Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Joe']); // -> ['Joe'] +Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Jack']); // -> ['Jack'] +``` + +For `Object` values the default behavior uses `lodash/merge` under the hood to do a deep extend of the object. + +```javascript +Onyx.merge(ONYXKEYS.POLICY, {id: 1}); // -> {id: 1} +Onyx.merge(ONYXKEYS.POLICY, {name: 'My Workspace'}); // -> {id: 1, name: 'My Workspace'} +``` + +Arrays inside objects will be replaced fully, same as arrays not inside objects: + +```javascript +Onyx.merge(ONYXKEYS.POLICY, {employeeList: ['Joe', 'Jack']}); // -> {employeeList: ['Joe', 'Jack']} +Onyx.merge(ONYXKEYS.POLICY, {employeeList: ['Jack']}); // -> {employeeList: ['Jack']} +``` + +### Should I use `merge()` or `set()` or both? + +- Use `merge()` when creating a new object +- Use `merge()` to merge partial data into an existing object +- Use `merge()` when storing simple values (`String`, `Boolean`, `Number`) +- Use `set()` when you need to delete an Onyx key completely from storage +- Use `set()` when you need to completely reset an object or array of data + +Consecutive calls to `Onyx.merge()` with the same key are batched in a stack and processed in the order that they were called. This helps avoid race conditions where one merge possibly finishes before another. However, it's important to note that calls to `Onyx.set()` are not batched together with calls to `Onyx.merge()`. For this reason, it is usually preferable to use one or the other, but not both. Onyx is a work-in-progress so always test code to make sure assumptions are correct! + +### Should I store things as an array or an object? + +You should avoid arrays as much as possible. They do not work well with `merge()` because it can't update a single element in an array, it must always set the entire array each time. This forces you to use `set()` a lot, and as seen above, `merge()` is more performant and better to use in almost any situation. If you are working with an array of objects, then you should be using an Onyx collection because it's optimized for working with arrays of objects. + +## Subscribing to data changes + +To set up a basic subscription for a given key use the `Onyx.connect()` method. + +```javascript +let session; +const connectionID = Onyx.connect({ + key: ONYXKEYS.SESSION, + callback: (val) => session = val || {}, +}); +``` + +To teardown the subscription call `Onyx.disconnect()` with the `connectionID` returned from `Onyx.connect()`. It's recommended to clean up subscriptions anytime you are connecting from within a function to prevent memory leaks. + +```javascript +Onyx.disconnect(connectionID); +``` + +We can also access values inside React components via the `withOnyx()` [higher order component](https://reactjs.org/docs/higher-order-components.html). When the data changes the component will re-render. + +```javascript +import React from 'react'; +import {withOnyx} from 'react-native-onyx'; + +const App = ({session}) => ( + + {session.token ? Logged in : Logged out } + +); + +export default withOnyx({ + session: { + key: ONYXKEYS.SESSION, + }, +})(App); +``` + +While `Onyx.connect()` gives you more control on how your component reacts as data is fetched from disk, `withOnyx()` will delay the rendering of the wrapped component until all keys/entities have been fetched and passed to the component, this can be convenient for simple cases. This however, can really delay your application if many entities are connected to the same component, you can pass an `initialValue` to each key to allow Onyx to eagerly render your component with this value. + +```javascript +export default withOnyx({ + session: { + key: ONYXKEYS.SESSION, + initialValue: {} + }, +})(App); +``` + +Additionally, if your component has many keys/entities when your component will mount but will receive many updates as data is fetched from DB and passed down to it, as every key that gets fetched will trigger a `setState` on the `withOnyx` HOC. This might cause re-renders on the initial mounting, preventing the component from mounting/rendering in reasonable time, making your app feel slow and even delaying animations. You can workaround this by passing an additional object with the `shouldDelayUpdates` property set to true. Onyx will then put all the updates in a queue until you decide when then should be applied, the component will receive a function `markReadyForHydration`. A good place to call this function is on the `onLayout` method, which gets triggered after your component has been rendered. + +```javascript +const App = ({session, markReadyForHydration}) => ( + markReadyForHydration()}> + {session.token ? Logged in : Logged out } + +); + +// Second argument to funciton is `shouldDelayUpdates` +export default withOnyx({ + session: { + key: ONYXKEYS.SESSION, + initialValue: {} + }, +}, true)(App); +``` + +### Dependent Onyx Keys and withOnyx() +Some components need to subscribe to multiple Onyx keys at once and sometimes, one key might rely on the data from another key. This is similar to a JOIN in SQL. + +Example: To get the policy of a report, the `policy` key depends on the `report` key. + +```javascript +export default withOnyx({ + report: { + key: ({reportID) => `${ONYXKEYS.COLLECTION.REPORT}${reportID}`, + }, + policy: { + key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`, + }, +})(App); +``` + +Background info: +- The `key` value can be a function that returns the key that Onyx subscribes to +- The first argument to the `key` function is the `props` from the component + +**Detailed explanation of how this is handled and rendered:** +1. The component mounts with a `reportID={1234}` prop +2. `withOnyx` evaluates the mapping +3. `withOnyx` connects to the key `reports_1234` because of the prop passed to the component +3. `withOnyx` connects to the key `policies_undefined` because `report` doesn't exist in the props yet, so the `policyID` defaults to `undefined`. * (see note below) +4. Onyx reads the data and updates the state of `withOnyx` with: + - `report={{reportID: 1234, policyID: 1, ... the rest of the object ...}}` + - `policy={undefined}` (since there is no policy with ID `undefined`) +5. There is still an `undefined` key in the mapping, so Onyx reads the data again +6. This time `withOnyx` connects to the key `policies_1` because the `report` object exists in the component's state and it has a `policyID: 1` +7. Onyx reads the data and updates the state of withOnyx with: + - `policy={{policyID: 1, ... the rest of the object ...}` +8. Now all mappings have values that are defined (not undefined) and the component is rendered with all necessary data + +* It is VERY important to NOT use empty string default values like `report.policyID || ''`. This results in the key returned to `withOnyx` as `policies_` which subscribes to the ENTIRE POLICY COLLECTION and is most assuredly not what you were intending. You can use a default of `0` (as long as you are reasonably sure that there is never a policyID=0). This allows Onyx to return `undefined` as the value of the policy key, which is handled by `withOnyx` appropriately. + +DO NOT use more than one `withOnyx` component at a time. It adds overhead and prevents some optimizations like batched rendering from working to its full potential. + +It's also beneficial to use a [selector](https://github.com/Expensify/react-native-onyx/blob/main/API.md#connectmapping--number) with the mapping in case you need to grab a single item in a collection (like a single report action). + +## Collections + +Collections allow keys with similar value types to be subscribed together by subscribing to the collection key. To define one, it must be included in the `ONYXKEYS.COLLECTION` object and it must be suffixed with an underscore. Member keys should use a unique identifier or index after the collection key prefix (e.g. `report_42`). + +```javascript +const ONYXKEYS = { + COLLECTION: { + REPORT: 'report_', + }, +}; +``` + +### Setting Collection Values + +To save a new collection key we can either do: + +```js +Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${report1.reportID}`, report1); +``` + +or we can set many at once with `mergeCollection()` (see below for guidance on best practices): + +```js +Onyx.mergeCollection(ONYXKEYS.COLLECTION.REPORT, { + [`${ONYXKEYS.COLLECTION.REPORT}${report1.reportID}`]: report1, + [`${ONYXKEYS.COLLECTION.REPORT}${report2.reportID}`]: report2, + [`${ONYXKEYS.COLLECTION.REPORT}${report3.reportID}`]: report3, +}); +``` + +### Subscribing to Collections + +There are several ways to subscribe to these keys: + +```javascript +withOnyx({ + allReports: {key: ONYXKEYS.COLLECTION.REPORT}, +})(MyComponent); +``` + +This will add a prop to the component called `allReports` which is an object of collection member key/values. Changes to the individual member keys will modify the entire object and new props will be passed with each individual key update. The prop doesn't update on the initial rendering of the component until the entire collection has been read out of Onyx. + +```js +Onyx.connect({key: ONYXKEYS.COLLECTION.REPORT}, callback: (memberValue, memberKey) => {...}}); +``` + +This will fire the callback once per member key depending on how many collection member keys are currently stored. Changes to those keys after the initial callbacks fire will occur when each individual key is updated. + +```js +Onyx.connect({ + key: ONYXKEYS.COLLECTION.REPORT, + waitForCollectionCallback: true, + callback: (allReports) => {...}}, +}); +``` + +This final option forces `Onyx.connect()` to behave more like `withOnyx()` and only update the callback once with the entire collection initially and later with an updated version of the collection when individual keys update. + +### Performance Considerations When Using Collections + +Be cautious when using collections as things can get out of hand if you have a subscriber hooked up to a collection key that has large numbers of individual keys. If this is the case, it is critical to use `mergeCollection()` over `merge()`. + +Remember, `mergeCollection()` will notify a subscriber only *once* with the total collected values whereas each call to `merge()` would re-render a connected component *each time it is called*. Consider this example where `reports` is an array of reports that we want to index and save. + +```js +// Bad +_.each(reports, report => Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${report.reportID}`, report)); // -> A component using withOnyx() will have it's state updated with each iteration + +// Good +const values = {}; +_.each(reports, report => values[`${ONYXKEYS.COLLECTION.REPORT}${report.reportID}`] = report); +Onyx.mergeCollection(ONYXKEYS.COLLECTION.REPORT, values); // -> A component using withOnyx() will only have it's state updated once +``` + +## Clean up + +To clear all data from `Onyx` we can use `Onyx.clear()`. + +```javascript +function signOut() { + Onyx.clear(); +} +``` + +## Storage Providers +`Onyx.get`, `Onyx.set`, and the rest of the API accesses the underlying storage +differently depending on the platform + +Under the hood storage access calls are delegated to a [`StorageProvider`](lib/storage/index.web.js) +Some platforms (like web and desktop) might use the same storage provider + +If a platform needs to use a separate library (like using MMVK for react-native) it should be added in the following way: +1. Create a `StorageProvider.js` at [lib/storage/providers](lib/storage/providers) + Reference an existing [StorageProvider](lib/storage/providers/AsyncStorage.js) for the interface that has to be implemented +2. Update the factory at [lib/storage/index.web.js](lib/storage/index.web.js) and [lib/storage/index.native.js](lib/storage/index.native.js) to return the newly created Provider for the desired Platform(s) + +# API Reference + +[Docs](./API.md) + +# Storage Eviction + +Different platforms come with varying storage capacities and Onyx has a way to gracefully fail when those storage limits are encountered. When Onyx fails to set or modify a key the following steps are taken: +1. Onyx looks at a list of recently accessed keys (access is defined as subscribed to or modified) and locates the key that was least recently accessed +2. It then deletes this key and retries the original operation + +By default, Onyx will not evict anything from storage and will presume all keys are "unsafe" to remove unless explicitly told otherwise. + +**To flag a key as safe for removal:** +- Add the key to the `safeEvictionKeys` option in `Onyx.init(options)` +- Implement `canEvict` in the Onyx config for each component subscribing to a key +- The key will only be deleted when all subscribers return `true` for `canEvict` + +e.g. +```js +Onyx.init({ + safeEvictionKeys: [ONYXKEYS.COLLECTION.REPORT_ACTIONS], +}); +``` + +```js +export default withOnyx({ + reportActions: { + key: ({reportID}) => `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}_`, + canEvict: props => !props.isActiveReport, + }, +})(ReportActionsView); +``` + +# Benchmarks + +Provide the `captureMetrics` boolean flag to `Onyx.init` to capture call statistics + +```js +Onyx.init({ + keys: ONYXKEYS, + safeEvictionKeys: [ONYXKEYS.COLLECTION.REPORT_ACTIONS], + captureMetrics: Config.BENCHMARK_ONYX, +}); +``` + +At any point you can get the collected statistics using `Onyx.getMetrics()`. +This will return an object containing `totalTime`, `averageTime` and `summaries`. +`summaries` is a collection of statistics for each method it contains data about: + - method name + - total, max, min, average times for this method calls + - calls - a list of individual calls with each having: start time; end time; call duration; call arguments + - start/end times are relative to application launch time - 0.00 being exactly at launch + +If you wish to reset the metrics and start over use `Onyx.resetMetrics()` + +Finally, there's a `Onyx.printMetrics()` method which prints human statistics information on the dev console. You can use this method during debugging. For example add an `Onyx.printMetrics()` line somewhere in code or call it through the dev console. It supports 3 popular formats *MD* - human friendly markdown, *CSV* and *JSON*. The default is MD if you want to print another format call `Onyx.printMetrics({ format: 'csv' })` or +`Onyx.printMetrics({ format: 'json' })`. + +Sample output of `Onyx.printMetrics()` + +``` +### Onyx Benchmark + - Total: 1.5min + - Last call finished at: 12.55sec + +| method | total time spent | max | min | avg | time last call completed | calls made | +|-----------------|-----------------:|----------:|---------:|----------:|-------------------------:|-----------:| +| Onyx:getAllKeys | 1.2min | 2.16sec | 0.159ms | 782.230ms | 12.55sec | 90 | +| Onyx:merge | 4.73sec | 2.00sec | 74.412ms | 591.642ms | 10.24sec | 8 | +| Onyx:set | 3.90sec | 846.760ms | 43.663ms | 433.056ms | 7.47sec | 9 | +| Onyx:get | 8.87sec | 2.00sec | 0.063ms | 61.998ms | 10.24sec | 143 | + + +| Onyx:set | +|---------------------------------------------------------------| +| start time | end time | duration | args | +|-----------:|----------:|----------:|--------------------------| +| 291.042ms | 553.079ms | 262.037ms | session, [object Object] | +| 293.719ms | 553.316ms | 259.597ms | account, [object Object] | +| 294.541ms | 553.651ms | 259.109ms | network, [object Object] | +| 365.378ms | 554.246ms | 188.867ms | iou, [object Object] | +| 1.08sec | 2.20sec | 1.12sec | network, [object Object] | +| 1.08sec | 2.20sec | 1.12sec | iou, [object Object] | +| 1.17sec | 2.20sec | 1.03sec | currentURL, / | +``` + +# Debug mode + +It can be useful to log why Onyx is calling `setState()` on a particular React component so that we can understand which key changed, what changed about the value, and the connected component that ultimately rendered as a result. When used correctly this can help isolate problem areas and unnecessary renders in the code. To enable this feature, pass `debugSetState: true` to the config and grep JS console logs for `[Onyx-Debug]`. + +# Redux DevTools Extension + +If you want to debug updates made to the local storage on the web app, you can use Redux DevTools Extension, which provides an easy to use GUI. +This extension provides the following features: + +- Each update (merge/set/clear/etc) made to the local storage is logged with the data that was written or erased. +- Check the state of the local storage at a certain point in time and compare it with it's previous state. + +Currently this tool is only available on Web. + +### Installing the extension + +To use the extension, simply install it from your favorite web browser store: + +- [Google Chrome](https://chromewebstore.google.com/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd?pli=1) +- [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/redux-devtools/nnkgneoiohoecpdiaponcejilbhhikei) +- [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/reduxdevtools/) + +After installing the extension, Onyx will automatically connect to it and start logging any updates made to the local storage. + +### Usage + +The extension interface is pretty simple, on the left sidebar you can see all the updates made to the local storage, in ascending order, and on the right pane you can see the whole the current state, payload of an action and the diff between the previous state and the current state after the action was triggered. + +The action logs use this naming convention: + +`@@INIT` - Initial action which is triggered when Onyx connects to the extension. It's payload consists of the initial state. + +`merge/` - Merge action which is triggered when `Onyx.merge()` is called. + +`mergecollection/` - Merge action which is triggered when `Onyx.mergeCollection()` is called. + +`set/` - Set action which is triggered when `Onyx.set()` is called. + +`multiset/` - Set action which is triggered when `Onyx.multiSet()` is called. + +`CLEAR` - Clear action which is triggered when `Onyx.clear()` is called. + +# Development + +`react-native` bundles source using the `metro` bundler. `metro` does not follow symlinks, so we can't use `npm link` to +link a local version of Onyx during development + +To quickly test small changes you can directly go to `node_modules/react-native-onyx` in the parent project and tweak original source code. + +To continuously work on Onyx we have to set up a task that copies content to parent project's `node_modules/react-native-onyx`: +1. Work on Onyx feature or a fix +2. Save files +3. Optional: run `npm run build` (if you're working or want to test on a non react-native project) + - `npm link` would actually work outside of `react-native` and it can be used to link Onyx locally for a web only project +4. Copy Onyx to consumer project's `node_modules/react-native-onyx` + +# Automated Tests + +There are Playwright e2e tests implemented for the web. To run them: + +- in the tests/e2e/app directory, run `npm install` +- `npm run e2e` to run the e2e tests +- or `npm run e2e-ui` to run the e2e tests in UI mode diff --git a/package/package.json b/package/package.json new file mode 100644 index 000000000..e858346b0 --- /dev/null +++ b/package/package.json @@ -0,0 +1,109 @@ +{ + "name": "react-native-onyx", + "version": "2.0.0", + "author": "Expensify, Inc.", + "homepage": "https://expensify.com", + "description": "State management for React Native", + "license": "MIT", + "private": false, + "keywords": [ + "React Native", + "React", + "Persistent storage", + "Pub/Sub" + ], + "repository": { + "type": "git", + "url": "https://github.com/Expensify/react-native-onyx.git" + }, + "bugs": { + "url": "https://github.com/Expensify/react-native-onyx/issues" + }, + "files": [ + "dist/**/*", + "API.md", + "README.md", + "LICENSE.md" + ], + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "lint": "eslint .", + "typecheck": "tsc --noEmit", + "test": "jest", + "build": "tsc -p tsconfig.build.json && cp ./lib/*.d.ts ./dist", + "build:docs": "node buildDocs.js", + "e2e": "playwright test", + "e2e-ui": "playwright test --ui", + "prettier": "prettier --write ." + }, + "dependencies": { + "ascii-table": "0.0.9", + "fast-equals": "^4.0.3", + "underscore": "^1.13.6" + }, + "devDependencies": { + "@lwc/eslint-plugin-lwc": "^1.7.2", + "@playwright/test": "^1.38.1", + "@react-native-community/eslint-config": "^3.2.0", + "@react-native/polyfills": "^2.0.0", + "@testing-library/jest-native": "^3.4.2", + "@testing-library/react-native": "^7.0.2", + "@types/jest": "^28.1.8", + "@types/node": "^20.11.5", + "@types/react": "^18.2.14", + "@types/react-dom": "^18.2.18", + "@types/react-native": "^0.70.0", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "eslint": "^8.56.0", + "eslint-config-expensify": "^2.0.43", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-jsx-a11y": "^6.8.0", + "eslint-plugin-react": "^7.31.10", + "idb-keyval": "^6.2.1", + "jest": "^26.5.2", + "jest-cli": "^26.5.2", + "jsdoc-to-markdown": "^7.1.0", + "metro-react-native-babel-preset": "^0.77.0", + "prettier": "^2.8.8", + "prop-types": "^15.7.2", + "react": "18.2.0", + "react-dom": "^18.2.0", + "react-native": "0.71.2", + "react-native-device-info": "^10.3.0", + "react-native-performance": "^2.0.0", + "react-native-quick-sqlite": "^8.0.6", + "react-test-renderer": "18.1.0", + "type-fest": "^3.12.0", + "typescript": "^5.3.3" + }, + "peerDependencies": { + "idb-keyval": "^6.2.1", + "react": ">=18.1.0", + "react-dom": ">=18.1.0", + "react-native-device-info": "^10.3.0", + "react-native-performance": "^5.1.0", + "react-native-quick-sqlite": "^8.0.0-beta.2" + }, + "peerDependenciesMeta": { + "idb-keyval": { + "optional": true + }, + "react-native-performance": { + "optional": true + }, + "react-native-quick-sqlite": { + "optional": true + }, + "react-native-device-info": { + "optional": true + } + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + }, + "sideEffects": false +} diff --git a/react-native-onyx-2.0.0.tgz b/react-native-onyx-2.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d524e31dcd795a9ee733aeea900674b57ab3bdd3 GIT binary patch literal 64024 zcmV(@K-Rw>iwFP!00002|Lnc{TiaH;Fgic;SE%eh+jeRUNt*T?DD5T*Y1xy643K8e z;o|{e3s7TA9!Z8U)c^Z=Z|kZh+Yp+WejA=X4M9qOvN|ezm-@w0rtn(yw}hZFPRd%E0^6+!dKjZrS&*Cb*Ozsg4%)9^J zeed7@r;ne0`*8pN)c2pED1-v|%`7aSzI{LhU-tg@^U*jjll$fXX5atE&z?N<@Bfo0 zPai+r|3BURUw!mwDS8wgT%=_L|HaXyN{4B69i2_GewF4~RK*{YEE)hd=vPB{UgV=_ zFBwce^`iENBpT#dtBS7Ttct2UiU$LJ8O7MyAQ>mwAj$gI9UNt+ijoYGL#exuhY^Et zihp$@SliiT7@g%sR9z%d{~}JaG&^6l8b$e8^vmvxvIkvaudkqO@+lsThenqwT z9;aatxs`2vg+KP7ov!s%5AHlQlc1;eL}a}GDw1kaWMy>oN;Yx|k5`xUsi_(CdOdtr zcA}dl>^(h;+Vr3|OtSOpBHG;CjMmg!{NbLXc3hlyqRk&8_;-U|PMbS;9O!@=9j+bO zAFr-PNjXe2U@FrR0bwOeK2s2~rEI&+OjNs=df?N^zs|JduT*YZc1RcT!F6z8dJ*;bT)PB_Is(G(R@A#J=4t~GP)4`9? z)JL+l%hy(jkoju8o14+ilo6qN)Kj~&8D+_p8mirfDG~NE_*8!(vn8Ip6tvpeu+gGw z+JNk8(|zE||Lpw#%jEJP&xhqb3jnk6|F_S+t?B=sJbmE*{}uTEGA^Ry<8*|V{iVL@ zZDLaY^FN7M?RoDz(eJ+-{=PlR2MTK`-VYw($M8?j(2q{^6F!O7fs8B*R#{%BM}XU= z_oRw2Y#%8iys5XfV#2gr?&y!V_x5)8j$dy*-+m3>wsy1YPm#JI(Mq&k6nU{8wUF$2 zjA)eQHpe-LvvYU|$i6>}%hGgWVfSLvukxa8v%a+3MKa0}&0fM3=mE6OU}Jtw<82^N zS&4K;@V5R4K)OmSGNE6{M(=y?r)nOxp7SvtYw1j@xVHXMT)b+DCoR9q+zCLc>u~~- z)>WDf@+;!2VE+KE3IJjHyN^b!P%wgo%gD5-TM0t~WC`11(F z+;c#{05HgT#3CyrXEGs;*MQ~M36NS~WB7PsJMm!&U;_wTI#T`p*ElZXQFMbhJ3F7! z{sYWr@koED*c$hPIJ=%k!Yn4iK`boJ~uBMm}bcT|Mz`5^n1d%^Ao zU5qM#=~8z}@D|+j^gL_3f89*G)&=djv+lUVxRdLZNj7NTMD7kicWUI&*9r}&Hh(ZU zr&-FFrH#MAnHx0og$~2pGn|Gqmsy)+w+l4$FlV^+AB`nQvDP0ZaZ%Eh0g}Taih~gp zc|qADDU;$7FaW*ym|UZ-sXv?y;O3=Sbb?O~@^{<}<)#@($N{};@@3ex0dif6LA^YZy$lj~pO;pd11 zGx`6=Po8}L*ysPBegEwH2mb$o|NmV6KOLMN!$pUet|1bhukiEb`;isU&{59*uGd?I z|EM8-xVjqEEFMBu(tjqJ(?T6rI^@6qdp|mb;o&bN|0SA5%t}}@hSU{0!c#pT=BIFR zf$vQ|C4-mGaYX0~=+Y=XzW@vjY}hIAftPVQB&h``LLYWHhJTanGA;6K1nj1$$cW*< zNyrS^N$jD+Gzm zjZdWalZvS`(;n6}o~M_kcOwi8>?eDwID8TOhjQBp zF3&(+0ovz0OGu76jnUp##97IrPcOWCiqCn64;y!D3+MF1p;_|LkKX3d+F+5qd)!@k z^I)&ufZWwF?E?GPgYC%L%>S@bw~1|%HilUu3_zb8>Jbj<;gOnr;C$Ywvl%7DIkJ#& z0Ldp{6Y%#q8xWJjLs@6y?`dG4rhLZE;b{UA56e747XA{tMWue0lqe@=6Zl<5QyO}f zID5B&XgZWPupponZJGw{i@)3L79frR%DoAoi#Fk5PmvDD^exC4>u6kv0f$XW#b%G< zY(hLaqBaZOqKl+}(*V#sOZlebAheY%4cmPSFAozK(e@$`+kK&Vynm4ims^@Xqu()4&<2IFLpa(nKZiFA&7g#p)$U%^0dqaA5y$47P#_#YRAt)2;-LY9~ zITt;TIw;=+Wa`Nn5FcHP86tu+R|R1<#Mi}0g~3Us#&eL%u+h*K0G%d|^I$r!r*IaR z6@gP5J5(rgqd|6Ed>_Y?s;!1)X~*ky>isPPIOnT3(3UI}u?t*yx#wj2l6%fL`6{h0 z;DY0Y2ROV1(IIWpabGKgkmUfp3}O_pE?0N~2tO03kI6OaHeu|t4sg4P=$&7G< zp*^nRFXECWUM5L&QB~t|eRcI5U~O{R>*u4@?N4J=^`Bi^zolgfxM=n1<0s!f{eKiA z_y%ZlalH!+)n9>!P^-8JfYP391yXO~*c=IC?#3xD%-cNJm#yK@9=o=KI9T%rx}2xE zOh9QZ{v7sF-KG=dIZjX#xNGK0W}rj=0z9fO&M?}IOrmhuwFTM;$C3xt&T8cq zfeegKoC%1SHBTSF0z6tIWke!t^@G6TT=V+7kFu05aeI+v}7iE!Yyn zff!QHtHK`8`eWww6OXixrx7@-Jz@o|^T8`i=ON;ib)6SKiP`s*+0S_gGDwC^2QqgR zB`pK?CM_JMcD6BxFm1DNViwi3oN~S_0;`%Yi-c|z14WfraKfk86|6{DSS@;;rNbH5 zKAVhAlcIhvUdreDAlEtOQBo6#RWFM#)AJZ+XPXlB!=7xbuZ*uQ3c#Pp)sQW>-4gJH z4S@d_(J8zJ7Ao3$w*vsH?|v(27j(^xwXvOnd%)?XBUF`l+~*c!%*W$SnD+HO@K5Uu zHN8m*U3cqk0N&WuRW3Kt*FQP{6y8%xQr`kMEdYDb?2CSv+gm@S0r{1#u( z{&##l%KIP7=B(dQFk|mBvQtYkUU}_*Ujt-d2H2TfuH0^;y;x%f8Dy?gMpUYeTK+C|e4(QTtZk zbFIUc1)rO_1h&dQhlVo@?BUP6$$>3AUu+BU zWngup9rs}*xR|rN*p5N+XoQK7oj~bPm5RP$<2RP>sMvS<4{P}KHBlV~B$``+inouq zRXoc$^&8Zz3N}gtAHD|(McT~W)`rD34O7-&J_r&C!h;9kE)*;}zXcA$ohvD19hE~P zYQI&#Mw8iI0FMNB1vey!vD^hv+$RoV4c(|uX&C>ercqey+KPz(7k_NIJ*Y2Mlb8mH z(*F2b($xR_8>{!7u4k8-(R|-+F81{qA5e>qhus>#Pz}ufXhq%F ze8l8Da48G`v3C`AinqY}bU+ByK`p_%j_q9gsduAhoS5CL(`_=VG=jI=u+yL)^RLxh zvC)zL(Czgyc|rCgQG$vD_*pq&=EeU$tI2=guRU3NkpI5C{3ijtm;`}O9H{GM+DBfa zLhlv!G0f1Mik@j~484dmb_;kUrpKt5WEt6oDh#ttN5D3bB?+X+VS36o%+vH7!=&;t zMZw;awx^t&mi;0z_M!2h?#{{Y1j!)al3jgstVNj7+slxPPH z;dkq`kNKPrt-nGzvFaI+Ae}N9gb+tb}_O$&ahAj%Gg5Oq_J_MbO+W2rx&Qcw6*pPcZF7hhJSk~S} zT<%_F>c;o_q^j*k;|>m-aPZ3RSsVWTAzCwT3f18l)!`-lv!R1V%IK?2_9ntfbHup} z2=bRT%>MQ06yxvF6KPqkX4&+vr=G$XYcLxV*Bk7pU3NC0?GMpd@>s!N-+a>vgt=NP zI!upfQ8?M!wv1(fopL*yfB=mC6=rkr(@xFD81@8S$hP2bzMG2TCCR?>f1jy$T%;hj zG77U$J%)w`9-oIE4w61d{Z;ZItuD-4*Kqt!q60@S`86m=Uh@GAUt}f^~^->hgdGz(lOGi&z(CT*c`SzzM%yj}DKzJb?OU>ZewU z2ZJ{-;WoAEMx4~mf!yYEu`Dg7hZ{2o>P;pPO$i{U^<5h!aXFD#uhXQuN|H<>{Pb>8 zNKJla@6zpe0+!CraJ@@z_!l>JcSh!gtq=0I`BhtgtU5OvHGhY=v-Zi?H@cf1E@2uS z+K;$n%B9z^}&=rT?+WG9ujaJxwpi8h5?0F zF!~rheC4To$^o=SX%`jPZqj#jRCa1dA2T4a<{Qv)^VE3mfXiRsP^;-OvHHV;^d7pm z6DQuXHV9l+8ASL9e-#6hn9(XJzt1y6!{L9bI00vbcnHo;zkn_5_mKZGX&$f81BV{XLn6^r!*HLL)bnnPkB!%6%c;DiWx8#t!DiBy=4r-RU8gdyC zUZG5R$Zkv>GwH2dP#e3Z54@gh_Bn4+f$(1qYi{zp5O)xGYLU%he=_96H_AD>oQ(XK z0}8Ggf&^A4k$c$t;0NRfyU|2SpV2q;_aSx&1bNNIja%pEMRJaryNSxFxt%6i|AMY;ni19(%w_We zFjHs&Y{hycTcM~S=+#qDlMXNOyt@^T@fdbE#*Uh82o;e4q=nv16XKD(O<(Dww+_U@B_|OsWMm&qPUXY z^iruCKq?Y+OU;>+7*M7cWOP*99?$4424k%JDD&f1?vWdQ*Gns@yJ~VVA)L})fXu=W z+sp$#zdisdrrnZj+OnjT-dQ@Vk^-(aG-Z1}{U$UP#fKo>u^aV-2$@dLi+nPEe%;io zd|=w6+e{k|0=+2o4tj`&_lE&ulkSXs(Hcw&0#-W|fLq6x=a{LDzFDQC*13&Acv{=2 z5v)(mo;{xelq}9z^HU(R>Ea7Q@T3%?fli#zjQSCi{S$SP)-96p+B}PgW#Wk?Or3uZ zavfFvQnskgU3Vks2DxbL$d)|dalkc+Kk`ymGS-_=BC+q*U@ni>*4B(pkiUt3ltzJG zL0VOcPpOGi|a z1@CE^4bsbWFcBf5R5`K*T6QHPwE%>A74v)08E}YkhNgs+NXXpqy?fAH~%$YLdL)x@orX> zcE_xvCHvX>z11%-;s3vtKv;io@kMA^>*Mb?rTq~n0-99gNhMu##H5uC1;;tzj!saN zo>;3n#uTQ<$M~3%1LV;OZQco`Rwz>5J)y)rB(@cicc3DF6D5qv*aQ~LL|#z>qO!tG z2jrr+4EpD3F9mZ1>h%f+KN7$so|H54NOqr6kt51WS_Tn`4ixrqiLLBy-`IGht9ElU z(r44v)IqZziNtLcS_;jyKGyOm#tgsLR!HXs055q|9=3RT zEk!Xc`2(N9J*9ur4F3TJf*N9zfIxxo3^Ud`vM5S&Rsl85NjKVqIRP2vpB;}` z!^Y{F&<{m@{~@95O;$J103dffjOA`SbHJXIkY&wcKLLp_kn$iu9ma#aSZ&g(tNaJg z)^y?qK4CMR%|*11ro9a(h5>67xYCkj|F*y^*-r#~*P|K!z?zMzkB8uUz{PTAN_p1o z0wS9yDd_s4}8}V2QnL*7Ym%HSRL3R{oCjhm#rL;tu@sS9abDWED~!LMdMz+u zf4w*Kq0{>fP? z;HiE`j_P;j2UgP_3Xp9k@twK_z{Ycj_7(3&y$y@(1JIvD(8&R!e9Tv2&B)>yvES*5w0*4^GT>U%@`4n+_^q?x-+zxMapiUHJ zgf_EM_2KHrH*Vh%HjUn7UA^H57(ysl2~hstAOolzMLf?qPwPL9ZZaU#G`PqN`& zCFnLU-_(%y1HOX4=E=8BYCAUQ%hq>q<}6x6rO ztSe(`b^v>hc9`rufT^ALgsGLAqqvU!#Pyd+q{+L{s2hER|DM>kxQ|cVjGdhbpF|%w zwAcS2Df>+x@-Gt%a~Wf8JM7#N?Z2YWa7xSY$ub^3J^3m6YGe@#pb+@DhoC}o0DM6Y zII4X@uJM+1Et9!{V^favOcp4QrB$4@Lyl-{SUmiAw1LjMwwxL!Ksjztmqwu^J21V^ z+`;_t;}dk+r%6DM9YuzbL8dKero?`e1&&yk)@odzCdb|2E()c+Wd0sEAlQ9=sQaPB zMVyhyW-#^v@iuZ7__CR`AX96Ytx!jr4-9~ciOa;MsP83Sq+=pJ&=)PDk?7>0#irSi zV5mkYf(1H2VDI=>RD2~V5sSGE^>eh_xkY*T#eIfN{J}BP%!ut*g~fc~;W|+X@Y;$< zc&@@wXMLh$Rjm)-Zhts_y}k8vd++$o_Wu6X&)aAOG*4Tq;okO}-Cws~1{(7lzr9Ap zo4AtR`6MNMg>s;i4J=6Mc*JSI$V^qmBa9tF7~`k0#bHr*<`pKW&>O9@YwLU|{OVm} zooAip$)xwvy~%67fC#FYlH-z{j0Z~%*@|slOhatFy8&|o>t&5P6L}=w2IR3IMu>(?3Aa#eRep%hVf;)1M@DEXvMD=VV{VN?a zfX8tP?2GRf91i|ht<|b5i0_Rj<%MZrujUR(0{oRJ2L^rFX<1n^#24s`3~Q#O<{X17 zS+sMERVI$Lt1_6A^9r(Q$i~L!MS`_~V9#>vv?Fv#V*9idUy6rU@iqD>8|PhQJ7H`< zwwb3xR4Eo{hcpT^yMTH-nx&s;MvMmXwufwK4=GEnb|mWg>nLtLU|3jPjWAP;)RocY zUN6m38Te&P;z?7y&3IL%ybkSRsAt*&$_lTml{s}>$gm^_0(cbaxFox4 zN+m){8To%R{Op zUzpe zk%mR2z`fnAmoK*V4~}=={{4SYHglh}Jo$^gPDKI}u}zpomX`F5e!-91ZhuBJ+E36= zKGxh(6BF7C1?$R39%F5x5X}XOm09{4=a_KTZQ^j#&537%@<4dT(Kc4XV)s%m=w{~2 zavw8-T^-Yd=&yuHD`G~jV&~~{n8Jt^^c0mrRSHiDsZdg{KTA%Rxj7O%O%6V~V@!BMC~mYs zJXbjE!TorqOH`w$Q}p1W^Wgsz_W$`p_9$Fqmx7A-;biNZ{!h1APkesWVjx+ zXf`cRWoezI`n9$U^!2}&RqRmo!e=c4=Mq?h0H6H!z|RKpzXbc;HvyQ9|G$0q?E5Dc49=EYP}Y=WN~v!U`yCvJ(0+vD(5CKSY2J;?H3NV#YeqfPd(ksuR!8IvLeE4 zZ^zK|F;MUx=Fjnl^#$Pb9)FUaUAM~#9I*~hoIANUFYjS$DlW~M9B>~y=NTrpr($W> z%6IoHEdZc?Us+lCo%2`Vu1o%q(n_&_rL8chmv=e#0olDY>klV`q{N0nj|4gS*2?d#StftgY~5}) zbyIlafsQ4u;+UMMNjslc6+idKEE4~~O z?EJV3N7kub8ape|K!K{x#KTzQ6$i>k7s+r;oKP(>j$}#+C34hRR0z&6BMv{H+#v8I zLML)yG2_$xGBMB}PRXMBk|=zPi=`R%^WkKaS=m>d1W-;g7w@Py507w8q$o;AFU)<3 z_qzB`ohB5s&+y0IfA0{la!wknJ?B5oB62oP`Al1C# zlj^GE2VFmb0of|Ml(c|;1rRqk+{!8=_DdNe&@c6%?gz)*)`#+*=qTIg*UD{#A|+zX zA%#XlxZxDrP~UOP07Rh-oIj0Ek3gnWh!=VyivR#;QKW;U>BuY9qYNW>NLFTyc^SKg z0a~F#rnJN|;q@T4>4s@@Z*S-4Uk(&8@zIs;{r3I7-hQRKwL{}K!e!ay=>84Gj-dY6 ziE{gVX<%Ob=aVNj{qOhRKg54M@c*C9|L_0pby_VN|2Z!5ONzi+bv|p*2YX%rSyjT$ z{YSORy=#AG-~T6%pMC$V7XSJ9+0&;F_y1pY{~w|XAEF8$q6+_)Miu_w!vZv=O{&st zLg|Evbi>Nvqji;_45%@N>>6@IbYxtHos+AP!%)hGs7>kFjFFF;0_%e?4@*2go0 zF1?sb1}Nwldwj{`o2ns<&1eKr$he}tG9A72ClRiwuK`}gMp-h zL>M!A2(-5Pn&4vQO?~36_!P^Z%=?HMSs%SjE)Vj2{$Q#deY(0Dz2PuT>IB69Qk4|j zKKNx9!$J5i?{6QhM=ii9EzaThW_u5V&stQT-F|lbV)ymy?H30-yKmKN$-hOp9l7EA z*9SYt+$B|nH~qeNy}h*uk14-Yi|U-qU3hy;@6Z)I&yM*$E#R-o^(x(df|Nw3qrloK zl(HJtLZqbs%DbEx?`Bfv#IjMaLF)dCHTxjP+@VOaGvzM||1}4V zeWS%hiVq+uM1%?#X_)69C*zVT` z#n?nqiN4+bb$gH9ZUL|cDMfoy-uBCscC<%JQh#j?hxrx8P}SFiXQY;cSH=Nkxj$Ew zV1=5vb%5hZm1ClL1fpvmjq-%!0K*)$h$U_VofhUcp{>URC?*1q_fY9pDUr8I6OK#U z#y%re6|*NmtJd{=nD;*pd0hgpyGmOQcdu9x(SATXt}q4FBf{M2bWEJTMk|IXa}1#v z22|ls02uc9Lp_qYu%*&3Qxz1BP>W7TsK$;@dR(=OlhIH-J+BaB&VhWYFF0Bs)6A;^ zjZ9*9pbsRo$d0XbgA`k7Av$t%4k*(-<1V?Tv?k51btQ^l!lVHZIVVpEhXsI#A<~!v zC&hAN$)}`0q4f7;-z!8;5bi|ua3DTaqR_-r6-=OP`yoq=Br#ZF2$8=Cg)o5(eS=`OVrY;i z1RRt#2a`3f{UZPBXEPaJanwn4#)g0=HF32B#mQSc6}sx3)4Fbz}hD6`nE1 z&ZnvhC1E8wq?o(0vp1+??A61Xw&>S`T~ImJVABEIBD0>@Q`bi7HT-y~#Mm*REtF{wc=z z3w26_NF<`)++RJCWWtKJ-t8a?0d|0+=wmF9f;JWbE+k$#(k>iRxVW_r3V1dITG=|F24prn zp^I4Sq%=aiOep<8L8nr3j4R3g%Th5 zDGU6+1xD>pr(F2aZawQtOwHZ1-?t}f?l()p-Q|c;)yf&C=?+`S{XODEteJ{ZM{al_ z21w4=6O|bH#^S;yCM(1mN@u_(O^SZ3xIsn5GRcjk~cP@Rc4Ak#iM)L_So1 z?3BoCnn+p&3oRiPLNc*Kl6*fQUe&A6#j{;93NS#?7&@F(yJs{$u$N{wT|Mn?6zrW- zSW6q{!*KHr<0SJjVTn?UjI^+1R7UOOycgYIrhj0#j~}n!#OtlN1<<7)Jz2jwU2mPX zrdU0I>rxdHSY29CIpWFr1@z1{OPdaumaK3b`9;NjEHEl{lMH|eaaNU*$hF+eneYz< zODg)xOVBc*D!i*$H>X?w1Wm_vx9Q&lpaeKqGirmp&!pKq&^9Zg&j8a%{pzxFXXuf} z7WnWk8zCNJ9{1J!0G7;>7K5c(Jf*joB^$aMfi?yiqjrbX}z~v)>M(x%}sv0ev6zL^&+#qxWxtt#! z{Wz`Ff^E|_={@=&nhI5{n?!Z3<3SqUN98gVK_RTK{C2M5Yt0;4%4&UZ7ja3CUgZVc zTN*XMFv(1Nill^kf=LtW&VAG?N}vc$buBle6ST>FeFF`rCmYTZV_8svO6TN~?mCLp zS`epl%%xO41C)|slZ!kjfmSM1%~Bjknc=LJMwKAbzKKK>fMn3A-BYBI|pV zmU%y37;MBjwsi}aGllPgb;)iwW@MiKxNSfg!tBm3epb*P( zAZ&2Gdi)DIo}PIAT%oDUZaT-?Roi9r7%KCi+F}GNa~$FmNUE`ZVTOBz>7*&ZpM9(e}`he>O7j&=(SD8szYj_LR49RG-xPp{g< z9-)ezyR`?S&z4=Y*m7q9nBjgFI3|*)RrTPSzs$fDCA7WVIXRfXWxST_O`M2EY3-z_yr;aINyOwDdALNn`>iB7a%w?4qCi7n+M03k0q-NE3RyS%Ke7dlLo%PBKvnC&zX=v148y7?ZHg(oQ8!_P_Tm}@BSQTH zEdX@2DcmmSixTiF<6+>Gll}&4UrEw|X3$)lVm! zeOVbM#+YMW&iyoDy9aROg*NIas|`g^!5oW8zcL|*Xuy`+M}`~T2CdNQg@(SRy2Jjl z_Vdtez!4=o&?{abaL?+;(GB0&DrCN>eC#$0OkR|HxqC{zQooPv)v~G3K+jjdpl@Nr zs~&&5Zm{FVl9#P{CPHxhCYyC%C=F{g)ia8s(ozh$J1Cv{nx+N%nJ)Pfv?Ym>D+)WC zXhNf%Vq)=fq1Wg_u{b~LDD&A!$K{%SRjViBuIZpcNS=wi+ zahi~mjpHFys!~h+IHNE-0R!~6sM5kF;Julo5H00j)%m8dBF}}!CYac01PM0mct^|- zT*@&6A9R`KlM*+c;xp;oW!c!=n3^N09GX_*jWS5E`YIgdd7Ngq5!~eQTMBZVI?hp{ zi|`7r*|zPQgp8tQo%N?`|7vbbO6NTDdNh0m$Av+q&Nx~}BFI4W3Bp(ui3DQ;Xcvy5 zUjs&XtVWK4_qkzRwPmq12gefI+ynTIPKli7wBMX!U4UA#cLsjV*Rb^c zHW@8Rrz8vNp6R+WlEtkKANw3{4p;)P;~w5B5Ar<^@6fS%^55rb!9r4E>CPm;q%N#g zy9rjA_{x$$y}_7l-b0OuFm-D76L8buYwgr5wTG{%3Ys2m%{PmNhH|w%)sh`g-><8$ z=E*bjM7^%1?-n({0!lLTiL2&Z%=&3252GVR?2@G+P`vwALJ#%fGQ(fZkac9rIDUwo zy_+n8y&d928pV#J{iUZ zWr!!rzKKy%N3%ZpAW~D{8|(Vvz+Aj(;6r$AIo+sXGMFugf&iOFmIk(Ii+Pr`BF96F zh#+5ipl-IGVwsLo7zxPq0pe@w>;+EI^vX6XnytfCH! zjrNLM1V!8KVb9W2`I~0FfaT^^3sHHz*poBqo%h(QSyfCxv;2C5)j0mT{rCNz2_)<7 zZNJ;yJLu}YU&qvDjz^;9;He6D>53S@-#e16UG9Na#U=UdCL6b%^~u*a%@d#A!2N;? zyz>%sRo=rQGzY*X0vBL7ob|d2>JO-gOvX~0Em~%>YwgFfNY%=$=Bp5*Z|FI?Fe`ec zuf09c!Wh73Uo4`yxd6}StWM~SduAQ`N}uI`SX|9{5Ywcka>27Nh0YM`Uj@2M4Ky#r zi`TDCoeM{E0^#OshcKB8O#z-|LgleB;OJFem_0M0I^rjS&iP(NzC@H>KnRCoo*L9t zN3Qa;@zQk~!*Y+e>xgw1+*ILdybuZw^9$8hlv^a1 zgf7wPq+$nC#jUavi`Wlp>|w8=o+0)%myFh!w!r3TYWf>f)8Bxas?IeP{mrGKjnlzm z8S?GnZ$}$nw7x3tqV`tkHhvA0m=aQN)r3jtXrbM9smaj{@^YJzN3i_Ix!yUaLL(Nr6B;2gFi|bwiKhTEItZR@DQJk zxHU$!PvIiA11q{FR7al~`dQI}Xt{J@PF2j;z^u~baCL{A;Y&Z8u!IbW4M1Nv7bX?) z`R|JS({-EFEyi0t+@0-f$L0!&tk56ZH>i}}DYhAX*c$Ml=@pdL^o z2KWd*_4DAMoBO_;G;)^~TI()~Pr6YpSf*vE?pnT3zp-?uJ2~$z`jc2%@Geg8$WJhl ziffDmFm7Dl4pS(zD_qJ!f7$skaac1nLSmel#eK1NolZC+au<`e%ndsI96pSaa~L%x zP54R_fSONmv^d&t)fT~ZN`Y9E-$AD#?Q~9KafS-RjEt1~vq~d?a*!PS(Txh*PYJaaBecJWGIy1zS+slXl7Tl0_Rgu&` z?9Re5ikws8N=?N?K{Bw=YvCHNY~_tLY|5Hke)zIiYxxS7%YnzgW<2?*JeM5l^|+JV-eVuDPGU6VuDm4B7{ zfwRR7$$^#Kr|$u}9IFVW#6&dJe5)N_XY`db{*+%eFsg6i(i6sTu+dDfD{%FxX|oVZCgfw-cRx-#P2Cq4j@?W|Ylje+qE2Gs?X;+`^Ggd9DbjM5OG*Nb*Z zE=ntIP>3;*01ze$Vn+WQ^BHiS)t7RwdIvfeAYlY2cZUaC7f! z7QU6+z9crBqy;5f6 z3zL@gf2SU2wz@%5hx*DMzIk_4=rrpkrW*@x1YWGSdI?e}fjz0)?q4@kqo(N?HPHPi zl>*cGA_^uWrhfc#TBX2ZA2du+D7IqpYsyx`SxP53cZZ74gLN~DPS>RVB~;h6bGL#> zJ5_=+x5Xjzv(+ZXPdDg5(Ax(_3 zV54iPtsCGAs>&)X{XrMueys<8kmcZ>tp>A?KRCL(L7OaN-c$egVjY-A+h$(FyO{!} zvr|yd5_A#j@?p|TFv(-P^&u`W*WY^d3SC91;)&?{?II+(N+w}x7Q5tuo#k4~g4*9& zzLCDl8Nsfotxhe@or_Rt^;~|6ei^D9jS0$DZv0BSM`2YQakh@#;Li%)XhmN=t)ZGx zX&TE#k+KqM6-tXf!>|xa*5qdmZc4Lq6tYn0)^!kQFjJ@x)U@YxD-_CU_2_rJCRAl3 zkX2b{ftgw= zrMM^w0}kqA_32ni2aaav1+nw{%u*$xF4;)wIxTE?$Nm_0bRm!9dHIT(^hoNPCMD8> zKE4gvfo3N^>day?JX=zIJ_{x&y5khgZ*z&3zGQg6Z52W2O13(FnkVlbh6*(_7G7vx zTvBPRC)sxzFdwH|BCfQ`@5G6UBq!(0BPQ>(&CY*&E;qtcOVj*59B) zjZL-aZsmY#;Gg@cp?)l1aYcd}WhZZ+yx;_0nv~N$s7j zWb){p1TTHS+rZxI+Wq`FsVuIR69cfl0_&||7S%c`oJtB9I)!?tknsgt{M;R}eyLJe<-Ah)ssGVog^f99p4^sb{yY>q@K2oliV zPiCo-`>5g!oltuHiB$BNl_rLp`ROsm`zZBGO5G_*OD$2PWsX-#9cu|&YFQyUZ%bnp zfd%+#&AWHmNyknCqph55Nq5kJW(I99e!D1Y-J474xSi^(ZW;h3aJfkg_P6))T(~Jw@NpTy6o{6v5f}}x#RfFG{b-&fT3Cmb0 z08&7$zvq_19BZ2}TYs)|Y13O%a*$#R%$zN^mD`D#QkK;6r%{Cq#X(KVpm7L8cC8(T zly4mUsD!Olsuy_u8vU@Rn$r$1DzH*PMVb-w7lCOlG$ovSmS-z!YJ+6Xq_p6w=M-`= zJVIHD6off@8jAD;LMWYwn(w%Pt432MbWItFA4O)1W{=$H!eI~3o_K-8*7bxF3c8gt zgDE)2?=Tseb39s85FPxovyWMFw%$bW%kJCPe~;epZ@-K_>>T`JxkRuNR@NU*283_$ zbhHnoB&~CZv|VE=&U7`ec_!(mCG~baz1KE|ccLF^Py;z}hgYY8VX` zy)PMeq*U^@5?8hpHO>h!t`y4ytll*yt4^_6pP8gxS@9G&!n3q0bxLCg(O4z1v?_L9 z#7WPNKr)w9HzQvD+F+3@(SyK*hQn(!%g}VF>X({Fn`2|*N^$DRC-e)(!i1!Ub4y4f ziW!V^0QgR?jsc_JBTg;}zX-&`Z#9f1$r0(cEe>sxu)P7`Twt(5;zfu-{=Fi8OA92p ze8e|Y(3hjjRj#SCgv2kSiG2B-#(%5xOsPAGoM^)y>ylBJ)Es-o!?JI7FZ$h0=%+Gs z!VIxmdQO!s2~bqwQKPhSxidv_J+>=Iqy3`l-+aT|M}tPo(PWtf(~E!8^TxOTtjjuc zoWARoW$N8&0q#XU8m0F7`4V#3R2+!GhHW2yRq39TP4T%gV#O8~M?1mK9d^^w>Y!`| z;t5GtGn9L&?NKX|f>T;qN+iU7jx*(wD`A|NLrW12DZyZ>CYh>>MsAU)M4*a1zUsFP-R1Oof(=J;&o{nM8(VodeI#i^H@|fiPNU zlv>6ufDp6ZT{7f^MMDdJjj(XzcqsG3ui0|SY=i9&iF8Hs`<*&N`dK{uqAr|q&4dv5 z?p{K{OZRHIFk2@oIbB0qafCR=?9RQ>x&FwifO~D~-CG4m2TKII%_q?l2580&Z_;klj8 zI!jbLENX2#x1zs1@T0manAs&|g41O}d6K8eSzah2s^ZnPHzI%JDl(!p;R=u8AW}0S#zNe%X~5^DIRz+iUT>03Z7pMSPBf(>Hur_I ziz+(H8!%P^UM<1st->2-nj!9LlylV7w@p@eN1fuvXD01tI;}j0@^QsyKQDpZ2o(&a zCuSon#(E33v!JYKt9ETQk`(*F}y9_53Sn zt+)0ESq9sKg~Lx+4}v~xw1xK2l>NFPv9jb%vyofaR=-FX%Wcuaz1{Fd0j{2r(B!6^ z=MqR>Py%zp<^=iZe;=r8a_RCiyJ83?d0`oTa;EQAtK(K2B|np8dnf&n+O{g znw3knUP-A0`=l0{j6JU|shfe82;=ROkua_1aC)uvAhbZE3~_6G^p+ac1AY}KRUj$J zBn5fRGUA&(W{&KeDng}JfKf{Sf!y1`@ug8RxO;R#E5k?DJOpd5;9|U(@P^5fxHPjL z$Ckc`rf052eXl7*T$^rBad7rO0HD?6LjYpQ6FtRtoie)y|CmZus)UP_-k}OddNqr# z+=Pxd7Ppz%Pq6aMRMbs0uSK@iw&9`lHo@94h7dYN6w2x_Fq+U&+%Ix2`3yh@VAn2b zzfknWf{RvyOvWr>N$}3@xmj1(0e0`d{8cxcK=k|CVU6cCA zDagdWnq(PFonjRnJZmOU?q+Y3Pt`#RxB`8VITgU^BptF2<0>yG<*<{Dm<@}X1K{$y zxlS3Z%XV}qt2;}W!qL67OE<@D z3`qOzETL-Utn|TYW-O~KBaaCG3iX`=;rdvT8MJqY8?+#7zonBfJe_qW7S!AoqRS8f zE)2cFum2E8t=Etw+a%?d47s@oJ;<>`r!;w@+j$5zR%S>Q`1whwIVTH~NpM*SmhHpG;2z zMuR?StJ{N9oIW|SHBM>^_~)v9@}6roN@eVUtRAr9Ka(E2!r{ zE|wy}9u;i*Q1c45RGb{h(3>l;wN8h6o%XD5@u~T%haN%t+^Dc5eu0{3ujULr?~O2` z3(Ivao6(a`Nq+(ur!}5bE%Xa$?Yw->(lzl{tz}0t_u;IyWuFi!kTXD?saTTu0ZS#( zJ9P9#=aX_$uo_jF&C8@9vk8K1&vq}tGpl-O%;_J3`^Odp`fldGc}c`vShsiQO#_$^A~A_?2I_ED3&8tkxZo(t;y9h>@XPs(6PC-acS~9 zQRw8P&mkWmsZ+fytfz!NQ0XTc1&u}^DaQkZaEWsJo8ic`tfCsYI(WYkM7N)K#kM6sSp3t$DX!rpcA~ zw%fLLtk9<_chc@ECwQ@=7orOG(TKmQZH0PgIn}qnzHuOL+A+hRD(OVi^QMLBolxwA z1;#d0W^h$o;X|9cFgsW}SCiC~c(SG16qP19XAk&6o;U*t(K%AdpWu`=(m$k$cmbhA@!Z!*M%_`POPFF$hc2Z7@C8X1FkHwhn zPp?V1AuqX#RX%A|Cc`t;7o{}lVYUqdHYBi<0^MEF7bm9xoFbo`Us%T~r)|N;#PuLR zCq4`aL4N2ekJ16UXCs%U!KD;`W)_}+j4H&UreT~(+0Qqvx~9&VVH9gayL-7F`57DJ zR0)`^v*nX=x1O#u?!AdLB>pTmV zTy$!iE4KPbJ6{Y_IEpuM79)jBOa2?K*lS>8lcMdw>T^ZxduX(K!=hIEhP)Toqc__J zzwEy3?Qb8D;Y7xCVpBc6l2&s0@uE17BrYsJ-9^7PHckhPQH=@HmxJYx9q5g?Q9gx9(zoQufg>caYL=`_)$zhNqBl?HvW`KfWqIq^}`pkE{(+baK z2GZO57Qk|=iJ3HuaZdk26wNAFMikW^!tZLMsmKAyg^(t%BT)n74L<v zU<1qfzl+*(fl>fpDi=fYpp_NDWg^0ikt*zNZ&iqisVM=~yqk`^rfo~Ko^6)S2fDSd zwA<%A|7}DSTZD}c@|Vfw0Z`_$9mW+Q_?)vJPWYbiF|743#Up!|euT?>c)0vuZ?3n- z<71TFmu0}?$4A{rzd@H=_2S9Vk#BIRia0Crs7s5QV(-yS%j&ze9*r)_ zg1b*|5L1h5x(<1THY*Id<2WsJ#m@K?@s^l5Y*OpDCvh9KBrIVIbB+kGNu{`#0HZRn zvc4;FDUq<=?4p&(9`A=kb9hHTx}-^(;r{VNqLp%mjyN>Fn z;<{&)W(_4ZhR@nJn4ak|Kx8X!ajvE(_{V9hIh<5-5E0x%dzK1S(5kK=Bs{0Z$;{zV z^ptFn_(NHgH}78`>>LyFsbzWm<5`q2v@dd9Hk#;YV{`xpjXNX3U9s$r1$v zvdGzR$*@IRdbZg920Z|6RNM3#$g*OMxlkq@v_ZD@(q?Kd{lq8yR4Y#kF}6rCaSVvz zSU{5XQ4LgM%4VdM&{JxU@&SbwbFw9V&RHouXE$eB^tmQHxGoE@I!32)B{A@UP~ypvvZz*fvS%Q;j8`ZBs-jG{RqRsk_} z=Y$l1qSC~~4A@wAi%J?9POCfe;XtdcF5qz4-$({;k(OTX<9HbNB`(;pgV?pJ5eU`N zG17oo3!Whj4Rd6cmjk!7!;&i1R4NJ0E7^&ZO5)6_Sd4Sx0f@VG&diHKTf&J0ubilW zAT$iJ^?<_$*PVTnu?OUuMebJ0_le4PPpA^q#Q61&(od2u(O(-Lop&HXms|cqClT3x z^X~QT-?z7qU+?S#p*d{*cb>F>zeGS@`BDA7_}8#Uwa&@ekTy-CkA)EZfC^aY1b znm`UpFN@eA9t^ZeUAgZP8l`(XkMf$7TIvh}tMT-2(NESBSt-9*pSy6u@a#QOI!LO@ zᝀ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

ov>;) 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 literal 0 HcmV?d00001 diff --git a/tests/unit/webMetricsTest.js b/tests/unit/webMetricsTest.js index 1e951b6ee..1dcd0b541 100644 --- a/tests/unit/webMetricsTest.js +++ b/tests/unit/webMetricsTest.js @@ -3,7 +3,7 @@ describe('decorateWithMetrics', () => { beforeEach(() => { jest.resetModules(); - const metrics = require('../../lib/metrics/index.web'); + const metrics = require('../../lib/metrics'); decorateWithMetrics = metrics.decorateWithMetrics; }); From f5a3ad2cb5d3c1ff197533fdb4dd0131565a503a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jan 2024 16:54:09 +0100 Subject: [PATCH 15/18] Remove tarball and package folder --- package/API.md | 457 ------------------------------------ package/LICENSE.md | 21 -- package/README.md | 451 ----------------------------------- package/package.json | 109 --------- react-native-onyx-2.0.0.tgz | Bin 64024 -> 0 bytes 5 files changed, 1038 deletions(-) delete mode 100644 package/API.md delete mode 100644 package/LICENSE.md delete mode 100644 package/README.md delete mode 100644 package/package.json delete mode 100644 react-native-onyx-2.0.0.tgz diff --git a/package/API.md b/package/API.md deleted file mode 100644 index 02cc989d1..000000000 --- a/package/API.md +++ /dev/null @@ -1,457 +0,0 @@ - - -# API Reference - -## Functions - -

-
sendActionToDevTools(method, key, value, mergedValue)
-

Sends an action to DevTools extension

-
-
maybeFlushBatchUpdates() ⇒ Promise
-

We are batching together onyx updates. This helps with use cases where we schedule onyx updates after each other. -This happens for example in the Onyx.update function, where we process API responses that might contain a lot of -update operations. Instead of calling the subscribers for each update operation, we batch them together which will -cause react to schedule the updates at once instead of after each other. This is mainly a performance optimization.

-
-
getSubsetOfData(sourceData, selector, [withOnyxInstanceState]) ⇒ Mixed
-

Uses a selector function to return a simplified version of sourceData

-
-
reduceCollectionWithSelector(collection, selector, [withOnyxInstanceState]) ⇒ Object
-

Takes a collection of items (eg. {testKey_1:{a:'a'}, testKey_2:{b:'b'}}) -and runs it through a reducer function to return a subset of the data according to a selector. -The resulting collection will only contain items that are returned by the selector.

-
-
isCollectionMemberKey(collectionKey, key) ⇒ Boolean
-
-
tryGetCachedValue(key, mapping) ⇒ Mixed
-

Tries to get a value from the cache. If the value is not present in cache it will return the default value or undefined. -If the requested key is a collection, it will return an object with all the collection members.

-
-
connect(mapping) ⇒ Number
-

Subscribes a react component's state directly to a store key

-
-
disconnect(connectionID, [keyToRemoveFromEvictionBlocklist])
-

Remove the listener for a react component

-
-
scheduleSubscriberUpdate(key, value, [canUpdateSubscriber]) ⇒ Promise
-

Schedules an update that will be appended to the macro task queue (so it doesn't update the subscribers immediately).

-
-
scheduleNotifyCollectionSubscribers(key, value) ⇒ Promise
-

This method is similar to notifySubscribersOnNextTick but it is built for working specifically with collections -so that keysChanged() is triggered for the collection and not keyChanged(). If this was not done, then the -subscriber callbacks receive the data in a different format than they normally expect and it breaks code.

-
-
broadcastUpdate(key, value, method, hasChanged, wasRemoved) ⇒ Promise
-

Notifys subscribers and writes current value to cache

-
-
hasPendingMergeForKey(key) ⇒ Boolean
-
-
removeNullValues(key, value) ⇒ Mixed
-

Removes a key from storage if the value is null. -Otherwise removes all nested null values in objects and returns the object

-
-
set(key, value) ⇒ Promise
-

Write a value to our store with the given key

-
-
multiSet(data) ⇒ Promise
-

Sets multiple keys and values

-
-
merge(key, changes) ⇒ Promise
-

Merge a new value into an existing value at a key.

-

The types of values that can be merged are Object and Array. To set another type of value use Onyx.set(). -Values of type Object get merged with the old value, whilst for Array's we simply replace the current value with the new one.

-

Calls to Onyx.merge() are batched so that any calls performed in a single tick will stack in a queue and get -applied in the order they were called. Note: Onyx.set() calls do not work this way so use caution when mixing -Onyx.merge() and Onyx.set().

-
-
clear(keysToPreserve) ⇒ Promise.<void>
-

Clear out all the data in the store

-

Note that calling Onyx.clear() and then Onyx.set() on a key with a default -key state may store an unexpected value in Storage.

-

E.g. -Onyx.clear(); -Onyx.set(ONYXKEYS.DEFAULT_KEY, 'default'); -Storage.getItem(ONYXKEYS.DEFAULT_KEY) - .then((storedValue) => console.log(storedValue)); -null is logged instead of the expected 'default'

-

Onyx.set() might call Storage.setItem() before Onyx.clear() calls -Storage.setItem(). Use Onyx.merge() instead if possible. Onyx.merge() calls -Onyx.get(key) before calling Storage.setItem() via Onyx.set(). -Storage.setItem() from Onyx.clear() will have already finished and the merged -value will be saved to storage after the default value.

-
-
mergeCollection(collectionKey, collection) ⇒ Promise
-

Merges a collection based on their keys

-
-
update(data) ⇒ Promise
-

Insert API responses and lifecycle data into Onyx

-
-
setMemoryOnlyKeys(keyList)
-

When set these keys will not be persisted to storage

-
-
onClear(callback)
-

Sets the callback to be called when the clear finishes executing.

-
-
subscribeToEvents()
-

Subscribes to the Broadcast channel and executes actions based on the -types of events.

-
-
init([options])
-

Initialize the store with actions and listening for storage events

-
-
- - - -## sendActionToDevTools(method, key, value, mergedValue) -Sends an action to DevTools extension - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| method | string | Onyx method from METHOD | -| key | string | Onyx key that was changed | -| value | any | contains the change that was made by the method | -| mergedValue | any | (optional) value that was written in the storage after a merge method was executed. | - - - -## maybeFlushBatchUpdates() ⇒ Promise -We are batching together onyx updates. This helps with use cases where we schedule onyx updates after each other. -This happens for example in the Onyx.update function, where we process API responses that might contain a lot of -update operations. Instead of calling the subscribers for each update operation, we batch them together which will -cause react to schedule the updates at once instead of after each other. This is mainly a performance optimization. - -**Kind**: global function - - -## getSubsetOfData(sourceData, selector, [withOnyxInstanceState]) ⇒ Mixed -Uses a selector function to return a simplified version of sourceData - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| sourceData | Mixed | | -| selector | function | Function that takes sourceData and returns a simplified version of it | -| [withOnyxInstanceState] | Object | | - - - -## reduceCollectionWithSelector(collection, selector, [withOnyxInstanceState]) ⇒ Object -Takes a collection of items (eg. {testKey_1:{a:'a'}, testKey_2:{b:'b'}}) -and runs it through a reducer function to return a subset of the data according to a selector. -The resulting collection will only contain items that are returned by the selector. - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| collection | Object | | -| selector | String \| function | (see method docs for getSubsetOfData() for full details) | -| [withOnyxInstanceState] | Object | | - - - -## isCollectionMemberKey(collectionKey, key) ⇒ Boolean -**Kind**: global function - -| Param | Type | -| --- | --- | -| collectionKey | String | -| key | String | - - - -## tryGetCachedValue(key, mapping) ⇒ Mixed -Tries to get a value from the cache. If the value is not present in cache it will return the default value or undefined. -If the requested key is a collection, it will return an object with all the collection members. - -**Kind**: global function - -| Param | Type | -| --- | --- | -| key | String | -| mapping | Object | - - - -## connect(mapping) ⇒ Number -Subscribes a react component's state directly to a store key - -**Kind**: global function -**Returns**: Number - an ID to use when calling disconnect - -| Param | Type | Description | -| --- | --- | --- | -| mapping | Object | the mapping information to connect Onyx to the components state | -| mapping.key | String | ONYXKEY to subscribe to | -| [mapping.statePropertyName] | String | the name of the property in the state to connect the data to | -| [mapping.withOnyxInstance] | Object | whose setState() method will be called with any changed data This is used by React components to connect to Onyx | -| [mapping.callback] | function | a method that will be called with changed data This is used by any non-React code to connect to Onyx | -| [mapping.initWithStoredValues] | Boolean | If set to false, then no data will be prefilled into the component | -| [mapping.waitForCollectionCallback] | Boolean | If set to true, it will return the entire collection to the callback as a single object | -| [mapping.selector] | function | THIS PARAM IS ONLY USED WITH withOnyx(). If included, this will be used to subscribe to a subset of an Onyx key's data. The sourceData and withOnyx state are passed to the selector and should return the simplified data. Using this setting on `withOnyx` can have very positive performance benefits because the component will only re-render when the subset of data changes. Otherwise, any change of data on any property would normally cause the component to re-render (and that can be expensive from a performance standpoint). | -| [mapping.initialValue] | String \| Number \| Boolean \| Object | THIS PARAM IS ONLY USED WITH withOnyx(). If included, this will be passed to the component so that something can be rendered while data is being fetched from the DB. Note that it will not cause the component to have the loading prop set to true. | | - -**Example** -```js -const connectionID = Onyx.connect({ - key: ONYXKEYS.SESSION, - callback: onSessionChange, -}); -``` - - -## disconnect(connectionID, [keyToRemoveFromEvictionBlocklist]) -Remove the listener for a react component - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| connectionID | Number | unique id returned by call to Onyx.connect() | -| [keyToRemoveFromEvictionBlocklist] | String | | - -**Example** -```js -Onyx.disconnect(connectionID); -``` - - -## scheduleSubscriberUpdate(key, value, [canUpdateSubscriber]) ⇒ Promise -Schedules an update that will be appended to the macro task queue (so it doesn't update the subscribers immediately). - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| key | String | | -| value | \* | | -| [canUpdateSubscriber] | function | only subscribers that pass this truth test will be updated | - -**Example** -```js -scheduleSubscriberUpdate(key, value, subscriber => subscriber.initWithStoredValues === false) -``` - - -## scheduleNotifyCollectionSubscribers(key, value) ⇒ Promise -This method is similar to notifySubscribersOnNextTick but it is built for working specifically with collections -so that keysChanged() is triggered for the collection and not keyChanged(). If this was not done, then the -subscriber callbacks receive the data in a different format than they normally expect and it breaks code. - -**Kind**: global function - -| Param | Type | -| --- | --- | -| key | String | -| value | \* | - - - -## broadcastUpdate(key, value, method, hasChanged, wasRemoved) ⇒ Promise -Notifys subscribers and writes current value to cache - -**Kind**: global function - -| Param | Type | Default | -| --- | --- | --- | -| key | String | | -| value | \* | | -| method | String | | -| hasChanged | Boolean | | -| wasRemoved | Boolean | false | - - - -## hasPendingMergeForKey(key) ⇒ Boolean -**Kind**: global function - -| Param | Type | -| --- | --- | -| key | String | - - - -## removeNullValues(key, value) ⇒ Mixed -Removes a key from storage if the value is null. -Otherwise removes all nested null values in objects and returns the object - -**Kind**: global function -**Returns**: Mixed - The value without null values and a boolean "wasRemoved", which indicates if the key got removed completely - -| Param | Type | -| --- | --- | -| key | String | -| value | Mixed | - - - -## set(key, value) ⇒ Promise -Write a value to our store with the given key - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| key | String | ONYXKEY to set | -| value | \* | value to store | - - - -## multiSet(data) ⇒ Promise -Sets multiple keys and values - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| data | Object | object keyed by ONYXKEYS and the values to set | - -**Example** -```js -Onyx.multiSet({'key1': 'a', 'key2': 'b'}); -``` - - -## merge(key, changes) ⇒ Promise -Merge a new value into an existing value at a key. - -The types of values that can be merged are `Object` and `Array`. To set another type of value use `Onyx.set()`. -Values of type `Object` get merged with the old value, whilst for `Array`'s we simply replace the current value with the new one. - -Calls to `Onyx.merge()` are batched so that any calls performed in a single tick will stack in a queue and get -applied in the order they were called. Note: `Onyx.set()` calls do not work this way so use caution when mixing -`Onyx.merge()` and `Onyx.set()`. - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| key | String | ONYXKEYS key | -| changes | Object \| Array | Object or Array value to merge | - -**Example** -```js -Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Joe']); // -> ['Joe'] -Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Jack']); // -> ['Joe', 'Jack'] -Onyx.merge(ONYXKEYS.POLICY, {id: 1}); // -> {id: 1} -Onyx.merge(ONYXKEYS.POLICY, {name: 'My Workspace'}); // -> {id: 1, name: 'My Workspace'} -``` - - -## clear(keysToPreserve) ⇒ Promise.<void> -Clear out all the data in the store - -Note that calling Onyx.clear() and then Onyx.set() on a key with a default -key state may store an unexpected value in Storage. - -E.g. -Onyx.clear(); -Onyx.set(ONYXKEYS.DEFAULT_KEY, 'default'); -Storage.getItem(ONYXKEYS.DEFAULT_KEY) - .then((storedValue) => console.log(storedValue)); -null is logged instead of the expected 'default' - -Onyx.set() might call Storage.setItem() before Onyx.clear() calls -Storage.setItem(). Use Onyx.merge() instead if possible. Onyx.merge() calls -Onyx.get(key) before calling Storage.setItem() via Onyx.set(). -Storage.setItem() from Onyx.clear() will have already finished and the merged -value will be saved to storage after the default value. - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| keysToPreserve | Array | is a list of ONYXKEYS that should not be cleared with the rest of the data | - - - -## mergeCollection(collectionKey, collection) ⇒ Promise -Merges a collection based on their keys - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| collectionKey | String | e.g. `ONYXKEYS.COLLECTION.REPORT` | -| collection | Object | Object collection keyed by individual collection member keys and values | - -**Example** -```js -Onyx.mergeCollection(ONYXKEYS.COLLECTION.REPORT, { - [`${ONYXKEYS.COLLECTION.REPORT}1`]: report1, - [`${ONYXKEYS.COLLECTION.REPORT}2`]: report2, -}); -``` - - -## update(data) ⇒ Promise -Insert API responses and lifecycle data into Onyx - -**Kind**: global function -**Returns**: Promise - resolves when all operations are complete - -| Param | Type | Description | -| --- | --- | --- | -| data | Array | An array of objects with shape {onyxMethod: oneOf('set', 'merge', 'mergeCollection', 'multiSet', 'clear'), key: string, value: *} | - - - -## setMemoryOnlyKeys(keyList) -When set these keys will not be persisted to storage - -**Kind**: global function - -| Param | Type | -| --- | --- | -| keyList | Array.<string> | - - - -## onClear(callback) -Sets the callback to be called when the clear finishes executing. - -**Kind**: global function - -| Param | Type | -| --- | --- | -| callback | function | - - - -## subscribeToEvents() -Subscribes to the Broadcast channel and executes actions based on the -types of events. - -**Kind**: global function - - -## init([options]) -Initialize the store with actions and listening for storage events - -**Kind**: global function - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [options] | Object | {} | config object | -| [options.keys] | Object | {} | `ONYXKEYS` constants object | -| [options.initialKeyStates] | Object | {} | initial data to set when `init()` and `clear()` is called | -| [options.safeEvictionKeys] | Array.<String> | [] | This is an array of keys (individual or collection patterns) that when provided to Onyx are flagged as "safe" for removal. Any components subscribing to these keys must also implement a canEvict option. See the README for more info. | -| [options.maxCachedKeysCount] | Number | 55 | Sets how many recent keys should we try to keep in cache Setting this to 0 would practically mean no cache We try to free cache when we connect to a safe eviction key | -| [options.captureMetrics] | Boolean | | Enables Onyx benchmarking and exposes the get/print/reset functions | -| [options.shouldSyncMultipleInstances] | Boolean | | Auto synchronize storage events between multiple instances of Onyx running in different tabs/windows. Defaults to true for platforms that support local storage (web/desktop) | -| [options.debugSetState] | Boolean | | Enables debugging setState() calls to connected components. | - -**Example** -```js -Onyx.init({ - keys: ONYXKEYS, - initialKeyStates: { - [ONYXKEYS.SESSION]: {loading: false}, - }, -}); -``` diff --git a/package/LICENSE.md b/package/LICENSE.md deleted file mode 100644 index 6ae248472..000000000 --- a/package/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Expensify Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/package/README.md b/package/README.md deleted file mode 100644 index d012e5cf7..000000000 --- a/package/README.md +++ /dev/null @@ -1,451 +0,0 @@ -# `react-native-onyx` -Awesome persistent storage solution wrapped in a Pub/Sub library. - -# Features - -- Onyx stores and retrieves data from persistent storage -- Data is stored as key/value pairs, where the value can be anything from a single piece of data to a complex object -- Collections of data are usually not stored as a single key (e.g. an array with multiple objects), but as individual keys+ID (e.g. `report_1234`, `report_4567`, etc.). Store collections as individual keys when a component will bind directly to one of those keys. For example: reports are stored as individual keys because `SidebarLink.js` binds to the individual report keys for each link. However, report actions are stored as an array of objects because nothing binds directly to a single report action. -- Onyx allows other code to subscribe to changes in data, and then publishes change events whenever data is changed -- Anything needing to read Onyx data needs to: - 1. Know what key the data is stored in (for web, you can find this by looking in the JS console > Application > local storage) - 2. Subscribe to changes of the data for a particular key or set of keys. React components use `withOnyx()` and non-React libs use `Onyx.connect()`. - 3. Get initialized with the current value of that key from persistent storage (Onyx does this by calling `setState()` or triggering the `callback` with the values currently on disk as part of the connection process) -- Subscribing to Onyx keys is done using a constant defined in `ONYXKEYS`. Each Onyx key represents either a collection of items or a specific entry in storage. For example, since all reports are stored as individual keys like `report_1234`, if code needs to know about all the reports (e.g. display a list of them in the nav menu), then it would subscribe to the key `ONYXKEYS.COLLECTION.REPORT`. - -# Getting Started - -## Installation - -Onyx is published to [`npm`](https://www.npmjs.com/package/react-native-onyx) - -```shell -npm install react-native-onyx --save -``` - -## Initialization - -To initialize Onyx we call `Onyx.init()` with a configuration object. - -```javascript -import Onyx from 'react-native-onyx'; - -const ONYXKEYS = { - SESSION: 'session', -}; - -const config = { - keys: ONYXKEYS, -}; - -Onyx.init(config); -``` - -### Usage in non react-native projects -Onyx can be used in non react-native projects, by leveraging the `browser` field in `package.json` -Bundlers like Webpack respect that field and import code from the specified path -We import Onyx the same way shown above - `import Onyx from 'react-native-onyx'` - -## Setting data - -To store some data we can use the `Onyx.set()` method. - -```javascript -API.Authenticate(params) - .then((response) => { - Onyx.set(ONYXKEYS.SESSION, {token: response.token}); - }); -``` - -The data will then be cached and stored via [`AsyncStorage`](https://github.com/react-native-async-storage/async-storage). - -## Merging data - -We can also use `Onyx.merge()` to merge new `Object` or `Array` data in with existing data. - -For `Array` the default behavior is to replace it fully, effectively making it equivalent to set: - -```javascript -Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Joe']); // -> ['Joe'] -Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Jack']); // -> ['Jack'] -``` - -For `Object` values the default behavior uses `lodash/merge` under the hood to do a deep extend of the object. - -```javascript -Onyx.merge(ONYXKEYS.POLICY, {id: 1}); // -> {id: 1} -Onyx.merge(ONYXKEYS.POLICY, {name: 'My Workspace'}); // -> {id: 1, name: 'My Workspace'} -``` - -Arrays inside objects will be replaced fully, same as arrays not inside objects: - -```javascript -Onyx.merge(ONYXKEYS.POLICY, {employeeList: ['Joe', 'Jack']}); // -> {employeeList: ['Joe', 'Jack']} -Onyx.merge(ONYXKEYS.POLICY, {employeeList: ['Jack']}); // -> {employeeList: ['Jack']} -``` - -### Should I use `merge()` or `set()` or both? - -- Use `merge()` when creating a new object -- Use `merge()` to merge partial data into an existing object -- Use `merge()` when storing simple values (`String`, `Boolean`, `Number`) -- Use `set()` when you need to delete an Onyx key completely from storage -- Use `set()` when you need to completely reset an object or array of data - -Consecutive calls to `Onyx.merge()` with the same key are batched in a stack and processed in the order that they were called. This helps avoid race conditions where one merge possibly finishes before another. However, it's important to note that calls to `Onyx.set()` are not batched together with calls to `Onyx.merge()`. For this reason, it is usually preferable to use one or the other, but not both. Onyx is a work-in-progress so always test code to make sure assumptions are correct! - -### Should I store things as an array or an object? - -You should avoid arrays as much as possible. They do not work well with `merge()` because it can't update a single element in an array, it must always set the entire array each time. This forces you to use `set()` a lot, and as seen above, `merge()` is more performant and better to use in almost any situation. If you are working with an array of objects, then you should be using an Onyx collection because it's optimized for working with arrays of objects. - -## Subscribing to data changes - -To set up a basic subscription for a given key use the `Onyx.connect()` method. - -```javascript -let session; -const connectionID = Onyx.connect({ - key: ONYXKEYS.SESSION, - callback: (val) => session = val || {}, -}); -``` - -To teardown the subscription call `Onyx.disconnect()` with the `connectionID` returned from `Onyx.connect()`. It's recommended to clean up subscriptions anytime you are connecting from within a function to prevent memory leaks. - -```javascript -Onyx.disconnect(connectionID); -``` - -We can also access values inside React components via the `withOnyx()` [higher order component](https://reactjs.org/docs/higher-order-components.html). When the data changes the component will re-render. - -```javascript -import React from 'react'; -import {withOnyx} from 'react-native-onyx'; - -const App = ({session}) => ( - - {session.token ? Logged in : Logged out } - -); - -export default withOnyx({ - session: { - key: ONYXKEYS.SESSION, - }, -})(App); -``` - -While `Onyx.connect()` gives you more control on how your component reacts as data is fetched from disk, `withOnyx()` will delay the rendering of the wrapped component until all keys/entities have been fetched and passed to the component, this can be convenient for simple cases. This however, can really delay your application if many entities are connected to the same component, you can pass an `initialValue` to each key to allow Onyx to eagerly render your component with this value. - -```javascript -export default withOnyx({ - session: { - key: ONYXKEYS.SESSION, - initialValue: {} - }, -})(App); -``` - -Additionally, if your component has many keys/entities when your component will mount but will receive many updates as data is fetched from DB and passed down to it, as every key that gets fetched will trigger a `setState` on the `withOnyx` HOC. This might cause re-renders on the initial mounting, preventing the component from mounting/rendering in reasonable time, making your app feel slow and even delaying animations. You can workaround this by passing an additional object with the `shouldDelayUpdates` property set to true. Onyx will then put all the updates in a queue until you decide when then should be applied, the component will receive a function `markReadyForHydration`. A good place to call this function is on the `onLayout` method, which gets triggered after your component has been rendered. - -```javascript -const App = ({session, markReadyForHydration}) => ( - markReadyForHydration()}> - {session.token ? Logged in : Logged out } - -); - -// Second argument to funciton is `shouldDelayUpdates` -export default withOnyx({ - session: { - key: ONYXKEYS.SESSION, - initialValue: {} - }, -}, true)(App); -``` - -### Dependent Onyx Keys and withOnyx() -Some components need to subscribe to multiple Onyx keys at once and sometimes, one key might rely on the data from another key. This is similar to a JOIN in SQL. - -Example: To get the policy of a report, the `policy` key depends on the `report` key. - -```javascript -export default withOnyx({ - report: { - key: ({reportID) => `${ONYXKEYS.COLLECTION.REPORT}${reportID}`, - }, - policy: { - key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`, - }, -})(App); -``` - -Background info: -- The `key` value can be a function that returns the key that Onyx subscribes to -- The first argument to the `key` function is the `props` from the component - -**Detailed explanation of how this is handled and rendered:** -1. The component mounts with a `reportID={1234}` prop -2. `withOnyx` evaluates the mapping -3. `withOnyx` connects to the key `reports_1234` because of the prop passed to the component -3. `withOnyx` connects to the key `policies_undefined` because `report` doesn't exist in the props yet, so the `policyID` defaults to `undefined`. * (see note below) -4. Onyx reads the data and updates the state of `withOnyx` with: - - `report={{reportID: 1234, policyID: 1, ... the rest of the object ...}}` - - `policy={undefined}` (since there is no policy with ID `undefined`) -5. There is still an `undefined` key in the mapping, so Onyx reads the data again -6. This time `withOnyx` connects to the key `policies_1` because the `report` object exists in the component's state and it has a `policyID: 1` -7. Onyx reads the data and updates the state of withOnyx with: - - `policy={{policyID: 1, ... the rest of the object ...}` -8. Now all mappings have values that are defined (not undefined) and the component is rendered with all necessary data - -* It is VERY important to NOT use empty string default values like `report.policyID || ''`. This results in the key returned to `withOnyx` as `policies_` which subscribes to the ENTIRE POLICY COLLECTION and is most assuredly not what you were intending. You can use a default of `0` (as long as you are reasonably sure that there is never a policyID=0). This allows Onyx to return `undefined` as the value of the policy key, which is handled by `withOnyx` appropriately. - -DO NOT use more than one `withOnyx` component at a time. It adds overhead and prevents some optimizations like batched rendering from working to its full potential. - -It's also beneficial to use a [selector](https://github.com/Expensify/react-native-onyx/blob/main/API.md#connectmapping--number) with the mapping in case you need to grab a single item in a collection (like a single report action). - -## Collections - -Collections allow keys with similar value types to be subscribed together by subscribing to the collection key. To define one, it must be included in the `ONYXKEYS.COLLECTION` object and it must be suffixed with an underscore. Member keys should use a unique identifier or index after the collection key prefix (e.g. `report_42`). - -```javascript -const ONYXKEYS = { - COLLECTION: { - REPORT: 'report_', - }, -}; -``` - -### Setting Collection Values - -To save a new collection key we can either do: - -```js -Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${report1.reportID}`, report1); -``` - -or we can set many at once with `mergeCollection()` (see below for guidance on best practices): - -```js -Onyx.mergeCollection(ONYXKEYS.COLLECTION.REPORT, { - [`${ONYXKEYS.COLLECTION.REPORT}${report1.reportID}`]: report1, - [`${ONYXKEYS.COLLECTION.REPORT}${report2.reportID}`]: report2, - [`${ONYXKEYS.COLLECTION.REPORT}${report3.reportID}`]: report3, -}); -``` - -### Subscribing to Collections - -There are several ways to subscribe to these keys: - -```javascript -withOnyx({ - allReports: {key: ONYXKEYS.COLLECTION.REPORT}, -})(MyComponent); -``` - -This will add a prop to the component called `allReports` which is an object of collection member key/values. Changes to the individual member keys will modify the entire object and new props will be passed with each individual key update. The prop doesn't update on the initial rendering of the component until the entire collection has been read out of Onyx. - -```js -Onyx.connect({key: ONYXKEYS.COLLECTION.REPORT}, callback: (memberValue, memberKey) => {...}}); -``` - -This will fire the callback once per member key depending on how many collection member keys are currently stored. Changes to those keys after the initial callbacks fire will occur when each individual key is updated. - -```js -Onyx.connect({ - key: ONYXKEYS.COLLECTION.REPORT, - waitForCollectionCallback: true, - callback: (allReports) => {...}}, -}); -``` - -This final option forces `Onyx.connect()` to behave more like `withOnyx()` and only update the callback once with the entire collection initially and later with an updated version of the collection when individual keys update. - -### Performance Considerations When Using Collections - -Be cautious when using collections as things can get out of hand if you have a subscriber hooked up to a collection key that has large numbers of individual keys. If this is the case, it is critical to use `mergeCollection()` over `merge()`. - -Remember, `mergeCollection()` will notify a subscriber only *once* with the total collected values whereas each call to `merge()` would re-render a connected component *each time it is called*. Consider this example where `reports` is an array of reports that we want to index and save. - -```js -// Bad -_.each(reports, report => Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${report.reportID}`, report)); // -> A component using withOnyx() will have it's state updated with each iteration - -// Good -const values = {}; -_.each(reports, report => values[`${ONYXKEYS.COLLECTION.REPORT}${report.reportID}`] = report); -Onyx.mergeCollection(ONYXKEYS.COLLECTION.REPORT, values); // -> A component using withOnyx() will only have it's state updated once -``` - -## Clean up - -To clear all data from `Onyx` we can use `Onyx.clear()`. - -```javascript -function signOut() { - Onyx.clear(); -} -``` - -## Storage Providers -`Onyx.get`, `Onyx.set`, and the rest of the API accesses the underlying storage -differently depending on the platform - -Under the hood storage access calls are delegated to a [`StorageProvider`](lib/storage/index.web.js) -Some platforms (like web and desktop) might use the same storage provider - -If a platform needs to use a separate library (like using MMVK for react-native) it should be added in the following way: -1. Create a `StorageProvider.js` at [lib/storage/providers](lib/storage/providers) - Reference an existing [StorageProvider](lib/storage/providers/AsyncStorage.js) for the interface that has to be implemented -2. Update the factory at [lib/storage/index.web.js](lib/storage/index.web.js) and [lib/storage/index.native.js](lib/storage/index.native.js) to return the newly created Provider for the desired Platform(s) - -# API Reference - -[Docs](./API.md) - -# Storage Eviction - -Different platforms come with varying storage capacities and Onyx has a way to gracefully fail when those storage limits are encountered. When Onyx fails to set or modify a key the following steps are taken: -1. Onyx looks at a list of recently accessed keys (access is defined as subscribed to or modified) and locates the key that was least recently accessed -2. It then deletes this key and retries the original operation - -By default, Onyx will not evict anything from storage and will presume all keys are "unsafe" to remove unless explicitly told otherwise. - -**To flag a key as safe for removal:** -- Add the key to the `safeEvictionKeys` option in `Onyx.init(options)` -- Implement `canEvict` in the Onyx config for each component subscribing to a key -- The key will only be deleted when all subscribers return `true` for `canEvict` - -e.g. -```js -Onyx.init({ - safeEvictionKeys: [ONYXKEYS.COLLECTION.REPORT_ACTIONS], -}); -``` - -```js -export default withOnyx({ - reportActions: { - key: ({reportID}) => `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}_`, - canEvict: props => !props.isActiveReport, - }, -})(ReportActionsView); -``` - -# Benchmarks - -Provide the `captureMetrics` boolean flag to `Onyx.init` to capture call statistics - -```js -Onyx.init({ - keys: ONYXKEYS, - safeEvictionKeys: [ONYXKEYS.COLLECTION.REPORT_ACTIONS], - captureMetrics: Config.BENCHMARK_ONYX, -}); -``` - -At any point you can get the collected statistics using `Onyx.getMetrics()`. -This will return an object containing `totalTime`, `averageTime` and `summaries`. -`summaries` is a collection of statistics for each method it contains data about: - - method name - - total, max, min, average times for this method calls - - calls - a list of individual calls with each having: start time; end time; call duration; call arguments - - start/end times are relative to application launch time - 0.00 being exactly at launch - -If you wish to reset the metrics and start over use `Onyx.resetMetrics()` - -Finally, there's a `Onyx.printMetrics()` method which prints human statistics information on the dev console. You can use this method during debugging. For example add an `Onyx.printMetrics()` line somewhere in code or call it through the dev console. It supports 3 popular formats *MD* - human friendly markdown, *CSV* and *JSON*. The default is MD if you want to print another format call `Onyx.printMetrics({ format: 'csv' })` or -`Onyx.printMetrics({ format: 'json' })`. - -Sample output of `Onyx.printMetrics()` - -``` -### Onyx Benchmark - - Total: 1.5min - - Last call finished at: 12.55sec - -| method | total time spent | max | min | avg | time last call completed | calls made | -|-----------------|-----------------:|----------:|---------:|----------:|-------------------------:|-----------:| -| Onyx:getAllKeys | 1.2min | 2.16sec | 0.159ms | 782.230ms | 12.55sec | 90 | -| Onyx:merge | 4.73sec | 2.00sec | 74.412ms | 591.642ms | 10.24sec | 8 | -| Onyx:set | 3.90sec | 846.760ms | 43.663ms | 433.056ms | 7.47sec | 9 | -| Onyx:get | 8.87sec | 2.00sec | 0.063ms | 61.998ms | 10.24sec | 143 | - - -| Onyx:set | -|---------------------------------------------------------------| -| start time | end time | duration | args | -|-----------:|----------:|----------:|--------------------------| -| 291.042ms | 553.079ms | 262.037ms | session, [object Object] | -| 293.719ms | 553.316ms | 259.597ms | account, [object Object] | -| 294.541ms | 553.651ms | 259.109ms | network, [object Object] | -| 365.378ms | 554.246ms | 188.867ms | iou, [object Object] | -| 1.08sec | 2.20sec | 1.12sec | network, [object Object] | -| 1.08sec | 2.20sec | 1.12sec | iou, [object Object] | -| 1.17sec | 2.20sec | 1.03sec | currentURL, / | -``` - -# Debug mode - -It can be useful to log why Onyx is calling `setState()` on a particular React component so that we can understand which key changed, what changed about the value, and the connected component that ultimately rendered as a result. When used correctly this can help isolate problem areas and unnecessary renders in the code. To enable this feature, pass `debugSetState: true` to the config and grep JS console logs for `[Onyx-Debug]`. - -# Redux DevTools Extension - -If you want to debug updates made to the local storage on the web app, you can use Redux DevTools Extension, which provides an easy to use GUI. -This extension provides the following features: - -- Each update (merge/set/clear/etc) made to the local storage is logged with the data that was written or erased. -- Check the state of the local storage at a certain point in time and compare it with it's previous state. - -Currently this tool is only available on Web. - -### Installing the extension - -To use the extension, simply install it from your favorite web browser store: - -- [Google Chrome](https://chromewebstore.google.com/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd?pli=1) -- [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/redux-devtools/nnkgneoiohoecpdiaponcejilbhhikei) -- [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/reduxdevtools/) - -After installing the extension, Onyx will automatically connect to it and start logging any updates made to the local storage. - -### Usage - -The extension interface is pretty simple, on the left sidebar you can see all the updates made to the local storage, in ascending order, and on the right pane you can see the whole the current state, payload of an action and the diff between the previous state and the current state after the action was triggered. - -The action logs use this naming convention: - -`@@INIT` - Initial action which is triggered when Onyx connects to the extension. It's payload consists of the initial state. - -`merge/` - Merge action which is triggered when `Onyx.merge()` is called. - -`mergecollection/` - Merge action which is triggered when `Onyx.mergeCollection()` is called. - -`set/` - Set action which is triggered when `Onyx.set()` is called. - -`multiset/` - Set action which is triggered when `Onyx.multiSet()` is called. - -`CLEAR` - Clear action which is triggered when `Onyx.clear()` is called. - -# Development - -`react-native` bundles source using the `metro` bundler. `metro` does not follow symlinks, so we can't use `npm link` to -link a local version of Onyx during development - -To quickly test small changes you can directly go to `node_modules/react-native-onyx` in the parent project and tweak original source code. - -To continuously work on Onyx we have to set up a task that copies content to parent project's `node_modules/react-native-onyx`: -1. Work on Onyx feature or a fix -2. Save files -3. Optional: run `npm run build` (if you're working or want to test on a non react-native project) - - `npm link` would actually work outside of `react-native` and it can be used to link Onyx locally for a web only project -4. Copy Onyx to consumer project's `node_modules/react-native-onyx` - -# Automated Tests - -There are Playwright e2e tests implemented for the web. To run them: - -- in the tests/e2e/app directory, run `npm install` -- `npm run e2e` to run the e2e tests -- or `npm run e2e-ui` to run the e2e tests in UI mode diff --git a/package/package.json b/package/package.json deleted file mode 100644 index e858346b0..000000000 --- a/package/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "react-native-onyx", - "version": "2.0.0", - "author": "Expensify, Inc.", - "homepage": "https://expensify.com", - "description": "State management for React Native", - "license": "MIT", - "private": false, - "keywords": [ - "React Native", - "React", - "Persistent storage", - "Pub/Sub" - ], - "repository": { - "type": "git", - "url": "https://github.com/Expensify/react-native-onyx.git" - }, - "bugs": { - "url": "https://github.com/Expensify/react-native-onyx/issues" - }, - "files": [ - "dist/**/*", - "API.md", - "README.md", - "LICENSE.md" - ], - "main": "dist/index.js", - "types": "dist/index.d.ts", - "scripts": { - "lint": "eslint .", - "typecheck": "tsc --noEmit", - "test": "jest", - "build": "tsc -p tsconfig.build.json && cp ./lib/*.d.ts ./dist", - "build:docs": "node buildDocs.js", - "e2e": "playwright test", - "e2e-ui": "playwright test --ui", - "prettier": "prettier --write ." - }, - "dependencies": { - "ascii-table": "0.0.9", - "fast-equals": "^4.0.3", - "underscore": "^1.13.6" - }, - "devDependencies": { - "@lwc/eslint-plugin-lwc": "^1.7.2", - "@playwright/test": "^1.38.1", - "@react-native-community/eslint-config": "^3.2.0", - "@react-native/polyfills": "^2.0.0", - "@testing-library/jest-native": "^3.4.2", - "@testing-library/react-native": "^7.0.2", - "@types/jest": "^28.1.8", - "@types/node": "^20.11.5", - "@types/react": "^18.2.14", - "@types/react-dom": "^18.2.18", - "@types/react-native": "^0.70.0", - "@typescript-eslint/eslint-plugin": "^6.19.0", - "@typescript-eslint/parser": "^6.19.0", - "eslint": "^8.56.0", - "eslint-config-expensify": "^2.0.43", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-react": "^7.31.10", - "idb-keyval": "^6.2.1", - "jest": "^26.5.2", - "jest-cli": "^26.5.2", - "jsdoc-to-markdown": "^7.1.0", - "metro-react-native-babel-preset": "^0.77.0", - "prettier": "^2.8.8", - "prop-types": "^15.7.2", - "react": "18.2.0", - "react-dom": "^18.2.0", - "react-native": "0.71.2", - "react-native-device-info": "^10.3.0", - "react-native-performance": "^2.0.0", - "react-native-quick-sqlite": "^8.0.6", - "react-test-renderer": "18.1.0", - "type-fest": "^3.12.0", - "typescript": "^5.3.3" - }, - "peerDependencies": { - "idb-keyval": "^6.2.1", - "react": ">=18.1.0", - "react-dom": ">=18.1.0", - "react-native-device-info": "^10.3.0", - "react-native-performance": "^5.1.0", - "react-native-quick-sqlite": "^8.0.0-beta.2" - }, - "peerDependenciesMeta": { - "idb-keyval": { - "optional": true - }, - "react-native-performance": { - "optional": true - }, - "react-native-quick-sqlite": { - "optional": true - }, - "react-native-device-info": { - "optional": true - } - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - }, - "sideEffects": false -} diff --git a/react-native-onyx-2.0.0.tgz b/react-native-onyx-2.0.0.tgz deleted file mode 100644 index d524e31dcd795a9ee733aeea900674b57ab3bdd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64024 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 zᝀ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

ov>;) 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 From 614ae90d6e23db766b2083198a77ee0f712b960e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 23 Jan 2024 17:58:16 +0100 Subject: [PATCH 16/18] Fix tests --- README.md | 4 ++-- tests/unit/webMetricsTest.js | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d012e5cf7..2ac5a6d70 100644 --- a/README.md +++ b/README.md @@ -292,13 +292,13 @@ function signOut() { `Onyx.get`, `Onyx.set`, and the rest of the API accesses the underlying storage differently depending on the platform -Under the hood storage access calls are delegated to a [`StorageProvider`](lib/storage/index.web.js) +Under the hood storage access calls are delegated to a [`StorageProvider`](lib/storage/index.js) Some platforms (like web and desktop) might use the same storage provider If a platform needs to use a separate library (like using MMVK for react-native) it should be added in the following way: 1. Create a `StorageProvider.js` at [lib/storage/providers](lib/storage/providers) Reference an existing [StorageProvider](lib/storage/providers/AsyncStorage.js) for the interface that has to be implemented -2. Update the factory at [lib/storage/index.web.js](lib/storage/index.web.js) and [lib/storage/index.native.js](lib/storage/index.native.js) to return the newly created Provider for the desired Platform(s) +2. Update the factory at [lib/storage/index.js](lib/storage/index.js) and [lib/storage/index.native.js](lib/storage/index.native.js) to return the newly created Provider for the desired Platform(s) # API Reference diff --git a/tests/unit/webMetricsTest.js b/tests/unit/webMetricsTest.js index 1dcd0b541..63fb6314d 100644 --- a/tests/unit/webMetricsTest.js +++ b/tests/unit/webMetricsTest.js @@ -3,7 +3,8 @@ describe('decorateWithMetrics', () => { beforeEach(() => { jest.resetModules(); - const metrics = require('../../lib/metrics'); + // eslint-disable-next-line import/extensions + const metrics = require('../../lib/metrics/index.js'); decorateWithMetrics = metrics.decorateWithMetrics; }); From 2f86e2a833119b9050246dff3206d28c0d459866 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 24 Jan 2024 14:42:05 +0100 Subject: [PATCH 17/18] Create typecheck workflow and update lint workflow --- .github/workflows/lint.yml | 9 +++++++++ .github/workflows/typecheck.yml | 25 +++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .github/workflows/typecheck.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3b5075116..502ccf407 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -22,3 +22,12 @@ jobs: - run: npm run lint env: CI: true + + - name: Verify there's no Prettier diff + run: | + npm run prettier -- --loglevel silent + if ! git diff --name-only --exit-code; then + # shellcheck disable=SC2016 + echo 'Error: Prettier diff detected! Please run `npm run prettier` and commit the changes.' + exit 1 + fi diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml new file mode 100644 index 000000000..73934b7a0 --- /dev/null +++ b/.github/workflows/typecheck.yml @@ -0,0 +1,25 @@ +name: TypeScript Checks + +on: + pull_request: + types: [opened, synchronize] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + cache: npm + cache-dependency-path: package-lock.json + + - run: npm ci + + - name: Type check with TypeScript + run: npm run typecheck + env: + CI: true From b85c6ab97c4a3de1c3f805ace619d018c7924384 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 24 Jan 2024 14:43:28 +0100 Subject: [PATCH 18/18] Export more onyx types --- lib/index.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/index.d.ts b/lib/index.d.ts index 2a92b2d4d..60f9ed284 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,6 +1,6 @@ import Onyx, {OnyxUpdate, ConnectOptions} from './Onyx'; -import {CustomTypeOptions, OnyxCollection, OnyxEntry, NullishDeep, KeyValueMapping} from './types'; +import {CustomTypeOptions, OnyxCollection, OnyxEntry, NullishDeep, KeyValueMapping, OnyxKey, Selector} from './types'; import withOnyx from './withOnyx'; export default Onyx; -export {CustomTypeOptions, OnyxCollection, OnyxEntry, OnyxUpdate, withOnyx, ConnectOptions, NullishDeep, KeyValueMapping}; +export {CustomTypeOptions, OnyxCollection, OnyxEntry, OnyxUpdate, withOnyx, ConnectOptions, NullishDeep, KeyValueMapping, OnyxKey, Selector};