From 8e2e5f9b85dcfe8e77ce9f0211cddda63db871b4 Mon Sep 17 00:00:00 2001
From: cascandaliato <8927157+cascandaliato@users.noreply.github.com>
Date: Tue, 3 Nov 2020 18:49:18 +0100
Subject: [PATCH] feat(api): add api endpoint and display results in main page
---
.gitignore | 2 +
.prettierrc.json | 1 +
next-env.d.ts | 2 +
next.config.js | 3 +
package.json | 11 +-
pages/_app.js | 7 -
pages/_app.tsx | 8 +
pages/api/hello.js | 6 -
pages/api/users/[user].ts | 92 ++++++++++++
pages/index.js | 65 --------
pages/index.tsx | 87 +++++++++++
public/style-flat-square.svg | 1 +
public/style-flat.svg | 1 +
public/style-for-the-badge.svg | 1 +
public/style-plastic.svg | 1 +
tsconfig.json | 19 +++
yarn.lock | 267 ++++++++++++++++++++++++++++++++-
17 files changed, 492 insertions(+), 82 deletions(-)
create mode 100644 .prettierrc.json
create mode 100644 next-env.d.ts
create mode 100644 next.config.js
delete mode 100644 pages/_app.js
create mode 100644 pages/_app.tsx
delete mode 100644 pages/api/hello.js
create mode 100644 pages/api/users/[user].ts
delete mode 100644 pages/index.js
create mode 100644 pages/index.tsx
create mode 100644 public/style-flat-square.svg
create mode 100644 public/style-flat.svg
create mode 100644 public/style-for-the-badge.svg
create mode 100644 public/style-plastic.svg
create mode 100644 tsconfig.json
diff --git a/.gitignore b/.gitignore
index 1437c53..37717b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,5 @@ yarn-error.log*
# vercel
.vercel
+
+.vscode
\ No newline at end of file
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..451cbbb
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1 @@
+{}
diff --git a/next-env.d.ts b/next-env.d.ts
new file mode 100644
index 0000000..7b7aa2c
--- /dev/null
+++ b/next-env.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/next.config.js b/next.config.js
new file mode 100644
index 0000000..da1bb77
--- /dev/null
+++ b/next.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ reactStrictMode: true,
+};
diff --git a/package.json b/package.json
index ce81d7f..cf13239 100644
--- a/package.json
+++ b/package.json
@@ -8,8 +8,17 @@
"start": "next start"
},
"dependencies": {
+ "@material-ui/core": "^4.11.0",
+ "axios": "^0.21.0",
"next": "10.0.0",
"react": "17.0.1",
- "react-dom": "17.0.1"
+ "react-dom": "17.0.1",
+ "rxjs": "^6.6.3"
+ },
+ "devDependencies": {
+ "@types/node": "^14.14.6",
+ "@types/react": "^16.9.55",
+ "prettier": "^2.1.2",
+ "typescript": "^4.0.5"
}
}
diff --git a/pages/_app.js b/pages/_app.js
deleted file mode 100644
index 1e1cec9..0000000
--- a/pages/_app.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import '../styles/globals.css'
-
-function MyApp({ Component, pageProps }) {
- return
-}
-
-export default MyApp
diff --git a/pages/_app.tsx b/pages/_app.tsx
new file mode 100644
index 0000000..b8b53d2
--- /dev/null
+++ b/pages/_app.tsx
@@ -0,0 +1,8 @@
+import "../styles/globals.css";
+import { AppProps } from "next/app";
+
+const MyApp = ({ Component, pageProps }: AppProps) => (
+
+);
+
+export default MyApp;
diff --git a/pages/api/hello.js b/pages/api/hello.js
deleted file mode 100644
index 5b77ec0..0000000
--- a/pages/api/hello.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
-
-export default (req, res) => {
- res.statusCode = 200
- res.json({ name: 'John Doe' })
-}
diff --git a/pages/api/users/[user].ts b/pages/api/users/[user].ts
new file mode 100644
index 0000000..1deffc1
--- /dev/null
+++ b/pages/api/users/[user].ts
@@ -0,0 +1,92 @@
+import { NextApiRequest, NextApiResponse } from "next";
+import axios from "axios";
+
+interface LeetCodeCount {
+ difficulty: string;
+ count: number;
+}
+
+interface LeetCodeResponse {
+ data: {
+ data: {
+ allQuestionsCount: LeetCodeCount[];
+ matchedUser: {
+ profile: { ranking: number };
+ submitStats: {
+ acSubmissionNum: LeetCodeCount[];
+ };
+ };
+ };
+ };
+}
+
+interface Output {
+ error: null | string;
+ ranking: number | string;
+ solved: number | string;
+ solvedOverTotal: string;
+ solvedPercentage: string;
+}
+
+const query = (user: string) =>
+ `{
+ "operationName": "getUserProfile",
+ "variables": { "username" : "${user}" },
+ "query": "query getUserProfile($username: String!) { allQuestionsCount { difficulty count } matchedUser(username: $username) { profile { starRating ranking } submitStats { acSubmissionNum { difficulty count } } } }"
+}`;
+
+const genericErrorMessage =
+ "error: reach out to github.com/cascandaliato/leetcode-badge";
+
+export default async (req: NextApiRequest, res: NextApiResponse) => {
+ const {
+ query: { user },
+ } = req;
+
+ let output: Output;
+
+ try {
+ const {
+ data: { data },
+ }: LeetCodeResponse = await axios.post(
+ "https://leetcode.com/graphql",
+ query(user as string),
+ {
+ headers: {
+ "content-type": "application/json",
+ },
+ }
+ );
+
+ if (!data.matchedUser) throw new Error("User not found");
+
+ const ranking = data.matchedUser.profile.ranking;
+
+ const solved = data.matchedUser.submitStats.acSubmissionNum.filter(
+ ({ difficulty }) => difficulty === "All"
+ )[0].count;
+
+ const total = data.allQuestionsCount.filter(
+ ({ difficulty }) => difficulty === "All"
+ )[0].count;
+
+ output = {
+ error: null,
+ ranking,
+ solved,
+ solvedOverTotal: `${solved}/${total}`,
+ solvedPercentage: `${((solved / total) * 100).toFixed(1)}%`,
+ };
+ } catch ({ message }) {
+ output = {
+ error: message,
+ ranking: genericErrorMessage,
+ solved: genericErrorMessage,
+ solvedOverTotal: genericErrorMessage,
+ solvedPercentage: genericErrorMessage,
+ };
+ }
+
+ res.setHeader("Content-Type", "application/json");
+ res.status(200).json(output);
+};
diff --git a/pages/index.js b/pages/index.js
deleted file mode 100644
index 43956d9..0000000
--- a/pages/index.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import Head from 'next/head'
-import styles from '../styles/Home.module.css'
-
-export default function Home() {
- return (
-
-
-
Create Next App
-
-
-
-
-
-
-
- Get started by editing{' '}
- pages/index.js
-
-
-
-
-
-
-
- )
-}
diff --git a/pages/index.tsx b/pages/index.tsx
new file mode 100644
index 0000000..bfe246f
--- /dev/null
+++ b/pages/index.tsx
@@ -0,0 +1,87 @@
+import Head from "next/head";
+import { useEffect, useState, FC } from "react";
+import { Subject, asyncScheduler } from "rxjs";
+import { throttleTime } from "rxjs/operators";
+import axios from "axios";
+
+interface LeetCodeStats {
+ error: null | string;
+ ranking: number | string;
+ solved: number | string;
+ solvedOverTotal: string;
+ solvedPercentage: string;
+}
+
+const defaultStats: LeetCodeStats = {
+ error: null,
+ ranking: 0,
+ solved: 0,
+ solvedOverTotal: "0/0",
+ solvedPercentage: "0.0%",
+};
+
+const Home: FC = () => {
+ const [subject] = useState(() => new Subject());
+ const [stats, setStats] = useState(defaultStats);
+ const [username, setUsername] = useState("");
+
+ const getLeetCodeStats = (u: string) => {
+ axios
+ .get(`/api/users/${u}`)
+ .then(({ data }) => data)
+ .then(setStats)
+ .catch(() => setStats(defaultStats));
+ };
+
+ useEffect(() => {
+ const subscription = subject
+ .pipe(
+ throttleTime(400, asyncScheduler, { leading: true, trailing: true })
+ )
+ .subscribe(getLeetCodeStats);
+ return () => subscription.unsubscribe();
+ }, []);
+
+ return (
+
+
+ Create Next App
+
+
+
+ {JSON.stringify(stats, null, 2)}
+ {
+ setUsername(value);
+ subject.next(value);
+ }}
+ />
+
+
+ {/* */}
+
+ );
+};
+
+export default Home;
diff --git a/public/style-flat-square.svg b/public/style-flat-square.svg
new file mode 100644
index 0000000..c6a0910
--- /dev/null
+++ b/public/style-flat-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/style-flat.svg b/public/style-flat.svg
new file mode 100644
index 0000000..5b709a1
--- /dev/null
+++ b/public/style-flat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/style-for-the-badge.svg b/public/style-for-the-badge.svg
new file mode 100644
index 0000000..d682d9a
--- /dev/null
+++ b/public/style-for-the-badge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/style-plastic.svg b/public/style-plastic.svg
new file mode 100644
index 0000000..1aaa038
--- /dev/null
+++ b/public/style-plastic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..4fa631c
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve"
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
+ "exclude": ["node_modules"]
+}
diff --git a/yarn.lock b/yarn.lock
index c1a6fbe..a6c7a86 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1018,7 +1018,7 @@
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/runtime@^7.8.4":
+"@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740"
integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==
@@ -1076,6 +1076,11 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
+"@emotion/hash@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+ integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
"@hapi/accept@5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10"
@@ -1096,6 +1101,70 @@
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6"
integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==
+"@material-ui/core@^4.11.0":
+ version "4.11.0"
+ resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.0.tgz#b69b26e4553c9e53f2bfaf1053e216a0af9be15a"
+ integrity sha512-bYo9uIub8wGhZySHqLQ833zi4ZML+XCBE1XwJ8EuUVSpTWWG57Pm+YugQToJNFsEyiKFhPh8DPD0bgupz8n01g==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ "@material-ui/styles" "^4.10.0"
+ "@material-ui/system" "^4.9.14"
+ "@material-ui/types" "^5.1.0"
+ "@material-ui/utils" "^4.10.2"
+ "@types/react-transition-group" "^4.2.0"
+ clsx "^1.0.4"
+ hoist-non-react-statics "^3.3.2"
+ popper.js "1.16.1-lts"
+ prop-types "^15.7.2"
+ react-is "^16.8.0"
+ react-transition-group "^4.4.0"
+
+"@material-ui/styles@^4.10.0":
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.10.0.tgz#2406dc23aa358217aa8cc772e6237bd7f0544071"
+ integrity sha512-XPwiVTpd3rlnbfrgtEJ1eJJdFCXZkHxy8TrdieaTvwxNYj42VnnCyFzxYeNW9Lhj4V1oD8YtQ6S5Gie7bZDf7Q==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ "@emotion/hash" "^0.8.0"
+ "@material-ui/types" "^5.1.0"
+ "@material-ui/utils" "^4.9.6"
+ clsx "^1.0.4"
+ csstype "^2.5.2"
+ hoist-non-react-statics "^3.3.2"
+ jss "^10.0.3"
+ jss-plugin-camel-case "^10.0.3"
+ jss-plugin-default-unit "^10.0.3"
+ jss-plugin-global "^10.0.3"
+ jss-plugin-nested "^10.0.3"
+ jss-plugin-props-sort "^10.0.3"
+ jss-plugin-rule-value-function "^10.0.3"
+ jss-plugin-vendor-prefixer "^10.0.3"
+ prop-types "^15.7.2"
+
+"@material-ui/system@^4.9.14":
+ version "4.9.14"
+ resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.14.tgz#4b00c48b569340cefb2036d0596b93ac6c587a5f"
+ integrity sha512-oQbaqfSnNlEkXEziDcJDDIy8pbvwUmZXWNqlmIwDqr/ZdCK8FuV3f4nxikUh7hvClKV2gnQ9djh5CZFTHkZj3w==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ "@material-ui/utils" "^4.9.6"
+ csstype "^2.5.2"
+ prop-types "^15.7.2"
+
+"@material-ui/types@^5.1.0":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2"
+ integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==
+
+"@material-ui/utils@^4.10.2", "@material-ui/utils@^4.9.6":
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.10.2.tgz#3fd5470ca61b7341f1e0468ac8f29a70bf6df321"
+ integrity sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ prop-types "^15.7.2"
+ react-is "^16.8.0"
+
"@next/env@10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.0.tgz#eb0239062226a9c8b604d58d4a4204e26c22eb16"
@@ -1139,6 +1208,31 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
+"@types/node@^14.14.6":
+ version "14.14.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f"
+ integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+
+"@types/react-transition-group@^4.2.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d"
+ integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@^16.9.55":
+ version "16.9.55"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.55.tgz#47078587f5bfe028a23b6b46c7b94ac0d436acff"
+ integrity sha512-6KLe6lkILeRwyyy7yG9rULKJ0sXplUsl98MGoCfpteXf9sPWFWWMknDcsvubcpaTdBuxtsLF6HDUwdApZL/xIg==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^3.0.2"
+
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
@@ -1483,6 +1577,13 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+axios@^0.21.0:
+ version "0.21.0"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.0.tgz#26df088803a2350dff2c27f96fef99fe49442aca"
+ integrity sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==
+ dependencies:
+ follow-redirects "^1.10.0"
+
babel-plugin-dynamic-import-node@^2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
@@ -1927,6 +2028,11 @@ clean-stack@^2.0.0:
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+clsx@^1.0.4:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
+ integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
+
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
@@ -2159,6 +2265,14 @@ css-loader@4.3.0:
schema-utils "^2.7.1"
semver "^7.3.2"
+css-vendor@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d"
+ integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==
+ dependencies:
+ "@babel/runtime" "^7.8.3"
+ is-in-browser "^1.0.2"
+
css.escape@^1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
@@ -2195,6 +2309,16 @@ cssnano-simple@1.2.0:
cssnano-preset-simple "1.2.0"
postcss "^7.0.32"
+csstype@^2.5.2:
+ version "2.6.13"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f"
+ integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==
+
+csstype@^3.0.2:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.4.tgz#b156d7be03b84ff425c9a0a4b1e5f4da9c5ca888"
+ integrity sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==
+
cyclist@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
@@ -2309,6 +2433,14 @@ diffie-hellman@^5.0.0:
miller-rabin "^4.0.0"
randombytes "^2.0.0"
+dom-helpers@^5.0.1:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b"
+ integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==
+ dependencies:
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
+
dom-serializer@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.0.1.tgz#79695eb49af3cd8abc8d93a73da382deb1ca0795"
@@ -2659,6 +2791,11 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
+follow-redirects@^1.10.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
+ integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==
+
for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -2888,6 +3025,13 @@ hmac-drbg@^1.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
+hoist-non-react-statics@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
htmlparser2@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78"
@@ -2911,6 +3055,11 @@ https-proxy-agent@5.0.0:
agent-base "6"
debug "4"
+hyphenate-style-name@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
+ integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
+
icss-utils@^4.0.0, icss-utils@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
@@ -3103,6 +3252,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-in-browser@^1.0.2, is-in-browser@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
+ integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
+
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -3196,6 +3350,76 @@ json5@^2.1.0, json5@^2.1.2:
dependencies:
minimist "^1.2.5"
+jss-plugin-camel-case@^10.0.3:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.4.0.tgz#46c75ff7fd61c304984c21af5817823f0f501ceb"
+ integrity sha512-9oDjsQ/AgdBbMyRjc06Kl3P8lDCSEts2vYZiPZfGAxbGCegqE4RnMob3mDaBby5H9vL9gWmyyImhLRWqIkRUCw==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ hyphenate-style-name "^1.0.3"
+ jss "10.4.0"
+
+jss-plugin-default-unit@^10.0.3:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.4.0.tgz#2b10f01269eaea7f36f0f5fd1cfbfcc76ed42854"
+ integrity sha512-BYJ+Y3RUYiMEgmlcYMLqwbA49DcSWsGgHpVmEEllTC8MK5iJ7++pT9TnKkKBnNZZxTV75ycyFCR5xeLSOzVm4A==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.4.0"
+
+jss-plugin-global@^10.0.3:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.4.0.tgz#19449425a94e4e74e113139b629fd44d3577f97d"
+ integrity sha512-b8IHMJUmv29cidt3nI4bUI1+Mo5RZE37kqthaFpmxf5K7r2aAegGliAw4hXvA70ca6ckAoXMUl4SN/zxiRcRag==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.4.0"
+
+jss-plugin-nested@^10.0.3:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.4.0.tgz#017d0c02c0b6b454fd9d7d3fc33470a15eea9fd1"
+ integrity sha512-cKgpeHIxAP0ygeWh+drpLbrxFiak6zzJ2toVRi/NmHbpkNaLjTLgePmOz5+67ln3qzJiPdXXJB1tbOyYKAP4Pw==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.4.0"
+ tiny-warning "^1.0.2"
+
+jss-plugin-props-sort@^10.0.3:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.4.0.tgz#7110bf0b6049cc2080b220b506532bf0b70c0e07"
+ integrity sha512-j/t0R40/2fp+Nzt6GgHeUFnHVY2kPGF5drUVlgkcwYoHCgtBDOhTTsOfdaQFW6sHWfoQYgnGV4CXdjlPiRrzwA==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.4.0"
+
+jss-plugin-rule-value-function@^10.0.3:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.4.0.tgz#7cff4a91e84973536fa49b6ebbdbf7f339b01c82"
+ integrity sha512-w8504Cdfu66+0SJoLkr6GUQlEb8keHg8ymtJXdVHWh0YvFxDG2l/nS93SI5Gfx0fV29dO6yUugXnKzDFJxrdFQ==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ jss "10.4.0"
+ tiny-warning "^1.0.2"
+
+jss-plugin-vendor-prefixer@^10.0.3:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.4.0.tgz#2a78f3c5d57d1e024fe7ad7c41de34d04e72ecc0"
+ integrity sha512-DpF+/a+GU8hMh/948sBGnKSNfKkoHg2p9aRFUmyoyxgKjOeH9n74Ht3Yt8lOgdZsuWNJbPrvaa3U4PXKwxVpTQ==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ css-vendor "^2.0.8"
+ jss "10.4.0"
+
+jss@10.4.0, jss@^10.0.3:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/jss/-/jss-10.4.0.tgz#473a6fbe42e85441020a07e9519dac1e8a2e79ca"
+ integrity sha512-l7EwdwhsDishXzqTc3lbsbyZ83tlUl5L/Hb16pHCvZliA9lRDdNBZmHzeJHP0sxqD0t1mrMmMR8XroR12JBYzw==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ csstype "^3.0.2"
+ is-in-browser "^1.1.3"
+ tiny-warning "^1.0.2"
+
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@@ -3967,6 +4191,11 @@ pnp-webpack-plugin@1.6.4:
dependencies:
ts-pnp "^1.1.6"
+popper.js@1.16.1-lts:
+ version "1.16.1-lts"
+ resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05"
+ integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==
+
posix-character-classes@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@@ -4085,6 +4314,11 @@ prebuild-install@^5.3.5:
tunnel-agent "^0.6.0"
which-pm-runs "^1.0.0"
+prettier@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
+ integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
+
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -4100,7 +4334,7 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
-prop-types@15.7.2:
+prop-types@15.7.2, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -4210,7 +4444,7 @@ react-dom@17.0.1:
object-assign "^4.1.1"
scheduler "^0.20.1"
-react-is@16.13.1, react-is@^16.8.1:
+react-is@16.13.1, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -4220,6 +4454,16 @@ react-refresh@0.8.3:
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f"
integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==
+react-transition-group@^4.4.0:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9"
+ integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
react@17.0.1:
version "17.0.1"
resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
@@ -4425,6 +4669,13 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
+rxjs@^6.6.3:
+ version "6.6.3"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552"
+ integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==
+ dependencies:
+ tslib "^1.9.0"
+
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@@ -4952,6 +5203,11 @@ timers-browserify@^2.0.4:
dependencies:
setimmediate "^1.0.4"
+tiny-warning@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
to-arraybuffer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
@@ -5048,6 +5304,11 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+typescript@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389"
+ integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==
+
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"