From bedac626d14973040333b01e5cdbd8222bea57fd Mon Sep 17 00:00:00 2001
From: mrjvs
Date: Sun, 6 Mar 2022 13:42:27 +0100
Subject: [PATCH] fix react warnings + add linting
---
.eslintrc.js | 40 ++++
craco.config.js | 9 -
package.json | 14 +-
src/hooks/useLoading.ts | 55 +++---
src/views/MediaView.tsx | 2 +-
src/views/SearchView.tsx | 18 +-
src/views/notfound/NotFoundChecks.tsx | 10 +-
src/views/notfound/NotFoundView.tsx | 10 +-
yarn.lock | 252 +++++++++++++++++++++++++-
9 files changed, 347 insertions(+), 63 deletions(-)
create mode 100644 .eslintrc.js
delete mode 100644 craco.config.js
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..be19d18c
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,40 @@
+module.exports = {
+ extends: [
+ "airbnb",
+ "airbnb/hooks",
+ "plugin:@typescript-eslint/recommended",
+ "prettier",
+ ],
+ settings: {
+ "import/resolver": {
+ typescript: {},
+ },
+ },
+ parser: "@typescript-eslint/parser",
+ parserOptions: {
+ project: "./tsconfig.json",
+ tsconfigRootDir: "./",
+ },
+ plugins: ["@typescript-eslint", "import"],
+ env: {
+ browser: true,
+ },
+ rules: {
+ "react/jsx-uses-react": "off",
+ "react/react-in-jsx-scope": "off",
+ "react/require-default-props": "off",
+ "react/destructuring-assignment": "off",
+ "react/jsx-filename-extension": [
+ "error",
+ { extensions: [".js", ".tsx", ".jsx"] },
+ ],
+ "import/extensions": [
+ "error",
+ "ignorePackages",
+ {
+ ts: "never",
+ tsx: "never",
+ },
+ ],
+ },
+};
diff --git a/craco.config.js b/craco.config.js
deleted file mode 100644
index aec99bf0..00000000
--- a/craco.config.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const path = require(`path`);
-
-module.exports = {
- webpack: {
- alias: {
- "@": path.resolve(__dirname, "src/"),
- },
- },
-};
diff --git a/package.json b/package.json
index 0050eeaf..898104db 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
- "eject": "react-scripts eject"
+ "lint": "eslint src/**"
},
"eslintConfig": {
"extends": [
@@ -49,11 +49,21 @@
"@types/react": "^17.0.39",
"@types/react-dom": "^17.0.11",
"@types/react-router-dom": "^5.3.3",
+ "@typescript-eslint/eslint-plugin": "^5.13.0",
+ "@typescript-eslint/parser": "^5.13.0",
"autoprefixer": "^10.4.2",
+ "eslint": "^8.10.0",
+ "eslint-config-airbnb": "19.0.4",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-import-resolver-typescript": "^2.5.0",
+ "eslint-plugin-import": "^2.25.4",
+ "eslint-plugin-jsx-a11y": "6.5.1",
+ "eslint-plugin-react": "7.28.0",
+ "eslint-plugin-react-hooks": "4.3.0",
"postcss": "^8.4.6",
"prettier": "^2.5.1",
"prettier-plugin-tailwindcss": "^0.1.7",
"tailwindcss": "^3.0.20",
- "typescript": "^4.5.5"
+ "typescript": "^4.6.2"
}
}
diff --git a/src/hooks/useLoading.ts b/src/hooks/useLoading.ts
index cd87dafe..a2bd51e5 100644
--- a/src/hooks/useLoading.ts
+++ b/src/hooks/useLoading.ts
@@ -1,4 +1,4 @@
-import React, { useState } from "react";
+import React, { useMemo, useRef, useState } from "react";
export function useLoading Promise>(
action: T
@@ -6,34 +6,41 @@ export function useLoading Promise>(
const [loading, setLoading] = useState(false);
const [success, setSuccess] = useState(false);
const [error, setError] = useState(undefined);
- let isMounted = true;
+ let isMounted = useRef(true);
+
+ // we want action to be memoized forever
+ const actionMemo = useMemo(() => action, []); // eslint-disable-line react-hooks/exhaustive-deps
React.useEffect(() => {
- isMounted = true;
+ isMounted.current = true;
return () => {
- isMounted = false;
+ isMounted.current = false;
};
}, []);
- const doAction = async (...args: Parameters) => {
- setLoading(true);
- setSuccess(false);
- setError(undefined);
- return new Promise((resolve) => {
- action(...args)
- .then((v) => {
- if (!isMounted) return resolve(undefined);
- setSuccess(true);
- resolve(v);
- })
- .catch((err) => {
- if (isMounted) {
- setError(err);
- setSuccess(false);
- }
- resolve(undefined);
- });
- }).finally(() => isMounted && setLoading(false));
- };
+ const doAction = useMemo(
+ () =>
+ async (...args: Parameters) => {
+ setLoading(true);
+ setSuccess(false);
+ setError(undefined);
+ return new Promise((resolve) => {
+ actionMemo(...args)
+ .then((v) => {
+ if (!isMounted.current) return resolve(undefined);
+ setSuccess(true);
+ resolve(v);
+ })
+ .catch((err) => {
+ if (isMounted) {
+ setError(err);
+ setSuccess(false);
+ }
+ resolve(undefined);
+ });
+ }).finally(() => isMounted.current && setLoading(false));
+ },
+ [actionMemo]
+ );
return [doAction, loading, error, success];
}
diff --git a/src/views/MediaView.tsx b/src/views/MediaView.tsx
index d0957fcd..24025658 100644
--- a/src/views/MediaView.tsx
+++ b/src/views/MediaView.tsx
@@ -125,7 +125,7 @@ function MediaViewContent(props: { portable: MWPortableMedia }) {
setMedia(resultData[1]);
}
})();
- }, [mediaPortable, setStreamUrl]);
+ }, [mediaPortable, setStreamUrl, fetchAllData]);
let content: ReactNode;
if (loading) content = ;
diff --git a/src/views/SearchView.tsx b/src/views/SearchView.tsx
index 72da0c41..34f383fc 100644
--- a/src/views/SearchView.tsx
+++ b/src/views/SearchView.tsx
@@ -47,9 +47,9 @@ function SearchSuffix(props: {
) : null}
{props.resultsSize > 0 ? (
- That's all we have!
+ That's all we have!
) : (
- We couldn't find anything!
+ We couldn't find anything!
)}
) : null}
@@ -77,14 +77,14 @@ function SearchResultsView({
);
useEffect(() => {
- if (searchQuery.searchQuery !== "") runSearch(searchQuery);
- }, [searchQuery]);
+ async function runSearch(query: MWQuery) {
+ const results = await runSearchQuery(query);
+ if (!results) return;
+ setResults(results);
+ }
- async function runSearch(query: MWQuery) {
- const results = await runSearchQuery(query);
- if (!results) return;
- setResults(results);
- }
+ if (searchQuery.searchQuery !== "") runSearch(searchQuery);
+ }, [searchQuery, runSearchQuery]);
return (
diff --git a/src/views/notfound/NotFoundChecks.tsx b/src/views/notfound/NotFoundChecks.tsx
index 8bc4cd04..a26018c8 100644
--- a/src/views/notfound/NotFoundChecks.tsx
+++ b/src/views/notfound/NotFoundChecks.tsx
@@ -1,16 +1,18 @@
import { getProviderMetadata, MWPortableMedia } from "providers";
-import { ReactNode } from "react";
+import { ReactElement } from "react";
import { NotFoundMedia, NotFoundProvider } from "./NotFoundView";
export interface NotFoundChecksProps {
portable: MWPortableMedia | undefined;
- children?: ReactNode;
+ children?: ReactElement;
}
/*
** Component that only renders children if the passed-in portable is fully correct
*/
-export function NotFoundChecks(props: NotFoundChecksProps) {
+export function NotFoundChecks(
+ props: NotFoundChecksProps
+): ReactElement | null {
const providerMeta = props.portable
? getProviderMetadata(props.portable.providerId)
: undefined;
@@ -23,5 +25,5 @@ export function NotFoundChecks(props: NotFoundChecksProps) {
return
;
}
- return <>{props.children}>;
+ return props.children || null;
}
diff --git a/src/views/notfound/NotFoundView.tsx b/src/views/notfound/NotFoundView.tsx
index fd6f1831..89490246 100644
--- a/src/views/notfound/NotFoundView.tsx
+++ b/src/views/notfound/NotFoundView.tsx
@@ -23,10 +23,10 @@ export function NotFoundMedia() {
icon={Icons.EYE_SLASH}
className="text-bink-600 mb-6 text-xl"
/>
-
Couldn't find that media
+
Couldn't find that media
- We couldn't find the media you requested. Either it's been removed or
- you tampered with the URL
+ We couldn't find the media you requested. Either it's been
+ removed or you tampered with the URL
@@ -57,10 +57,10 @@ export function NotFoundPage() {
icon={Icons.EYE_SLASH}
className="text-bink-600 mb-6 text-xl"
/>
- Couldn't find that page
+ Couldn't find that page
We looked everywhere: under the bins, in the closet, behind the proxy
- but ultimately couldn't find the page you are looking for.
+ but ultimately couldn't find the page you are looking for.
diff --git a/yarn.lock b/yarn.lock
index 9cf54e9d..d1098ecf 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1254,6 +1254,21 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@eslint/eslintrc@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.0.tgz#7ce1547a5c46dfe56e1e45c3c9ed18038c721c6a"
+ integrity sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.3.1"
+ globals "^13.9.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
"@humanwhocodes/config-array@^0.9.2":
version "0.9.3"
resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz"
@@ -2083,6 +2098,21 @@
dependencies:
"@types/yargs-parser" "*"
+"@typescript-eslint/eslint-plugin@^5.13.0":
+ version "5.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz#2809052b85911ced9c54a60dac10e515e9114497"
+ integrity sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "5.13.0"
+ "@typescript-eslint/type-utils" "5.13.0"
+ "@typescript-eslint/utils" "5.13.0"
+ debug "^4.3.2"
+ functional-red-black-tree "^1.0.1"
+ ignore "^5.1.8"
+ regexpp "^3.2.0"
+ semver "^7.3.5"
+ tsutils "^3.21.0"
+
"@typescript-eslint/eslint-plugin@^5.5.0":
version "5.11.0"
resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz"
@@ -2105,6 +2135,16 @@
dependencies:
"@typescript-eslint/utils" "5.11.0"
+"@typescript-eslint/parser@^5.13.0":
+ version "5.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.13.0.tgz#0394ed8f2f849273c0bf4b811994d177112ced5c"
+ integrity sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==
+ dependencies:
+ "@typescript-eslint/scope-manager" "5.13.0"
+ "@typescript-eslint/types" "5.13.0"
+ "@typescript-eslint/typescript-estree" "5.13.0"
+ debug "^4.3.2"
+
"@typescript-eslint/parser@^5.5.0":
version "5.11.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz"
@@ -2123,6 +2163,14 @@
"@typescript-eslint/types" "5.11.0"
"@typescript-eslint/visitor-keys" "5.11.0"
+"@typescript-eslint/scope-manager@5.13.0":
+ version "5.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz#cf6aff61ca497cb19f0397eea8444a58f46156b6"
+ integrity sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==
+ dependencies:
+ "@typescript-eslint/types" "5.13.0"
+ "@typescript-eslint/visitor-keys" "5.13.0"
+
"@typescript-eslint/type-utils@5.11.0":
version "5.11.0"
resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz"
@@ -2132,11 +2180,25 @@
debug "^4.3.2"
tsutils "^3.21.0"
+"@typescript-eslint/type-utils@5.13.0":
+ version "5.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz#b0efd45c85b7bab1125c97b752cab3a86c7b615d"
+ integrity sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==
+ dependencies:
+ "@typescript-eslint/utils" "5.13.0"
+ debug "^4.3.2"
+ tsutils "^3.21.0"
+
"@typescript-eslint/types@5.11.0":
version "5.11.0"
resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz"
integrity sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==
+"@typescript-eslint/types@5.13.0":
+ version "5.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.13.0.tgz#da1de4ae905b1b9ff682cab0bed6b2e3be9c04e5"
+ integrity sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==
+
"@typescript-eslint/typescript-estree@5.11.0":
version "5.11.0"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz"
@@ -2150,6 +2212,19 @@
semver "^7.3.5"
tsutils "^3.21.0"
+"@typescript-eslint/typescript-estree@5.13.0":
+ version "5.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz#b37c07b748ff030a3e93d87c842714e020b78141"
+ integrity sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==
+ dependencies:
+ "@typescript-eslint/types" "5.13.0"
+ "@typescript-eslint/visitor-keys" "5.13.0"
+ debug "^4.3.2"
+ globby "^11.0.4"
+ is-glob "^4.0.3"
+ semver "^7.3.5"
+ tsutils "^3.21.0"
+
"@typescript-eslint/utils@5.11.0", "@typescript-eslint/utils@^5.10.2":
version "5.11.0"
resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz"
@@ -2162,6 +2237,18 @@
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
+"@typescript-eslint/utils@5.13.0":
+ version "5.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.13.0.tgz#2328feca700eb02837298339a2e49c46b41bd0af"
+ integrity sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==
+ dependencies:
+ "@types/json-schema" "^7.0.9"
+ "@typescript-eslint/scope-manager" "5.13.0"
+ "@typescript-eslint/types" "5.13.0"
+ "@typescript-eslint/typescript-estree" "5.13.0"
+ eslint-scope "^5.1.1"
+ eslint-utils "^3.0.0"
+
"@typescript-eslint/visitor-keys@5.11.0":
version "5.11.0"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz"
@@ -2170,6 +2257,14 @@
"@typescript-eslint/types" "5.11.0"
eslint-visitor-keys "^3.0.0"
+"@typescript-eslint/visitor-keys@5.13.0":
+ version "5.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz#f45ff55bcce16403b221ac9240fbeeae4764f0fd"
+ integrity sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==
+ dependencies:
+ "@typescript-eslint/types" "5.13.0"
+ eslint-visitor-keys "^3.0.0"
+
"@webassemblyjs/ast@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz"
@@ -3175,7 +3270,7 @@ concat-map@0.0.1:
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-confusing-browser-globals@^1.0.11:
+confusing-browser-globals@^1.0.10, confusing-browser-globals@^1.0.11:
version "1.0.11"
resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz"
integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==
@@ -3530,7 +3625,7 @@ debug@^3.1.1, debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@^4.3.2:
+debug@^4.3.1, debug@^4.3.2:
version "4.3.3"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
@@ -3954,6 +4049,30 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
+eslint-config-airbnb-base@^15.0.0:
+ version "15.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236"
+ integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==
+ dependencies:
+ confusing-browser-globals "^1.0.10"
+ object.assign "^4.1.2"
+ object.entries "^1.1.5"
+ semver "^6.3.0"
+
+eslint-config-airbnb@19.0.4:
+ version "19.0.4"
+ resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3"
+ integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==
+ dependencies:
+ eslint-config-airbnb-base "^15.0.0"
+ object.assign "^4.1.2"
+ object.entries "^1.1.5"
+
+eslint-config-prettier@^8.5.0:
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1"
+ integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==
+
eslint-config-react-app@^7.0.0:
version "7.0.0"
resolved "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz"
@@ -3982,6 +4101,17 @@ eslint-import-resolver-node@^0.3.6:
debug "^3.2.7"
resolve "^1.20.0"
+eslint-import-resolver-typescript@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz#07661966b272d14ba97f597b51e1a588f9722f0a"
+ integrity sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==
+ dependencies:
+ debug "^4.3.1"
+ glob "^7.1.7"
+ is-glob "^4.0.1"
+ resolve "^1.20.0"
+ tsconfig-paths "^3.9.0"
+
eslint-module-utils@^2.7.2:
version "2.7.3"
resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz"
@@ -4017,6 +4147,25 @@ eslint-plugin-import@^2.25.3:
resolve "^1.20.0"
tsconfig-paths "^3.12.0"
+eslint-plugin-import@^2.25.4:
+ version "2.25.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1"
+ integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==
+ dependencies:
+ array-includes "^3.1.4"
+ array.prototype.flat "^1.2.5"
+ debug "^2.6.9"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.6"
+ eslint-module-utils "^2.7.2"
+ has "^1.0.3"
+ is-core-module "^2.8.0"
+ is-glob "^4.0.3"
+ minimatch "^3.0.4"
+ object.values "^1.1.5"
+ resolve "^1.20.0"
+ tsconfig-paths "^3.12.0"
+
eslint-plugin-jest@^25.3.0:
version "25.7.0"
resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz"
@@ -4024,7 +4173,7 @@ eslint-plugin-jest@^25.3.0:
dependencies:
"@typescript-eslint/experimental-utils" "^5.0.0"
-eslint-plugin-jsx-a11y@^6.5.1:
+eslint-plugin-jsx-a11y@6.5.1, eslint-plugin-jsx-a11y@^6.5.1:
version "6.5.1"
resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz"
integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==
@@ -4042,12 +4191,12 @@ eslint-plugin-jsx-a11y@^6.5.1:
language-tags "^1.0.5"
minimatch "^3.0.4"
-eslint-plugin-react-hooks@^4.3.0:
+eslint-plugin-react-hooks@4.3.0, eslint-plugin-react-hooks@^4.3.0:
version "4.3.0"
resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz"
integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==
-eslint-plugin-react@^7.27.1:
+eslint-plugin-react@7.28.0, eslint-plugin-react@^7.27.1:
version "7.28.0"
resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz"
integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==
@@ -4090,6 +4239,14 @@ eslint-scope@^7.1.0:
esrecurse "^4.3.0"
estraverse "^5.2.0"
+eslint-scope@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+ integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
eslint-utils@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz"
@@ -4107,6 +4264,11 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.2
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz"
integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==
+eslint-visitor-keys@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+ integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
+
eslint-webpack-plugin@^3.1.1:
version "3.1.1"
resolved "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz"
@@ -4118,6 +4280,47 @@ eslint-webpack-plugin@^3.1.1:
normalize-path "^3.0.0"
schema-utils "^3.1.1"
+eslint@^8.10.0:
+ version "8.10.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.10.0.tgz#931be395eb60f900c01658b278e05b6dae47199d"
+ integrity sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==
+ dependencies:
+ "@eslint/eslintrc" "^1.2.0"
+ "@humanwhocodes/config-array" "^0.9.2"
+ ajv "^6.10.0"
+ 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.1.1"
+ eslint-utils "^3.0.0"
+ eslint-visitor-keys "^3.3.0"
+ espree "^9.3.1"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^6.0.1"
+ globals "^13.6.0"
+ ignore "^5.2.0"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ regexpp "^3.2.0"
+ strip-ansi "^6.0.1"
+ strip-json-comments "^3.1.0"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
eslint@^8.3.0:
version "8.8.0"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz"
@@ -4168,6 +4371,15 @@ espree@^9.2.0, espree@^9.3.0:
acorn-jsx "^5.3.1"
eslint-visitor-keys "^3.1.0"
+espree@^9.3.1:
+ version "9.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd"
+ integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==
+ dependencies:
+ acorn "^8.7.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^3.3.0"
+
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
@@ -4609,6 +4821,18 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
+glob@^7.1.7:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
+ integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
global-modules@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz"
@@ -8566,6 +8790,16 @@ tsconfig-paths@^3.12.0:
minimist "^1.2.0"
strip-bom "^3.0.0"
+tsconfig-paths@^3.9.0:
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.13.0.tgz#f3e9b8f6876698581d94470c03c95b3a48c0e3d7"
+ integrity sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ minimist "^1.2.0"
+ strip-bom "^3.0.0"
+
tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
@@ -8632,10 +8866,10 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
-typescript@^4.5.5:
- version "4.5.5"
- resolved "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz"
- integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
+typescript@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4"
+ integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==
unbox-primitive@^1.0.1:
version "1.0.1"