From eb543e77234cb9051ec684936dab3f2afef103da Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Mon, 31 May 2021 13:11:22 -0400 Subject: [PATCH 001/271] build(cgi-bin): remove unused cold_stop endpoint --- cgi-bin/Makefile.am | 1 - cgi-bin/cold_stop | 0 2 files changed, 1 deletion(-) delete mode 100755 cgi-bin/cold_stop diff --git a/cgi-bin/Makefile.am b/cgi-bin/Makefile.am index 1528e4bd..3cfa2d7d 100644 --- a/cgi-bin/Makefile.am +++ b/cgi-bin/Makefile.am @@ -2,7 +2,6 @@ MAINTAINERCLEANFILES = Makefile.in cgibindir = $(localstatedir)/www/cgi-bin dist_cgibin_SCRIPTS = \ - cold_stop \ get_anvil_status \ get_anvils \ get_cpu \ diff --git a/cgi-bin/cold_stop b/cgi-bin/cold_stop deleted file mode 100755 index e69de29b..00000000 From 0eefcdc06ec9a900362f078260cbecd8f24b59bf Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Mon, 31 May 2021 13:14:11 -0400 Subject: [PATCH 002/271] build(cgi-bin): include get_networks endpoint --- cgi-bin/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/cgi-bin/Makefile.am b/cgi-bin/Makefile.am index 3cfa2d7d..d5717566 100644 --- a/cgi-bin/Makefile.am +++ b/cgi-bin/Makefile.am @@ -6,6 +6,7 @@ dist_cgibin_SCRIPTS = \ get_anvils \ get_cpu \ get_memory \ + get_networks \ get_replicated_storage \ get_servers \ get_shared_storage \ From c3ac652043bb3427347e0656983ceb2f155b788e Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Mon, 31 May 2021 13:14:55 -0400 Subject: [PATCH 003/271] build(cgi-bin): exclude get_anvil_status endpoint --- cgi-bin/Makefile.am | 1 - 1 file changed, 1 deletion(-) diff --git a/cgi-bin/Makefile.am b/cgi-bin/Makefile.am index d5717566..c35b7579 100644 --- a/cgi-bin/Makefile.am +++ b/cgi-bin/Makefile.am @@ -2,7 +2,6 @@ MAINTAINERCLEANFILES = Makefile.in cgibindir = $(localstatedir)/www/cgi-bin dist_cgibin_SCRIPTS = \ - get_anvil_status \ get_anvils \ get_cpu \ get_memory \ From 28bdf4e1f24ca46c969f0031f06784f9bae826c9 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Tue, 1 Jun 2021 18:46:50 -0400 Subject: [PATCH 004/271] build(cgi-bin): include nodejs-devel as build dependency --- anvil.spec.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/anvil.spec.in b/anvil.spec.in index a0192c4e..f4447a55 100644 --- a/anvil.spec.in +++ b/anvil.spec.in @@ -23,6 +23,8 @@ BuildRequires: systemd autoconf automake BuildRequires: fence-agents-common # OCFROOT BuildRequires: resource-agents +# Includes the "npm" tool for building striker UI. +BuildRequires: nodejs-devel >= 14 %description This package generates the anvil-core, anvil-striker, anvil-node and anvil-dr From 0b00a92a21b3651f3e10e14c6335ed69845f420f Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Tue, 16 Feb 2021 17:50:01 -0500 Subject: [PATCH 005/271] feat(striker-ui): add minimal demo --- striker-ui/.eslintignore | 5 + striker-ui/.eslintrc.json | 60 + striker-ui/.gitignore | 34 + striker-ui/.husky/.gitignore | 1 + striker-ui/.husky/commit-msg | 6 + striker-ui/.husky/pre-commit | 7 + striker-ui/.lintstagedrc.json | 4 + striker-ui/.prettierrc.json | 6 + striker-ui/README.md | 34 + striker-ui/commitlint.config.js | 3 + striker-ui/lib/Anvil/getAllAnvil.ts | 22 + striker-ui/lib/Anvil/getOneAnvil.ts | 23 + striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts | 20 + striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts | 28 + striker-ui/lib/consts/API_BASE_URL.ts | 7 + striker-ui/lib/consts/IS_DEV_ENV.ts | 3 + striker-ui/lib/fetchers/fetchJSON.ts | 5 + striker-ui/next-env.d.ts | 2 + striker-ui/package-lock.json | 6199 ++++++++++++++++++ striker-ui/package.json | 40 + striker-ui/pages/_app.tsx | 10 + striker-ui/pages/api/anvils/[uuid].ts | 20 + striker-ui/pages/api/anvils/index.ts | 20 + striker-ui/pages/api/hello.ts | 9 + striker-ui/pages/demo-anvil-list.tsx | 27 + striker-ui/pages/demo-anvil-status.tsx | 32 + striker-ui/pages/index.tsx | 67 + striker-ui/public/favicon.ico | Bin 0 -> 15086 bytes striker-ui/public/vercel.svg | 4 + striker-ui/styles/Home.module.css | 122 + striker-ui/styles/globals.css | 16 + striker-ui/tsconfig.json | 21 + striker-ui/types/APIRouteHandlerMap.d.ts | 5 + striker-ui/types/AnvilList.d.ts | 3 + striker-ui/types/AnvilListItem.d.ts | 3 + striker-ui/types/AnvilNodeStatus.d.ts | 3 + striker-ui/types/AnvilStatus.d.ts | 4 + striker-ui/types/FetchResponse.d.ts | 3 + striker-ui/types/GetAllAnvilResponse.d.ts | 3 + striker-ui/types/GetOneAnvilResponse.d.ts | 3 + 40 files changed, 6884 insertions(+) create mode 100644 striker-ui/.eslintignore create mode 100644 striker-ui/.eslintrc.json create mode 100644 striker-ui/.gitignore create mode 100644 striker-ui/.husky/.gitignore create mode 100755 striker-ui/.husky/commit-msg create mode 100755 striker-ui/.husky/pre-commit create mode 100644 striker-ui/.lintstagedrc.json create mode 100644 striker-ui/.prettierrc.json create mode 100644 striker-ui/README.md create mode 100644 striker-ui/commitlint.config.js create mode 100644 striker-ui/lib/Anvil/getAllAnvil.ts create mode 100644 striker-ui/lib/Anvil/getOneAnvil.ts create mode 100644 striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts create mode 100644 striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts create mode 100644 striker-ui/lib/consts/API_BASE_URL.ts create mode 100644 striker-ui/lib/consts/IS_DEV_ENV.ts create mode 100644 striker-ui/lib/fetchers/fetchJSON.ts create mode 100644 striker-ui/next-env.d.ts create mode 100644 striker-ui/package-lock.json create mode 100644 striker-ui/package.json create mode 100644 striker-ui/pages/_app.tsx create mode 100644 striker-ui/pages/api/anvils/[uuid].ts create mode 100644 striker-ui/pages/api/anvils/index.ts create mode 100644 striker-ui/pages/api/hello.ts create mode 100644 striker-ui/pages/demo-anvil-list.tsx create mode 100644 striker-ui/pages/demo-anvil-status.tsx create mode 100644 striker-ui/pages/index.tsx create mode 100644 striker-ui/public/favicon.ico create mode 100644 striker-ui/public/vercel.svg create mode 100644 striker-ui/styles/Home.module.css create mode 100644 striker-ui/styles/globals.css create mode 100644 striker-ui/tsconfig.json create mode 100644 striker-ui/types/APIRouteHandlerMap.d.ts create mode 100644 striker-ui/types/AnvilList.d.ts create mode 100644 striker-ui/types/AnvilListItem.d.ts create mode 100644 striker-ui/types/AnvilNodeStatus.d.ts create mode 100644 striker-ui/types/AnvilStatus.d.ts create mode 100644 striker-ui/types/FetchResponse.d.ts create mode 100644 striker-ui/types/GetAllAnvilResponse.d.ts create mode 100644 striker-ui/types/GetOneAnvilResponse.d.ts diff --git a/striker-ui/.eslintignore b/striker-ui/.eslintignore new file mode 100644 index 00000000..5f4ce95f --- /dev/null +++ b/striker-ui/.eslintignore @@ -0,0 +1,5 @@ +# dependencies +/node_modules + +# next.js +/.next/ diff --git a/striker-ui/.eslintrc.json b/striker-ui/.eslintrc.json new file mode 100644 index 00000000..89399132 --- /dev/null +++ b/striker-ui/.eslintrc.json @@ -0,0 +1,60 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "extends": [ + "airbnb", + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/errors", + "plugin:import/typescript", + "plugin:import/warnings", + "plugin:jsx-a11y/recommended", + "plugin:prettier/recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "prettier/@typescript-eslint", + "prettier/react" + ], + "plugins": [ + "@typescript-eslint", + "import", + "jsx-a11y", + "prettier", + "react", + "react-hooks" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 2020, + "sourceType": "module" + }, + "rules": { + "complexity": ["error", 5], + "import/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "ts": "never", + "tsx": "never" + } + ], + // Allow JSX in files with other extensions + "react/jsx-filename-extension": [1, { "extensions": [".tsx"] }], + // Use TypeScript's types for component props + "react/prop-types": "off", + // Importing React is not required in Next.js + "react/react-in-jsx-scope": "off" + }, + "settings": { + "react": { "version": "detect" } + } +} diff --git a/striker-ui/.gitignore b/striker-ui/.gitignore new file mode 100644 index 00000000..1437c53f --- /dev/null +++ b/striker-ui/.gitignore @@ -0,0 +1,34 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel diff --git a/striker-ui/.husky/.gitignore b/striker-ui/.husky/.gitignore new file mode 100644 index 00000000..c9cdc63b --- /dev/null +++ b/striker-ui/.husky/.gitignore @@ -0,0 +1 @@ +_ \ No newline at end of file diff --git a/striker-ui/.husky/commit-msg b/striker-ui/.husky/commit-msg new file mode 100755 index 00000000..7835c36e --- /dev/null +++ b/striker-ui/.husky/commit-msg @@ -0,0 +1,6 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +cd striker-ui + +npx --no-install commitlint --edit "$1" diff --git a/striker-ui/.husky/pre-commit b/striker-ui/.husky/pre-commit new file mode 100755 index 00000000..d81aeee6 --- /dev/null +++ b/striker-ui/.husky/pre-commit @@ -0,0 +1,7 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +# Must cd because pwd/cwd is the root of this repository. +cd striker-ui + +npx --no-install lint-staged diff --git a/striker-ui/.lintstagedrc.json b/striker-ui/.lintstagedrc.json new file mode 100644 index 00000000..9620fcbb --- /dev/null +++ b/striker-ui/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "*.{js,jsx,ts,tsx}": "npm run lint -- --fix", + "*.{json,md}": "prettier --write" +} diff --git a/striker-ui/.prettierrc.json b/striker-ui/.prettierrc.json new file mode 100644 index 00000000..800c61be --- /dev/null +++ b/striker-ui/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "endOfLine": "lf", + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "all" +} diff --git a/striker-ui/README.md b/striker-ui/README.md new file mode 100644 index 00000000..b12f3e33 --- /dev/null +++ b/striker-ui/README.md @@ -0,0 +1,34 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. + +[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`. + +The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/striker-ui/commitlint.config.js b/striker-ui/commitlint.config.js new file mode 100644 index 00000000..84dcb122 --- /dev/null +++ b/striker-ui/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], +}; diff --git a/striker-ui/lib/Anvil/getAllAnvil.ts b/striker-ui/lib/Anvil/getAllAnvil.ts new file mode 100644 index 00000000..d80a95f0 --- /dev/null +++ b/striker-ui/lib/Anvil/getAllAnvil.ts @@ -0,0 +1,22 @@ +import fetchJSON from '../fetchers/fetchJSON'; + +async function getAllAnvil(): Promise { + const response: GetAllAnvilResponse = { + anvilList: { + anvils: [], + }, + error: null, + }; + + try { + response.anvilList = await fetchJSON( + `${process.env.DATA_ENDPOINT_BASE_URL}/get_anvils`, + ); + } catch (fetchError) { + response.error = fetchError; + } + + return response; +} + +export default getAllAnvil; diff --git a/striker-ui/lib/Anvil/getOneAnvil.ts b/striker-ui/lib/Anvil/getOneAnvil.ts new file mode 100644 index 00000000..2a0746b0 --- /dev/null +++ b/striker-ui/lib/Anvil/getOneAnvil.ts @@ -0,0 +1,23 @@ +import fetchJSON from '../fetchers/fetchJSON'; + +async function getOneAnvil(anvilUUID: string): Promise { + const response: GetOneAnvilResponse = { + anvilStatus: { + nodes: [], + timestamp: 0, + }, + error: null, + }; + + try { + response.anvilStatus = await fetchJSON( + `${process.env.DATA_ENDPOINT_BASE_URL}/get_anvil_status?anvil_uuid=${anvilUUID}`, + ); + } catch (fetchError) { + response.error = fetchError; + } + + return response; +} + +export default getOneAnvil; diff --git a/striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts b/striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts new file mode 100644 index 00000000..3e49d86e --- /dev/null +++ b/striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts @@ -0,0 +1,20 @@ +import { NextApiRequest, NextApiResponse } from 'next'; + +import getAllAnvil from './getAllAnvil'; + +async function handleAPIGetAllAnvil( + request: NextApiRequest, + response: NextApiResponse, +): Promise { + const { anvilList, error }: GetAllAnvilResponse = await getAllAnvil(); + + if (error) { + response.status(503); + } else { + response.status(200); + } + + response.send(anvilList); +} + +export default handleAPIGetAllAnvil; diff --git a/striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts b/striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts new file mode 100644 index 00000000..134fac38 --- /dev/null +++ b/striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts @@ -0,0 +1,28 @@ +import { NextApiRequest, NextApiResponse } from 'next'; + +import getOneAnvil from './getOneAnvil'; + +async function handleAPIGetOneAnvil( + request: NextApiRequest, + response: NextApiResponse, +): Promise { + const { + query: { uuid }, + }: NextApiRequest = request; + + const anvilUUID: string = uuid instanceof Array ? uuid[0] : uuid; + + const { anvilStatus, error }: GetOneAnvilResponse = await getOneAnvil( + anvilUUID, + ); + + if (error) { + response.status(503); + } else { + response.status(200); + } + + response.send(anvilStatus); +} + +export default handleAPIGetOneAnvil; diff --git a/striker-ui/lib/consts/API_BASE_URL.ts b/striker-ui/lib/consts/API_BASE_URL.ts new file mode 100644 index 00000000..a83d0409 --- /dev/null +++ b/striker-ui/lib/consts/API_BASE_URL.ts @@ -0,0 +1,7 @@ +import IS_DEV_ENV from './IS_DEV_ENV'; + +const API_BASE_URL = IS_DEV_ENV + ? process.env.DEVELOPMENT_API_BASE_URL + : process.env.PRODUCTION_API_BASE_URL; + +export default API_BASE_URL; diff --git a/striker-ui/lib/consts/IS_DEV_ENV.ts b/striker-ui/lib/consts/IS_DEV_ENV.ts new file mode 100644 index 00000000..22e14912 --- /dev/null +++ b/striker-ui/lib/consts/IS_DEV_ENV.ts @@ -0,0 +1,3 @@ +const IS_DEV_ENV: boolean = process.env.NODE_ENV !== 'production'; + +export default IS_DEV_ENV; diff --git a/striker-ui/lib/fetchers/fetchJSON.ts b/striker-ui/lib/fetchers/fetchJSON.ts new file mode 100644 index 00000000..db2464e2 --- /dev/null +++ b/striker-ui/lib/fetchers/fetchJSON.ts @@ -0,0 +1,5 @@ +function fetchJSON(...args: [RequestInfo, RequestInit?]): Promise { + return fetch(...args).then((response: Response) => response.json()); +} + +export default fetchJSON; diff --git a/striker-ui/next-env.d.ts b/striker-ui/next-env.d.ts new file mode 100644 index 00000000..7b7aa2c7 --- /dev/null +++ b/striker-ui/next-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/striker-ui/package-lock.json b/striker-ui/package-lock.json new file mode 100644 index 00000000..2f51f872 --- /dev/null +++ b/striker-ui/package-lock.json @@ -0,0 +1,6199 @@ +{ + "name": "striker-ui", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ampproject/toolbox-core": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-core/-/toolbox-core-2.7.4.tgz", + "integrity": "sha512-qpBhcS4urB7IKc+jx2kksN7BuvvwCo7Y3IstapWo+EW+COY5EYAUwb2pil37v3TsaqHKgX//NloFP1SKzGZAnw==", + "requires": { + "cross-fetch": "3.0.6", + "lru-cache": "6.0.0" + } + }, + "@ampproject/toolbox-optimizer": { + "version": "2.7.1-alpha.0", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.7.1-alpha.0.tgz", + "integrity": "sha512-WGPZKVQvHgNYJk1XVJCCmY+NVGTGJtvn0OALDyiegN4FJWOcilQUhCIcjMkZN59u1flz/u+sEKccM5qsROqVyg==", + "requires": { + "@ampproject/toolbox-core": "^2.7.1-alpha.0", + "@ampproject/toolbox-runtime-version": "^2.7.1-alpha.0", + "@ampproject/toolbox-script-csp": "^2.5.4", + "@ampproject/toolbox-validator-rules": "^2.7.1-alpha.0", + "abort-controller": "3.0.0", + "cross-fetch": "3.0.6", + "cssnano-simple": "1.2.1", + "dom-serializer": "1.1.0", + "domhandler": "3.3.0", + "domutils": "2.4.2", + "htmlparser2": "5.0.1", + "https-proxy-agent": "5.0.0", + "lru-cache": "6.0.0", + "node-fetch": "2.6.1", + "normalize-html-whitespace": "1.0.0", + "postcss": "7.0.32", + "postcss-safe-parser": "4.0.2", + "terser": "5.5.1" + }, + "dependencies": { + "cssnano-simple": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-1.2.1.tgz", + "integrity": "sha512-9vOyjw8Dj/T12kIOnXPZ5VnEIo6F3YMaIn0wqJXmn277R58cWpI3AvtdlCBtohX7VAUNYcyk2d0dKcXXkb5I6Q==", + "requires": { + "cssnano-preset-simple": "1.2.1", + "postcss": "^7.0.32" + } + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + }, + "@ampproject/toolbox-runtime-version": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.7.4.tgz", + "integrity": "sha512-SAdOUOERp42thVNWaBJlnFvFVvnacMVnz5z9LyUZHSnoL1EqrAW5Sz5jv+Ly+gkA8NYsEaUxAdSCBAzE9Uzb4Q==", + "requires": { + "@ampproject/toolbox-core": "2.7.4" + } + }, + "@ampproject/toolbox-script-csp": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.5.4.tgz", + "integrity": "sha512-+knTYetI5nWllRZ9wFcj7mYxelkiiFVRAAW/hl0ad8EnKHMH82tRlk40CapEnUHhp6Er5sCYkumQ8dngs3Q4zQ==" + }, + "@ampproject/toolbox-validator-rules": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.7.4.tgz", + "integrity": "sha512-z3JRcpIZLLdVC9XVe7YTZuB3a/eR9s2SjElYB9AWRdyJyL5Jt7+pGNv4Uwh1uHVoBXsWEVQzNOWSNtrO3mSwZA==", + "requires": { + "cross-fetch": "3.0.6" + } + }, + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.13.tgz", + "integrity": "sha512-8fSpqYRETHATtNitsCXq8QQbKJP31/KnDl2Wz2Vtui9nKzjss2ysuZtyVsWjBtvkeEFo346gkwjYPab1hvrXkQ==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@commitlint/cli": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-11.0.0.tgz", + "integrity": "sha512-YWZWg1DuqqO5Zjh7vUOeSX76vm0FFyz4y0cpGMFhrhvUi5unc4IVfCXZ6337R9zxuBtmveiRuuhQqnRRer+13g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.11.2", + "@commitlint/format": "^11.0.0", + "@commitlint/lint": "^11.0.0", + "@commitlint/load": "^11.0.0", + "@commitlint/read": "^11.0.0", + "chalk": "4.1.0", + "core-js": "^3.6.1", + "get-stdin": "8.0.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^15.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@commitlint/config-conventional": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-11.0.0.tgz", + "integrity": "sha512-SNDRsb5gLuDd2PL83yCOQX6pE7gevC79UPFx+GLbLfw6jGnnbO9/tlL76MLD8MOViqGbo7ZicjChO9Gn+7tHhA==", + "dev": true, + "requires": { + "conventional-changelog-conventionalcommits": "^4.3.1" + } + }, + "@commitlint/ensure": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-11.0.0.tgz", + "integrity": "sha512-/T4tjseSwlirKZdnx4AuICMNNlFvRyPQimbZIOYujp9DSO6XRtOy9NrmvWujwHsq9F5Wb80QWi4WMW6HMaENug==", + "dev": true, + "requires": { + "@commitlint/types": "^11.0.0", + "lodash": "^4.17.19" + } + }, + "@commitlint/execute-rule": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz", + "integrity": "sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==", + "dev": true + }, + "@commitlint/format": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-11.0.0.tgz", + "integrity": "sha512-bpBLWmG0wfZH/svzqD1hsGTpm79TKJWcf6EXZllh2J/LSSYKxGlv967lpw0hNojme0sZd4a/97R3qA2QHWWSLg==", + "dev": true, + "requires": { + "@commitlint/types": "^11.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@commitlint/is-ignored": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-11.0.0.tgz", + "integrity": "sha512-VLHOUBN+sOlkYC4tGuzE41yNPO2w09sQnOpfS+pSPnBFkNUUHawEuA44PLHtDvQgVuYrMAmSWFQpWabMoP5/Xg==", + "dev": true, + "requires": { + "@commitlint/types": "^11.0.0", + "semver": "7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@commitlint/lint": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-11.0.0.tgz", + "integrity": "sha512-Q8IIqGIHfwKr8ecVZyYh6NtXFmKw4YSEWEr2GJTB/fTZXgaOGtGFZDWOesCZllQ63f1s/oWJYtVv5RAEuwN8BQ==", + "dev": true, + "requires": { + "@commitlint/is-ignored": "^11.0.0", + "@commitlint/parse": "^11.0.0", + "@commitlint/rules": "^11.0.0", + "@commitlint/types": "^11.0.0" + } + }, + "@commitlint/load": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-11.0.0.tgz", + "integrity": "sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==", + "dev": true, + "requires": { + "@commitlint/execute-rule": "^11.0.0", + "@commitlint/resolve-extends": "^11.0.0", + "@commitlint/types": "^11.0.0", + "chalk": "4.1.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@commitlint/message": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-11.0.0.tgz", + "integrity": "sha512-01ObK/18JL7PEIE3dBRtoMmU6S3ecPYDTQWWhcO+ErA3Ai0KDYqV5VWWEijdcVafNpdeUNrEMigRkxXHQLbyJA==", + "dev": true + }, + "@commitlint/parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-11.0.0.tgz", + "integrity": "sha512-DekKQAIYWAXIcyAZ6/PDBJylWJ1BROTfDIzr9PMVxZRxBPc1gW2TG8fLgjZfBP5mc0cuthPkVi91KQQKGri/7A==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-parser": "^3.0.0" + } + }, + "@commitlint/read": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-11.0.0.tgz", + "integrity": "sha512-37V0V91GSv0aDzMzJioKpCoZw6l0shk7+tRG8RkW1GfZzUIytdg3XqJmM+IaIYpaop0m6BbZtfq+idzUwJnw7g==", + "dev": true, + "requires": { + "@commitlint/top-level": "^11.0.0", + "fs-extra": "^9.0.0", + "git-raw-commits": "^2.0.0" + } + }, + "@commitlint/resolve-extends": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz", + "integrity": "sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==", + "dev": true, + "requires": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@commitlint/rules": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-11.0.0.tgz", + "integrity": "sha512-2hD9y9Ep5ZfoNxDDPkQadd2jJeocrwC4vJ98I0g8pNYn/W8hS9+/FuNpolREHN8PhmexXbkjrwyQrWbuC0DVaA==", + "dev": true, + "requires": { + "@commitlint/ensure": "^11.0.0", + "@commitlint/message": "^11.0.0", + "@commitlint/to-lines": "^11.0.0", + "@commitlint/types": "^11.0.0" + } + }, + "@commitlint/to-lines": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-11.0.0.tgz", + "integrity": "sha512-TIDTB0Y23jlCNubDROUVokbJk6860idYB5cZkLWcRS9tlb6YSoeLn1NLafPlrhhkkkZzTYnlKYzCVrBNVes1iw==", + "dev": true + }, + "@commitlint/top-level": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-11.0.0.tgz", + "integrity": "sha512-O0nFU8o+Ws+py5pfMQIuyxOtfR/kwtr5ybqTvR+C2lUPer2x6lnQU+OnfD7hPM+A+COIUZWx10mYQvkR3MmtAA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + }, + "dependencies": { + "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" + } + }, + "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": { + "p-locate": "^5.0.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" + } + } + } + }, + "@commitlint/types": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz", + "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@hapi/accept": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.1.tgz", + "integrity": "sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==", + "requires": { + "@hapi/boom": "9.x.x", + "@hapi/hoek": "9.x.x" + } + }, + "@hapi/boom": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.1.tgz", + "integrity": "sha512-VNR8eDbBrOxBgbkddRYIe7+8DZ+vSbV6qlmaN2x7eWjsUjy2VmQgChkOKcVZIeupEZYj+I0dqNg430OhwzagjA==", + "requires": { + "@hapi/hoek": "9.x.x" + } + }, + "@hapi/hoek": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.1.tgz", + "integrity": "sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==" + }, + "@next/env": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-10.0.6.tgz", + "integrity": "sha512-++zgrcSL9SprjWKBbO3YuVj/8CTmxJl+zLErW/Kbr2VCT0u12SrBcMKvD236lEGs5/qUgeBfU3Dvmr6MASWrtA==" + }, + "@next/polyfill-module": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.0.6.tgz", + "integrity": "sha512-Sk3HYFxiI3AyIhw7Nnc5un//duCthAP2XtPb4N1SamymOU2QSb8I1zkcsxVIlZRvftdXikQQgra6Ck2zfJRxpA==" + }, + "@next/react-dev-overlay": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.0.6.tgz", + "integrity": "sha512-KbxpyVT6gr1KZ7JoFDKGNM0hK7CxPkIC14j/gYgR6qSOhxGs3GEIBScJRXfKD7LNPMgVgQtaJlBYlEJ7aQu1xg==", + "requires": { + "@babel/code-frame": "7.12.11", + "anser": "1.4.9", + "chalk": "4.0.0", + "classnames": "2.2.6", + "css.escape": "1.5.1", + "data-uri-to-buffer": "3.0.1", + "platform": "1.3.6", + "shell-quote": "1.7.2", + "source-map": "0.8.0-beta.0", + "stacktrace-parser": "0.1.10", + "strip-ansi": "6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@next/react-refresh-utils": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.0.6.tgz", + "integrity": "sha512-4BF+8PyzDcYpumQJ22yBUjVP/CL2KLPM+3K3ZQb61HvmIptB/t+jFnH2ew8S7ORQNu/caVQC6wP5wAfOtpJNsg==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@opentelemetry/api": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.14.0.tgz", + "integrity": "sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==", + "requires": { + "@opentelemetry/context-base": "^0.14.0" + } + }, + "@opentelemetry/context-base": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.14.0.tgz", + "integrity": "sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==" + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/minimist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "dev": true + }, + "@types/node": { + "version": "14.14.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.26.tgz", + "integrity": "sha512-skWxepWOs+VArEBWd2S/VR3wUavioIIx9/HzW+UJiIjtwa6+kNXdsOeq7FfxDXf56hIcL0ieo2brwMgBJ1+lhw==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "dev": true + }, + "@types/react": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.1.tgz", + "integrity": "sha512-w8t9f53B2ei4jeOqf/gxtc2Sswnc3LBK5s0DyJcg5xd10tMHXts2N31cKjWfH9IC/JvEPa/YF1U4YeP1t4R6HQ==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.0.tgz", + "integrity": "sha512-DJgdGZW+8CFUTz5C/dnn4ONcUm2h2T0itWD85Ob5/V27Ndie8hUoX5HKyGssvR8sUMkAIlUc/AMK67Lqa3kBIQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.15.0", + "@typescript-eslint/scope-manager": "4.15.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.0.tgz", + "integrity": "sha512-V4vaDWvxA2zgesg4KPgEGiomWEBpJXvY4ZX34Y3qxK8LUm5I87L+qGIOTd9tHZOARXNRt9pLbblSKiYBlGMawg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.15.0", + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/typescript-estree": "4.15.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.0.tgz", + "integrity": "sha512-L6Dtbq8Bc7g2aZwnIBETpmUa9XDKCMzKVwAArnGp5Mn7PRNFjf3mUzq8UeBjL3K8t311hvevnyqXAMSmxO8Gpg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.15.0", + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/typescript-estree": "4.15.0", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.0.tgz", + "integrity": "sha512-CSNBZnCC2jEA/a+pR9Ljh8Y+5TY5qgbPz7ICEk9WCpSEgT6Pi7H2RIjxfrrbUXvotd6ta+i27sssKEH8Azm75g==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/visitor-keys": "4.15.0" + } + }, + "@typescript-eslint/types": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.0.tgz", + "integrity": "sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz", + "integrity": "sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/visitor-keys": "4.15.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz", + "integrity": "sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "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==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "anser": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", + "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==" + }, + "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-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", + "optional": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-includes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", + "is-string": "^1.0.5" + } + }, + "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.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "ast-types": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", + "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "axe-core": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.2.tgz", + "integrity": "sha512-V+Nq70NxKhYt89ArVcaNL9FDryB3vQOd+BFXZIfO3RP6rwtj+2yqqqdHEkacutglPaZLkJeuXKCjCJDMGPtPqg==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "optional": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", + "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", + "requires": { + "caniuse-lite": "^1.0.30001173", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.634", + "escalade": "^3.1.1", + "node-releases": "^1.1.69" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001185", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz", + "integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "optional": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "optional": true + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "optional": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "optional": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "optional": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-conventionalcommits": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz", + "integrity": "sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, + "conventional-commits-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz", + "integrity": "sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^2.0.0", + "through2": "^4.0.0", + "trim-off-newlines": "^1.0.0" + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "core-js": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", + "dev": true + }, + "core-js-pure": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.8.3.tgz", + "integrity": "sha512-V5qQZVAr9K0xu7jXg1M7qTEwuxUgqr7dUOezGaNa7i+Xn9oXAU/d1fzqD9ObuwpVQOaorO5s70ckyi1woP9lVA==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "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 + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" + }, + "cssnano-preset-simple": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-1.2.1.tgz", + "integrity": "sha512-B2KahOIFTV6dw5Ioy9jHshTh/vAYNnUB2enyWRgnAEg3oJBjI/035ExpePaMqS2SwpbH7gCgvQqwpMBH6hTJSw==", + "requires": { + "caniuse-lite": "^1.0.30001093", + "postcss": "^7.0.32" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + }, + "cssnano-simple": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-1.2.2.tgz", + "integrity": "sha512-4slyYc1w4JhSbhVX5xi9G0aQ42JnRyPg+7l7cqoNyoIDzfWx40Rq3JQZnoAWDu60A4AvKVp9ln/YSUOdhDX68g==", + "requires": { + "cssnano-preset-simple": "1.2.2", + "postcss": "^7.0.32" + }, + "dependencies": { + "cssnano-preset-simple": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-1.2.2.tgz", + "integrity": "sha512-gtvrcRSGtP3hA/wS8mFVinFnQdEsEpm3v4I/s/KmNjpdWaThV/4E5EojAzFXxyT5OCSRPLlHR9iQexAqKHlhGQ==", + "requires": { + "caniuse-lite": "^1.0.30001179", + "postcss": "^7.0.32" + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + }, + "csstype": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.6.tgz", + "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", + "dev": true + }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "optional": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "dequal": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", + "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "optional": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz", + "integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "entities": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==" + }, + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "requires": { + "domelementtype": "^2.0.1" + } + }, + "domutils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz", + "integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + } + } + }, + "electron-to-chromium": { + "version": "1.3.662", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.662.tgz", + "integrity": "sha512-IGBXmTGwdVGUVTnZ8ISEvkhDfhhD+CDFndG4//BhvDcEtPYiVrzoB+rzT/Y12OQCf5bvRCrVmrUbGrS9P7a6FQ==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.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.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + } + } + }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", + "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.3.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.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "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.20", + "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": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-airbnb": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", + "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^14.2.1", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-prettier": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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 + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", + "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.11.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", + "has": "^1.0.3", + "jsx-ast-utils": "^3.1.0", + "language-tags": "^1.0.5" + }, + "dependencies": { + "emoji-regex": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.1.tgz", + "integrity": "sha512-117l1H6U4X3Krn+MrzYrL57d5H7siRHWraBs7s+LjRuFK7Fe7hJqnJ0skWlinqsycVLU5YAo6L8CsEYQ0V5prg==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", + "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", + "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "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==", + "dev": true + }, + "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, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "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, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "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 + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "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==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "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 + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "optional": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "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==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "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", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", + "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "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==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "optional": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + } + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "optional": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "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" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "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==" + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + }, + "dependencies": { + "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 + } + } + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "optional": true + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "husky": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/husky/-/husky-5.0.9.tgz", + "integrity": "sha512-0SjcaY21a+IRdx7p7r/X33Vc09UR2m8SbP8yfkhUX2/jAmwcz+GR7i9jXkp2pP3GfX23JhMkVP6SWwXB18uXtg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "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", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "optional": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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 + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "optional": true, + "requires": { + "number-is-nan": "^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==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", + "requires": { + "isarray": "^1.0.0", + "isobject": "^2.0.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "lint-staged": { + "version": "10.5.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", + "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "listr2": "^3.2.2", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "listr2": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.3.1.tgz", + "integrity": "sha512-8Zoxe7s/8nNr4bJ8bdAduHD8uJce+exmMmUWTXlq0WuUdffnH3muisHPHPFtW2vvOfohIsq7FGCaguUxN/h3Iw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.3", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "map-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "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 + } + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "optional": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "optional": true + }, + "native-url": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz", + "integrity": "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==", + "requires": { + "querystring": "^0.2.0" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "next": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/next/-/next-10.0.6.tgz", + "integrity": "sha512-uM5Yv4Ha9iL6Lbg7Ez36GyJ0YTdRLzXLA9b1REH3rX2Wytw0Ls5qPuFGk4BHSQpQhYx6Z61iA2qPkGl33W4iBg==", + "requires": { + "@ampproject/toolbox-optimizer": "2.7.1-alpha.0", + "@babel/runtime": "7.12.5", + "@hapi/accept": "5.0.1", + "@next/env": "10.0.6", + "@next/polyfill-module": "10.0.6", + "@next/react-dev-overlay": "10.0.6", + "@next/react-refresh-utils": "10.0.6", + "@opentelemetry/api": "0.14.0", + "ast-types": "0.13.2", + "browserslist": "4.16.1", + "buffer": "5.6.0", + "caniuse-lite": "^1.0.30001179", + "chalk": "2.4.2", + "chokidar": "3.5.1", + "crypto-browserify": "3.12.0", + "cssnano-simple": "1.2.2", + "etag": "1.8.1", + "find-cache-dir": "3.3.1", + "jest-worker": "24.9.0", + "native-url": "0.3.4", + "node-fetch": "2.6.1", + "node-html-parser": "1.4.9", + "node-libs-browser": "^2.2.1", + "p-limit": "3.1.0", + "path-browserify": "1.0.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "8.1.7", + "process": "0.11.10", + "prop-types": "15.7.2", + "raw-body": "2.4.1", + "react-is": "16.13.1", + "react-refresh": "0.8.3", + "sharp": "0.26.3", + "stream-browserify": "3.0.0", + "styled-jsx": "3.3.2", + "use-subscription": "1.5.1", + "vm-browserify": "1.1.2", + "watchpack": "2.0.0-beta.13" + } + }, + "node-abi": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", + "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", + "optional": true, + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "optional": true + } + } + }, + "node-addon-api": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==", + "optional": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-html-parser": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz", + "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==", + "requires": { + "he": "1.2.0" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + } + } + }, + "node-releases": { + "version": "1.1.70", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", + "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==" + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", + "optional": true + }, + "normalize-html-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", + "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "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" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", + "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "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" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.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==" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "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==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "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==", + "requires": { + "find-up": "^4.0.0" + } + }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "postcss": { + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.7.tgz", + "integrity": "sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==", + "requires": { + "colorette": "^1.2.1", + "line-column": "^1.0.2", + "nanoid": "^3.1.16", + "source-map": "^0.6.1" + } + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "requires": { + "postcss": "^7.0.26" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + }, + "prebuild-install": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.0.tgz", + "integrity": "sha512-h2ZJ1PXHKWZpp1caLw0oX9sagVpL2YTk+ZwInQbQ3QqNd4J03O6MpFNmMTJlkfgPENWqe5kP0WjQLqz5OjLfsw==", + "optional": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "optional": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "react": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", + "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", + "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-refresh": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", + "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scheduler": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.1.tgz", + "integrity": "sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "sharp": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz", + "integrity": "sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg==", + "optional": true, + "requires": { + "array-flatten": "^3.0.0", + "color": "^3.1.3", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.0.2", + "npmlog": "^4.1.2", + "prebuild-install": "^6.0.0", + "semver": "^7.3.2", + "simple-get": "^4.0.0", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "optional": true + }, + "simple-get": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", + "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", + "optional": true, + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "optional": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "optional": true + } + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "optional": true, + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dev": true, + "requires": { + "through2": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "requires": { + "type-fest": "^0.7.1" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz", + "integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "optional": true + }, + "styled-jsx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.3.2.tgz", + "integrity": "sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==", + "requires": { + "@babel/types": "7.8.3", + "babel-plugin-syntax-jsx": "6.18.0", + "convert-source-map": "1.7.0", + "loader-utils": "1.2.3", + "source-map": "0.7.3", + "string-hash": "1.1.3", + "stylis": "3.5.4", + "stylis-rule-sheet": "0.0.10" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "stylis": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" + }, + "stylis-rule-sheet": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "swr": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/swr/-/swr-0.4.2.tgz", + "integrity": "sha512-SKGxcAfyijj/lE5ja5zVMDqJNudASH3WZPRUakDVOePTM18FnsXgugndjl9BSRwj+jokFCulMDe7F2pQL+VhEw==", + "requires": { + "dequal": "2.0.2" + } + }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.0.tgz", + "integrity": "sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "optional": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "optional": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "terser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", + "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "^2.1.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", + "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + }, + "typescript": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "use-subscription": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", + "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", + "requires": { + "object-assign": "^4.1.1" + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "watchpack": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.0-beta.13.tgz", + "integrity": "sha512-ZEFq2mx/k5qgQwgi6NOm+2ImICb8ngAkA/rZ6oyXZ7SgPn3pncf+nfhYTCrs3lmHwOxnPtGLTOuFLfpSMh1VMA==", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + } +} diff --git a/striker-ui/package.json b/striker-ui/package.json new file mode 100644 index 00000000..0984a5b4 --- /dev/null +++ b/striker-ui/package.json @@ -0,0 +1,40 @@ +{ + "name": "striker-ui", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "next build", + "dev": "next dev", + "lint": "eslint --config .eslintrc.json --ext js,jsx,ts,tsx --max-warnings=0", + "lint:dryrun": "npm run lint -- .", + "lint:fix": "npm run lint -- --fix .", + "postinstall": "cd .. && husky install striker-ui/.husky", + "start": "next start" + }, + "dependencies": { + "next": "10.0.6", + "react": "17.0.1", + "react-dom": "17.0.1", + "swr": "^0.4.2" + }, + "devDependencies": { + "@commitlint/cli": "^11.0.0", + "@commitlint/config-conventional": "^11.0.0", + "@types/node": "^14.14.26", + "@types/react": "^17.0.1", + "@typescript-eslint/eslint-plugin": "^4.15.0", + "@typescript-eslint/parser": "^4.15.0", + "eslint": "^7.19.0", + "eslint-config-airbnb": "^18.2.1", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-react": "^7.22.0", + "eslint-plugin-react-hooks": "^4.2.0", + "husky": "^5.0.9", + "lint-staged": "^10.5.4", + "prettier": "^2.2.1", + "typescript": "^4.1.5" + } +} diff --git a/striker-ui/pages/_app.tsx b/striker-ui/pages/_app.tsx new file mode 100644 index 00000000..5ddc17cb --- /dev/null +++ b/striker-ui/pages/_app.tsx @@ -0,0 +1,10 @@ +import '../styles/globals.css'; + +import { AppProps } from 'next/app'; + +function App({ Component, pageProps }: AppProps): JSX.Element { + // eslint-disable-next-line react/jsx-props-no-spreading + return ; +} + +export default App; diff --git a/striker-ui/pages/api/anvils/[uuid].ts b/striker-ui/pages/api/anvils/[uuid].ts new file mode 100644 index 00000000..dc1cd44b --- /dev/null +++ b/striker-ui/pages/api/anvils/[uuid].ts @@ -0,0 +1,20 @@ +import { NextApiRequest, NextApiResponse } from 'next'; + +import { APIRouteHandlerMap } from '../../../types/APIRouteHandlerMap'; + +import handleAPIGetOneAnvil from '../../../lib/Anvil/handleAPIGetOneAnvil'; + +const ROUTE_HANDLER_MAP: APIRouteHandlerMap = { + GET: handleAPIGetOneAnvil, +}; + +async function handleAPIOneAnvil( + request: NextApiRequest, + response: NextApiResponse, +): Promise { + const { method: httpMethod = 'GET' }: NextApiRequest = request; + + await ROUTE_HANDLER_MAP[httpMethod](request, response); +} + +export default handleAPIOneAnvil; diff --git a/striker-ui/pages/api/anvils/index.ts b/striker-ui/pages/api/anvils/index.ts new file mode 100644 index 00000000..e6bb66cd --- /dev/null +++ b/striker-ui/pages/api/anvils/index.ts @@ -0,0 +1,20 @@ +import { NextApiRequest, NextApiResponse } from 'next'; + +import { APIRouteHandlerMap } from '../../../types/APIRouteHandlerMap'; + +import handleAPIGetAllAnvil from '../../../lib/Anvil/handleAPIGetAllAnvil'; + +const ROUTE_HANDLER_MAP: APIRouteHandlerMap = { + GET: handleAPIGetAllAnvil, +}; + +async function handleAPIAllAnvil( + request: NextApiRequest, + response: NextApiResponse, +): Promise { + const { method: httpMethod = 'GET' }: NextApiRequest = request; + + await ROUTE_HANDLER_MAP[httpMethod](request, response); +} + +export default handleAPIAllAnvil; diff --git a/striker-ui/pages/api/hello.ts b/striker-ui/pages/api/hello.ts new file mode 100644 index 00000000..d2bf44d5 --- /dev/null +++ b/striker-ui/pages/api/hello.ts @@ -0,0 +1,9 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction + +import type { NextApiRequest, NextApiResponse } from 'next'; + +function hello(req: NextApiRequest, res: NextApiResponse): void { + res.status(200).json({ name: 'John Doe' }); +} + +export default hello; diff --git a/striker-ui/pages/demo-anvil-list.tsx b/striker-ui/pages/demo-anvil-list.tsx new file mode 100644 index 00000000..4fbf1166 --- /dev/null +++ b/striker-ui/pages/demo-anvil-list.tsx @@ -0,0 +1,27 @@ +import { GetServerSidePropsResult, InferGetServerSidePropsType } from 'next'; + +import API_BASE_URL from '../lib/consts/API_BASE_URL'; + +import fetchJSON from '../lib/fetchers/fetchJSON'; + +export async function getServerSideProps(): Promise< + GetServerSidePropsResult +> { + return { + props: await fetchJSON(`${API_BASE_URL}/api/anvils`), + }; +} + +function DemoAnvilList({ + anvils, +}: InferGetServerSidePropsType): JSX.Element { + return ( +
+

Demo Anvil List

+

anvils

+
{JSON.stringify(anvils, null, 4)}
+
+ ); +} + +export default DemoAnvilList; diff --git a/striker-ui/pages/demo-anvil-status.tsx b/striker-ui/pages/demo-anvil-status.tsx new file mode 100644 index 00000000..1ce72d8d --- /dev/null +++ b/striker-ui/pages/demo-anvil-status.tsx @@ -0,0 +1,32 @@ +import { GetServerSidePropsResult, InferGetServerSidePropsType } from 'next'; + +import API_BASE_URL from '../lib/consts/API_BASE_URL'; + +import fetchJSON from '../lib/fetchers/fetchJSON'; + +export async function getServerSideProps(): Promise< + GetServerSidePropsResult +> { + return { + props: await fetchJSON( + `${API_BASE_URL}/api/anvils/1aded871-fcb1-4473-9b97-6e9c246fc568`, + ), + }; +} + +function DemoAnvilStatus({ + nodes, + timestamp, +}: InferGetServerSidePropsType): JSX.Element { + return ( +
+

Demo Anvil List

+

nodes

+
{JSON.stringify(nodes, null, 4)}
+

timestamp

+
{timestamp}
+
+ ); +} + +export default DemoAnvilStatus; diff --git a/striker-ui/pages/index.tsx b/striker-ui/pages/index.tsx new file mode 100644 index 00000000..9aa1e948 --- /dev/null +++ b/striker-ui/pages/index.tsx @@ -0,0 +1,67 @@ +import Head from 'next/head'; +import styles from '../styles/Home.module.css'; + +function Home(): JSX.Element { + return ( + + ); +} + +export default Home; diff --git a/striker-ui/public/favicon.ico b/striker-ui/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4965832f2c9b0605eaa189b7c7fb11124d24e48a GIT binary patch literal 15086 zcmeHOOH5Q(7(R0cc?bh2AT>N@1PWL!LLfZKyG5c!MTHoP7_p!sBz0k$?pjS;^lmgJ zU6^i~bWuZYHL)9$wuvEKm~qo~(5=Lvx5&Hv;?X#m}i|`yaGY4gX+&b>tew;gcnRQA1kp zBbm04SRuuE{Hn+&1wk%&g;?wja_Is#1gKoFlI7f`Gt}X*-nsMO30b_J@)EFNhzd1QM zdH&qFb9PVqQOx@clvc#KAu}^GrN`q5oP(8>m4UOcp`k&xwzkTio*p?kI4BPtIwX%B zJN69cGsm=x90<;Wmh-bs>43F}ro$}Of@8)4KHndLiR$nW?*{Rl72JPUqRr3ta6e#A z%DTEbi9N}+xPtd1juj8;(CJt3r9NOgb>KTuK|z7!JB_KsFW3(pBN4oh&M&}Nb$Ee2 z$-arA6a)CdsPj`M#1DS>fqj#KF%0q?w50GN4YbmMZIoF{e1yTR=4ablqXHBB2!`wM z1M1ke9+<);|AI;f=2^F1;G6Wfpql?1d5D4rMr?#f(=hkoH)U`6Gb)#xDLjoKjp)1;Js@2Iy5yk zMXUqj+gyk1i0yLjWS|3sM2-1ECc;MAz<4t0P53%7se$$+5Ex`L5TQO_MMXXi04UDIU+3*7Ez&X|mj9cFYBXqM{M;mw_ zpw>azP*qjMyNSD4hh)XZt$gqf8f?eRSFX8VQ4Y+H3jAtvyTrXr`qHAD6`m;aYmH2zOhJC~_*AuT} zvUxC38|JYN94i(05R)dVKgUQF$}#cxV7xZ4FULqFCNX*Forhgp*yr6;DsIk=ub0Hv zpk2L{9Q&|uI^b<6@i(Y+iSxeO_n**4nRLc`P!3ld5jL=nZRw6;DEJ*1z6Pvg+eW|$lnnjO zjd|8>6l{i~UxI244CGn2kK@cJ|#ecwgSyt&HKA2)z zrOO{op^o*- + + \ No newline at end of file diff --git a/striker-ui/styles/Home.module.css b/striker-ui/styles/Home.module.css new file mode 100644 index 00000000..42e7e600 --- /dev/null +++ b/striker-ui/styles/Home.module.css @@ -0,0 +1,122 @@ +.container { + min-height: 100vh; + padding: 0 0.5rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.main { + padding: 5rem 0; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.footer { + width: 100%; + height: 100px; + border-top: 1px solid #eaeaea; + display: flex; + justify-content: center; + align-items: center; +} + +.footer img { + margin-left: 0.5rem; +} + +.footer a { + display: flex; + justify-content: center; + align-items: center; +} + +.title a { + color: #0070f3; + text-decoration: none; +} + +.title a:hover, +.title a:focus, +.title a:active { + text-decoration: underline; +} + +.title { + margin: 0; + line-height: 1.15; + font-size: 4rem; +} + +.title, +.description { + text-align: center; +} + +.description { + line-height: 1.5; + font-size: 1.5rem; +} + +.code { + background: #fafafa; + border-radius: 5px; + padding: 0.75rem; + font-size: 1.1rem; + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, + Bitstream Vera Sans Mono, Courier New, monospace; +} + +.grid { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + max-width: 800px; + margin-top: 3rem; +} + +.card { + margin: 1rem; + flex-basis: 45%; + padding: 1.5rem; + text-align: left; + color: inherit; + text-decoration: none; + border: 1px solid #eaeaea; + border-radius: 10px; + transition: color 0.15s ease, border-color 0.15s ease; +} + +.card:hover, +.card:focus, +.card:active { + color: #0070f3; + border-color: #0070f3; +} + +.card h3 { + margin: 0 0 1rem 0; + font-size: 1.5rem; +} + +.card p { + margin: 0; + font-size: 1.25rem; + line-height: 1.5; +} + +.logo { + height: 1em; +} + +@media (max-width: 600px) { + .grid { + width: 100%; + flex-direction: column; + } +} diff --git a/striker-ui/styles/globals.css b/striker-ui/styles/globals.css new file mode 100644 index 00000000..e5e2dcc2 --- /dev/null +++ b/striker-ui/styles/globals.css @@ -0,0 +1,16 @@ +html, +body { + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, + Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; +} + +a { + color: inherit; + text-decoration: none; +} + +* { + box-sizing: border-box; +} diff --git a/striker-ui/tsconfig.json b/striker-ui/tsconfig.json new file mode 100644 index 00000000..da9f8bc0 --- /dev/null +++ b/striker-ui/tsconfig.json @@ -0,0 +1,21 @@ +{ + "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", + "noImplicitAny": true, + "typeRoots": ["types"] + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/striker-ui/types/APIRouteHandlerMap.d.ts b/striker-ui/types/APIRouteHandlerMap.d.ts new file mode 100644 index 00000000..7fb4834f --- /dev/null +++ b/striker-ui/types/APIRouteHandlerMap.d.ts @@ -0,0 +1,5 @@ +import { NextApiHandler } from 'next'; + +declare type APIRouteHandlerMap = Readonly<{ + [httpMethod: string]: NextApiHandler; +}>; diff --git a/striker-ui/types/AnvilList.d.ts b/striker-ui/types/AnvilList.d.ts new file mode 100644 index 00000000..3b2e72fe --- /dev/null +++ b/striker-ui/types/AnvilList.d.ts @@ -0,0 +1,3 @@ +declare type AnvilList = { + anvils: AnvilListItem[]; +}; diff --git a/striker-ui/types/AnvilListItem.d.ts b/striker-ui/types/AnvilListItem.d.ts new file mode 100644 index 00000000..1a7fd5b1 --- /dev/null +++ b/striker-ui/types/AnvilListItem.d.ts @@ -0,0 +1,3 @@ +declare type AnvilListItem = { + uuid: string; +}; diff --git a/striker-ui/types/AnvilNodeStatus.d.ts b/striker-ui/types/AnvilNodeStatus.d.ts new file mode 100644 index 00000000..fd80e47d --- /dev/null +++ b/striker-ui/types/AnvilNodeStatus.d.ts @@ -0,0 +1,3 @@ +declare type AnvilNodeStatus = { + on: 0 | 1; +}; diff --git a/striker-ui/types/AnvilStatus.d.ts b/striker-ui/types/AnvilStatus.d.ts new file mode 100644 index 00000000..13e7df01 --- /dev/null +++ b/striker-ui/types/AnvilStatus.d.ts @@ -0,0 +1,4 @@ +declare type AnvilStatus = { + nodes: AnvilNodeStatus[]; + timestamp: number; +}; diff --git a/striker-ui/types/FetchResponse.d.ts b/striker-ui/types/FetchResponse.d.ts new file mode 100644 index 00000000..eedc8156 --- /dev/null +++ b/striker-ui/types/FetchResponse.d.ts @@ -0,0 +1,3 @@ +declare type FetchResponse = { + error: Error | null; +}; diff --git a/striker-ui/types/GetAllAnvilResponse.d.ts b/striker-ui/types/GetAllAnvilResponse.d.ts new file mode 100644 index 00000000..dfb0338b --- /dev/null +++ b/striker-ui/types/GetAllAnvilResponse.d.ts @@ -0,0 +1,3 @@ +declare type GetAllAnvilResponse = FetchResponse & { + anvilList: AnvilList; +}; diff --git a/striker-ui/types/GetOneAnvilResponse.d.ts b/striker-ui/types/GetOneAnvilResponse.d.ts new file mode 100644 index 00000000..42114d09 --- /dev/null +++ b/striker-ui/types/GetOneAnvilResponse.d.ts @@ -0,0 +1,3 @@ +declare type GetOneAnvilResponse = FetchResponse & { + anvilStatus: AnvilStatus; +}; From 4ad5640ab080c8b1a05937e7c590d4126a607c69 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Wed, 17 Feb 2021 18:52:53 -0500 Subject: [PATCH 006/271] chore(striker-ui): install styled-components --- striker-ui/package-lock.json | 330 +++++++++++++++++++++++++++++++++++ striker-ui/package.json | 2 + 2 files changed, 332 insertions(+) diff --git a/striker-ui/package-lock.json b/striker-ui/package-lock.json index 2f51f872..798494f2 100644 --- a/striker-ui/package-lock.json +++ b/striker-ui/package-lock.json @@ -88,6 +88,135 @@ "@babel/highlight": "^7.10.4" } }, + "@babel/generator": { + "version": "7.12.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz", + "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==", + "requires": { + "@babel/types": "^7.12.13", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "requires": { + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "requires": { + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, "@babel/helper-validator-identifier": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", @@ -103,6 +232,11 @@ "js-tokens": "^4.0.0" } }, + "@babel/parser": { + "version": "7.12.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.16.tgz", + "integrity": "sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw==" + }, "@babel/runtime": { "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", @@ -121,6 +255,77 @@ "regenerator-runtime": "^0.13.4" } }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/traverse": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz", + "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + } + } + }, "@babel/types": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", @@ -506,6 +711,29 @@ "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", "dev": true }, + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "requires": { + "@emotion/memoize": "0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, "@eslint/eslintrc": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", @@ -679,6 +907,16 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.14.0.tgz", "integrity": "sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==" }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dev": true, + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/json-schema": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", @@ -731,6 +969,17 @@ "csstype": "^3.0.2" } }, + "@types/styled-components": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.7.tgz", + "integrity": "sha512-BJzPhFygYspyefAGFZTZ/8lCEY4Tk+Iqktvnko3xmJf9LrLqs3+grxPeU3O0zLl6yjbYBopD0/VikbHgXDbJtA==", + "dev": true, + "requires": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, "@typescript-eslint/eslint-plugin": { "version": "4.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.0.tgz", @@ -1150,6 +1399,17 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, + "babel-plugin-styled-components": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz", + "integrity": "sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-module-imports": "^7.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11" + } + }, "babel-plugin-syntax-jsx": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", @@ -1356,6 +1616,11 @@ "quick-lru": "^4.0.1" } }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + }, "caniuse-lite": { "version": "1.0.30001185", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz", @@ -1837,6 +2102,21 @@ "randomfill": "^1.0.3" } }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" + }, + "css-to-react-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -3150,6 +3430,14 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -3446,6 +3734,11 @@ "esprima": "^4.0.0" } }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -4692,6 +4985,11 @@ } } }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, "prebuild-install": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.0.tgz", @@ -5176,6 +5474,11 @@ "safe-buffer": "^5.0.1" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "sharp": { "version": "0.26.3", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz", @@ -5627,6 +5930,33 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "optional": true }, + "styled-components": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.2.1.tgz", + "integrity": "sha512-sBdgLWrCFTKtmZm/9x7jkIabjFNVzCUeKfoQsM6R3saImkUnjx0QYdLwJHBjY9ifEcmjDamJDVfknWm1yxZPxQ==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^0.8.8", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "styled-jsx": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.3.2.tgz", diff --git a/striker-ui/package.json b/striker-ui/package.json index 0984a5b4..5bc4c652 100644 --- a/striker-ui/package.json +++ b/striker-ui/package.json @@ -15,6 +15,7 @@ "next": "10.0.6", "react": "17.0.1", "react-dom": "17.0.1", + "styled-components": "^5.2.1", "swr": "^0.4.2" }, "devDependencies": { @@ -22,6 +23,7 @@ "@commitlint/config-conventional": "^11.0.0", "@types/node": "^14.14.26", "@types/react": "^17.0.1", + "@types/styled-components": "^5.1.7", "@typescript-eslint/eslint-plugin": "^4.15.0", "@typescript-eslint/parser": "^4.15.0", "eslint": "^7.19.0", From 256c732f8e3c0540d4da9c0265bf0adc952fc7e1 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Wed, 17 Feb 2021 19:11:06 -0500 Subject: [PATCH 007/271] fix(striker-ui): override document to enable styled components --- striker-ui/pages/_document.tsx | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 striker-ui/pages/_document.tsx diff --git a/striker-ui/pages/_document.tsx b/striker-ui/pages/_document.tsx new file mode 100644 index 00000000..b3c85303 --- /dev/null +++ b/striker-ui/pages/_document.tsx @@ -0,0 +1,36 @@ +import Document, { DocumentContext, DocumentInitialProps } from 'next/document'; +import { ServerStyleSheet } from 'styled-components'; + +class StyledDocument extends Document { + static async getInitialProps( + context: DocumentContext, + ): Promise { + const styleSheet = new ServerStyleSheet(); + const originalRenderPage = context.renderPage; + + try { + context.renderPage = () => + originalRenderPage({ + enhanceApp: (App) => (props) => + // eslint-disable-next-line react/jsx-props-no-spreading + styleSheet.collectStyles(), + }); + + const initialProps = await Document.getInitialProps(context); + + return { + ...initialProps, + styles: ( + <> + {initialProps.styles} + {styleSheet.getStyleElement()} + + ), + }; + } finally { + styleSheet.seal(); + } + } +} + +export default StyledDocument; From e9b0a0339f44a045f04260092e2f5def93e3bd42 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Wed, 17 Feb 2021 22:15:48 -0500 Subject: [PATCH 008/271] fix(striker-ui): add switch to use fake data --- .../lib/Anvil/handleAPIFakeGetAllAnvil.ts | 22 ++++++++++++++++++ .../lib/Anvil/handleAPIFakeGetOneAnvil.ts | 23 +++++++++++++++++++ striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts | 15 +++++++----- striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts | 15 +++++++----- 4 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 striker-ui/lib/Anvil/handleAPIFakeGetAllAnvil.ts create mode 100644 striker-ui/lib/Anvil/handleAPIFakeGetOneAnvil.ts diff --git a/striker-ui/lib/Anvil/handleAPIFakeGetAllAnvil.ts b/striker-ui/lib/Anvil/handleAPIFakeGetAllAnvil.ts new file mode 100644 index 00000000..c18ce14d --- /dev/null +++ b/striker-ui/lib/Anvil/handleAPIFakeGetAllAnvil.ts @@ -0,0 +1,22 @@ +import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'; + +const handleAPIFakeGetAllAnvil: NextApiHandler = ( + request: NextApiRequest, + response: NextApiResponse, +): void => { + response.send({ + anvils: [ + { + uuid: '62ed925e-dddc-4541-acae-525fc99a9945', + }, + { + uuid: '1040f37a-9847-4025-af2e-973b0f136979', + }, + { + uuid: '52057dd0-04a6-4097-8a38-deb036116190', + }, + ], + }); +}; + +export default handleAPIFakeGetAllAnvil; diff --git a/striker-ui/lib/Anvil/handleAPIFakeGetOneAnvil.ts b/striker-ui/lib/Anvil/handleAPIFakeGetOneAnvil.ts new file mode 100644 index 00000000..7eb24f97 --- /dev/null +++ b/striker-ui/lib/Anvil/handleAPIFakeGetOneAnvil.ts @@ -0,0 +1,23 @@ +import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'; + +const handleAPIFakeGetOneAnvil: NextApiHandler = ( + request: NextApiRequest, + response: NextApiResponse, +): void => { + const generateNodeState: () => 0 | 1 = (): 0 | 1 => + Math.random() > 0.5 ? 1 : 0; + + response.send({ + nodes: [ + { + on: generateNodeState(), + }, + { + on: generateNodeState(), + }, + ], + timestamp: Math.round(Date.now() / 1000), + }); +}; + +export default handleAPIFakeGetOneAnvil; diff --git a/striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts b/striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts index 3e49d86e..25261bb1 100644 --- a/striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts +++ b/striker-ui/lib/Anvil/handleAPIGetAllAnvil.ts @@ -1,11 +1,12 @@ -import { NextApiRequest, NextApiResponse } from 'next'; +import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'; import getAllAnvil from './getAllAnvil'; +import handleAPIFakeGetAllAnvil from './handleAPIFakeGetAllAnvil'; -async function handleAPIGetAllAnvil( +const handleAPIGetAllAnvil: NextApiHandler = async ( request: NextApiRequest, - response: NextApiResponse, -): Promise { + response: NextApiResponse, +): Promise => { const { anvilList, error }: GetAllAnvilResponse = await getAllAnvil(); if (error) { @@ -15,6 +16,8 @@ async function handleAPIGetAllAnvil( } response.send(anvilList); -} +}; -export default handleAPIGetAllAnvil; +export default process.env.IS_USE_FAKE_DATA + ? handleAPIFakeGetAllAnvil + : handleAPIGetAllAnvil; diff --git a/striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts b/striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts index 134fac38..c58bf618 100644 --- a/striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts +++ b/striker-ui/lib/Anvil/handleAPIGetOneAnvil.ts @@ -1,11 +1,12 @@ -import { NextApiRequest, NextApiResponse } from 'next'; +import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'; import getOneAnvil from './getOneAnvil'; +import handleAPIFakeGetOneAnvil from './handleAPIFakeGetOneAnvil'; -async function handleAPIGetOneAnvil( +const handleAPIGetOneAnvil: NextApiHandler = async ( request: NextApiRequest, - response: NextApiResponse, -): Promise { + response: NextApiResponse, +): Promise => { const { query: { uuid }, }: NextApiRequest = request; @@ -23,6 +24,8 @@ async function handleAPIGetOneAnvil( } response.send(anvilStatus); -} +}; -export default handleAPIGetOneAnvil; +export default process.env.IS_USE_FAKE_DATA + ? handleAPIFakeGetOneAnvil + : handleAPIGetOneAnvil; From 0b2c9d4e357876680c4bded572f5f599ef3285fd Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Wed, 17 Feb 2021 23:12:47 -0500 Subject: [PATCH 009/271] feat(striker-ui): add default theme --- striker-ui/lib/consts/DEFAULT_THEME.ts | 10 ++++++++++ striker-ui/types/DefaultTheme.d.ts | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 striker-ui/lib/consts/DEFAULT_THEME.ts create mode 100644 striker-ui/types/DefaultTheme.d.ts diff --git a/striker-ui/lib/consts/DEFAULT_THEME.ts b/striker-ui/lib/consts/DEFAULT_THEME.ts new file mode 100644 index 00000000..92f43cee --- /dev/null +++ b/striker-ui/lib/consts/DEFAULT_THEME.ts @@ -0,0 +1,10 @@ +import { DefaultTheme } from 'styled-components'; + +const DEFAULT_THEME: Readonly = { + colors: { + primary: '#f2f2f2', + secondary: '#343434', + }, +}; + +export default DEFAULT_THEME; diff --git a/striker-ui/types/DefaultTheme.d.ts b/striker-ui/types/DefaultTheme.d.ts new file mode 100644 index 00000000..16d45c7b --- /dev/null +++ b/striker-ui/types/DefaultTheme.d.ts @@ -0,0 +1,10 @@ +import 'styled-components'; + +declare module 'styled-components' { + export interface DefaultTheme { + colors: { + primary: string; + secondary: string; + }; + } +} From 18bf5fbd6261694a5204f4e691820bdb5559f773 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Wed, 17 Feb 2021 23:38:44 -0500 Subject: [PATCH 010/271] fix(striker-ui): add basic style to anvil list --- striker-ui/components/atoms/Label.tsx | 23 ++++++++++++++++++ striker-ui/components/molecules/List.tsx | 23 ++++++++++++++++++ striker-ui/pages/demo-anvil-list.tsx | 31 ++++++++++++++++++++---- 3 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 striker-ui/components/atoms/Label.tsx create mode 100644 striker-ui/components/molecules/List.tsx diff --git a/striker-ui/components/atoms/Label.tsx b/striker-ui/components/atoms/Label.tsx new file mode 100644 index 00000000..d64abfc2 --- /dev/null +++ b/striker-ui/components/atoms/Label.tsx @@ -0,0 +1,23 @@ +import { FunctionComponent } from 'react'; +import styled from 'styled-components'; + +import DEFAULT_THEME from '../../lib/consts/DEFAULT_THEME'; + +type LabelProps = { + text: string; +}; + +const StyledLabel = styled.span` + font-size: 1em; + color: ${(props) => props.theme.colors.primary}; +`; + +StyledLabel.defaultProps = { + theme: DEFAULT_THEME, +}; + +const Label: FunctionComponent = ({ text }) => { + return {text}; +}; + +export default Label; diff --git a/striker-ui/components/molecules/List.tsx b/striker-ui/components/molecules/List.tsx new file mode 100644 index 00000000..ea45c11d --- /dev/null +++ b/striker-ui/components/molecules/List.tsx @@ -0,0 +1,23 @@ +import { FunctionComponent } from 'react'; +import styled from 'styled-components'; + +import DEFAULT_THEME from '../../lib/consts/DEFAULT_THEME'; + +type ListProps = { + isAlignHorizontal?: boolean; +}; + +const StyledList = styled.div` + display: flex; + flex-direction: ${(props) => (props.isAlignHorizontal ? 'row' : 'column')}; +`; + +StyledList.defaultProps = { + theme: DEFAULT_THEME, +}; + +const List: FunctionComponent = ({ children }) => { + return {children}; +}; + +export default List; diff --git a/striker-ui/pages/demo-anvil-list.tsx b/striker-ui/pages/demo-anvil-list.tsx index 4fbf1166..813853ba 100644 --- a/striker-ui/pages/demo-anvil-list.tsx +++ b/striker-ui/pages/demo-anvil-list.tsx @@ -1,6 +1,11 @@ import { GetServerSidePropsResult, InferGetServerSidePropsType } from 'next'; +import styled from 'styled-components'; import API_BASE_URL from '../lib/consts/API_BASE_URL'; +import DEFAULT_THEME from '../lib/consts/DEFAULT_THEME'; + +import Label from '../components/atoms/Label'; +import List from '../components/molecules/List'; import fetchJSON from '../lib/fetchers/fetchJSON'; @@ -12,15 +17,31 @@ export async function getServerSideProps(): Promise< }; } +const StyledPageContainer = styled.div` + min-height: 100vh; + width: 100vw; + + background-color: ${(props) => props.theme.colors.secondary}; +`; + +StyledPageContainer.defaultProps = { + theme: DEFAULT_THEME, +}; + function DemoAnvilList({ anvils, }: InferGetServerSidePropsType): JSX.Element { return ( -
-

Demo Anvil List

-

anvils

-
{JSON.stringify(anvils, null, 4)}
-
+ + ); } From 33211c2d017b1e793f437eebdfc71d735d8e1e6d Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 18 Feb 2021 23:54:12 -0500 Subject: [PATCH 011/271] chore(striker-ui): add symlink to image assets --- striker-ui/public/pngs | 1 + 1 file changed, 1 insertion(+) create mode 120000 striker-ui/public/pngs diff --git a/striker-ui/public/pngs b/striker-ui/public/pngs new file mode 120000 index 00000000..081e9216 --- /dev/null +++ b/striker-ui/public/pngs @@ -0,0 +1 @@ +../../html/skins/alteeve/images/ \ No newline at end of file From a8e7c9643292eab4eb69072ae259f80fb527dc3a Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 19 Feb 2021 00:01:01 -0500 Subject: [PATCH 012/271] feat(striker-ui): add default theme --- striker-ui/lib/consts/DEFAULT_THEME.ts | 1 + striker-ui/types/DefaultTheme.d.ts | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/striker-ui/lib/consts/DEFAULT_THEME.ts b/striker-ui/lib/consts/DEFAULT_THEME.ts index 92f43cee..86a86355 100644 --- a/striker-ui/lib/consts/DEFAULT_THEME.ts +++ b/striker-ui/lib/consts/DEFAULT_THEME.ts @@ -4,6 +4,7 @@ const DEFAULT_THEME: Readonly = { colors: { primary: '#f2f2f2', secondary: '#343434', + tertiary: '#adadad', }, }; diff --git a/striker-ui/types/DefaultTheme.d.ts b/striker-ui/types/DefaultTheme.d.ts index 16d45c7b..5200a3f3 100644 --- a/striker-ui/types/DefaultTheme.d.ts +++ b/striker-ui/types/DefaultTheme.d.ts @@ -1,10 +1,11 @@ import 'styled-components'; declare module 'styled-components' { - export interface DefaultTheme { + export type DefaultTheme = { colors: { primary: string; secondary: string; + tertiary: string; }; - } + }; } From ab10805adf667a576804791a7d464aa2fce5c85f Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 19 Feb 2021 00:02:02 -0500 Subject: [PATCH 013/271] fix(striker-ui): correct Anvil status page header --- striker-ui/pages/demo-anvil-status.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/pages/demo-anvil-status.tsx b/striker-ui/pages/demo-anvil-status.tsx index 1ce72d8d..aa424695 100644 --- a/striker-ui/pages/demo-anvil-status.tsx +++ b/striker-ui/pages/demo-anvil-status.tsx @@ -20,7 +20,7 @@ function DemoAnvilStatus({ }: InferGetServerSidePropsType): JSX.Element { return (
-

Demo Anvil List

+

Demo Anvil Status

nodes

{JSON.stringify(nodes, null, 4)}

timestamp

From b08332227a724d5d3e65d1aca8e6f49988dcc940 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 19 Feb 2021 00:03:30 -0500 Subject: [PATCH 014/271] feat(striker-ui): add atom Label --- striker-ui/components/atoms/Label.tsx | 11 ++++++----- striker-ui/types/LabelProps.d.ts | 3 +++ 2 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 striker-ui/types/LabelProps.d.ts diff --git a/striker-ui/components/atoms/Label.tsx b/striker-ui/components/atoms/Label.tsx index d64abfc2..bfc48291 100644 --- a/striker-ui/components/atoms/Label.tsx +++ b/striker-ui/components/atoms/Label.tsx @@ -3,13 +3,14 @@ import styled from 'styled-components'; import DEFAULT_THEME from '../../lib/consts/DEFAULT_THEME'; -type LabelProps = { - text: string; -}; +const StyledLabel = styled.h2` + padding: 0; + margin: 0; -const StyledLabel = styled.span` - font-size: 1em; color: ${(props) => props.theme.colors.primary}; + + font-size: 1em; + font-weight: normal; `; StyledLabel.defaultProps = { diff --git a/striker-ui/types/LabelProps.d.ts b/striker-ui/types/LabelProps.d.ts new file mode 100644 index 00000000..65d06788 --- /dev/null +++ b/striker-ui/types/LabelProps.d.ts @@ -0,0 +1,3 @@ +type LabelProps = { + text: string; +}; From baace23719a150552782da86b75ba97d0f5b8cce Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 19 Feb 2021 00:18:44 -0500 Subject: [PATCH 015/271] feat(striker-ui): add atom Button --- striker-ui/components/atoms/Button.tsx | 103 +++++++++++++++++++++++++ striker-ui/types/ButtonImageProps.d.ts | 4 + striker-ui/types/ButtonProps.d.ts | 10 +++ 3 files changed, 117 insertions(+) create mode 100644 striker-ui/components/atoms/Button.tsx create mode 100644 striker-ui/types/ButtonImageProps.d.ts create mode 100644 striker-ui/types/ButtonProps.d.ts diff --git a/striker-ui/components/atoms/Button.tsx b/striker-ui/components/atoms/Button.tsx new file mode 100644 index 00000000..74e7e8ac --- /dev/null +++ b/striker-ui/components/atoms/Button.tsx @@ -0,0 +1,103 @@ +import { FunctionComponent } from 'react'; +import Image from 'next/image'; +import Link from 'next/link'; +import styled from 'styled-components'; + +import DEFAULT_THEME from '../../lib/consts/DEFAULT_THEME'; + +import Label from './Label'; + +const DEFAULT_BUTTON_IMAGE_SIZE = 30; + +const StyledButton = styled.button` + display: flex; + + flex-direction: row; + flex-wrap: nowrap; +`; + +const StyledSeparator = styled.div` + margin-right: 0.5em; +`; + +StyledButton.defaultProps = { + theme: DEFAULT_THEME, +}; + +const getButtonImageElement: ( + imageProps?: ButtonImageProps, +) => JSX.Element | undefined = (imageProps) => { + let imageElement: JSX.Element | undefined; + + if (imageProps) { + const { + src, + width = DEFAULT_BUTTON_IMAGE_SIZE, + height = DEFAULT_BUTTON_IMAGE_SIZE, + } = imageProps; + + imageElement = ; + } + + return imageElement; +}; + +const getButtonLabelElement: ( + labelProps?: LabelProps, +) => JSX.Element | undefined = (labelProps) => { + let labelElement: JSX.Element | undefined; + + if (labelProps) { + const { text } = labelProps; + + labelElement =
- + */ ); }; diff --git a/striker-ui/next.config.js b/striker-ui/next.config.js new file mode 100644 index 00000000..ec314adc --- /dev/null +++ b/striker-ui/next.config.js @@ -0,0 +1,5 @@ +module.exports = { + pageExtensions: ['ts', 'tsx'], + poweredByHeader: false, + reactStrictMode: true, +}; diff --git a/striker-ui/package-lock.json b/striker-ui/package-lock.json index 798494f2..3b601ee2 100644 --- a/striker-ui/package-lock.json +++ b/striker-ui/package-lock.json @@ -711,6 +711,11 @@ "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", "dev": true }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, "@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", @@ -782,6 +787,88 @@ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.1.tgz", "integrity": "sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==" }, + "@material-ui/core": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.11.3.tgz", + "integrity": "sha512-Adt40rGW6Uds+cAyk3pVgcErpzU/qxc7KBR94jFHBYretU4AtWZltYcNsbeMn9tXL86jjVL1kuGcIHsgLgFGRw==", + "requires": { + "@babel/runtime": "^7.4.4", + "@material-ui/styles": "^4.11.3", + "@material-ui/system": "^4.11.3", + "@material-ui/types": "^5.1.0", + "@material-ui/utils": "^4.11.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 || ^17.0.0", + "react-transition-group": "^4.4.0" + } + }, + "@material-ui/styles": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.3.tgz", + "integrity": "sha512-HzVzCG+PpgUGMUYEJ2rTEmQYeonGh41BYfILNFb/1ueqma+p1meSdu4RX6NjxYBMhf7k+jgfHFTTz+L1SXL/Zg==", + "requires": { + "@babel/runtime": "^7.4.4", + "@emotion/hash": "^0.8.0", + "@material-ui/types": "^5.1.0", + "@material-ui/utils": "^4.11.2", + "clsx": "^1.0.4", + "csstype": "^2.5.2", + "hoist-non-react-statics": "^3.3.2", + "jss": "^10.5.1", + "jss-plugin-camel-case": "^10.5.1", + "jss-plugin-default-unit": "^10.5.1", + "jss-plugin-global": "^10.5.1", + "jss-plugin-nested": "^10.5.1", + "jss-plugin-props-sort": "^10.5.1", + "jss-plugin-rule-value-function": "^10.5.1", + "jss-plugin-vendor-prefixer": "^10.5.1", + "prop-types": "^15.7.2" + }, + "dependencies": { + "csstype": { + "version": "2.6.16", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.16.tgz", + "integrity": "sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q==" + } + } + }, + "@material-ui/system": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.11.3.tgz", + "integrity": "sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw==", + "requires": { + "@babel/runtime": "^7.4.4", + "@material-ui/utils": "^4.11.2", + "csstype": "^2.5.2", + "prop-types": "^15.7.2" + }, + "dependencies": { + "csstype": { + "version": "2.6.16", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.16.tgz", + "integrity": "sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q==" + } + } + }, + "@material-ui/types": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", + "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==" + }, + "@material-ui/utils": { + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz", + "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==", + "requires": { + "@babel/runtime": "^7.4.4", + "prop-types": "^15.7.2", + "react-is": "^16.8.0 || ^17.0.0" + } + }, "@next/env": { "version": "10.0.6", "resolved": "https://registry.npmjs.org/@next/env/-/env-10.0.6.tgz", @@ -956,19 +1043,25 @@ "@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "dev": true + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" }, "@types/react": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.1.tgz", "integrity": "sha512-w8t9f53B2ei4jeOqf/gxtc2Sswnc3LBK5s0DyJcg5xd10tMHXts2N31cKjWfH9IC/JvEPa/YF1U4YeP1t4R6HQ==", - "dev": true, "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, + "@types/react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ==", + "requires": { + "@types/react": "*" + } + }, "@types/styled-components": { "version": "5.1.7", "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.7.tgz", @@ -1825,6 +1918,11 @@ } } }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -2117,6 +2215,15 @@ "postcss-value-parser": "^4.0.2" } }, + "css-vendor": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", + "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", + "requires": { + "@babel/runtime": "^7.8.3", + "is-in-browser": "^1.0.2" + } + }, "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -2176,8 +2283,7 @@ "csstype": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.6.tgz", - "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==", - "dev": true + "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==" }, "damerau-levenshtein": { "version": "1.0.6", @@ -2338,6 +2444,15 @@ "esutils": "^2.0.2" } }, + "dom-helpers": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", + "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "dom-serializer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz", @@ -3493,6 +3608,11 @@ "integrity": "sha512-0SjcaY21a+IRdx7p7r/X33Vc09UR2m8SbP8yfkhUX2/jAmwcz+GR7i9jXkp2pP3GfX23JhMkVP6SWwXB18uXtg==", "dev": true }, + "hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3528,6 +3648,14 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indefinite-observable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/indefinite-observable/-/indefinite-observable-2.0.1.tgz", + "integrity": "sha512-G8vgmork+6H9S8lUAg1gtXEj2JxIQTo0g2PbFiYOdjkziSI0F7UYBiVwhZRuixhBCNGczAls34+5HJPyZysvxQ==", + "requires": { + "symbol-observable": "1.2.0" + } + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -3622,6 +3750,11 @@ "is-extglob": "^2.1.1" } }, + "is-in-browser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", + "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" + }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", @@ -3781,6 +3914,85 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "jss": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.5.1.tgz", + "integrity": "sha512-hbbO3+FOTqVdd7ZUoTiwpHzKXIo5vGpMNbuXH1a0wubRSWLWSBvwvaq4CiHH/U42CmjOnp6lVNNs/l+Z7ZdDmg==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^3.0.2", + "indefinite-observable": "^2.0.1", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-camel-case": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.5.1.tgz", + "integrity": "sha512-9+oymA7wPtswm+zxVti1qiowC5q7bRdCJNORtns2JUj/QHp2QPXYwSNRD8+D2Cy3/CEMtdJzlNnt5aXmpS6NAg==", + "requires": { + "@babel/runtime": "^7.3.1", + "hyphenate-style-name": "^1.0.3", + "jss": "10.5.1" + } + }, + "jss-plugin-default-unit": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.5.1.tgz", + "integrity": "sha512-D48hJBc9Tj3PusvlillHW8Fz0y/QqA7MNmTYDQaSB/7mTrCZjt7AVRROExoOHEtd2qIYKOYJW3Jc2agnvsXRlQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.5.1" + } + }, + "jss-plugin-global": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.5.1.tgz", + "integrity": "sha512-jX4XpNgoaB8yPWw/gA1aPXJEoX0LNpvsROPvxlnYe+SE0JOhuvF7mA6dCkgpXBxfTWKJsno7cDSCgzHTocRjCQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.5.1" + } + }, + "jss-plugin-nested": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.5.1.tgz", + "integrity": "sha512-xXkWKOCljuwHNjSYcXrCxBnjd8eJp90KVFW1rlhvKKRXnEKVD6vdKXYezk2a89uKAHckSvBvBoDGsfZrldWqqQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.5.1", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-props-sort": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.5.1.tgz", + "integrity": "sha512-t+2vcevNmMg4U/jAuxlfjKt46D/jHzCPEjsjLRj/J56CvP7Iy03scsUP58Iw8mVnaV36xAUZH2CmAmAdo8994g==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.5.1" + } + }, + "jss-plugin-rule-value-function": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.5.1.tgz", + "integrity": "sha512-3gjrSxsy4ka/lGQsTDY8oYYtkt2esBvQiceGBB4PykXxHoGRz14tbCK31Zc6DHEnIeqsjMUGbq+wEly5UViStQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.5.1", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-vendor-prefixer": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.5.1.tgz", + "integrity": "sha512-cLkH6RaPZWHa1TqSfd2vszNNgxT1W0omlSjAd6hCFHp3KIocSrW21gaHjlMU26JpTHwkc+tJTCQOmE/O1A4FKQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "css-vendor": "^2.0.8", + "jss": "10.5.1" + } + }, "jsx-ast-utils": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", @@ -4954,6 +5166,11 @@ "ts-pnp": "^1.1.6" } }, + "popper.js": { + "version": "1.16.1-lts", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz", + "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==" + }, "postcss": { "version": "8.1.7", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.7.tgz", @@ -5204,6 +5421,17 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" }, + "react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -6005,6 +6233,11 @@ "dequal": "2.0.2" } }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, "table": { "version": "6.0.7", "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", @@ -6131,6 +6364,11 @@ "setimmediate": "^1.0.4" } }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -6234,6 +6472,11 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" }, + "typeface-muli": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/typeface-muli/-/typeface-muli-1.1.13.tgz", + "integrity": "sha512-FrbDCi7OKz6Mg8oK3bwAg3OTy3sGHXqb3ekSnOyHhvVCfSF/aiRTjv/KE5RJ1CfddhYDlBuTCQFNUfOOSlHObw==" + }, "typescript": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", diff --git a/striker-ui/package.json b/striker-ui/package.json index 5bc4c652..79cccaf1 100644 --- a/striker-ui/package.json +++ b/striker-ui/package.json @@ -12,11 +12,13 @@ "start": "next start" }, "dependencies": { + "@material-ui/core": "^4.11.3", "next": "10.0.6", "react": "17.0.1", "react-dom": "17.0.1", "styled-components": "^5.2.1", - "swr": "^0.4.2" + "swr": "^0.4.2", + "typeface-muli": "^1.1.13" }, "devDependencies": { "@commitlint/cli": "^11.0.0", diff --git a/striker-ui/pages/anvils/index.tsx b/striker-ui/pages/anvils/index.tsx index 6705467b..ebe9b388 100644 --- a/striker-ui/pages/anvils/index.tsx +++ b/striker-ui/pages/anvils/index.tsx @@ -1,4 +1,5 @@ import { GetServerSidePropsResult, InferGetServerSidePropsType } from 'next'; +import { createMuiTheme, ThemeProvider } from '@material-ui/core/styles'; import API_BASE_URL from '../../lib/consts/API_BASE_URL'; @@ -6,10 +7,39 @@ import Button from '../../components/atoms/Button'; import Header from '../../components/organisms/Header'; import List from '../../components/molecules/List'; import PageCenterContainer from '../../components/organisms/PageCenterContainer'; -import PageContainer from '../../components/organisms/PageContainer'; import fetchJSON from '../../lib/fetchers/fetchJSON'; +import 'typeface-muli'; + +const theme = createMuiTheme({ + palette: { + primary: { + main: '#343434', + light: '#3E78B2', + }, + secondary: { + main: '#343434', + }, + }, + typography: { + fontFamily: 'Muli', + fontSize: 14, + }, + overrides: { + MuiRadio: { + root: { + color: '#222222', + }, + colorSecondary: { + '&$checked': { + color: '#555555', + }, + }, + }, + }, +}); + export async function getServerSideProps(): Promise< GetServerSidePropsResult > { @@ -22,7 +52,7 @@ function DemoAnvilList({ anvils, }: InferGetServerSidePropsType): JSX.Element { return ( - +
@@ -38,7 +68,7 @@ function DemoAnvilList({ )} - + ); } From 0ba269f9f3adca3f419fc4ad62b5cd83d8865f6a Mon Sep 17 00:00:00 2001 From: Josue Date: Mon, 8 Mar 2021 11:19:10 -0500 Subject: [PATCH 034/271] feat: add material ui to the header --- striker-ui/components/organisms/Header.tsx | 27 ----- striker-ui/styles/Home.module.css | 122 --------------------- 2 files changed, 149 deletions(-) delete mode 100644 striker-ui/styles/Home.module.css diff --git a/striker-ui/components/organisms/Header.tsx b/striker-ui/components/organisms/Header.tsx index 6722f99a..6efc1b44 100644 --- a/striker-ui/components/organisms/Header.tsx +++ b/striker-ui/components/organisms/Header.tsx @@ -24,33 +24,6 @@ const Header: FunctionComponent = () => { - /* -
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- */ ); }; diff --git a/striker-ui/styles/Home.module.css b/striker-ui/styles/Home.module.css deleted file mode 100644 index 42e7e600..00000000 --- a/striker-ui/styles/Home.module.css +++ /dev/null @@ -1,122 +0,0 @@ -.container { - min-height: 100vh; - padding: 0 0.5rem; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.main { - padding: 5rem 0; - flex: 1; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.footer { - width: 100%; - height: 100px; - border-top: 1px solid #eaeaea; - display: flex; - justify-content: center; - align-items: center; -} - -.footer img { - margin-left: 0.5rem; -} - -.footer a { - display: flex; - justify-content: center; - align-items: center; -} - -.title a { - color: #0070f3; - text-decoration: none; -} - -.title a:hover, -.title a:focus, -.title a:active { - text-decoration: underline; -} - -.title { - margin: 0; - line-height: 1.15; - font-size: 4rem; -} - -.title, -.description { - text-align: center; -} - -.description { - line-height: 1.5; - font-size: 1.5rem; -} - -.code { - background: #fafafa; - border-radius: 5px; - padding: 0.75rem; - font-size: 1.1rem; - font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, - Bitstream Vera Sans Mono, Courier New, monospace; -} - -.grid { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - max-width: 800px; - margin-top: 3rem; -} - -.card { - margin: 1rem; - flex-basis: 45%; - padding: 1.5rem; - text-align: left; - color: inherit; - text-decoration: none; - border: 1px solid #eaeaea; - border-radius: 10px; - transition: color 0.15s ease, border-color 0.15s ease; -} - -.card:hover, -.card:focus, -.card:active { - color: #0070f3; - border-color: #0070f3; -} - -.card h3 { - margin: 0 0 1rem 0; - font-size: 1.5rem; -} - -.card p { - margin: 0; - font-size: 1.25rem; - line-height: 1.5; -} - -.logo { - height: 1em; -} - -@media (max-width: 600px) { - .grid { - width: 100%; - flex-direction: column; - } -} From 6b0ce569f3d34403dfb071545fb55b34a5ca3fc4 Mon Sep 17 00:00:00 2001 From: Josue Date: Mon, 8 Mar 2021 11:26:46 -0500 Subject: [PATCH 035/271] feat: modify nextjs templates and index to use material ui --- striker-ui/pages/_app.tsx | 30 ++++++++-- striker-ui/pages/_document.tsx | 78 +++++++++++++++---------- striker-ui/pages/index.tsx | 102 +++++++++++++-------------------- 3 files changed, 113 insertions(+), 97 deletions(-) diff --git a/striker-ui/pages/_app.tsx b/striker-ui/pages/_app.tsx index 5ddc17cb..d15ea99a 100644 --- a/striker-ui/pages/_app.tsx +++ b/striker-ui/pages/_app.tsx @@ -1,10 +1,32 @@ +import { useEffect } from 'react'; +import { AppProps } from 'next/app'; +import { ThemeProvider } from '@material-ui/core/styles'; +import theme from '../theme'; +import Header from '../components/organisms/Header'; import '../styles/globals.css'; -import { AppProps } from 'next/app'; +const App = ({ Component, pageProps }: AppProps): JSX.Element => { + // return ; + // This hook is for ensuring the styling is in sync between client and server + useEffect(() => { + // Remove the server-side injected CSS. + const jssStyles = document.querySelector('#jss-server-side'); + if (jssStyles) { + jssStyles.parentElement?.removeChild(jssStyles); + } + }, []); -function App({ Component, pageProps }: AppProps): JSX.Element { // eslint-disable-next-line react/jsx-props-no-spreading - return ; -} + return ( + +
+ + ; + + ); +}; export default App; diff --git a/striker-ui/pages/_document.tsx b/striker-ui/pages/_document.tsx index b3c85303..3975d367 100644 --- a/striker-ui/pages/_document.tsx +++ b/striker-ui/pages/_document.tsx @@ -1,36 +1,52 @@ -import Document, { DocumentContext, DocumentInitialProps } from 'next/document'; -import { ServerStyleSheet } from 'styled-components'; +import { Children } from 'react'; +import Document, { Html, Head, Main, NextScript } from 'next/document'; +import { ServerStyleSheets } from '@material-ui/core/styles'; -class StyledDocument extends Document { - static async getInitialProps( - context: DocumentContext, - ): Promise { - const styleSheet = new ServerStyleSheet(); - const originalRenderPage = context.renderPage; - - try { - context.renderPage = () => - originalRenderPage({ - enhanceApp: (App) => (props) => - // eslint-disable-next-line react/jsx-props-no-spreading - styleSheet.collectStyles(), - }); +export default class MyDocument extends Document { + render(): JSX.Element { + return ( + + + + + +
+ + + + ); + } +} - const initialProps = await Document.getInitialProps(context); +// `getInitialProps` belongs to `_document` (instead of `_app`), +// it's compatible with server-side generation (SSG). +MyDocument.getInitialProps = async (ctx) => { + // Render app and page and get the context of the page with collected side effects. + const sheets = new ServerStyleSheets(); + const originalRenderPage = ctx.renderPage; - return { - ...initialProps, - styles: ( - <> - {initialProps.styles} - {styleSheet.getStyleElement()} - + ctx.renderPage = () => + originalRenderPage({ + enhanceApp: (App) => (props) => + sheets.collect( + , ), - }; - } finally { - styleSheet.seal(); - } - } -} + }); + + const initialProps = await Document.getInitialProps(ctx); -export default StyledDocument; + return { + ...initialProps, + // Styles fragment is rendered after the app and page rendering finish. + styles: [ + ...Children.toArray(initialProps.styles), + sheets.getStyleElement(), + ], + }; +}; diff --git a/striker-ui/pages/index.tsx b/striker-ui/pages/index.tsx index 9aa1e948..f17b780a 100644 --- a/striker-ui/pages/index.tsx +++ b/striker-ui/pages/index.tsx @@ -1,67 +1,45 @@ -import Head from 'next/head'; -import styles from '../styles/Home.module.css'; +import { GetServerSidePropsResult } from 'next'; +import { Grid } from '@material-ui/core'; + +import Anvils from '../components/Anvils'; +import Nodes from '../components/Nodes'; +import CPU from '../components/CPU'; +import SharedStorage from '../components/SharedStorage'; +import ReplicatedStorage from '../components/ReplicatedStorage'; +import State from '../components/State'; +import Memory from '../components/Memory'; + +import API_BASE_URL from '../lib/consts/API_BASE_URL'; +import fetchJSON from '../lib/fetchers/fetchJSON'; + +import 'typeface-muli'; + +export async function getServerSideProps(): Promise< + GetServerSidePropsResult +> { + return { + props: await fetchJSON(`${API_BASE_URL}/api/anvils`), + }; +} -function Home(): JSX.Element { +const Home = (): JSX.Element => { return ( - + + + + + + + + + + + + + + + ); -} +}; export default Home; From 1a73783c04f34652cf15ceaa0b3ceaf5f16b9d4b Mon Sep 17 00:00:00 2001 From: Josue Date: Mon, 8 Mar 2021 11:27:52 -0500 Subject: [PATCH 036/271] feat: add material ui theme --- striker-ui/theme/index.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 striker-ui/theme/index.ts diff --git a/striker-ui/theme/index.ts b/striker-ui/theme/index.ts new file mode 100644 index 00000000..b254ec6d --- /dev/null +++ b/striker-ui/theme/index.ts @@ -0,0 +1,35 @@ +import createMuiTheme, { Theme } from '@material-ui/core/styles/createMuiTheme'; +import { PANEL_BACKGROUND } from '../lib/consts/DEFAULT_THEME'; + +const theme: Theme = createMuiTheme({ + palette: { + primary: { + main: '#343434', + light: '#3E78B2', + }, + secondary: { + main: '#343434', + }, + background: { + paper: PANEL_BACKGROUND, + }, + }, + typography: { + fontSize: 14, + }, + overrides: { + MuiSwitch: { + root: { + padding: 8, + }, + track: { + borderRadius: 0, + }, + thumb: { + borderRadius: 0, + }, + }, + }, +}); + +export default theme; From f45c0cd9568f5be58e6dd833898891d45607ff3a Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 9 Mar 2021 11:21:37 -0500 Subject: [PATCH 037/271] refactor: elements related to previous approach (before material ui) --- striker-ui/pages/anvils/[uuid].tsx | 108 -------------------------- striker-ui/pages/anvils/index.tsx | 75 ------------------ striker-ui/pages/api/anvils/[uuid].ts | 20 ----- striker-ui/pages/api/anvils/index.ts | 20 ----- striker-ui/pages/api/hello.ts | 9 --- 5 files changed, 232 deletions(-) delete mode 100644 striker-ui/pages/anvils/[uuid].tsx delete mode 100644 striker-ui/pages/anvils/index.tsx delete mode 100644 striker-ui/pages/api/anvils/[uuid].ts delete mode 100644 striker-ui/pages/api/anvils/index.ts delete mode 100644 striker-ui/pages/api/hello.ts diff --git a/striker-ui/pages/anvils/[uuid].tsx b/striker-ui/pages/anvils/[uuid].tsx deleted file mode 100644 index d88cfb8b..00000000 --- a/striker-ui/pages/anvils/[uuid].tsx +++ /dev/null @@ -1,108 +0,0 @@ -import { NextPage } from 'next'; -import styled from 'styled-components'; -import { useRouter } from 'next/dist/client/router'; - -import DEFAULT_THEME from '../../lib/consts/DEFAULT_THEME'; - -import ExtendedDate from '../../lib/extended_date/ExtendedDate'; -import Header from '../../components/organisms/Header'; -import Label from '../../components/atoms/Label'; -import List from '../../components/molecules/List'; -import PageCenterContainer from '../../components/organisms/PageCenterContainer'; -import PageContainer from '../../components/organisms/PageContainer'; -import ToggleSwitch from '../../components/atoms/ToggleSwitch'; - -import useOneAnvil from '../../lib/anvil/useOneAnvil'; - -const StyledAnvilNodeStatus = styled.div` - display: flex; - - flex-direction: column; - - width: 100%; - height: 100%; -`; - -const StyledAnvilNodePower = styled.div` - display: flex; - - flex-direction: row; - - justify-content: space-around; - - width: 100%; - - margin-top: 1em; -`; - -StyledAnvilNodeStatus.defaultProps = { - theme: DEFAULT_THEME, -}; - -StyledAnvilNodePower.defaultProps = { - theme: DEFAULT_THEME, -}; - -const DemoAnvilStatus: NextPage = (): JSX.Element => { - const router = useRouter(); - const { uuid } = router.query; - const anvilUUID: string = uuid instanceof Array ? uuid[0] : uuid ?? ''; - const { - anvilStatus: { nodes, timestamp }, - error, - isLoading, - } = useOneAnvil(anvilUUID); - - const lastUpdatedDatetime: string = new ExtendedDate( - timestamp * 1000, - ).toLocaleISOString(); - - return ( - -
- - - {(() => { - let resultElement: JSX.Element[]; - - if (isLoading) { - resultElement = [ - - - - - - ); -}; - -export default DemoAnvilStatus; diff --git a/striker-ui/pages/anvils/index.tsx b/striker-ui/pages/anvils/index.tsx deleted file mode 100644 index ebe9b388..00000000 --- a/striker-ui/pages/anvils/index.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { GetServerSidePropsResult, InferGetServerSidePropsType } from 'next'; -import { createMuiTheme, ThemeProvider } from '@material-ui/core/styles'; - -import API_BASE_URL from '../../lib/consts/API_BASE_URL'; - -import Button from '../../components/atoms/Button'; -import Header from '../../components/organisms/Header'; -import List from '../../components/molecules/List'; -import PageCenterContainer from '../../components/organisms/PageCenterContainer'; - -import fetchJSON from '../../lib/fetchers/fetchJSON'; - -import 'typeface-muli'; - -const theme = createMuiTheme({ - palette: { - primary: { - main: '#343434', - light: '#3E78B2', - }, - secondary: { - main: '#343434', - }, - }, - typography: { - fontFamily: 'Muli', - fontSize: 14, - }, - overrides: { - MuiRadio: { - root: { - color: '#222222', - }, - colorSecondary: { - '&$checked': { - color: '#555555', - }, - }, - }, - }, -}); - -export async function getServerSideProps(): Promise< - GetServerSidePropsResult -> { - return { - props: await fetchJSON(`${API_BASE_URL}/api/anvils`), - }; -} - -function DemoAnvilList({ - anvils, -}: InferGetServerSidePropsType): JSX.Element { - return ( - -
- - - {anvils.map( - (anvil: AnvilListItem): JSX.Element => ( - + + + + + + {ICONS.map( + (icon): JSX.Element => ( + + ), + )} + - - + + + ); }; From 45d0368d6f77843036af9c6d531cc3fe1770f4dd Mon Sep 17 00:00:00 2001 From: Josue Date: Wed, 12 May 2021 17:47:18 -0400 Subject: [PATCH 206/271] refactor: add icons and text to the drawer --- striker-ui/components/AnvilDrawer.tsx | 25 +++++++++++++---- striker-ui/components/Header.tsx | 2 +- striker-ui/lib/consts/ICONS.ts | 40 +++++++++++++++++++++------ 3 files changed, 52 insertions(+), 15 deletions(-) diff --git a/striker-ui/components/AnvilDrawer.tsx b/striker-ui/components/AnvilDrawer.tsx index 28e0460a..dcc52b63 100644 --- a/striker-ui/components/AnvilDrawer.tsx +++ b/striker-ui/components/AnvilDrawer.tsx @@ -2,6 +2,7 @@ import { Drawer, List, ListItem } from '@material-ui/core'; import { makeStyles, createStyles } from '@material-ui/core/styles'; import { Dispatch, SetStateAction } from 'react'; import { BodyText } from './Text'; +import { ICONS, ICON_SIZE } from '../lib/consts/ICONS'; interface DrawerProps { open: boolean; @@ -11,7 +12,9 @@ interface DrawerProps { const useStyles = makeStyles(() => createStyles({ list: { - width: 'auto', + width: '15vw', + backdropFilter: 'blur(10px)', + opacity: 0.7, }, }), ); @@ -21,11 +24,21 @@ const AnvilDrawer = ({ open, setOpen }: DrawerProps): JSX.Element => { return ( setOpen(!open)}> -
- - - - +
+ + {ICONS.map( + (icon): JSX.Element => ( + + + + + ), + )}
diff --git a/striker-ui/components/Header.tsx b/striker-ui/components/Header.tsx index 0a1467a8..592e21b2 100644 --- a/striker-ui/components/Header.tsx +++ b/striker-ui/components/Header.tsx @@ -49,7 +49,7 @@ const Header = (): JSX.Element => { ), diff --git a/striker-ui/lib/consts/ICONS.ts b/striker-ui/lib/consts/ICONS.ts index ac6da859..2e137703 100644 --- a/striker-ui/lib/consts/ICONS.ts +++ b/striker-ui/lib/consts/ICONS.ts @@ -1,12 +1,36 @@ export const ICONS = [ - '/pngs/files_on.png', - '/pngs/tasks_no-jobs_icon.png', - '/pngs/configure_icon_on.png', - '/pngs/striker_icon_on.png', - '/pngs/anvil_icon_on.png', - '/pngs/email_on.png', - '/pngs/users_icon_on.png', - '/pngs/help_icon_on.png', + { + text: 'Files', + image: '/pngs/files_on.png', + }, + { + text: 'Tasks', + image: '/pngs/tasks_no-jobs_icon.png', + }, + { + text: 'Configure', + image: '/pngs/configure_icon_on.png', + }, + { + text: 'Striker', + image: '/pngs/striker_icon_on.png', + }, + { + text: 'Anvil', + image: '/pngs/anvil_icon_on.png', + }, + { + text: 'Email', + image: '/pngs/email_on.png', + }, + { + text: 'Users', + image: '/pngs/users_icon_on.png', + }, + { + text: 'Help', + image: '/pngs/help_icon_on.png', + }, ]; export const ICON_SIZE = { From 10650e8bb2aaded3b99ac087e651bc753a43d0e0 Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 13 May 2021 18:23:03 -0400 Subject: [PATCH 207/271] refactor: add legacy icons and text to AnvilDrawer --- striker-ui/components/AnvilDrawer.tsx | 49 ++++++++++++++++++++------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/striker-ui/components/AnvilDrawer.tsx b/striker-ui/components/AnvilDrawer.tsx index dcc52b63..6346edcd 100644 --- a/striker-ui/components/AnvilDrawer.tsx +++ b/striker-ui/components/AnvilDrawer.tsx @@ -1,8 +1,9 @@ -import { Drawer, List, ListItem } from '@material-ui/core'; +import { Divider, Drawer, List, ListItem, Box } from '@material-ui/core'; import { makeStyles, createStyles } from '@material-ui/core/styles'; import { Dispatch, SetStateAction } from 'react'; import { BodyText } from './Text'; import { ICONS, ICON_SIZE } from '../lib/consts/ICONS'; +import { DIVIDER } from '../lib/consts/DEFAULT_THEME'; interface DrawerProps { open: boolean; @@ -12,9 +13,16 @@ interface DrawerProps { const useStyles = makeStyles(() => createStyles({ list: { - width: '15vw', - backdropFilter: 'blur(10px)', - opacity: 0.7, + width: '200px', + backdropFilter: 'blur(5px) opacity(0)', + }, + container: {}, + divider: { + background: DIVIDER, + }, + text: { + paddingTop: '0.5em', + paddingLeft: '1em', }, }), ); @@ -23,19 +31,34 @@ const AnvilDrawer = ({ open, setOpen }: DrawerProps): JSX.Element => { const classes = useStyles(); return ( - setOpen(!open)}> -
+ setOpen(!open)} + > +
+ + + + {ICONS.map( (icon): JSX.Element => ( - - + + + + + + + + ), )} From 7209d47aa27458c4a2438489a02428ea2ed4d4f4 Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 13 May 2021 18:23:57 -0400 Subject: [PATCH 208/271] style: hide legacy icons in mobile layout and center search bar --- striker-ui/components/Header.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/striker-ui/components/Header.tsx b/striker-ui/components/Header.tsx index 592e21b2..5f8f6f47 100644 --- a/striker-ui/components/Header.tsx +++ b/striker-ui/components/Header.tsx @@ -22,6 +22,17 @@ const useStyles = makeStyles((theme) => barElement: { padding: 0, }, + icons: { + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, + searchBar: { + [theme.breakpoints.down('sm')]: { + flexGrow: 1, + paddingLeft: '15vw', + }, + }, }), ); @@ -40,10 +51,10 @@ const Header = (): JSX.Element => { - + - + {ICONS.map( (icon): JSX.Element => ( Date: Thu, 13 May 2021 18:24:31 -0400 Subject: [PATCH 209/271] fix: use ems with icon sizes --- striker-ui/lib/consts/ICONS.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/striker-ui/lib/consts/ICONS.ts b/striker-ui/lib/consts/ICONS.ts index 2e137703..cd892dde 100644 --- a/striker-ui/lib/consts/ICONS.ts +++ b/striker-ui/lib/consts/ICONS.ts @@ -34,6 +34,6 @@ export const ICONS = [ ]; export const ICON_SIZE = { - width: 40, - height: 40, + width: '40em', + height: '40em', }; From 9cdb9fc0fa69b8df76b582954325e1c5eba8f6ca Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 14 May 2021 13:33:48 -0400 Subject: [PATCH 210/271] style: use Headertext for admin header --- striker-ui/components/AnvilDrawer.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/striker-ui/components/AnvilDrawer.tsx b/striker-ui/components/AnvilDrawer.tsx index 6346edcd..4dd7aa71 100644 --- a/striker-ui/components/AnvilDrawer.tsx +++ b/striker-ui/components/AnvilDrawer.tsx @@ -1,7 +1,7 @@ import { Divider, Drawer, List, ListItem, Box } from '@material-ui/core'; import { makeStyles, createStyles } from '@material-ui/core/styles'; import { Dispatch, SetStateAction } from 'react'; -import { BodyText } from './Text'; +import { BodyText, HeaderText } from './Text'; import { ICONS, ICON_SIZE } from '../lib/consts/ICONS'; import { DIVIDER } from '../lib/consts/DEFAULT_THEME'; @@ -21,8 +21,8 @@ const useStyles = makeStyles(() => background: DIVIDER, }, text: { - paddingTop: '0.5em', - paddingLeft: '1em', + paddingTop: '.5em', + paddingLeft: '1.5em', }, }), ); @@ -40,7 +40,7 @@ const AnvilDrawer = ({ open, setOpen }: DrawerProps): JSX.Element => {
- + {ICONS.map( From 162831ebf26603cb3560f562fd8c743926314b3f Mon Sep 17 00:00:00 2001 From: Josue Date: Wed, 19 May 2021 11:03:24 -0400 Subject: [PATCH 211/271] refactor: move eslint disable rule to a better place --- striker-ui/components/AnvilDrawer.tsx | 3 ++- striker-ui/components/Header.tsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/striker-ui/components/AnvilDrawer.tsx b/striker-ui/components/AnvilDrawer.tsx index 4dd7aa71..31b617d4 100644 --- a/striker-ui/components/AnvilDrawer.tsx +++ b/striker-ui/components/AnvilDrawer.tsx @@ -51,7 +51,8 @@ const AnvilDrawer = ({ open, setOpen }: DrawerProps): JSX.Element => { diff --git a/striker-ui/components/Header.tsx b/striker-ui/components/Header.tsx index 5f8f6f47..395a503d 100644 --- a/striker-ui/components/Header.tsx +++ b/striker-ui/components/Header.tsx @@ -60,7 +60,8 @@ const Header = (): JSX.Element => { ), From e55775898308ed2c535decc448eb6cab6aa43ae9 Mon Sep 17 00:00:00 2001 From: Josue Date: Wed, 19 May 2021 11:04:14 -0400 Subject: [PATCH 212/271] refactor: remove unused styles in the drawer component --- striker-ui/components/AnvilDrawer.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/striker-ui/components/AnvilDrawer.tsx b/striker-ui/components/AnvilDrawer.tsx index 31b617d4..c3b124c6 100644 --- a/striker-ui/components/AnvilDrawer.tsx +++ b/striker-ui/components/AnvilDrawer.tsx @@ -14,9 +14,7 @@ const useStyles = makeStyles(() => createStyles({ list: { width: '200px', - backdropFilter: 'blur(5px) opacity(0)', }, - container: {}, divider: { background: DIVIDER, }, From b70984f5e57b307f7b1e08159b0c2bfde97bc862 Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 14 May 2021 15:39:10 -0400 Subject: [PATCH 213/271] feat: add removable prop to nodes in anvil status --- striker-ui/types/AnvilStatus.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/striker-ui/types/AnvilStatus.d.ts b/striker-ui/types/AnvilStatus.d.ts index 5f0c0668..44f54033 100644 --- a/striker-ui/types/AnvilStatus.d.ts +++ b/striker-ui/types/AnvilStatus.d.ts @@ -2,6 +2,7 @@ declare type AnvilStatusNode = { state: 'unknown' | 'off' | 'on' | 'accessible' | 'ready'; state_percent: number; state_message: string; + removable: boolean; }; declare type AnvilStatus = { From 894558d177e8fc50d4ad8430d1f38744b111d83e Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 14 May 2021 15:40:22 -0400 Subject: [PATCH 214/271] refactor: allow disabling membership switch for nodes in Nodes component --- striker-ui/components/Nodes/AnvilNode.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/components/Nodes/AnvilNode.tsx b/striker-ui/components/Nodes/AnvilNode.tsx index fa128135..148d0e63 100644 --- a/striker-ui/components/Nodes/AnvilNode.tsx +++ b/striker-ui/components/Nodes/AnvilNode.tsx @@ -90,7 +90,7 @@ const AnvilNode = ({ - + {node.state !== 'ready' && ( From a2809556c1075a7e71b85a6511930f4fedfded7b Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 14 May 2021 15:41:40 -0400 Subject: [PATCH 215/271] style: add disable colour to pallete and include it in MUI style --- striker-ui/lib/consts/DEFAULT_THEME.ts | 1 + striker-ui/theme/index.ts | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/striker-ui/lib/consts/DEFAULT_THEME.ts b/striker-ui/lib/consts/DEFAULT_THEME.ts index 3cfdb2b3..249d34cb 100644 --- a/striker-ui/lib/consts/DEFAULT_THEME.ts +++ b/striker-ui/lib/consts/DEFAULT_THEME.ts @@ -11,3 +11,4 @@ export const HOVER = '#444'; export const UNSELECTED = '#666'; export const DIVIDER = '#888'; export const SELECTED_ANVIL = '#00ff00'; +export const DISABLED = '#AAA'; diff --git a/striker-ui/theme/index.ts b/striker-ui/theme/index.ts index 50449c4b..5ea8a5a6 100644 --- a/striker-ui/theme/index.ts +++ b/striker-ui/theme/index.ts @@ -4,6 +4,7 @@ import { TEXT, PURPLE, BLUE, + DISABLED, } from '../lib/consts/DEFAULT_THEME'; const theme: Theme = createMuiTheme({ @@ -27,26 +28,28 @@ const theme: Theme = createMuiTheme({ MuiSwitch: { switchBase: { // Controls default (unchecked) color for the thumb - color: '#fff', + color: TEXT, }, root: { padding: 8, }, track: { - borderRadius: 0, + borderRadius: 3, border: 3, backgroundColor: PURPLE, + opacity: 1, '$checked$checked + &': { // Controls checked color for the track backgroundColor: BLUE, - }, - '&$checked + $track': { opacity: 1, }, + '$disabled$disabled + &': { + backgroundColor: DISABLED, + }, }, thumb: { color: TEXT, - borderRadius: 0, + borderRadius: 3, }, }, }, From fa075598b8186c20bc27ad71a638439904574b39 Mon Sep 17 00:00:00 2001 From: Josue Date: Wed, 19 May 2021 11:23:18 -0400 Subject: [PATCH 216/271] refactor: remove unused style class --- striker-ui/components/AnvilDrawer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/components/AnvilDrawer.tsx b/striker-ui/components/AnvilDrawer.tsx index c3b124c6..de3ed149 100644 --- a/striker-ui/components/AnvilDrawer.tsx +++ b/striker-ui/components/AnvilDrawer.tsx @@ -35,7 +35,7 @@ const AnvilDrawer = ({ open, setOpen }: DrawerProps): JSX.Element => { open={open} onClose={() => setOpen(!open)} > -
+
From 65677c0bfb0ee9523011a9d9cac3fc84642d4766 Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 20 May 2021 15:21:03 -0400 Subject: [PATCH 217/271] refactor: add border radius to constants --- striker-ui/components/Bars/AllocationBar.tsx | 5 +++-- striker-ui/components/Bars/ProgressBar.tsx | 11 ++++++++--- striker-ui/components/Decorator.tsx | 10 ++++++++-- striker-ui/components/Header.tsx | 3 ++- striker-ui/components/Panels/InnerPanel.tsx | 4 ++-- striker-ui/components/Panels/Panel.tsx | 8 ++++++-- striker-ui/components/Panels/PanelHeader.tsx | 4 ++-- striker-ui/lib/consts/DEFAULT_THEME.ts | 2 ++ striker-ui/theme/index.ts | 5 +++-- 9 files changed, 36 insertions(+), 16 deletions(-) diff --git a/striker-ui/components/Bars/AllocationBar.tsx b/striker-ui/components/Bars/AllocationBar.tsx index 77c4ea4e..ce0874a8 100644 --- a/striker-ui/components/Bars/AllocationBar.tsx +++ b/striker-ui/components/Bars/AllocationBar.tsx @@ -5,6 +5,7 @@ import { RED, BLUE, PANEL_BACKGROUND, + BORDER_RADIUS, } from '../../lib/consts/DEFAULT_THEME'; const breakpointWarning = 70; @@ -13,13 +14,13 @@ const breakpointAlert = 90; const BorderLinearProgress = withStyles({ root: { height: '1em', - borderRadius: '2px', + borderRadius: BORDER_RADIUS, }, colorPrimary: { backgroundColor: PANEL_BACKGROUND, }, bar: { - borderRadius: '3px', + borderRadius: BORDER_RADIUS, }, })(LinearProgress); diff --git a/striker-ui/components/Bars/ProgressBar.tsx b/striker-ui/components/Bars/ProgressBar.tsx index a7d193d6..6ab4c400 100644 --- a/striker-ui/components/Bars/ProgressBar.tsx +++ b/striker-ui/components/Bars/ProgressBar.tsx @@ -1,19 +1,24 @@ import { makeStyles, withStyles } from '@material-ui/core/styles'; import { LinearProgress } from '@material-ui/core'; -import { PURPLE, BLUE, PANEL_BACKGROUND } from '../../lib/consts/DEFAULT_THEME'; +import { + PURPLE, + BLUE, + PANEL_BACKGROUND, + BORDER_RADIUS, +} from '../../lib/consts/DEFAULT_THEME'; const completed = 100; const BorderLinearProgress = withStyles({ root: { height: '1em', - borderRadius: '2px', + borderRadius: BORDER_RADIUS, }, colorPrimary: { backgroundColor: PANEL_BACKGROUND, }, bar: { - borderRadius: '3px', + borderRadius: BORDER_RADIUS, }, })(LinearProgress); diff --git a/striker-ui/components/Decorator.tsx b/striker-ui/components/Decorator.tsx index fe5f9eb4..4bab031e 100644 --- a/striker-ui/components/Decorator.tsx +++ b/striker-ui/components/Decorator.tsx @@ -1,5 +1,11 @@ import { makeStyles } from '@material-ui/core/styles'; -import { BLUE, GREY, PURPLE, RED } from '../lib/consts/DEFAULT_THEME'; +import { + BLUE, + GREY, + PURPLE, + RED, + BORDER_RADIUS, +} from '../lib/consts/DEFAULT_THEME'; export type Colours = 'ok' | 'off' | 'error' | 'warning'; @@ -7,7 +13,7 @@ const useStyles = makeStyles(() => ({ decorator: { width: '1.4em', height: '100%', - borderRadius: 2, + borderRadius: BORDER_RADIUS, }, ok: { backgroundColor: BLUE, diff --git a/striker-ui/components/Header.tsx b/striker-ui/components/Header.tsx index 395a503d..25b333ed 100644 --- a/striker-ui/components/Header.tsx +++ b/striker-ui/components/Header.tsx @@ -3,6 +3,7 @@ import AppBar from '@material-ui/core/AppBar'; import { makeStyles, createStyles } from '@material-ui/core/styles'; import { Box, Button } from '@material-ui/core'; import { ICONS, ICON_SIZE } from '../lib/consts/ICONS'; +import { BORDER_RADIUS } from '../lib/consts/DEFAULT_THEME'; import AnvilDrawer from './AnvilDrawer'; const useStyles = makeStyles((theme) => @@ -17,7 +18,7 @@ const useStyles = makeStyles((theme) => height: '2.8em', width: '30vw', backgroundColor: theme.palette.secondary.main, - borderRadius: '3px', + borderRadius: BORDER_RADIUS, }, barElement: { padding: 0, diff --git a/striker-ui/components/Panels/InnerPanel.tsx b/striker-ui/components/Panels/InnerPanel.tsx index f3c0aadc..22c22274 100644 --- a/striker-ui/components/Panels/InnerPanel.tsx +++ b/striker-ui/components/Panels/InnerPanel.tsx @@ -1,7 +1,7 @@ import { ReactNode } from 'react'; import { Box } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; -import { DIVIDER } from '../../lib/consts/DEFAULT_THEME'; +import { BORDER_RADIUS, DIVIDER } from '../../lib/consts/DEFAULT_THEME'; type Props = { children: ReactNode; @@ -10,7 +10,7 @@ type Props = { const useStyles = makeStyles(() => ({ innerBody: { borderWidth: '1px', - borderRadius: '3px', + borderRadius: BORDER_RADIUS, borderStyle: 'solid', borderColor: DIVIDER, marginTop: '1.4em', diff --git a/striker-ui/components/Panels/Panel.tsx b/striker-ui/components/Panels/Panel.tsx index f25610da..33fee228 100644 --- a/striker-ui/components/Panels/Panel.tsx +++ b/striker-ui/components/Panels/Panel.tsx @@ -1,6 +1,10 @@ import { ReactNode } from 'react'; import { makeStyles } from '@material-ui/core/styles'; -import { PANEL_BACKGROUND, TEXT } from '../../lib/consts/DEFAULT_THEME'; +import { + BORDER_RADIUS, + PANEL_BACKGROUND, + TEXT, +} from '../../lib/consts/DEFAULT_THEME'; type Props = { children: ReactNode; @@ -25,7 +29,7 @@ const useStyles = makeStyles(() => ({ border: '1px', borderColor: TEXT, borderWidth: '1px', - borderRadius: '3px', + borderRadius: BORDER_RADIUS, borderStyle: 'solid', padding: 0, margin: 0, diff --git a/striker-ui/components/Panels/PanelHeader.tsx b/striker-ui/components/Panels/PanelHeader.tsx index 164254e0..82c9b9a2 100644 --- a/striker-ui/components/Panels/PanelHeader.tsx +++ b/striker-ui/components/Panels/PanelHeader.tsx @@ -1,7 +1,7 @@ import { ReactNode } from 'react'; import { Box } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; -import { DIVIDER } from '../../lib/consts/DEFAULT_THEME'; +import { BORDER_RADIUS, DIVIDER } from '../../lib/consts/DEFAULT_THEME'; type Props = { children: ReactNode; @@ -20,7 +20,7 @@ const useStyles = makeStyles(() => ({ content: '""', borderColor: DIVIDER, borderWidth: '1px', - borderRadius: '3px', + borderRadius: BORDER_RADIUS, borderStyle: 'solid', width: '100%', }, diff --git a/striker-ui/lib/consts/DEFAULT_THEME.ts b/striker-ui/lib/consts/DEFAULT_THEME.ts index 249d34cb..820fbc23 100644 --- a/striker-ui/lib/consts/DEFAULT_THEME.ts +++ b/striker-ui/lib/consts/DEFAULT_THEME.ts @@ -12,3 +12,5 @@ export const UNSELECTED = '#666'; export const DIVIDER = '#888'; export const SELECTED_ANVIL = '#00ff00'; export const DISABLED = '#AAA'; + +export const BORDER_RADIUS = '3px'; diff --git a/striker-ui/theme/index.ts b/striker-ui/theme/index.ts index 5ea8a5a6..ce2ae799 100644 --- a/striker-ui/theme/index.ts +++ b/striker-ui/theme/index.ts @@ -5,6 +5,7 @@ import { PURPLE, BLUE, DISABLED, + BORDER_RADIUS, } from '../lib/consts/DEFAULT_THEME'; const theme: Theme = createMuiTheme({ @@ -34,7 +35,7 @@ const theme: Theme = createMuiTheme({ padding: 8, }, track: { - borderRadius: 3, + borderRadius: BORDER_RADIUS, border: 3, backgroundColor: PURPLE, opacity: 1, @@ -49,7 +50,7 @@ const theme: Theme = createMuiTheme({ }, thumb: { color: TEXT, - borderRadius: 3, + borderRadius: BORDER_RADIUS, }, }, }, From 2fe146d58ca1421b4007fc89f0df875f78a7b713 Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 25 May 2021 11:03:41 -0400 Subject: [PATCH 218/271] refactor: add types to handle setting a node's power and memebership --- striker-ui/types/NodeSet.d.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 striker-ui/types/NodeSet.d.ts diff --git a/striker-ui/types/NodeSet.d.ts b/striker-ui/types/NodeSet.d.ts new file mode 100644 index 00000000..60bb188a --- /dev/null +++ b/striker-ui/types/NodeSet.d.ts @@ -0,0 +1,11 @@ +declare type NodeSet = { + host_uuid: string; +}; + +declare type NodeSetPower = NodeSet & { + is_on: boolean; +}; + +declare type NodeSetMembership = NodeSet & { + is_membership: boolean; +}; From 73af9f6e57d5c0ea5ee8d56f7384a169c4088141 Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 25 May 2021 11:45:05 -0400 Subject: [PATCH 219/271] refactor: add sending a request to the backend when switches change state for power and memebership --- striker-ui/components/Nodes/AnvilNode.tsx | 23 +++++++++++++++++++++-- striker-ui/lib/fetchers/putJSON.ts | 11 +++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 striker-ui/lib/fetchers/putJSON.ts diff --git a/striker-ui/components/Nodes/AnvilNode.tsx b/striker-ui/components/Nodes/AnvilNode.tsx index 148d0e63..99a43108 100644 --- a/striker-ui/components/Nodes/AnvilNode.tsx +++ b/striker-ui/components/Nodes/AnvilNode.tsx @@ -6,6 +6,8 @@ import { BodyText } from '../Text'; import nodeState from '../../lib/consts/NODES'; import Decorator, { Colours } from '../Decorator'; +import putJSON from '../../lib/fetchers/putJSON'; + const useStyles = makeStyles((theme) => ({ root: { overflow: 'auto', @@ -84,13 +86,30 @@ const AnvilNode = ({ - + + putJSON('/anvils/set_power', { + host_uuid: node.node_uuid, + is_on: !(node.state === 'ready'), + }) + } + /> - + + putJSON('/anvils/set_membership', { + host_uuid: node.node_uuid, + is_member: !(node.state === 'ready'), + }) + } + /> {node.state !== 'ready' && ( diff --git a/striker-ui/lib/fetchers/putJSON.ts b/striker-ui/lib/fetchers/putJSON.ts new file mode 100644 index 00000000..472f9ded --- /dev/null +++ b/striker-ui/lib/fetchers/putJSON.ts @@ -0,0 +1,11 @@ +const putJSON = (uri: string, data: T): void => { + fetch(`${process.env.NEXT_PUBLIC_API_URL}${uri}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }); +}; + +export default putJSON; From 431b88aa11319d8d311e1dd0ba61a1fca410e5e0 Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 25 May 2021 11:45:48 -0400 Subject: [PATCH 220/271] refactor: rewrite function using es6 for consistency --- striker-ui/lib/fetchers/fetchJSON.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/striker-ui/lib/fetchers/fetchJSON.ts b/striker-ui/lib/fetchers/fetchJSON.ts index db2464e2..07918bc9 100644 --- a/striker-ui/lib/fetchers/fetchJSON.ts +++ b/striker-ui/lib/fetchers/fetchJSON.ts @@ -1,5 +1,5 @@ -function fetchJSON(...args: [RequestInfo, RequestInit?]): Promise { +const fetchJSON = (...args: [RequestInfo, RequestInit?]): Promise => { return fetch(...args).then((response: Response) => response.json()); -} +}; export default fetchJSON; From e775b4ac16f068b8d8024471521807c477c28982 Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 25 May 2021 14:40:30 -0400 Subject: [PATCH 221/271] refactor: use regex instead of a map to display node state --- striker-ui/components/Nodes/AnvilNode.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/striker-ui/components/Nodes/AnvilNode.tsx b/striker-ui/components/Nodes/AnvilNode.tsx index 99a43108..4369b675 100644 --- a/striker-ui/components/Nodes/AnvilNode.tsx +++ b/striker-ui/components/Nodes/AnvilNode.tsx @@ -3,7 +3,6 @@ import { makeStyles } from '@material-ui/core/styles'; import { InnerPanel, PanelHeader } from '../Panels'; import { ProgressBar } from '../Bars'; import { BodyText } from '../Text'; -import nodeState from '../../lib/consts/NODES'; import Decorator, { Colours } from '../Decorator'; import putJSON from '../../lib/fetchers/putJSON'; @@ -59,6 +58,8 @@ const AnvilNode = ({ nodes: Array; }): JSX.Element => { const classes = useStyles(); + const regex = /(^|| )+[a-zA-Z0-9]/; + return ( {nodes && @@ -76,7 +77,10 @@ const AnvilNode = ({ c.toUpperCase()) || + 'Not Available' + } /> From 1255ca2599384d7f74c2469d3cad56d3ef63060f Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 25 May 2021 16:16:02 -0400 Subject: [PATCH 222/271] refactor: translate and display node state messages --- striker-ui/components/Nodes/AnvilNode.tsx | 28 +++++++++++++++++------ striker-ui/lib/consts/NODES.ts | 23 +++++++++++++------ 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/striker-ui/components/Nodes/AnvilNode.tsx b/striker-ui/components/Nodes/AnvilNode.tsx index 4369b675..385d34ff 100644 --- a/striker-ui/components/Nodes/AnvilNode.tsx +++ b/striker-ui/components/Nodes/AnvilNode.tsx @@ -4,6 +4,7 @@ import { InnerPanel, PanelHeader } from '../Panels'; import { ProgressBar } from '../Bars'; import { BodyText } from '../Text'; import Decorator, { Colours } from '../Decorator'; +import NODE_STATUS from '../../lib/consts/NODES'; import putJSON from '../../lib/fetchers/putJSON'; @@ -38,6 +39,15 @@ const useStyles = makeStyles((theme) => ({ }, })); +const selectStateMessage = (regex: RegExp, message: string): string => { + const msg = regex.exec(message); + + if (msg) { + return NODE_STATUS.get(msg[0]) || 'Error code not recognized'; + } + return 'Error code not found'; +}; + const selectDecorator = (state: string): Colours => { switch (state) { case 'ready': @@ -58,7 +68,8 @@ const AnvilNode = ({ nodes: Array; }): JSX.Element => { const classes = useStyles(); - const regex = /(^|| )+[a-zA-Z0-9]/; + const stateRegex = /^[a-zA-Z]/; + const messageRegex = /^(message_[0-9]+)/; return ( @@ -78,8 +89,9 @@ const AnvilNode = ({ c.toUpperCase()) || - 'Not Available' + node?.state?.replace(stateRegex, (c) => + c.toUpperCase(), + ) || 'Not Available' } /> @@ -119,11 +131,13 @@ const AnvilNode = ({ {node.state !== 'ready' && ( <> - - - - + diff --git a/striker-ui/lib/consts/NODES.ts b/striker-ui/lib/consts/NODES.ts index 292c659c..e460683c 100644 --- a/striker-ui/lib/consts/NODES.ts +++ b/striker-ui/lib/consts/NODES.ts @@ -1,9 +1,18 @@ -const nodeState: ReadonlyMap = new Map([ - ['unknown', 'Unknown'], - ['off', 'Off'], - ['on', 'On'], - ['accessible', 'Accessible'], - ['ready', 'Ready'], +const NODE_STATUS_MESSAGE_MAP: ReadonlyMap = new Map([ + ['message_0222', 'The node is in an unknown state.'], + ['message_0223', 'The node is a full cluster member.'], + [ + 'message_0224', + 'The node is coming online; the cluster resource manager is running (step 2/3).', + ], + [ + 'message_0225', + 'The node is coming online; the node is a consensus cluster member (step 1/3).', + ], + [ + 'message_0226', + 'The node has booted, but it is not (yet) joining the cluster.', + ], ]); -export default nodeState; +export default NODE_STATUS_MESSAGE_MAP; From 982a8e4f00b7c58c408c830d55309220af982bbe Mon Sep 17 00:00:00 2001 From: Josue Date: Wed, 26 May 2021 16:51:23 -0400 Subject: [PATCH 223/271] fix: use AnvilStatus type for hosts info instead of Anvil type --- striker-ui/components/Anvils/index.tsx | 2 +- striker-ui/components/Nodes/AnvilNode.tsx | 10 +++++----- striker-ui/components/Nodes/index.tsx | 4 ++-- striker-ui/types/AnvilList.d.ts | 9 +-------- striker-ui/types/AnvilStatus.d.ts | 6 +++--- 5 files changed, 12 insertions(+), 19 deletions(-) diff --git a/striker-ui/components/Anvils/index.tsx b/striker-ui/components/Anvils/index.tsx index 3dd6f7ae..a7cc4925 100644 --- a/striker-ui/components/Anvils/index.tsx +++ b/striker-ui/components/Anvils/index.tsx @@ -14,7 +14,7 @@ const Anvils = ({ list }: { list: AnvilList | undefined }): JSX.Element => { ); anvils.push({ ...anvil, - anvil_state: data?.anvil_state, + ...data, }); }); return ( diff --git a/striker-ui/components/Nodes/AnvilNode.tsx b/striker-ui/components/Nodes/AnvilNode.tsx index 385d34ff..983062c7 100644 --- a/striker-ui/components/Nodes/AnvilNode.tsx +++ b/striker-ui/components/Nodes/AnvilNode.tsx @@ -65,7 +65,7 @@ const selectDecorator = (state: string): Colours => { const AnvilNode = ({ nodes, }: { - nodes: Array; + nodes: Array; }): JSX.Element => { const classes = useStyles(); const stateRegex = /^[a-zA-Z]/; @@ -77,11 +77,11 @@ const AnvilNode = ({ nodes.map( (node): JSX.Element => { return ( - + - + @@ -106,7 +106,7 @@ const AnvilNode = ({ checked={node.state === 'ready'} onChange={() => putJSON('/anvils/set_power', { - host_uuid: node.node_uuid, + host_uuid: node.host_uuid, is_on: !(node.state === 'ready'), }) } @@ -121,7 +121,7 @@ const AnvilNode = ({ disabled={!node.removable} onChange={() => putJSON('/anvils/set_membership', { - host_uuid: node.node_uuid, + host_uuid: node.host_uuid, is_member: !(node.state === 'ready'), }) } diff --git a/striker-ui/components/Nodes/index.tsx b/striker-ui/components/Nodes/index.tsx index 145f00be..370e675b 100644 --- a/striker-ui/components/Nodes/index.tsx +++ b/striker-ui/components/Nodes/index.tsx @@ -15,11 +15,11 @@ const Nodes = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { return ( - {anvil.findIndex((a) => a.anvil_uuid === uuid) !== -1 && ( + {anvil.findIndex((a) => a.anvil_uuid === uuid) !== -1 && data && ( a.anvil_uuid === uuid)].nodes.map( (node, index) => { - return { ...node, ...data?.nodes[index] }; + return data.nodes[index]; }, )} /> diff --git a/striker-ui/types/AnvilList.d.ts b/striker-ui/types/AnvilList.d.ts index d0d3b760..e8bcc44d 100644 --- a/striker-ui/types/AnvilList.d.ts +++ b/striker-ui/types/AnvilList.d.ts @@ -1,14 +1,7 @@ -declare type AnvilListItemNode = { - node_name: string; - node_uuid: string; -}; - declare type AnvilListItem = { anvil_name: string; anvil_uuid: string; - anvil_state: string; - nodes: Array; -}; +} & AnvilStatus; declare type AnvilList = { anvils: Array; diff --git a/striker-ui/types/AnvilStatus.d.ts b/striker-ui/types/AnvilStatus.d.ts index 44f54033..b779c9af 100644 --- a/striker-ui/types/AnvilStatus.d.ts +++ b/striker-ui/types/AnvilStatus.d.ts @@ -1,5 +1,7 @@ declare type AnvilStatusNode = { state: 'unknown' | 'off' | 'on' | 'accessible' | 'ready'; + host_uuid: string; + host_name: string; state_percent: number; state_message: string; removable: boolean; @@ -7,7 +9,5 @@ declare type AnvilStatusNode = { declare type AnvilStatus = { anvil_state: 'optimal' | 'not_ready' | 'degraded'; - nodes: Array<{ - AnvilStatusNode; - }>; + nodes: Array; }; From ff9460cc496acf1833278e07677fabf8ccb0ed69 Mon Sep 17 00:00:00 2001 From: Josue Date: Wed, 26 May 2021 16:52:57 -0400 Subject: [PATCH 224/271] refactor: use node status to determine Anvil status, and add set_power for an anvil --- .../components/Anvils/SelectedAnvil.tsx | 20 ++++++++++++++++--- striker-ui/types/AnvilSet.d.ts | 4 ++++ 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 striker-ui/types/AnvilSet.d.ts diff --git a/striker-ui/components/Anvils/SelectedAnvil.tsx b/striker-ui/components/Anvils/SelectedAnvil.tsx index 983d401a..ae5f1cb7 100644 --- a/striker-ui/components/Anvils/SelectedAnvil.tsx +++ b/striker-ui/components/Anvils/SelectedAnvil.tsx @@ -1,4 +1,4 @@ -import { useState, useContext } from 'react'; +import { useContext } from 'react'; import { Switch, Box } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; import { HeaderText } from '../Text'; @@ -6,6 +6,7 @@ import { SELECTED_ANVIL } from '../../lib/consts/DEFAULT_THEME'; import anvilState from '../../lib/consts/ANVILS'; import { AnvilContext } from '../AnvilContext'; import Decorator, { Colours } from '../Decorator'; +import putJSON from '../../lib/fetchers/putJSON'; const useStyles = makeStyles(() => ({ root: { @@ -32,10 +33,15 @@ const selectDecorator = (state: string): Colours => { } }; +const isAnvilOn = (anvil: AnvilListItem): boolean => + !( + anvil.nodes.findIndex(({ state }: AnvilStatusNode) => state !== 'off') === + -1 + ); + const SelectedAnvil = ({ list }: { list: AnvilListItem[] }): JSX.Element => { const { uuid } = useContext(AnvilContext); const classes = useStyles(); - const [checked, setChecked] = useState(true); const index = list.findIndex( (anvil: AnvilListItem) => anvil.anvil_uuid === uuid, @@ -57,7 +63,15 @@ const SelectedAnvil = ({ list }: { list: AnvilListItem[] }): JSX.Element => { /> - setChecked(!checked)} /> + + putJSON('/anvils/set_power', { + anvil_uuid: list[index].anvil_uuid, + is_on: !isAnvilOn(list[index]), + }) + } + /> )} diff --git a/striker-ui/types/AnvilSet.d.ts b/striker-ui/types/AnvilSet.d.ts new file mode 100644 index 00000000..c6f69eca --- /dev/null +++ b/striker-ui/types/AnvilSet.d.ts @@ -0,0 +1,4 @@ +declare type AnvilSet = { + anvil_uuid: string; + is_on: boolean; +}; From f79b9e3f04497df6d54782c3a80b0ac398a925bf Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 11:19:19 -0400 Subject: [PATCH 225/271] refactor: adopt back-end naming in all the components --- .../components/Anvils/SelectedAnvil.tsx | 2 +- .../AnvilNode.tsx => Hosts/AnvilHost.tsx} | 46 +++++++++---------- .../components/{Nodes => Hosts}/index.tsx | 16 +++---- striker-ui/components/Network/Network.tsx | 10 ++-- .../components/Network/processNetwork.ts | 24 +++++----- striker-ui/components/Servers.tsx | 8 ++-- .../SharedStorage/SharedStorage.tsx | 22 ++++----- ...dStorageNode.tsx => SharedStorageHost.tsx} | 24 +++++----- striker-ui/pages/index.tsx | 4 +- striker-ui/types/AnvilNetwork.d.ts | 10 ++-- striker-ui/types/AnvilSharedStorage.d.ts | 7 +-- striker-ui/types/AnvilStatus.d.ts | 4 +- striker-ui/types/NodeSet.d.ts | 6 +-- 13 files changed, 92 insertions(+), 91 deletions(-) rename striker-ui/components/{Nodes/AnvilNode.tsx => Hosts/AnvilHost.tsx} (77%) rename striker-ui/components/{Nodes => Hosts}/index.tsx (63%) rename striker-ui/components/SharedStorage/{SharedStorageNode.tsx => SharedStorageHost.tsx} (72%) diff --git a/striker-ui/components/Anvils/SelectedAnvil.tsx b/striker-ui/components/Anvils/SelectedAnvil.tsx index ae5f1cb7..65fe3687 100644 --- a/striker-ui/components/Anvils/SelectedAnvil.tsx +++ b/striker-ui/components/Anvils/SelectedAnvil.tsx @@ -35,7 +35,7 @@ const selectDecorator = (state: string): Colours => { const isAnvilOn = (anvil: AnvilListItem): boolean => !( - anvil.nodes.findIndex(({ state }: AnvilStatusNode) => state !== 'off') === + anvil.hosts.findIndex(({ state }: AnvilStatusHost) => state !== 'off') === -1 ); diff --git a/striker-ui/components/Nodes/AnvilNode.tsx b/striker-ui/components/Hosts/AnvilHost.tsx similarity index 77% rename from striker-ui/components/Nodes/AnvilNode.tsx rename to striker-ui/components/Hosts/AnvilHost.tsx index 983062c7..01511c70 100644 --- a/striker-ui/components/Nodes/AnvilNode.tsx +++ b/striker-ui/components/Hosts/AnvilHost.tsx @@ -4,7 +4,7 @@ import { InnerPanel, PanelHeader } from '../Panels'; import { ProgressBar } from '../Bars'; import { BodyText } from '../Text'; import Decorator, { Colours } from '../Decorator'; -import NODE_STATUS from '../../lib/consts/NODES'; +import HOST_STATUS from '../../lib/consts/NODES'; import putJSON from '../../lib/fetchers/putJSON'; @@ -43,7 +43,7 @@ const selectStateMessage = (regex: RegExp, message: string): string => { const msg = regex.exec(message); if (msg) { - return NODE_STATUS.get(msg[0]) || 'Error code not recognized'; + return HOST_STATUS.get(msg[0]) || 'Error code not recognized'; } return 'Error code not found'; }; @@ -62,10 +62,10 @@ const selectDecorator = (state: string): Colours => { } }; -const AnvilNode = ({ - nodes, +const AnvilHost = ({ + hosts, }: { - nodes: Array; + hosts: Array; }): JSX.Element => { const classes = useStyles(); const stateRegex = /^[a-zA-Z]/; @@ -73,23 +73,23 @@ const AnvilNode = ({ return ( - {nodes && - nodes.map( - (node): JSX.Element => { + {hosts && + hosts.map( + (host): JSX.Element => { return ( - + - + - + + host?.state?.replace(stateRegex, (c) => c.toUpperCase(), ) || 'Not Available' } @@ -103,11 +103,11 @@ const AnvilNode = ({ putJSON('/anvils/set_power', { - host_uuid: node.host_uuid, - is_on: !(node.state === 'ready'), + host_uuid: host.host_uuid, + is_on: !(host.state === 'ready'), }) } /> @@ -117,32 +117,32 @@ const AnvilNode = ({ putJSON('/anvils/set_membership', { - host_uuid: node.host_uuid, - is_member: !(node.state === 'ready'), + host_uuid: host.host_uuid, + is_member: !(host.state === 'ready'), }) } /> - {node.state !== 'ready' && ( + {host.state !== 'ready' && ( <> - + @@ -155,4 +155,4 @@ const AnvilNode = ({ ); }; -export default AnvilNode; +export default AnvilHost; diff --git a/striker-ui/components/Nodes/index.tsx b/striker-ui/components/Hosts/index.tsx similarity index 63% rename from striker-ui/components/Nodes/index.tsx rename to striker-ui/components/Hosts/index.tsx index 370e675b..802e3166 100644 --- a/striker-ui/components/Nodes/index.tsx +++ b/striker-ui/components/Hosts/index.tsx @@ -1,11 +1,11 @@ import { useContext } from 'react'; import { Panel } from '../Panels'; import { HeaderText } from '../Text'; -import AnvilNode from './AnvilNode'; +import AnvilHost from './AnvilHost'; import PeriodicFetch from '../../lib/fetchers/periodicFetch'; import { AnvilContext } from '../AnvilContext'; -const Nodes = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { +const Hosts = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const { uuid } = useContext(AnvilContext); const { data } = PeriodicFetch( @@ -14,12 +14,12 @@ const Nodes = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { return ( - + {anvil.findIndex((a) => a.anvil_uuid === uuid) !== -1 && data && ( - a.anvil_uuid === uuid)].nodes.map( - (node, index) => { - return data.nodes[index]; + a.anvil_uuid === uuid)].hosts.map( + (host, index) => { + return data.hosts[index]; }, )} /> @@ -28,4 +28,4 @@ const Nodes = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { ); }; -export default Nodes; +export default Hosts; diff --git a/striker-ui/components/Network/Network.tsx b/striker-ui/components/Network/Network.tsx index d3343173..032813a2 100644 --- a/striker-ui/components/Network/Network.tsx +++ b/striker-ui/components/Network/Network.tsx @@ -72,12 +72,12 @@ const Network = (): JSX.Element => { - {bond.nodes.map( - (node): JSX.Element => ( - + {bond.hosts.map( + (host): JSX.Element => ( + - - + + ), diff --git a/striker-ui/components/Network/processNetwork.ts b/striker-ui/components/Network/processNetwork.ts index 1399ea09..0a321312 100644 --- a/striker-ui/components/Network/processNetwork.ts +++ b/striker-ui/components/Network/processNetwork.ts @@ -2,8 +2,8 @@ const processNetworkData = (data: AnvilNetwork): ProcessedNetwork => { const processedBonds: string[] = []; const displayBonds: ProcessedNetwork = { bonds: [] }; - data?.nodes.forEach((node) => { - node.bonds.forEach((bond) => { + data?.hosts.forEach((host) => { + host.bonds.forEach((bond) => { const index = processedBonds.findIndex( (processed: string) => processed === bond.bond_name, ); @@ -15,18 +15,18 @@ const processNetworkData = (data: AnvilNetwork): ProcessedNetwork => { bond_uuid: bond.bond_uuid, bond_speed: 0, bond_state: 'degraded', - nodes: [ + hosts: [ { - host_name: node.host_name, - host_uuid: node.host_uuid, + host_name: host.host_name, + host_uuid: host.host_uuid, link: bond.links[0].is_active ? bond.links[0] : bond.links[1], }, ], }); } else { - displayBonds.bonds[index].nodes.push({ - host_name: node.host_name, - host_uuid: node.host_uuid, + displayBonds.bonds[index].hosts.push({ + host_name: host.host_name, + host_uuid: host.host_uuid, link: bond.links[0].is_active ? bond.links[0] : bond.links[1], }); } @@ -35,11 +35,11 @@ const processNetworkData = (data: AnvilNetwork): ProcessedNetwork => { /* eslint-disable no-param-reassign */ displayBonds.bonds.forEach((bond) => { - const nodeIndex = - bond.nodes[0].link.link_speed > bond.nodes[1].link.link_speed ? 1 : 0; + const hostIndex = + bond.hosts[0].link.link_speed > bond.hosts[1].link.link_speed ? 1 : 0; - bond.bond_speed = bond.nodes[nodeIndex].link.link_speed; - bond.bond_state = bond.nodes[nodeIndex].link.link_state; + bond.bond_speed = bond.hosts[hostIndex].link.link_speed; + bond.bond_state = bond.hosts[hostIndex].link.link_state; }); return displayBonds; }; diff --git a/striker-ui/components/Servers.tsx b/striker-ui/components/Servers.tsx index 9ea1e6e4..c458d48e 100644 --- a/striker-ui/components/Servers.tsx +++ b/striker-ui/components/Servers.tsx @@ -87,14 +87,14 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { server.server_state !== 'crashed' && anvil[ anvil.findIndex((a) => a.anvil_uuid === uuid) - ].nodes.map( + ].hosts.map( ( - node: AnvilListItemNode, + host: AnvilStatusHost, index: number, ): JSX.Element => ( - + diff --git a/striker-ui/components/SharedStorage/SharedStorage.tsx b/striker-ui/components/SharedStorage/SharedStorage.tsx index 1b7dc372..0effc823 100644 --- a/striker-ui/components/SharedStorage/SharedStorage.tsx +++ b/striker-ui/components/SharedStorage/SharedStorage.tsx @@ -4,7 +4,7 @@ import { Box } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; import { BodyText, HeaderText } from '../Text'; import { Panel, InnerPanel, PanelHeader } from '../Panels'; -import SharedStorageNode from './SharedStorageNode'; +import SharedStorageHost from './SharedStorageHost'; import PeriodicFetch from '../../lib/fetchers/periodicFetch'; import { AnvilContext } from '../AnvilContext'; @@ -44,20 +44,20 @@ const SharedStorage = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { - {fs?.nodes && - fs.nodes.map( + {fs?.hosts && + fs.hosts.map( ( - node: AnvilSharedStorageNode, + host: AnvilSharedStorageHost, index: number, ): JSX.Element => ( - a.anvil_uuid === uuid)] - .nodes[index], + a.anvil_uuid === uuid) + ].hosts[index], }} - key={fs.nodes[index].free} + key={fs.hosts[index].free} /> ), )} diff --git a/striker-ui/components/SharedStorage/SharedStorageNode.tsx b/striker-ui/components/SharedStorage/SharedStorageHost.tsx similarity index 72% rename from striker-ui/components/SharedStorage/SharedStorageNode.tsx rename to striker-ui/components/SharedStorage/SharedStorageHost.tsx index 5d7c342c..63feead0 100644 --- a/striker-ui/components/SharedStorage/SharedStorageNode.tsx +++ b/striker-ui/components/SharedStorage/SharedStorageHost.tsx @@ -20,38 +20,38 @@ const useStyles = makeStyles(() => ({ }, })); -const SharedStorageNode = ({ - node, +const SharedStorageHost = ({ + host, }: { - node: AnvilSharedStorageNode; + host: AnvilSharedStorageHost; }): JSX.Element => { const classes = useStyles(); return ( <> - + - + - + - {node.is_mounted && ( + {host.is_mounted && ( <> @@ -60,13 +60,13 @@ const SharedStorageNode = ({ @@ -77,4 +77,4 @@ const SharedStorageNode = ({ ); }; -export default SharedStorageNode; +export default SharedStorageHost; diff --git a/striker-ui/pages/index.tsx b/striker-ui/pages/index.tsx index 540d8b5d..1d467c6d 100644 --- a/striker-ui/pages/index.tsx +++ b/striker-ui/pages/index.tsx @@ -2,7 +2,7 @@ import { Box } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; import Anvils from '../components/Anvils'; -import Nodes from '../components/Nodes'; +import Hosts from '../components/Hosts'; import CPU from '../components/CPU'; import SharedStorage from '../components/SharedStorage'; import Memory from '../components/Memory'; @@ -59,7 +59,7 @@ const Home = (): JSX.Element => { - + diff --git a/striker-ui/types/AnvilNetwork.d.ts b/striker-ui/types/AnvilNetwork.d.ts index 2d828f90..2fcb8a49 100644 --- a/striker-ui/types/AnvilNetwork.d.ts +++ b/striker-ui/types/AnvilNetwork.d.ts @@ -6,20 +6,20 @@ declare type AnvilNetworkBondLink = { is_active: boolean; }; -declare type AnvilNetworkNodeBond = { +declare type AnvilNetworkHostBond = { bond_name: string; bond_uuid: string; links: Array; }; -declare type AnvilNetworkNode = { +declare type AnvilNetworkHosts = { host_name: string; host_uuid: string; - bonds: Array; + bonds: Array; }; declare type AnvilNetwork = { - nodes: Array; + hosts: Array; }; declare type ProcessedBond = { @@ -27,7 +27,7 @@ declare type ProcessedBond = { bond_uuid: string; bond_speed: number; bond_state: 'optimal' | 'degraded'; - nodes: Array<{ + hosts: Array<{ host_name: string; host_uuid: string; link: { diff --git a/striker-ui/types/AnvilSharedStorage.d.ts b/striker-ui/types/AnvilSharedStorage.d.ts index 9d493b76..c11fd39b 100644 --- a/striker-ui/types/AnvilSharedStorage.d.ts +++ b/striker-ui/types/AnvilSharedStorage.d.ts @@ -1,13 +1,14 @@ -declare type AnvilSharedStorageNode = { +declare type AnvilSharedStorageHost = { + host_uuid: string; + host_name: string; is_mounted: boolean; total: number; free: number; - nodeInfo?: AnvilListItemNode; }; declare type AnvilSharedStorageFileSystem = { mount_point: string; - nodes: Array; + hosts: Array; }; declare type AnvilSharedStorage = { diff --git a/striker-ui/types/AnvilStatus.d.ts b/striker-ui/types/AnvilStatus.d.ts index b779c9af..4a2e2d49 100644 --- a/striker-ui/types/AnvilStatus.d.ts +++ b/striker-ui/types/AnvilStatus.d.ts @@ -1,4 +1,4 @@ -declare type AnvilStatusNode = { +declare type AnvilStatusHost = { state: 'unknown' | 'off' | 'on' | 'accessible' | 'ready'; host_uuid: string; host_name: string; @@ -9,5 +9,5 @@ declare type AnvilStatusNode = { declare type AnvilStatus = { anvil_state: 'optimal' | 'not_ready' | 'degraded'; - nodes: Array; + hosts: Array; }; diff --git a/striker-ui/types/NodeSet.d.ts b/striker-ui/types/NodeSet.d.ts index 60bb188a..4926f558 100644 --- a/striker-ui/types/NodeSet.d.ts +++ b/striker-ui/types/NodeSet.d.ts @@ -1,11 +1,11 @@ -declare type NodeSet = { +declare type HostSet = { host_uuid: string; }; -declare type NodeSetPower = NodeSet & { +declare type HostSetPower = HostSet & { is_on: boolean; }; -declare type NodeSetMembership = NodeSet & { +declare type HostSetMembership = HostSet & { is_membership: boolean; }; From c3f0a948a6b7b0cae76fbd64f9916f5e1d123af7 Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 17:59:32 -0400 Subject: [PATCH 226/271] fix: remove subdirectory from URIs --- striker-ui/components/Anvils/SelectedAnvil.tsx | 2 +- striker-ui/components/Anvils/index.tsx | 2 +- striker-ui/components/CPU.tsx | 2 +- striker-ui/components/Hosts/AnvilHost.tsx | 4 ++-- striker-ui/components/Hosts/index.tsx | 2 +- striker-ui/components/Memory.tsx | 2 +- striker-ui/components/Network/Network.tsx | 2 +- striker-ui/components/Servers.tsx | 2 +- striker-ui/components/SharedStorage/SharedStorage.tsx | 2 +- striker-ui/components/Storage.tsx | 2 +- striker-ui/pages/index.tsx | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/striker-ui/components/Anvils/SelectedAnvil.tsx b/striker-ui/components/Anvils/SelectedAnvil.tsx index 65fe3687..32d18623 100644 --- a/striker-ui/components/Anvils/SelectedAnvil.tsx +++ b/striker-ui/components/Anvils/SelectedAnvil.tsx @@ -66,7 +66,7 @@ const SelectedAnvil = ({ list }: { list: AnvilListItem[] }): JSX.Element => { - putJSON('/anvils/set_power', { + putJSON('/set_power', { anvil_uuid: list[index].anvil_uuid, is_on: !isAnvilOn(list[index]), }) diff --git a/striker-ui/components/Anvils/index.tsx b/striker-ui/components/Anvils/index.tsx index a7cc4925..9d0f255c 100644 --- a/striker-ui/components/Anvils/index.tsx +++ b/striker-ui/components/Anvils/index.tsx @@ -10,7 +10,7 @@ const Anvils = ({ list }: { list: AnvilList | undefined }): JSX.Element => { list?.anvils.forEach((anvil: AnvilListItem) => { const { data } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_status?anvil_uuid=${anvil.anvil_uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_status?anvil_uuid=${anvil.anvil_uuid}`, ); anvils.push({ ...anvil, diff --git a/striker-ui/components/CPU.tsx b/striker-ui/components/CPU.tsx index 7d0ae57d..2dcea74d 100644 --- a/striker-ui/components/CPU.tsx +++ b/striker-ui/components/CPU.tsx @@ -10,7 +10,7 @@ const CPU = (): JSX.Element => { const { uuid } = useContext(AnvilContext); const { data, isLoading } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_cpu?anvil_uuid=${uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_cpu?anvil_uuid=${uuid}`, ); const cpuData = diff --git a/striker-ui/components/Hosts/AnvilHost.tsx b/striker-ui/components/Hosts/AnvilHost.tsx index 01511c70..b4c01b3e 100644 --- a/striker-ui/components/Hosts/AnvilHost.tsx +++ b/striker-ui/components/Hosts/AnvilHost.tsx @@ -105,7 +105,7 @@ const AnvilHost = ({ - putJSON('/anvils/set_power', { + putJSON('/set_power', { host_uuid: host.host_uuid, is_on: !(host.state === 'ready'), }) @@ -120,7 +120,7 @@ const AnvilHost = ({ checked={host.state === 'ready'} disabled={!host.removable} onChange={() => - putJSON('/anvils/set_membership', { + putJSON('/set_membership', { host_uuid: host.host_uuid, is_member: !(host.state === 'ready'), }) diff --git a/striker-ui/components/Hosts/index.tsx b/striker-ui/components/Hosts/index.tsx index 802e3166..2a6d9233 100644 --- a/striker-ui/components/Hosts/index.tsx +++ b/striker-ui/components/Hosts/index.tsx @@ -9,7 +9,7 @@ const Hosts = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const { uuid } = useContext(AnvilContext); const { data } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_status?anvil_uuid=${uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_status?anvil_uuid=${uuid}`, ); return ( diff --git a/striker-ui/components/Memory.tsx b/striker-ui/components/Memory.tsx index dff7e3df..5febd821 100644 --- a/striker-ui/components/Memory.tsx +++ b/striker-ui/components/Memory.tsx @@ -10,7 +10,7 @@ import { AnvilContext } from './AnvilContext'; const Memory = (): JSX.Element => { const { uuid } = useContext(AnvilContext); const { data, isLoading } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_memory?anvil_uuid=${uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_memory?anvil_uuid=${uuid}`, ); const memoryData = isLoading || !data ? { total: 0, free: 0 } : data; diff --git a/striker-ui/components/Network/Network.tsx b/striker-ui/components/Network/Network.tsx index 032813a2..cda749b2 100644 --- a/striker-ui/components/Network/Network.tsx +++ b/striker-ui/components/Network/Network.tsx @@ -47,7 +47,7 @@ const Network = (): JSX.Element => { const classes = useStyles(); const { data } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_network?anvil_uuid=${uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_network?anvil_uuid=${uuid}`, ); const processed = processNetworkData(data); diff --git a/striker-ui/components/Servers.tsx b/striker-ui/components/Servers.tsx index c458d48e..8c92b535 100644 --- a/striker-ui/components/Servers.tsx +++ b/striker-ui/components/Servers.tsx @@ -50,7 +50,7 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const classes = useStyles(); const { data } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_servers?anvil_uuid=${uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_servers?anvil_uuid=${uuid}`, ); return ( diff --git a/striker-ui/components/SharedStorage/SharedStorage.tsx b/striker-ui/components/SharedStorage/SharedStorage.tsx index 0effc823..5212fe10 100644 --- a/striker-ui/components/SharedStorage/SharedStorage.tsx +++ b/striker-ui/components/SharedStorage/SharedStorage.tsx @@ -27,7 +27,7 @@ const SharedStorage = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const classes = useStyles(); const { uuid } = useContext(AnvilContext); const { data } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_shared_storage?anvil_uuid=${uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_shared_storage?anvil_uuid=${uuid}`, ); return ( diff --git a/striker-ui/components/Storage.tsx b/striker-ui/components/Storage.tsx index 421e34c0..cb139653 100644 --- a/striker-ui/components/Storage.tsx +++ b/striker-ui/components/Storage.tsx @@ -7,7 +7,7 @@ import PeriodicFetch from '../lib/fetchers/periodicFetch'; const Storage = ({ uuid }: { uuid: string }): JSX.Element => { const { data, isLoading } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_memory?anvil_uuid=${uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_memory?anvil_uuid=${uuid}`, ); const memoryData = isLoading || !data ? { total: 0, free: 0 } : data; diff --git a/striker-ui/pages/index.tsx b/striker-ui/pages/index.tsx index 1d467c6d..beb61341 100644 --- a/striker-ui/pages/index.tsx +++ b/striker-ui/pages/index.tsx @@ -48,7 +48,7 @@ const Home = (): JSX.Element => { const classes = useStyles(); const { data } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/anvils/get_anvils`, + `${process.env.NEXT_PUBLIC_API_URL}/get_anvils`, ); return ( From 0e09683d61a965fef4058ffc15ae970d1bf0f41a Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 18:18:05 -0400 Subject: [PATCH 227/271] fix: use prop names from the specs --- striker-ui/components/Memory.tsx | 24 +++++++++++------------- striker-ui/types/AnvilMemory.d.ts | 2 +- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/striker-ui/components/Memory.tsx b/striker-ui/components/Memory.tsx index 5febd821..5360a4e6 100644 --- a/striker-ui/components/Memory.tsx +++ b/striker-ui/components/Memory.tsx @@ -13,7 +13,7 @@ const Memory = (): JSX.Element => { `${process.env.NEXT_PUBLIC_API_URL}/get_memory?anvil_uuid=${uuid}`, ); - const memoryData = isLoading || !data ? { total: 0, free: 0 } : data; + const memoryData = isLoading || !data ? { total: 0, allocated: 0 } : data; return ( @@ -21,28 +21,26 @@ const Memory = (): JSX.Element => { diff --git a/striker-ui/types/AnvilMemory.d.ts b/striker-ui/types/AnvilMemory.d.ts index 26a5d70f..2fe1c2cb 100644 --- a/striker-ui/types/AnvilMemory.d.ts +++ b/striker-ui/types/AnvilMemory.d.ts @@ -1,4 +1,4 @@ declare type AnvilMemory = { total: number; - free: number; + allocated: number; }; From a3a4e4c72df2679770bc6048b1cba6c9007d810d Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 18:22:15 -0400 Subject: [PATCH 228/271] fix: use correct endpoint for network --- striker-ui/components/Network/Network.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/components/Network/Network.tsx b/striker-ui/components/Network/Network.tsx index cda749b2..009c5b96 100644 --- a/striker-ui/components/Network/Network.tsx +++ b/striker-ui/components/Network/Network.tsx @@ -47,7 +47,7 @@ const Network = (): JSX.Element => { const classes = useStyles(); const { data } = PeriodicFetch( - `${process.env.NEXT_PUBLIC_API_URL}/get_network?anvil_uuid=${uuid}`, + `${process.env.NEXT_PUBLIC_API_URL}/get_networks?anvil_uuid=${uuid}`, ); const processed = processNetworkData(data); From 24e4509c8d8aea77d9de0365a015b2c9ec66f27f Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 18:31:59 -0400 Subject: [PATCH 229/271] refactor: add reserved prop to Memory component --- striker-ui/components/Memory.tsx | 7 +++++-- striker-ui/types/AnvilMemory.d.ts | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/striker-ui/components/Memory.tsx b/striker-ui/components/Memory.tsx index 5360a4e6..44aab3e8 100644 --- a/striker-ui/components/Memory.tsx +++ b/striker-ui/components/Memory.tsx @@ -13,7 +13,8 @@ const Memory = (): JSX.Element => { `${process.env.NEXT_PUBLIC_API_URL}/get_memory?anvil_uuid=${uuid}`, ); - const memoryData = isLoading || !data ? { total: 0, allocated: 0 } : data; + const memoryData = + isLoading || !data ? { total: 0, allocated: 0, reserved: 0 } : data; return ( @@ -46,7 +47,9 @@ const Memory = (): JSX.Element => { diff --git a/striker-ui/types/AnvilMemory.d.ts b/striker-ui/types/AnvilMemory.d.ts index 2fe1c2cb..1f538c81 100644 --- a/striker-ui/types/AnvilMemory.d.ts +++ b/striker-ui/types/AnvilMemory.d.ts @@ -1,4 +1,5 @@ declare type AnvilMemory = { total: number; allocated: number; + reserved: number; }; From 6b2d3700f9c03831dc0006bb5630532e9234eb0a Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 18:42:30 -0400 Subject: [PATCH 230/271] fix: use host_uuid instead of index number to determine server's host --- striker-ui/components/Servers.tsx | 9 ++++----- striker-ui/types/AnvilServers.d.ts | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/striker-ui/components/Servers.tsx b/striker-ui/components/Servers.tsx index 8c92b535..08dfc6d4 100644 --- a/striker-ui/components/Servers.tsx +++ b/striker-ui/components/Servers.tsx @@ -88,14 +88,13 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { anvil[ anvil.findIndex((a) => a.anvil_uuid === uuid) ].hosts.map( - ( - host: AnvilStatusHost, - index: number, - ): JSX.Element => ( + (host: AnvilStatusHost): JSX.Element => ( ), diff --git a/striker-ui/types/AnvilServers.d.ts b/striker-ui/types/AnvilServers.d.ts index 4fd2b19a..96413218 100644 --- a/striker-ui/types/AnvilServers.d.ts +++ b/striker-ui/types/AnvilServers.d.ts @@ -10,7 +10,7 @@ declare type AnvilServer = { | 'crashed' | 'pmsuspended' | 'migrating'; - server_host_index: number; + server_host_uuid: string; }; declare type AnvilServers = { From 7199e1899e6714bc63b7f02966a1b350cac14311 Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 19:01:57 -0400 Subject: [PATCH 231/271] refactor: update valid values for link_state --- striker-ui/components/Network/Network.tsx | 2 ++ striker-ui/types/AnvilNetwork.d.ts | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/striker-ui/components/Network/Network.tsx b/striker-ui/components/Network/Network.tsx index 009c5b96..6f9515c4 100644 --- a/striker-ui/components/Network/Network.tsx +++ b/striker-ui/components/Network/Network.tsx @@ -37,6 +37,8 @@ const selectDecorator = (state: string): Colours => { return 'ok'; case 'degraded': return 'warning'; + case 'down': + return 'error'; default: return 'warning'; } diff --git a/striker-ui/types/AnvilNetwork.d.ts b/striker-ui/types/AnvilNetwork.d.ts index 2fcb8a49..3330c466 100644 --- a/striker-ui/types/AnvilNetwork.d.ts +++ b/striker-ui/types/AnvilNetwork.d.ts @@ -2,7 +2,7 @@ declare type AnvilNetworkBondLink = { link_name: string; link_uuid: string; link_speed: number; - link_state: 'optimal' | 'degraded'; + link_state: 'optimal' | 'degraded' | 'down'; is_active: boolean; }; @@ -26,7 +26,7 @@ declare type ProcessedBond = { bond_name: string; bond_uuid: string; bond_speed: number; - bond_state: 'optimal' | 'degraded'; + bond_state: 'optimal' | 'degraded' | 'down'; hosts: Array<{ host_name: string; host_uuid: string; @@ -34,7 +34,7 @@ declare type ProcessedBond = { link_name: string; link_uuid: string; link_speed: number; - link_state: 'optimal' | 'degraded'; + link_state: 'optimal' | 'degraded' | 'down'; is_active: boolean; }; }>; From 0e1098d8938985f28915a908722bf4369803e4b8 Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 19:17:13 -0400 Subject: [PATCH 232/271] refactor: update host state following specs --- .../components/Anvils/SelectedAnvil.tsx | 5 +++-- striker-ui/components/Hosts/AnvilHost.tsx | 19 ++++++++----------- striker-ui/components/Hosts/index.tsx | 2 +- striker-ui/types/AnvilStatus.d.ts | 2 +- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/striker-ui/components/Anvils/SelectedAnvil.tsx b/striker-ui/components/Anvils/SelectedAnvil.tsx index 32d18623..7c1130fb 100644 --- a/striker-ui/components/Anvils/SelectedAnvil.tsx +++ b/striker-ui/components/Anvils/SelectedAnvil.tsx @@ -35,8 +35,9 @@ const selectDecorator = (state: string): Colours => { const isAnvilOn = (anvil: AnvilListItem): boolean => !( - anvil.hosts.findIndex(({ state }: AnvilStatusHost) => state !== 'off') === - -1 + anvil.hosts.findIndex( + ({ state }: AnvilStatusHost) => state !== 'offline', + ) === -1 ); const SelectedAnvil = ({ list }: { list: AnvilListItem[] }): JSX.Element => { diff --git a/striker-ui/components/Hosts/AnvilHost.tsx b/striker-ui/components/Hosts/AnvilHost.tsx index b4c01b3e..b6642f5f 100644 --- a/striker-ui/components/Hosts/AnvilHost.tsx +++ b/striker-ui/components/Hosts/AnvilHost.tsx @@ -50,15 +50,12 @@ const selectStateMessage = (regex: RegExp, message: string): string => { const selectDecorator = (state: string): Colours => { switch (state) { - case 'ready': + case 'online': return 'ok'; - case 'off': + case 'offline': return 'off'; - case 'accessible': - case 'on': - return 'warning'; default: - return 'error'; + return 'warning'; } }; @@ -103,11 +100,11 @@ const AnvilHost = ({ putJSON('/set_power', { host_uuid: host.host_uuid, - is_on: !(host.state === 'ready'), + is_on: !(host.state === 'online'), }) } /> @@ -117,18 +114,18 @@ const AnvilHost = ({ putJSON('/set_membership', { host_uuid: host.host_uuid, - is_member: !(host.state === 'ready'), + is_member: !(host.state === 'online'), }) } /> - {host.state !== 'ready' && ( + {host.state !== 'online' && ( <> diff --git a/striker-ui/components/Hosts/index.tsx b/striker-ui/components/Hosts/index.tsx index 2a6d9233..dc9d525b 100644 --- a/striker-ui/components/Hosts/index.tsx +++ b/striker-ui/components/Hosts/index.tsx @@ -14,7 +14,7 @@ const Hosts = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { return ( - + {anvil.findIndex((a) => a.anvil_uuid === uuid) !== -1 && data && ( a.anvil_uuid === uuid)].hosts.map( diff --git a/striker-ui/types/AnvilStatus.d.ts b/striker-ui/types/AnvilStatus.d.ts index 4a2e2d49..013a104e 100644 --- a/striker-ui/types/AnvilStatus.d.ts +++ b/striker-ui/types/AnvilStatus.d.ts @@ -1,5 +1,5 @@ declare type AnvilStatusHost = { - state: 'unknown' | 'off' | 'on' | 'accessible' | 'ready'; + state: 'offline' | 'booted' | 'crmd' | 'in_ccm' | 'online'; host_uuid: string; host_name: string; state_percent: number; From 64f0c2d756bb81cc5b6c031ada29bc5db6d88365 Mon Sep 17 00:00:00 2001 From: Josue Date: Thu, 27 May 2021 20:31:34 -0400 Subject: [PATCH 233/271] feat: add spinner --- striker-ui/components/CPU.tsx | 48 ++++---- striker-ui/components/Hosts/index.tsx | 23 ++-- striker-ui/components/Memory.tsx | 76 +++++++------ striker-ui/components/Network/Network.tsx | 73 ++++++------ striker-ui/components/Servers.tsx | 106 +++++++++--------- .../SharedStorage/SharedStorage.tsx | 71 ++++++------ striker-ui/components/Spinner.tsx | 31 +++++ 7 files changed, 249 insertions(+), 179 deletions(-) create mode 100644 striker-ui/components/Spinner.tsx diff --git a/striker-ui/components/CPU.tsx b/striker-ui/components/CPU.tsx index 2dcea74d..a913d60c 100644 --- a/striker-ui/components/CPU.tsx +++ b/striker-ui/components/CPU.tsx @@ -5,6 +5,7 @@ import { AllocationBar } from './Bars'; import { HeaderText, BodyText } from './Text'; import PeriodicFetch from '../lib/fetchers/periodicFetch'; import { AnvilContext } from './AnvilContext'; +import Spinner from './Spinner'; const CPU = (): JSX.Element => { const { uuid } = useContext(AnvilContext); @@ -19,26 +20,33 @@ const CPU = (): JSX.Element => { return ( - - - - - - - - - - - - - - - - + {!isLoading ? ( + <> + {' '} + + + + + + + + + + + + + + + + + + ) : ( + + )} ); }; diff --git a/striker-ui/components/Hosts/index.tsx b/striker-ui/components/Hosts/index.tsx index dc9d525b..16afa04b 100644 --- a/striker-ui/components/Hosts/index.tsx +++ b/striker-ui/components/Hosts/index.tsx @@ -4,25 +4,32 @@ import { HeaderText } from '../Text'; import AnvilHost from './AnvilHost'; import PeriodicFetch from '../../lib/fetchers/periodicFetch'; import { AnvilContext } from '../AnvilContext'; +import Spinner from '../Spinner'; const Hosts = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const { uuid } = useContext(AnvilContext); - const { data } = PeriodicFetch( + const { data, isLoading } = PeriodicFetch( `${process.env.NEXT_PUBLIC_API_URL}/get_status?anvil_uuid=${uuid}`, ); return ( - {anvil.findIndex((a) => a.anvil_uuid === uuid) !== -1 && data && ( - a.anvil_uuid === uuid)].hosts.map( - (host, index) => { - return data.hosts[index]; - }, + {!isLoading ? ( + <> + {anvil.findIndex((a) => a.anvil_uuid === uuid) !== -1 && data && ( + a.anvil_uuid === uuid) + ].hosts.map((host, index) => { + return data.hosts[index]; + })} + /> )} - /> + + ) : ( + )} ); diff --git a/striker-ui/components/Memory.tsx b/striker-ui/components/Memory.tsx index 44aab3e8..adf4aeb5 100644 --- a/striker-ui/components/Memory.tsx +++ b/striker-ui/components/Memory.tsx @@ -6,6 +6,7 @@ import { AllocationBar } from './Bars'; import { HeaderText, BodyText } from './Text'; import PeriodicFetch from '../lib/fetchers/periodicFetch'; import { AnvilContext } from './AnvilContext'; +import Spinner from './Spinner'; const Memory = (): JSX.Element => { const { uuid } = useContext(AnvilContext); @@ -19,41 +20,48 @@ const Memory = (): JSX.Element => { return ( - - - - - - + {' '} + + + + + + + + + + + + + + + - - - - - - - - - - + })} | Reserved: ${prettyBytes.default(memoryData.reserved, { + binary: true, + })}`} + /> + + + ) : ( + + )} ); }; diff --git a/striker-ui/components/Network/Network.tsx b/striker-ui/components/Network/Network.tsx index 6f9515c4..04b2eece 100644 --- a/striker-ui/components/Network/Network.tsx +++ b/striker-ui/components/Network/Network.tsx @@ -8,6 +8,7 @@ import { DIVIDER } from '../../lib/consts/DEFAULT_THEME'; import processNetworkData from './processNetwork'; import { AnvilContext } from '../AnvilContext'; import Decorator, { Colours } from '../Decorator'; +import Spinner from '../Spinner'; const useStyles = makeStyles((theme) => ({ container: { @@ -48,7 +49,7 @@ const Network = (): JSX.Element => { const { uuid } = useContext(AnvilContext); const classes = useStyles(); - const { data } = PeriodicFetch( + const { data, isLoading } = PeriodicFetch( `${process.env.NEXT_PUBLIC_API_URL}/get_networks?anvil_uuid=${uuid}`, ); @@ -56,40 +57,44 @@ const Network = (): JSX.Element => { return ( - - {data && - processed.bonds.map((bond: ProcessedBond) => { - return ( - <> - - - - - - - - - {bond.hosts.map( - (host): JSX.Element => ( - - - - + {!isLoading ? ( + + {data && + processed.bonds.map((bond: ProcessedBond) => { + return ( + <> + + + + + + + + + {bond.hosts.map( + (host): JSX.Element => ( + + + + + - - ), - )} - - - - ); - })} - + ), + )} + + + + ); + })} + + ) : ( + + )} ); }; diff --git a/striker-ui/components/Servers.tsx b/striker-ui/components/Servers.tsx index 08dfc6d4..0da3097e 100644 --- a/striker-ui/components/Servers.tsx +++ b/striker-ui/components/Servers.tsx @@ -8,6 +8,7 @@ import { HOVER, DIVIDER } from '../lib/consts/DEFAULT_THEME'; import { AnvilContext } from './AnvilContext'; import serverState from '../lib/consts/SERVERS'; import Decorator, { Colours } from './Decorator'; +import Spinner from './Spinner'; const useStyles = makeStyles((theme) => ({ root: { @@ -49,64 +50,69 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const { uuid } = useContext(AnvilContext); const classes = useStyles(); - const { data } = PeriodicFetch( + const { data, isLoading } = PeriodicFetch( `${process.env.NEXT_PUBLIC_API_URL}/get_servers?anvil_uuid=${uuid}`, ); + return (
- - - {data && - data.servers.map((server: AnvilServer) => { - return ( - <> - - - - - - - - + {!isLoading ? ( + + + {data && + data.servers.map((server: AnvilServer) => { + return ( + <> + + + + + + + + + + {server.server_state !== 'shut_off' && + server.server_state !== 'crashed' && + anvil[ + anvil.findIndex((a) => a.anvil_uuid === uuid) + ].hosts.map( + (host: AnvilStatusHost): JSX.Element => ( + + + + ), + )} - {server.server_state !== 'shut_off' && - server.server_state !== 'crashed' && - anvil[ - anvil.findIndex((a) => a.anvil_uuid === uuid) - ].hosts.map( - (host: AnvilStatusHost): JSX.Element => ( - - - - ), - )} - - - - - ); - })} - - +
+ + + ); + })} +
+ + ) : ( + + )} ); }; diff --git a/striker-ui/components/SharedStorage/SharedStorage.tsx b/striker-ui/components/SharedStorage/SharedStorage.tsx index 5212fe10..bdbb7158 100644 --- a/striker-ui/components/SharedStorage/SharedStorage.tsx +++ b/striker-ui/components/SharedStorage/SharedStorage.tsx @@ -7,6 +7,7 @@ import { Panel, InnerPanel, PanelHeader } from '../Panels'; import SharedStorageHost from './SharedStorageHost'; import PeriodicFetch from '../../lib/fetchers/periodicFetch'; import { AnvilContext } from '../AnvilContext'; +import Spinner from '../Spinner'; const useStyles = makeStyles((theme) => ({ header: { @@ -26,45 +27,49 @@ const useStyles = makeStyles((theme) => ({ const SharedStorage = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const classes = useStyles(); const { uuid } = useContext(AnvilContext); - const { data } = PeriodicFetch( + const { data, isLoading } = PeriodicFetch( `${process.env.NEXT_PUBLIC_API_URL}/get_shared_storage?anvil_uuid=${uuid}`, ); return ( - - {data?.file_systems && - data.file_systems.map( - (fs: AnvilSharedStorageFileSystem): JSX.Element => ( - - - - - + {!isLoading ? ( + + {data?.file_systems && + data.file_systems.map( + (fs: AnvilSharedStorageFileSystem): JSX.Element => ( + + + + + + - - - {fs?.hosts && - fs.hosts.map( - ( - host: AnvilSharedStorageHost, - index: number, - ): JSX.Element => ( - a.anvil_uuid === uuid) - ].hosts[index], - }} - key={fs.hosts[index].free} - /> - ), - )} - - ), - )} - + + {fs?.hosts && + fs.hosts.map( + ( + host: AnvilSharedStorageHost, + index: number, + ): JSX.Element => ( + a.anvil_uuid === uuid) + ].hosts[index], + }} + key={fs.hosts[index].free} + /> + ), + )} + + ), + )} + + ) : ( + + )} ); }; diff --git a/striker-ui/components/Spinner.tsx b/striker-ui/components/Spinner.tsx new file mode 100644 index 00000000..19cf8f96 --- /dev/null +++ b/striker-ui/components/Spinner.tsx @@ -0,0 +1,31 @@ +import { makeStyles } from '@material-ui/core/styles'; +import CircularProgress from '@material-ui/core/CircularProgress'; + +const useStyles = makeStyles(() => ({ + root: { + display: 'flex', + /* '& > * + *': { + marginLeft: theme.spacing(2), + }, */ + alignItems: 'center', + justifyContent: 'center', + marginTop: '3em', + }, + spinner: { + color: '#FFF', + variant: 'indeterminate', + size: '50em', + }, +})); + +const Spinner = (): JSX.Element => { + const classes = useStyles(); + + return ( +
+ +
+ ); +}; + +export default Spinner; From 936057f39ed7899a053e2baf797d5f9b94c6f969 Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 28 May 2021 13:17:24 -0400 Subject: [PATCH 234/271] fix: change server status value to match what's in the specs --- striker-ui/components/Servers.tsx | 4 ++-- striker-ui/lib/consts/SERVERS.ts | 8 ++++---- striker-ui/types/AnvilServers.d.ts | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/striker-ui/components/Servers.tsx b/striker-ui/components/Servers.tsx index 0da3097e..f0685cd2 100644 --- a/striker-ui/components/Servers.tsx +++ b/striker-ui/components/Servers.tsx @@ -37,7 +37,7 @@ const selectDecorator = (state: string): Colours => { switch (state) { case 'running': return 'ok'; - case 'shut_off': + case 'shut off': return 'off'; case 'crashed': return 'error'; @@ -86,7 +86,7 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { } /> - {server.server_state !== 'shut_off' && + {server.server_state !== 'shut off' && server.server_state !== 'crashed' && anvil[ anvil.findIndex((a) => a.anvil_uuid === uuid) diff --git a/striker-ui/lib/consts/SERVERS.ts b/striker-ui/lib/consts/SERVERS.ts index aba4b1c0..b010067c 100644 --- a/striker-ui/lib/consts/SERVERS.ts +++ b/striker-ui/lib/consts/SERVERS.ts @@ -2,10 +2,10 @@ const serverState: ReadonlyMap = new Map([ ['running', 'Running'], ['idle', 'Idle'], ['paused', 'Paused'], - ['in_shutdown', 'Shutting Down'], - ['shut_off', 'Off'], - ['crashed', 'crashed'], - ['pmsuspended', 'Suspended'], + ['in shutdown', 'Shutting Down'], + ['shut off', 'Off'], + ['crashed', 'Crashed'], + ['pmsuspended', 'PM Suspended'], ['migrating', 'Migrating'], ]); diff --git a/striker-ui/types/AnvilServers.d.ts b/striker-ui/types/AnvilServers.d.ts index 96413218..d8b3e88d 100644 --- a/striker-ui/types/AnvilServers.d.ts +++ b/striker-ui/types/AnvilServers.d.ts @@ -5,8 +5,8 @@ declare type AnvilServer = { | 'running' | 'idle' | 'paused' - | 'in_shutdown' - | 'shut_off' + | 'in shutdown' + | 'shut off' | 'crashed' | 'pmsuspended' | 'migrating'; From e8693e7ef8e71b737779bc3543c266b8955981a9 Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 28 May 2021 13:18:13 -0400 Subject: [PATCH 235/271] fix: hide progress bar and message if a node is offline --- striker-ui/components/Hosts/AnvilHost.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/components/Hosts/AnvilHost.tsx b/striker-ui/components/Hosts/AnvilHost.tsx index b6642f5f..450b99f0 100644 --- a/striker-ui/components/Hosts/AnvilHost.tsx +++ b/striker-ui/components/Hosts/AnvilHost.tsx @@ -125,7 +125,7 @@ const AnvilHost = ({ /> - {host.state !== 'online' && ( + {host.state !== 'online' && host.state !== 'offline' && ( <> From 1852c684540399c9fdbdcffe5f17a8a63e058e96 Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 28 May 2021 13:18:37 -0400 Subject: [PATCH 236/271] fix: filter out nodes with no uuid --- striker-ui/components/Hosts/index.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/striker-ui/components/Hosts/index.tsx b/striker-ui/components/Hosts/index.tsx index 16afa04b..a22b2e53 100644 --- a/striker-ui/components/Hosts/index.tsx +++ b/striker-ui/components/Hosts/index.tsx @@ -20,11 +20,11 @@ const Hosts = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { <> {anvil.findIndex((a) => a.anvil_uuid === uuid) !== -1 && data && ( a.anvil_uuid === uuid) - ].hosts.map((host, index) => { - return data.hosts[index]; - })} + hosts={anvil[anvil.findIndex((a) => a.anvil_uuid === uuid)].hosts + .filter((host) => host.host_uuid) + .map((host, index) => { + return data.hosts[index]; + })} /> )} From 117fd8a78d320fde112025b4308edcf4ea9aa79e Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 28 May 2021 17:41:16 -0400 Subject: [PATCH 237/271] style: change CPU component to match latest changes in the design --- striker-ui/components/CPU.tsx | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/striker-ui/components/CPU.tsx b/striker-ui/components/CPU.tsx index a913d60c..dd5926e4 100644 --- a/striker-ui/components/CPU.tsx +++ b/striker-ui/components/CPU.tsx @@ -1,7 +1,6 @@ import { useContext } from 'react'; import { Box } from '@material-ui/core'; import { Panel } from './Panels'; -import { AllocationBar } from './Bars'; import { HeaderText, BodyText } from './Text'; import PeriodicFetch from '../lib/fetchers/periodicFetch'; import { AnvilContext } from './AnvilContext'; @@ -22,26 +21,12 @@ const CPU = (): JSX.Element => { {!isLoading ? ( <> - {' '} - - + + + + - - - - - - - - - - - ) : ( From ee063c9f43783a876f0f633402cfd61bb75e9e21 Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 28 May 2021 17:42:51 -0400 Subject: [PATCH 238/271] feat: add FileSystems component and types --- .../components/FileSystem/FileSystems.tsx | 77 ++++++++++++++++++ .../components/FileSystem/FileSystemsHost.tsx | 80 +++++++++++++++++++ striker-ui/components/FileSystem/index.tsx | 3 + striker-ui/types/AnvilFileSystems.d.ts | 16 ++++ 4 files changed, 176 insertions(+) create mode 100644 striker-ui/components/FileSystem/FileSystems.tsx create mode 100644 striker-ui/components/FileSystem/FileSystemsHost.tsx create mode 100644 striker-ui/components/FileSystem/index.tsx create mode 100644 striker-ui/types/AnvilFileSystems.d.ts diff --git a/striker-ui/components/FileSystem/FileSystems.tsx b/striker-ui/components/FileSystem/FileSystems.tsx new file mode 100644 index 00000000..3a8e0ea6 --- /dev/null +++ b/striker-ui/components/FileSystem/FileSystems.tsx @@ -0,0 +1,77 @@ +import { useContext } from 'react'; + +import { Box } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; +import { BodyText, HeaderText } from '../Text'; +import { Panel, InnerPanel, PanelHeader } from '../Panels'; +import SharedStorageHost from './FileSystemsHost'; +import PeriodicFetch from '../../lib/fetchers/periodicFetch'; +import { AnvilContext } from '../AnvilContext'; +import Spinner from '../Spinner'; + +const useStyles = makeStyles((theme) => ({ + header: { + paddingTop: '.1em', + paddingRight: '.7em', + }, + root: { + overflow: 'auto', + height: '78vh', + paddingLeft: '.3em', + [theme.breakpoints.down('md')]: { + height: '100%', + }, + }, +})); + +const SharedStorage = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { + const classes = useStyles(); + const { uuid } = useContext(AnvilContext); + const { data, isLoading } = PeriodicFetch( + `${process.env.NEXT_PUBLIC_API_URL}/get_shared_storage?anvil_uuid=${uuid}`, + ); + return ( + + + {!isLoading ? ( + + {data?.file_systems && + data.file_systems.map( + (fs: AnvilSharedStorageFileSystem): JSX.Element => ( + + + + + + + + + {fs?.hosts && + fs.hosts.map( + ( + host: AnvilSharedStorageHost, + index: number, + ): JSX.Element => ( + a.anvil_uuid === uuid) + ].hosts[index], + }} + key={fs.hosts[index].free} + /> + ), + )} + + ), + )} + + ) : ( + + )} + + ); +}; + +export default SharedStorage; diff --git a/striker-ui/components/FileSystem/FileSystemsHost.tsx b/striker-ui/components/FileSystem/FileSystemsHost.tsx new file mode 100644 index 00000000..63feead0 --- /dev/null +++ b/striker-ui/components/FileSystem/FileSystemsHost.tsx @@ -0,0 +1,80 @@ +import { Box } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; +import * as prettyBytes from 'pretty-bytes'; +import { AllocationBar } from '../Bars'; +import { BodyText } from '../Text'; +import Decorator from '../Decorator'; + +const useStyles = makeStyles(() => ({ + fs: { + paddingLeft: '.7em', + paddingRight: '.7em', + paddingTop: '1.2em', + }, + bar: { + paddingLeft: '.7em', + paddingRight: '.7em', + }, + decoratorBox: { + paddingRight: '.3em', + }, +})); + +const SharedStorageHost = ({ + host, +}: { + host: AnvilSharedStorageHost; +}): JSX.Element => { + const classes = useStyles(); + return ( + <> + + + + + + + + + + + + {host.is_mounted && ( + <> + + + + + + + + + + + + + + + + + + )} + + ); +}; + +export default SharedStorageHost; diff --git a/striker-ui/components/FileSystem/index.tsx b/striker-ui/components/FileSystem/index.tsx new file mode 100644 index 00000000..42e3505f --- /dev/null +++ b/striker-ui/components/FileSystem/index.tsx @@ -0,0 +1,3 @@ +import SharedStorage from './FileSystems'; + +export default SharedStorage; diff --git a/striker-ui/types/AnvilFileSystems.d.ts b/striker-ui/types/AnvilFileSystems.d.ts new file mode 100644 index 00000000..c11fd39b --- /dev/null +++ b/striker-ui/types/AnvilFileSystems.d.ts @@ -0,0 +1,16 @@ +declare type AnvilSharedStorageHost = { + host_uuid: string; + host_name: string; + is_mounted: boolean; + total: number; + free: number; +}; + +declare type AnvilSharedStorageFileSystem = { + mount_point: string; + hosts: Array; +}; + +declare type AnvilSharedStorage = { + file_systems: Array; +}; From 89313de042aded4f94359ec809e1f19b2a27a121 Mon Sep 17 00:00:00 2001 From: Josue Date: Fri, 28 May 2021 17:44:11 -0400 Subject: [PATCH 239/271] refactor: modify SharedStorage to match latest chagnes in specs --- .../SharedStorage/SharedStorage.tsx | 33 +++----- .../SharedStorage/SharedStorageHost.tsx | 78 +++++++++---------- striker-ui/pages/index.tsx | 2 +- striker-ui/types/AnvilSharedStorage.d.ts | 18 ++--- 4 files changed, 53 insertions(+), 78 deletions(-) diff --git a/striker-ui/components/SharedStorage/SharedStorage.tsx b/striker-ui/components/SharedStorage/SharedStorage.tsx index bdbb7158..5011ef5b 100644 --- a/striker-ui/components/SharedStorage/SharedStorage.tsx +++ b/striker-ui/components/SharedStorage/SharedStorage.tsx @@ -24,7 +24,7 @@ const useStyles = makeStyles((theme) => ({ }, })); -const SharedStorage = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { +const SharedStorage = (): JSX.Element => { const classes = useStyles(); const { uuid } = useContext(AnvilContext); const { data, isLoading } = PeriodicFetch( @@ -35,34 +35,21 @@ const SharedStorage = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { {!isLoading ? ( - {data?.file_systems && - data.file_systems.map( - (fs: AnvilSharedStorageFileSystem): JSX.Element => ( - + {data?.storage_groups && + data.storage_groups.map( + (storageGroup: AnvilSharedStorageGroup): JSX.Element => ( + - + - {fs?.hosts && - fs.hosts.map( - ( - host: AnvilSharedStorageHost, - index: number, - ): JSX.Element => ( - a.anvil_uuid === uuid) - ].hosts[index], - }} - key={fs.hosts[index].free} - /> - ), - )} + ), )} diff --git a/striker-ui/components/SharedStorage/SharedStorageHost.tsx b/striker-ui/components/SharedStorage/SharedStorageHost.tsx index 63feead0..8c89e4d8 100644 --- a/striker-ui/components/SharedStorage/SharedStorageHost.tsx +++ b/striker-ui/components/SharedStorage/SharedStorageHost.tsx @@ -3,7 +3,6 @@ import { makeStyles } from '@material-ui/core/styles'; import * as prettyBytes from 'pretty-bytes'; import { AllocationBar } from '../Bars'; import { BodyText } from '../Text'; -import Decorator from '../Decorator'; const useStyles = makeStyles(() => ({ fs: { @@ -21,58 +20,53 @@ const useStyles = makeStyles(() => ({ })); const SharedStorageHost = ({ - host, + group, }: { - host: AnvilSharedStorageHost; + group: AnvilSharedStorageGroup; }): JSX.Element => { const classes = useStyles(); return ( <> - - - - + - + - {host.is_mounted && ( - <> - - - - - - - - - - - - - - - - - - )} + + + + + + + + ); }; diff --git a/striker-ui/pages/index.tsx b/striker-ui/pages/index.tsx index beb61341..78e9182e 100644 --- a/striker-ui/pages/index.tsx +++ b/striker-ui/pages/index.tsx @@ -65,7 +65,7 @@ const Home = (): JSX.Element => { - + diff --git a/striker-ui/types/AnvilSharedStorage.d.ts b/striker-ui/types/AnvilSharedStorage.d.ts index c11fd39b..5a41aff6 100644 --- a/striker-ui/types/AnvilSharedStorage.d.ts +++ b/striker-ui/types/AnvilSharedStorage.d.ts @@ -1,16 +1,10 @@ -declare type AnvilSharedStorageHost = { - host_uuid: string; - host_name: string; - is_mounted: boolean; - total: number; - free: number; -}; - -declare type AnvilSharedStorageFileSystem = { - mount_point: string; - hosts: Array; +declare type AnvilSharedStorageGroup = { + storage_group_name: string; + storage_group_uuid: string; + storage_group_total: number; + storage_group_free: number; }; declare type AnvilSharedStorage = { - file_systems: Array; + storage_groups: Array; }; From 4f88f0113b780cdfccd15ec4961cc41bfd49b9b8 Mon Sep 17 00:00:00 2001 From: Josue Date: Mon, 31 May 2021 12:39:56 -0400 Subject: [PATCH 240/271] refactor: turn drawer icons and header icons into buttons and add URIs --- striker-ui/components/AnvilDrawer.tsx | 11 ++++++++++- striker-ui/components/Header.tsx | 23 ++++++++++++++++------- striker-ui/lib/consts/ICONS.ts | 11 +++++++---- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/striker-ui/components/AnvilDrawer.tsx b/striker-ui/components/AnvilDrawer.tsx index de3ed149..c6470c99 100644 --- a/striker-ui/components/AnvilDrawer.tsx +++ b/striker-ui/components/AnvilDrawer.tsx @@ -43,7 +43,16 @@ const AnvilDrawer = ({ open, setOpen }: DrawerProps): JSX.Element => { {ICONS.map( (icon): JSX.Element => ( - + { {ICONS.map( (icon): JSX.Element => ( - + + + ), )} diff --git a/striker-ui/lib/consts/ICONS.ts b/striker-ui/lib/consts/ICONS.ts index cd892dde..9b807830 100644 --- a/striker-ui/lib/consts/ICONS.ts +++ b/striker-ui/lib/consts/ICONS.ts @@ -2,34 +2,37 @@ export const ICONS = [ { text: 'Files', image: '/pngs/files_on.png', + uri: '/striker?files=true', }, { text: 'Tasks', image: '/pngs/tasks_no-jobs_icon.png', + uri: '/striker?jobs=true', }, { text: 'Configure', image: '/pngs/configure_icon_on.png', + uri: '/striker?configure=true', }, { text: 'Striker', image: '/pngs/striker_icon_on.png', + uri: '/striker?striker=true', }, { text: 'Anvil', image: '/pngs/anvil_icon_on.png', + uri: '/striker?anvil=true', }, { text: 'Email', image: '/pngs/email_on.png', - }, - { - text: 'Users', - image: '/pngs/users_icon_on.png', + uri: '/striker?email=true', }, { text: 'Help', image: '/pngs/help_icon_on.png', + uri: 'https://alteeve.com/w/Support', }, ]; From 440b5c81effe987316e73bdfad75184a97c00934 Mon Sep 17 00:00:00 2001 From: Josue Date: Mon, 31 May 2021 17:15:14 -0400 Subject: [PATCH 241/271] refactor: use online instead of is_removable --- striker-ui/components/Hosts/AnvilHost.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/components/Hosts/AnvilHost.tsx b/striker-ui/components/Hosts/AnvilHost.tsx index 450b99f0..068a97ac 100644 --- a/striker-ui/components/Hosts/AnvilHost.tsx +++ b/striker-ui/components/Hosts/AnvilHost.tsx @@ -115,7 +115,7 @@ const AnvilHost = ({ putJSON('/set_membership', { host_uuid: host.host_uuid, From 029714112bc415583076e596688755f910d24ded Mon Sep 17 00:00:00 2001 From: Josue Date: Mon, 31 May 2021 18:35:16 -0400 Subject: [PATCH 242/271] fix: remove unnecessary comment --- striker-ui/components/Spinner.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/striker-ui/components/Spinner.tsx b/striker-ui/components/Spinner.tsx index 19cf8f96..1d8e0654 100644 --- a/striker-ui/components/Spinner.tsx +++ b/striker-ui/components/Spinner.tsx @@ -4,9 +4,6 @@ import CircularProgress from '@material-ui/core/CircularProgress'; const useStyles = makeStyles(() => ({ root: { display: 'flex', - /* '& > * + *': { - marginLeft: theme.spacing(2), - }, */ alignItems: 'center', justifyContent: 'center', marginTop: '3em', From 227685983ffa83381126e8465f8473c405a88999 Mon Sep 17 00:00:00 2001 From: Josue Date: Mon, 31 May 2021 18:38:45 -0400 Subject: [PATCH 243/271] fix: use colour from the palette for the spinner --- striker-ui/components/Spinner.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/striker-ui/components/Spinner.tsx b/striker-ui/components/Spinner.tsx index 1d8e0654..3e09eb8e 100644 --- a/striker-ui/components/Spinner.tsx +++ b/striker-ui/components/Spinner.tsx @@ -1,5 +1,6 @@ import { makeStyles } from '@material-ui/core/styles'; import CircularProgress from '@material-ui/core/CircularProgress'; +import { TEXT } from '../lib/consts/DEFAULT_THEME'; const useStyles = makeStyles(() => ({ root: { @@ -9,7 +10,7 @@ const useStyles = makeStyles(() => ({ marginTop: '3em', }, spinner: { - color: '#FFF', + color: TEXT, variant: 'indeterminate', size: '50em', }, From cbad6a52a0a5ab3623508cda5f6c53107e7bb9f8 Mon Sep 17 00:00:00 2001 From: Josue Date: Mon, 31 May 2021 18:47:00 -0400 Subject: [PATCH 244/271] refactor: rename filesystems datatype --- striker-ui/types/AnvilFileSystems.d.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/striker-ui/types/AnvilFileSystems.d.ts b/striker-ui/types/AnvilFileSystems.d.ts index c11fd39b..0f999ff2 100644 --- a/striker-ui/types/AnvilFileSystems.d.ts +++ b/striker-ui/types/AnvilFileSystems.d.ts @@ -1,4 +1,4 @@ -declare type AnvilSharedStorageHost = { +declare type AnvilFileSystemHost = { host_uuid: string; host_name: string; is_mounted: boolean; @@ -6,11 +6,11 @@ declare type AnvilSharedStorageHost = { free: number; }; -declare type AnvilSharedStorageFileSystem = { +declare type AnvilFileSystem = { mount_point: string; - hosts: Array; + hosts: Array; }; -declare type AnvilSharedStorage = { - file_systems: Array; +declare type AnvilFileSystems = { + file_systems: Array; }; From 341a4ad50a2ecf479ecc0ae213da0bc392758c25 Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 1 Jun 2021 14:07:06 -0400 Subject: [PATCH 245/271] fix: change data types in fileSystem to avoid crashing during building process --- striker-ui/components/FileSystem/FileSystems.tsx | 4 ++-- striker-ui/components/FileSystem/FileSystemsHost.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/striker-ui/components/FileSystem/FileSystems.tsx b/striker-ui/components/FileSystem/FileSystems.tsx index 3a8e0ea6..aed6b43f 100644 --- a/striker-ui/components/FileSystem/FileSystems.tsx +++ b/striker-ui/components/FileSystem/FileSystems.tsx @@ -37,7 +37,7 @@ const SharedStorage = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { {data?.file_systems && data.file_systems.map( - (fs: AnvilSharedStorageFileSystem): JSX.Element => ( + (fs: AnvilFileSystem): JSX.Element => ( @@ -49,7 +49,7 @@ const SharedStorage = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { {fs?.hosts && fs.hosts.map( ( - host: AnvilSharedStorageHost, + host: AnvilFileSystemHost, index: number, ): JSX.Element => ( ({ const SharedStorageHost = ({ host, }: { - host: AnvilSharedStorageHost; + host: AnvilFileSystemHost; }): JSX.Element => { const classes = useStyles(); return ( From c31cdeec11a0dbd3ec6cbcee0c2009651983e023 Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 1 Jun 2021 16:54:00 -0400 Subject: [PATCH 246/271] style: remove searchbar and add red bottom border --- striker-ui/components/Header.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/striker-ui/components/Header.tsx b/striker-ui/components/Header.tsx index 3f5ee5ac..436b1138 100644 --- a/striker-ui/components/Header.tsx +++ b/striker-ui/components/Header.tsx @@ -3,7 +3,7 @@ import AppBar from '@material-ui/core/AppBar'; import { makeStyles, createStyles } from '@material-ui/core/styles'; import { Box, Button } from '@material-ui/core'; import { ICONS, ICON_SIZE } from '../lib/consts/ICONS'; -import { BORDER_RADIUS } from '../lib/consts/DEFAULT_THEME'; +import { BORDER_RADIUS, RED } from '../lib/consts/DEFAULT_THEME'; import AnvilDrawer from './AnvilDrawer'; const useStyles = makeStyles((theme) => @@ -13,6 +13,8 @@ const useStyles = makeStyles((theme) => paddingBottom: theme.spacing(0.5), paddingLeft: theme.spacing(3), paddingRight: theme.spacing(3), + borderBottom: 'solid 1px', + borderBottomColor: RED, }, input: { height: '2.8em', @@ -52,9 +54,6 @@ const Header = (): JSX.Element => { - - - {ICONS.map( (icon): JSX.Element => ( From 284d536f7f9eb343eb4c71da7915cd0dfe0805a2 Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 1 Jun 2021 16:56:27 -0400 Subject: [PATCH 247/271] style: add dividers between nodes and links --- striker-ui/components/Network/Network.tsx | 42 +++++++++++---- striker-ui/components/Servers.tsx | 65 +++++++++++++++++------ 2 files changed, 81 insertions(+), 26 deletions(-) diff --git a/striker-ui/components/Network/Network.tsx b/striker-ui/components/Network/Network.tsx index 04b2eece..e586d1d1 100644 --- a/striker-ui/components/Network/Network.tsx +++ b/striker-ui/components/Network/Network.tsx @@ -30,6 +30,9 @@ const useStyles = makeStyles((theme) => ({ divider: { background: DIVIDER, }, + verticalDivider: { + height: '3.5em', + }, })); const selectDecorator = (state: string): Colours => { @@ -76,16 +79,35 @@ const Network = (): JSX.Element => { - {bond.hosts.map( - (host): JSX.Element => ( - - - - - - - ), - )} + + {bond.hosts.map( + (host, index: number): JSX.Element => ( + <> + + + + + + + {index !== bond.hosts.length - 1 && ( + + )} + + ), + )} + diff --git a/striker-ui/components/Servers.tsx b/striker-ui/components/Servers.tsx index f0685cd2..99328827 100644 --- a/striker-ui/components/Servers.tsx +++ b/striker-ui/components/Servers.tsx @@ -9,6 +9,7 @@ import { AnvilContext } from './AnvilContext'; import serverState from '../lib/consts/SERVERS'; import Decorator, { Colours } from './Decorator'; import Spinner from './Spinner'; +import hostsSanitizer from '../lib/sanitizers/hostsSanitizer'; const useStyles = makeStyles((theme) => ({ root: { @@ -22,6 +23,10 @@ const useStyles = makeStyles((theme) => ({ divider: { background: DIVIDER, }, + verticalDivider: { + height: '75%', + paddingTop: '1em', + }, button: { '&:hover': { backgroundColor: HOVER, @@ -31,6 +36,13 @@ const useStyles = makeStyles((theme) => ({ headerPadding: { paddingLeft: '.3em', }, + hostsBox: { + padding: '1em', + paddingRight: 0, + }, + hostBox: { + paddingTop: 0, + }, })); const selectDecorator = (state: string): Colours => { @@ -54,6 +66,8 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { `${process.env.NEXT_PUBLIC_API_URL}/get_servers?anvil_uuid=${uuid}`, ); + const anvilIndex = anvil.findIndex((a) => a.anvil_uuid === uuid); + return (
@@ -86,22 +100,41 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { } /> - {server.server_state !== 'shut off' && - server.server_state !== 'crashed' && - anvil[ - anvil.findIndex((a) => a.anvil_uuid === uuid) - ].hosts.map( - (host: AnvilStatusHost): JSX.Element => ( - - - - ), - )} + + {server.server_state !== 'shut off' && + server.server_state !== 'crashed' && + hostsSanitizer(anvil[anvilIndex].hosts).map( + ( + host: AnvilStatusHost, + index: number, + ): JSX.Element => ( + <> + + + + {index !== + hostsSanitizer(anvil[anvilIndex].hosts) + .length - + 1 && ( + + )} + + ), + )} + From 8e78ed2fea3a29ea6107c8c29e46f872690b0bdb Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 1 Jun 2021 16:57:03 -0400 Subject: [PATCH 248/271] refactor: sanitize hosts data to avoid using empty nodes --- striker-ui/components/Hosts/index.tsx | 13 ++++++++----- striker-ui/lib/sanitizers/hostsSanitizer.ts | 7 +++++++ 2 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 striker-ui/lib/sanitizers/hostsSanitizer.ts diff --git a/striker-ui/components/Hosts/index.tsx b/striker-ui/components/Hosts/index.tsx index a22b2e53..9924c2d1 100644 --- a/striker-ui/components/Hosts/index.tsx +++ b/striker-ui/components/Hosts/index.tsx @@ -5,6 +5,7 @@ import AnvilHost from './AnvilHost'; import PeriodicFetch from '../../lib/fetchers/periodicFetch'; import { AnvilContext } from '../AnvilContext'; import Spinner from '../Spinner'; +import hostsSanitizer from '../../lib/sanitizers/hostsSanitizer'; const Hosts = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const { uuid } = useContext(AnvilContext); @@ -13,18 +14,20 @@ const Hosts = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { `${process.env.NEXT_PUBLIC_API_URL}/get_status?anvil_uuid=${uuid}`, ); + const anvilIndex = anvil.findIndex((a) => a.anvil_uuid === uuid); + return ( {!isLoading ? ( <> - {anvil.findIndex((a) => a.anvil_uuid === uuid) !== -1 && data && ( + {anvilIndex !== -1 && data && ( a.anvil_uuid === uuid)].hosts - .filter((host) => host.host_uuid) - .map((host, index) => { + hosts={hostsSanitizer(anvil[anvilIndex].hosts).map( + (host, index) => { return data.hosts[index]; - })} + }, + )} /> )} diff --git a/striker-ui/lib/sanitizers/hostsSanitizer.ts b/striker-ui/lib/sanitizers/hostsSanitizer.ts new file mode 100644 index 00000000..5fbe7826 --- /dev/null +++ b/striker-ui/lib/sanitizers/hostsSanitizer.ts @@ -0,0 +1,7 @@ +const hostsSanitizer = ( + data: Array, +): Array => { + return data.filter((host) => host.host_uuid); +}; + +export default hostsSanitizer; From 6611d9f91b88200e47d4f72a66ececf7c149171d Mon Sep 17 00:00:00 2001 From: Josue Date: Tue, 1 Jun 2021 17:09:04 -0400 Subject: [PATCH 249/271] refactor: remove unnecessary comment --- striker-ui/components/Network/Network.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/striker-ui/components/Network/Network.tsx b/striker-ui/components/Network/Network.tsx index e586d1d1..064233bd 100644 --- a/striker-ui/components/Network/Network.tsx +++ b/striker-ui/components/Network/Network.tsx @@ -99,7 +99,6 @@ const Network = (): JSX.Element => { {index !== bond.hosts.length - 1 && ( From 9945915f5a87ae533c08c8e23b7386071f95b979 Mon Sep 17 00:00:00 2001 From: Josue Date: Wed, 2 Jun 2021 10:19:19 -0400 Subject: [PATCH 250/271] refactor: filter out empty nodes before rendering a component --- striker-ui/components/Servers.tsx | 9 ++++----- striker-ui/lib/sanitizers/hostsSanitizer.ts | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/striker-ui/components/Servers.tsx b/striker-ui/components/Servers.tsx index 99328827..ac2cac41 100644 --- a/striker-ui/components/Servers.tsx +++ b/striker-ui/components/Servers.tsx @@ -68,6 +68,8 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { const anvilIndex = anvil.findIndex((a) => a.anvil_uuid === uuid); + const filteredHosts = hostsSanitizer(anvil[anvilIndex]?.hosts); + return (
@@ -103,7 +105,7 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { {server.server_state !== 'shut off' && server.server_state !== 'crashed' && - hostsSanitizer(anvil[anvilIndex].hosts).map( + filteredHosts.map( ( host: AnvilStatusHost, index: number, @@ -122,10 +124,7 @@ const Servers = ({ anvil }: { anvil: AnvilListItem[] }): JSX.Element => { } /> - {index !== - hostsSanitizer(anvil[anvilIndex].hosts) - .length - - 1 && ( + {index !== filteredHosts.length - 1 && ( , ): Array => { - return data.filter((host) => host.host_uuid); + return data?.filter((host) => host.host_uuid); }; export default hostsSanitizer; From 6cdd216b9cd94c318b8ed15e70ba9c5093ef6540 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Wed, 2 Jun 2021 17:19:00 -0400 Subject: [PATCH 251/271] build(cgi-bin): add front-end build process --- anvil.spec.in | 1 + striker-ui/Makefile.am | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 striker-ui/Makefile.am diff --git a/anvil.spec.in b/anvil.spec.in index f4447a55..97eaaade 100644 --- a/anvil.spec.in +++ b/anvil.spec.in @@ -208,6 +208,7 @@ Provides support for asynchronous disaster recovery hosts in an Anvil! cluster. ./autogen.sh %{configure} make %{_smp_mflags} +make build -f striker-ui/Makefile %install rm -rf %{buildroot} diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am new file mode 100644 index 00000000..5f86e54d --- /dev/null +++ b/striker-ui/Makefile.am @@ -0,0 +1,9 @@ +MAINTAINERCLEANFILES = Makefile.in + +htmldir = $(localstatedir)/www/html + +build: + -@echo "Install node modules (dependencies) prior to building." + npm clean-install + -@echo "Build front-end project." + npm run build From fd14a4d9d373d2bbea30ee29dfa86f144cb649e1 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Wed, 2 Jun 2021 18:57:35 -0400 Subject: [PATCH 252/271] build(cgi-bin): add striker-ui subdir to autotools --- Makefile.am | 3 ++- configure.ac | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 568a5f2c..ea474b75 100644 --- a/Makefile.am +++ b/Makefile.am @@ -21,7 +21,8 @@ TARFILES = $(PACKAGE_NAME)-$(VERSION).tar.bz2 \ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = Anvil cgi-bin html journald.conf.d man ocf \ - pxe scancore-agents scripts share tools units + pxe scancore-agents scripts share striker-ui \ + tools units anvilconfdir = ${sysconfdir}/anvil diff --git a/configure.ac b/configure.ac index e03e7bf9..6b8de709 100644 --- a/configure.ac +++ b/configure.ac @@ -165,6 +165,7 @@ AC_CONFIG_FILES([Makefile scancore-agents/Makefile scripts/Makefile share/Makefile + striker-ui/Makefile tools/Makefile units/Makefile]) From 2bfcb09672e3bbf98beef5f73b75b58205818c30 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Wed, 2 Jun 2021 19:39:44 -0400 Subject: [PATCH 253/271] build(striker-ui): correct Makefile separators --- striker-ui/Makefile.am | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 5f86e54d..ea1b6dbc 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -1,9 +1,9 @@ -MAINTAINERCLEANFILES = Makefile.in +MAINTAINERCLEANFILES = Makefile.in -htmldir = $(localstatedir)/www/html +htmldir = $(localstatedir)/www/html build: - -@echo "Install node modules (dependencies) prior to building." - npm clean-install - -@echo "Build front-end project." - npm run build + echo "Install node modules (dependencies) prior to building." + npm clean-install + echo "Build front-end project." + npm run build From e0c5c3bed2d671575b688bd30ef976d566eeb23a Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 14:39:50 -0400 Subject: [PATCH 254/271] build(striker-ui): add files to include in tarball for building --- striker-ui/Makefile.am | 102 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index ea1b6dbc..fa9dfe05 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -1,6 +1,106 @@ MAINTAINERCLEANFILES = Makefile.in -htmldir = $(localstatedir)/www/html +# The files listed under EXTRA_DIST is only used for building, they should not +# be included in the installation process. +# +# It is recommended to use the following command to regenerate the file list +# as files get added/removed: +# +# find . \ +# -not \( -name node_modules -prune \) \ # Ignore ./node_modules directory +# -not \( -name *git* -prune \) \ # Ignore git related files +# -not \( -name public -prune \) \ # Ignore ./public directory +# -not \( -name *[Mm]ake* -prune \) \ # Ignore make related files +# -not \( -name *.md -prune \) \ # Ignore all markdown files +# -type f \ # Only print file paths +# | sed -E 's@^./(.+)$@\1 \\@' # Remove leading "./" and append "\" +# +EXTRA_DIST = \ + next.config.js \ + next-env.d.ts \ + tsconfig.json \ + theme/index.ts \ + styles/globals.css \ + .lintstagedrc.json \ + .husky/pre-commit \ + .husky/commit-msg \ + .husky/_/husky.sh \ + env.development \ + package.json \ + lib/extended_date/ExtendedDate.ts \ + lib/fetchers/putJSON.ts \ + lib/fetchers/fetchJSON.ts \ + lib/fetchers/periodicFetch.ts \ + lib/sanitizers/hostsSanitizer.ts \ + lib/consts/ICONS.ts \ + lib/consts/DEFAULT_THEME.ts \ + lib/consts/SERVERS.ts \ + lib/consts/ANVILS.ts \ + lib/consts/API_BASE_URL.ts \ + lib/consts/IS_DEV_ENV.ts \ + lib/consts/NODES.ts \ + .prettierrc.json \ + types/AnvilServers.d.ts \ + types/GetAllAnvilResponse.d.ts \ + types/AnvilMemory.d.ts \ + types/FetchResponse.d.ts \ + types/AnvilSharedStorage.d.ts \ + types/AnvilNetwork.d.ts \ + types/AnvilTypes.d.ts \ + types/GetResponse.d.ts \ + types/AnvilNodeStatus.d.ts \ + types/AnvilList.d.ts \ + types/AnvilCPU.d.ts \ + types/GetOneAnvilResponse.d.ts \ + types/AnvilSet.d.ts \ + types/AnvilStatus.d.ts \ + types/AnvilReplicatedStorage.d.ts \ + types/AnvilFileSystems.d.ts \ + types/NodeSet.d.ts \ + components/Memory.tsx \ + components/Decorator.tsx \ + components/Hosts/index.tsx \ + components/Hosts/AnvilHost.tsx \ + components/Spinner.tsx \ + components/AnvilDrawer.tsx \ + components/Text/HeaderText.tsx \ + components/Text/index.tsx \ + components/Text/BodyText.tsx \ + components/FileSystem/index.tsx \ + components/FileSystem/FileSystemsHost.tsx \ + components/FileSystem/FileSystems.tsx \ + components/Anvils/index.tsx \ + components/Anvils/sortAnvils.ts \ + components/Anvils/Anvil.tsx \ + components/Anvils/AnvilList.tsx \ + components/Anvils/SelectedAnvil.tsx \ + components/Panels/index.tsx \ + components/Panels/InnerPanel.tsx \ + components/Panels/PanelHeader.tsx \ + components/Panels/Panel.tsx \ + components/Servers.tsx \ + components/Storage.tsx \ + components/AnvilContext.tsx \ + components/SharedStorage/SharedStorage.tsx \ + components/SharedStorage/index.tsx \ + components/SharedStorage/SharedStorageHost.tsx \ + components/Header.tsx \ + components/Network/index.tsx \ + components/Network/Network.tsx \ + components/Network/processNetwork.ts \ + components/CPU.tsx \ + components/Bars/index.tsx \ + components/Bars/ProgressBar.tsx \ + components/Bars/AllocationBar.tsx \ + pages/index.tsx \ + pages/_app.tsx \ + pages/_document.tsx \ + .eslintrc.json \ + commitlint.config.js \ + .eslintignore \ + package-lock.json + +htmldir = $(localstatedir)/www/html build: echo "Install node modules (dependencies) prior to building." From 8ff9311268367ecf361c87b5818ab27b11bb5ac9 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 14:51:34 -0400 Subject: [PATCH 255/271] build(striker-ui): add build step to generate .env.local --- striker-ui/Makefile.am | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index fa9dfe05..a07c714f 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -103,7 +103,12 @@ EXTRA_DIST = \ htmldir = $(localstatedir)/www/html build: - echo "Install node modules (dependencies) prior to building." + -@echo "Print working directory." + pwd + -@echo "Install node modules (dependencies) prior to building." npm clean-install - echo "Build front-end project." + -@echo "Generate endpoint prefix." + # Note: the input file must exist in EXTRA_DIST. + sed 's@=.*@=/cgi-bin@' .env.local + -@echo "Build front-end project." npm run build From 2ccdf6ab236a332b58ad3892d7e079d66dbe350d Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 14:53:17 -0400 Subject: [PATCH 256/271] build(striker-ui): tell make to cd to ./striker-ui before building front-end --- anvil.spec.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/anvil.spec.in b/anvil.spec.in index 97eaaade..10ed3dc5 100644 --- a/anvil.spec.in +++ b/anvil.spec.in @@ -208,7 +208,7 @@ Provides support for asynchronous disaster recovery hosts in an Anvil! cluster. ./autogen.sh %{configure} make %{_smp_mflags} -make build -f striker-ui/Makefile +make build -C striker-ui -f Makefile %install rm -rf %{buildroot} From ce646e086b4d32a5c17f98009e7e88e578631128 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 14:56:46 -0400 Subject: [PATCH 257/271] build(striker-ui): relocate rule comment to pre-section --- striker-ui/Makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index a07c714f..fc4db62b 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -102,13 +102,15 @@ EXTRA_DIST = \ htmldir = $(localstatedir)/www/html +# Note: the input file to the generate endpoint prefix step must exist in +# EXTRA_DIST. +# build: -@echo "Print working directory." pwd -@echo "Install node modules (dependencies) prior to building." npm clean-install -@echo "Generate endpoint prefix." - # Note: the input file must exist in EXTRA_DIST. sed 's@=.*@=/cgi-bin@' .env.local -@echo "Build front-end project." npm run build From f772da5324925acffe268a657171bf55b18f301f Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 15:00:17 -0400 Subject: [PATCH 258/271] build(striker-ui): remove husky related files from tarball --- striker-ui/Makefile.am | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index fc4db62b..2af58f6f 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -9,6 +9,7 @@ MAINTAINERCLEANFILES = Makefile.in # find . \ # -not \( -name node_modules -prune \) \ # Ignore ./node_modules directory # -not \( -name *git* -prune \) \ # Ignore git related files +# -not \( -name *husky* -prune \) \ # Ignore husky related files # -not \( -name public -prune \) \ # Ignore ./public directory # -not \( -name *[Mm]ake* -prune \) \ # Ignore make related files # -not \( -name *.md -prune \) \ # Ignore all markdown files @@ -22,9 +23,6 @@ EXTRA_DIST = \ theme/index.ts \ styles/globals.css \ .lintstagedrc.json \ - .husky/pre-commit \ - .husky/commit-msg \ - .husky/_/husky.sh \ env.development \ package.json \ lib/extended_date/ExtendedDate.ts \ From 23b92cc30f5c8e637881a00d9f8bb922516b7a92 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 15:01:31 -0400 Subject: [PATCH 259/271] build(striker-ui): ignore npm scripts (including husky config on postinstall) --- striker-ui/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 2af58f6f..57f6ae54 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -107,7 +107,7 @@ build: -@echo "Print working directory." pwd -@echo "Install node modules (dependencies) prior to building." - npm clean-install + npm clean-install --ignore-scripts -@echo "Generate endpoint prefix." sed 's@=.*@=/cgi-bin@' .env.local -@echo "Build front-end project." From 88590e3e1733d777eff3d3ff6baea3935fd3b400 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 16:09:51 -0400 Subject: [PATCH 260/271] build(striker-ui): add install steps for web UI --- striker-ui/Makefile.am | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 57f6ae54..e78cfaca 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -99,6 +99,7 @@ EXTRA_DIST = \ package-lock.json htmldir = $(localstatedir)/www/html +outdir = out # Note: the input file to the generate endpoint prefix step must exist in # EXTRA_DIST. @@ -112,3 +113,11 @@ build: sed 's@=.*@=/cgi-bin@' .env.local -@echo "Build front-end project." npm run build + +install-data-hook: + -@echo "Print working directory." + pwd + -@echo "Place build output files." + cp -r $(outdir)/index.html $(outdir)/_next $(DESTDIR)/$(htmldir)/ + -@echo "Create symlink to images to enable borrowing icon etc. without duplicating." + (cd $(DESTDIR)/$(htmldir); $(LN_S) skins/alteeve/images pngs) From b46042aeded3e4182500f46ff6f8e1aa5de5d5d1 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 16:17:55 -0400 Subject: [PATCH 261/271] build(striker-ui): add uninstall steps for web UI --- striker-ui/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index e78cfaca..b8c63467 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -121,3 +121,7 @@ install-data-hook: cp -r $(outdir)/index.html $(outdir)/_next $(DESTDIR)/$(htmldir)/ -@echo "Create symlink to images to enable borrowing icon etc. without duplicating." (cd $(DESTDIR)/$(htmldir); $(LN_S) skins/alteeve/images pngs) + +uninstall-hook: + -@echo "Remove all installed files of the current module." + (cd $(DESTDIR)/$(htmldir); rm -rf index.html _next pngs) From 79fa324f9dd1f506e73810715e00cccdec7cfc6a Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 16:26:43 -0400 Subject: [PATCH 262/271] build(striker-ui): remove excess call in specfile to build web UI --- anvil.spec.in | 1 - striker-ui/Makefile.am | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/anvil.spec.in b/anvil.spec.in index 10ed3dc5..f4447a55 100644 --- a/anvil.spec.in +++ b/anvil.spec.in @@ -208,7 +208,6 @@ Provides support for asynchronous disaster recovery hosts in an Anvil! cluster. ./autogen.sh %{configure} make %{_smp_mflags} -make build -C striker-ui -f Makefile %install rm -rf %{buildroot} diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index b8c63467..4d2cb947 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -101,6 +101,9 @@ EXTRA_DIST = \ htmldir = $(localstatedir)/www/html outdir = out +# Trigger build target on make call without parameters. +all: build + # Note: the input file to the generate endpoint prefix step must exist in # EXTRA_DIST. # From 0c2952a1c7f27939a2feb5ad401e34cd92a5d779 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Thu, 3 Jun 2021 16:42:11 -0400 Subject: [PATCH 263/271] build(striker-ui): remove debug pwd calls in Makefile.am --- striker-ui/Makefile.am | 4 ---- 1 file changed, 4 deletions(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 4d2cb947..b684298f 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -108,8 +108,6 @@ all: build # EXTRA_DIST. # build: - -@echo "Print working directory." - pwd -@echo "Install node modules (dependencies) prior to building." npm clean-install --ignore-scripts -@echo "Generate endpoint prefix." @@ -118,8 +116,6 @@ build: npm run build install-data-hook: - -@echo "Print working directory." - pwd -@echo "Place build output files." cp -r $(outdir)/index.html $(outdir)/_next $(DESTDIR)/$(htmldir)/ -@echo "Create symlink to images to enable borrowing icon etc. without duplicating." From c571a3efda41854d8ca4a11a0654da491d4f6b57 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 4 Jun 2021 15:26:35 -0400 Subject: [PATCH 264/271] build(striker-ui): rename target build->out to match build output directory name --- striker-ui/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index b684298f..168d78b1 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -102,12 +102,12 @@ htmldir = $(localstatedir)/www/html outdir = out # Trigger build target on make call without parameters. -all: build +all: out # Note: the input file to the generate endpoint prefix step must exist in # EXTRA_DIST. # -build: +out: -@echo "Install node modules (dependencies) prior to building." npm clean-install --ignore-scripts -@echo "Generate endpoint prefix." From 73d4a32d017ff514ec1fda9da18cc8990057e39a Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 4 Jun 2021 15:27:53 -0400 Subject: [PATCH 265/271] build(striker-ui): npm ci->install and don't generate package-lock --- striker-ui/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 168d78b1..b399e5e6 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -109,7 +109,7 @@ all: out # out: -@echo "Install node modules (dependencies) prior to building." - npm clean-install --ignore-scripts + npm install --no-package-lock --ignore-scripts -@echo "Generate endpoint prefix." sed 's@=.*@=/cgi-bin@' .env.local -@echo "Build front-end project." From 7c1598575b72e11d0d43446d8425c055ba762cee Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 4 Jun 2021 15:49:28 -0400 Subject: [PATCH 266/271] build(striker-ui): copy files from srcdir for building --- striker-ui/Makefile.am | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index b399e5e6..36b3e63d 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -108,12 +108,18 @@ all: out # EXTRA_DIST. # out: + -@echo "Copying required build files to build (current) directory." + rsync -a $(srcdir)/* ./ + -@echo "Allow tools to write to files in the build directory." + chmod -R +w ./* -@echo "Install node modules (dependencies) prior to building." npm install --no-package-lock --ignore-scripts -@echo "Generate endpoint prefix." sed 's@=.*@=/cgi-bin@' .env.local -@echo "Build front-end project." npm run build + -@echo "Clean up files copied for building." + find . -not \( -name $(outdir) -prune \) -exec rm -rf {} + install-data-hook: -@echo "Place build output files." From 4c215e404d74e8b01485f83a9390aaa6c6d735c4 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 4 Jun 2021 16:44:42 -0400 Subject: [PATCH 267/271] build(striker-ui): don't copy make-related files and add distclean-local target --- striker-ui/Makefile.am | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 36b3e63d..05caf084 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -109,7 +109,7 @@ all: out # out: -@echo "Copying required build files to build (current) directory." - rsync -a $(srcdir)/* ./ + find $(srcdir) -mindepth 1 -maxdepth 1 ! -name "[Mm]ake*" -exec rsync -a {} + ./ -@echo "Allow tools to write to files in the build directory." chmod -R +w ./* -@echo "Install node modules (dependencies) prior to building." @@ -118,8 +118,6 @@ out: sed 's@=.*@=/cgi-bin@' .env.local -@echo "Build front-end project." npm run build - -@echo "Clean up files copied for building." - find . -not \( -name $(outdir) -prune \) -exec rm -rf {} + install-data-hook: -@echo "Place build output files." @@ -130,3 +128,7 @@ install-data-hook: uninstall-hook: -@echo "Remove all installed files of the current module." (cd $(DESTDIR)/$(htmldir); rm -rf index.html _next pngs) + +distclean-local: + -@echo "Clean up files copied for building." + rm -rf * From 335cd5d4c7d509b9bc49bdf3bfab5664e4d22187 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 4 Jun 2021 17:01:38 -0400 Subject: [PATCH 268/271] build(striker-ui): change clean-local target to rm accordingly (depends on pwd) --- striker-ui/Makefile.am | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 05caf084..6ad64289 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -129,6 +129,8 @@ uninstall-hook: -@echo "Remove all installed files of the current module." (cd $(DESTDIR)/$(htmldir); rm -rf index.html _next pngs) -distclean-local: - -@echo "Clean up files copied for building." - rm -rf * +clean-local: + -@echo "Clean up build output files." + test $(srcdir) == . && rm -rf $(outdir) || rm -rf * + +distclean-local: clean-local From 9abb468d793755c5575dc1d69223cb53e957c5cb Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 4 Jun 2021 17:21:35 -0400 Subject: [PATCH 269/271] build(striker-ui): include pwd when unlocking files for building web UI --- striker-ui/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 6ad64289..3fe53612 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -109,9 +109,9 @@ all: out # out: -@echo "Copying required build files to build (current) directory." - find $(srcdir) -mindepth 1 -maxdepth 1 ! -name "[Mm]ake*" -exec rsync -a {} + ./ + rsync -av --exclude "[Mm]ake*" $(srcdir)/ ./ -@echo "Allow tools to write to files in the build directory." - chmod -R +w ./* + chmod -R +w . -@echo "Install node modules (dependencies) prior to building." npm install --no-package-lock --ignore-scripts -@echo "Generate endpoint prefix." From 87ad87e60d193c80f274b6bb1a6ae880616ec684 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 4 Jun 2021 17:48:49 -0400 Subject: [PATCH 270/271] build(striker-ui): include dot/hidden entries in clean-up --- striker-ui/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/striker-ui/Makefile.am b/striker-ui/Makefile.am index 3fe53612..88436b8b 100644 --- a/striker-ui/Makefile.am +++ b/striker-ui/Makefile.am @@ -131,6 +131,6 @@ uninstall-hook: clean-local: -@echo "Clean up build output files." - test $(srcdir) == . && rm -rf $(outdir) || rm -rf * + test $(srcdir) == . && rm -rf $(outdir) .next || find . -mindepth 1 -maxdepth 1 -exec rm -rf {} + distclean-local: clean-local From 3765877b93774ea9259dc79522f04514cba55837 Mon Sep 17 00:00:00 2001 From: Tsu-ba-me Date: Fri, 4 Jun 2021 18:11:16 -0400 Subject: [PATCH 271/271] build(striker-ui): experiment; use npm >= 6 (from default nodejs stream) as build requirement --- anvil.spec.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/anvil.spec.in b/anvil.spec.in index f4447a55..22f72a9d 100644 --- a/anvil.spec.in +++ b/anvil.spec.in @@ -23,8 +23,8 @@ BuildRequires: systemd autoconf automake BuildRequires: fence-agents-common # OCFROOT BuildRequires: resource-agents -# Includes the "npm" tool for building striker UI. -BuildRequires: nodejs-devel >= 14 +# Require the "npm" tool for building the web UI. +BuildRequires: npm >= 6 %description This package generates the anvil-core, anvil-striker, anvil-node and anvil-dr